Darkside(https対応しました)

<< 前のページ

2020年10月28日(水) 21:06

見切り発車

 割り込みルーチン内でウエイトを掛けないよう、まっとうな処理に変更。
 しかし、ストールは収まらない。

 ウエイトが必要になるような、相をすぐに移行させない超低速において、いきなりスロットルを開けるとトラブルになる感じ。
 ならば次は、相が変化するまで待ってから、スロットルの変化を反映するように修正してみよう。

 結果は、まるで効果無し。
 だが、激変緩和を強化し、フルスロットルまで0.1秒程度で到達していたのを1秒程度で到達するようにしたところ、ストールが激減した。超低速回転を抜けてウエイト無しの低速回転を確実に経るようにすれば、ストールを回避できるようだ。ウエイト無しの低速回転を確実に経させる、というのは案外処理が難しく、激変緩和を強めるのが最も簡単。
 しかしこれでストールが収まるほど、タチが良くない。高速回転から一気に停止状態に戻す場合にも、ストールが多発する。

 ニュートラルに戻すとき、必ず一度だけ低速回転を経るようにすると、スロットル戻しでのストールは減少。だが、時々ストールする。これはもう、減速時もしっかり激変緩和させるしかあるまい。
 ここまで激変緩和が複雑になると、PWMではなく操作スティックの動きに激変緩和を掛けた方が簡単だ。こんなもの、レーシングカーでは使い物にならない。でも、レーシングカーを走らせたいなら、改造ESCではなく普通に市販ESCを使えばいい。いま作っているのは、あくまでラジコン戦車用である。戦車的に問題がない仕様であれば、問題はない。

 根本的にストールの原因を把握するのがベストだが、いい加減ウザくなって来た。走行用ブラシレスモーターを手懐けるのに、いったいどれほどの手間と時間と費用が掛かっているのか・・・

 ニュートラルからフルスロットルまで0.5秒程度を要するように調整したところ、ストールせず快調に操作できるようになった。0.5秒ぐらいなら、戦車としてレスポンスに不満を感じることもない。こんなことが必要なのは、戦車ならではの超低速走行能力と引き換えみたいになってるので、仕方ないと思うことはできる。
 許容変化量を書き換えるだけでストールは再現できるので、原因究明を再開することも容易。余りに疲れたので、当面は対症療法で手懐けておき、先に進もうと思う。
 ストールすると大電流が流れるので、やはり動作試験中はリチウムイオンバッテリーを使いたくない。

 見切り発車と言うか、これ以上ここで戦っていても士気を保てない。

 ノイズで制御不能になるような致命的な状況ではなく、運用回避可能と思われる。ならば、問題を先送りするのも1つの決断だ。さもないと、このプロジェクト自体が頓挫するだろう。

 パワーパックもう1つの要素・・・旋回用ステッピングモーターを仕上げることにする。
 まずは、旋回値8ビットをパラレル送信するための8ピンコネクターを、2ミリピッチのものに交換。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2020年10月27日(火) 22:01

試行錯誤

 これまではDUTY80以下に制限していたが、DUTY100まで回せるようにプログラム改変。結果は、難無くフルパワーまで回せた。これで事実上、問題点は「いきなりフルスロットル」でのストールだけとなった。
 戦車だから、スロットルの急変をソフト的に阻止するようなプログラムにすることは可能である。レーシングカーとは異なり、それによって実用性が損なわれることはない。しかし、スロットルを急変させなければストールしない、という保証はないわけで、可能ならストールの原因を突き止めるべきだ。

 ストールするとモーターは異音を発しつつ、回転しない。制御用基板に接続したLCDは、表示が消える。送信機にはテレメトリーが更新されなくなる。
 ストール時には、マイコンが暴走しているかのように見える。単なる暴走ならウォッチドッグにより1秒以内に復活するが、ストール中ずっと派手にノイズを発生させているのか?数秒しないと復帰しないことが多い。ストールのせいでマイコンが暴走するのか、マイコンが暴走したせいでストールするのか、その違いは重要だ。

 マイコンが暴走すれば、ストールするのは当然である。しかし、いきなりフルスロットルにしない限りは動作に問題がないため、モーターがノイズを常時バラ撒いているとは考え難い。通信エラーも、LCD表示バグも、発生していない。

 ストールの原因とは考え難いが、制御上問題がある設定に気付く。それは、PWMの周期を変えるタイミングだ。
 PWMの周期を変えたとき、実際にその変更を反映するタイミングは?
 dsPIC では、「即時反映」と「PWM周期完了後に反映」の2通りを選べる。イレギュラーなDUTYの発生を防ぐのであれば、後者が望ましい。しかしブラシレス制御では、即時性の方が重要だ。どう考えても、前者が正解。しかし、現状は一般論に引きずられて、後者になっている。これを、即時反映に変更すべきだ。
 PWM周期は45μ秒ていどに設定しているので、即時更新かどうかは若干の影響がある。

 PWM設定を変えたことで動作に分かるような変化は無く、予想通りストールの発生にも影響は無かった。

 ソフトウェア視点だと、ストールは理解不能である。起きるはずのないことが、起きている。
 そうなると、原因はハード側かもしれない。例えば、ホールセンサーの状態が変化するタイミングは、回転速度によって変化するとか。試しに、隣接相に切り替えるのではなく、2相先に切り替えるようにしてみる。
 結果は、事態が悪化した。一気にフルスロットルにする場合はもちろん、フルスロットルから一気にニュートラルに戻そうとしてもストールする。
 うんざりした。もう、激変緩和措置で良い気がする。

 その後、かなり進展した。
 激変緩和措置でも、ストールは収まらなかった。ところが、更に1つの修正を行ったところ、ストールが収まったのだ。その修正とは、超低速回転を実現するためのウエイトを無くしたこと。激変緩和措置との併用により、ストールは収まった。一方の措置だけでは、ストールは収まらない。
 これでストールを収めると超低速走行できなくなるので、意味がない。だが、ソフトウェアの修正で何とかなる目処が付いた。要するに、手間を惜しんで割り込みルーチン中でウエイトを入れる手抜きをしたのが悪い可能性が大。割り込みをさっさと抜けたうえでウエイトを掛けるように作り直せば(当然そっちはプログラミングが面倒臭い)、解決する匂いぷんぷんだ(解決するとは言ってない)。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2020年10月26日(月) 21:12

実用一歩手前

 受信機基板を搭載し、送信機のスティックに応じてモーター回転を変えてみる。

 作り直しの原因となったノイズによる誤動作は、期待通り圧倒的に減少。液晶ディスプレイの表示が1桁ズレることがたまにあるが、ノイズによってスティック値を取得失敗すると感じることはない。完全ではないが、充分に実用になっている。
 さすが、市販ESCを乗っ取っただけのことはある。

 肝心のモーター回転は、特定の回転数で不安定になることがある。
 また、少しずつ回転を上げると高速回転できるが、一気にスティックを倒すと高速回転できずに止まることが多い。まるで、ステッピングモーターのときみたいだ。
 ブラシレスモーターの制御はステッピングモーターそっくりなので、同じような現象が発生するのは不思議じゃない。しかし、こいつはセンサー付きである。センサーによって軸の位置を取得できるので、脱調なんて簡単に発生しないはず。

 更に、完全に軸が停止してモーターが異音を発し続けることもある。この場合、液晶ディスプレイの表示が消えて、マイコンが常時暴走状態化している。更に、モーターやバッテリーコネクターが過熱する。モーターストール状態だ。ただし、ESCはそれほど熱くならない。まあ、ESCは放熱に関しては得等席だが。

 ハード的には市販ESCなので、制御ソフトの工夫により問題は大きく解決すると期待できる。しかし、具体的にどうするかは、これからの問題だ。
 自作ソフトの問題として、実際の回転速度を観察していないというものがある。まずは、回転速度をモニターしてみたい。

 ホールセンサーの値が変化したときのタイマー値を取得表示すると、高速回転時は少しずつ値が小さくなる。だが、中速以下だと回転速度とタイマー値がまるで相関していない。タイマー値で回転速度の見当を付ける手法は、まるで使い物になりそうにない。
 しかし、別の部分で突破口発見。それは、1相を進める処理にあった。

 以前の自作FETユニットで、割り込み処理の速度不足を疑って、コードを効率化した。具体的には、相を進める場合に6箇所のFETすべてに通信を送るのではなく、差分の2箇所だけに通信を送るようにした。
 だがこれは、常に隣接相に移行する場合のみ有効である。ノイズその他でホールセンサーの状態変化割り込みが脱落し、隣接ではない相への移行が強制された場合、差分出力は不適切な結果になる。そもそも、冷静に計算すれば処理速度不足は考え難い。一方で常に6箇所全てを書き換えるようにすれば、不適切な状態になる心配はない。書き換え中に貫通電流状態になる可能性も、ゲートドライバーが防いでくれる。

 試しに6箇所フル書き換えへと修正したところ、特定の回転速度で不安定になる現象が収まった。動作が、圧倒的に良くなった。
 ただし、停止状態からいきなりフルスロットルに入れると、高確率でモーターストールする。この問題だけは、解消していない。

 タイマーに関しては取得値が暴れて32ビットの意味が殆ど無いので、16ビットで済ませることにした。
 タイマーの用途は、脱調検出である。ホールセンサーの状態変化割り込みが250ミリ秒以上発生しなかったら、回転が止まっているとみなして強制的に次の相に移行させる。16ビットでプリスケーラーを最大の256分割にすると、タイマー周期を240ミリ秒まで伸ばせる。ほぼ、同等だ。分解能は7〜8μ秒に落ちるが、30000回転でも1相あたり333μ秒なのだから大きな問題ではない。

 これによる動作の変化は無く、タイマー取得値がシンプルに16ビットになって扱い易くなった。中速以下で値が不安定なのは、ホールセンサー割り込みに多数の脱落が存在することを示唆している。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2020年10月25日(日) 22:02

6日ぶりの復活

 固化したら、周辺の配線を繋ぎ直して復活させる。

 さっさとラジコンバッテリーを接続してモータードライバーが正常動作することを確認したいのだが、XT60コネクターをハンダ付けすると一気に作業空間が制約される。だから、周辺配線を先に済ませねばならない。

 今回は電動エアガン電源をESCから引っ張るのではなく、XT60コネクターから引っ張る。
 これにより、XT60コネクターはGNDも7.2Vも、3並列になった。「走行用モター電源」「電動エアガン電源」「その他電源」の3系統である。

 ノイズは、少しでも廻り込み難くなったはず。

 先週の絶望と同じ段階まで、ようやく復活。

 受信機系は設置せず、ブラシレスモーター制御系だけ設置しての単体試験。
 主電源スイッチを入れると、モーターが一瞬回転して停止。また一瞬回転して停止。それを、延々と繰り返す。車体設置前に試験したような快調な回転が、鳴りを潜めている。しかし、1回だけ数秒間快調に回転した。また、先週とは異なり、少なくともモーターは回転できている。ハードが破壊されている訳じゃなさそうだ。

 高速回転ですぐに止まるのは、処理が追い付いていないから?
 いや、仮に30000回転でも毎秒500回転でしかない。1回転に2000μ秒も掛かるのだから、1相の回転に333μ秒である。
 バッファーとか割り込みなどの遅延は、数μ秒しかない。それが致命的な遅延になるようなことはないはずだ。

 となると、モーターコイルのインダクタンスによる電流変化の遅さの方が問題になるかもしれない。ある程度回転速度が上がると、1相ではなく2相進んだ状態に切り替える方が良いのかもしれない。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

2020年10月24日(土) 21:05

車体に接着

 もう何度目だよ?と言いたくなる更地化。
 中央部分だけ、絶縁熱伝導体として接着剤を残してある。残した部分も、平らに薄く削ってある。

 両側のサーボユニットを固定のうえで、中央に改造ESCをオートウエルドで接着。放熱部には、普通のCPU用な熱伝導グリスを添付。

 サイズがギリギリなので、接着位置は現物合わせしないと干渉待った無し。

 厄介なのは、コンパクトになった代償として配線密度が上がり、クランプで固定するのが作業空間的に不可能なこと。
 充分に固化するまで、中途半端な固化状態のうちに何度も様子を見て、圧着させ直す。

 固化を待つ間に、12V用DCコンバーターに配線する。

 オリジナルのピンコネクターを外し、基板を削って端子銅を露出。配線を直接ハンダ付けする。限りある空間を、効率的に使用したいからだ。

 実用固化に達したらサーボユニットを外し、作業空間を確保。

 12V出力DCコンバーターは発熱が小さく自然空冷対応なので、車体側面のステンレスにオートウエルドで直接接着。
 15V出力DCコンバーターは、取り付けピンをオートウエルドに埋めるようにして接着。
 更に、改造ESCの側面にオートウエルドによる固定を追加。

 これまた気長に、固化を待つ。

written by higashino [Sタンク 1/16] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

<< 前のページ

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4