Darkside(https対応しました)

2020年1月22日(水) 21:13

設計上の問題

 モーター操作パルスと動作結果パルスを比較して脱調を検出するのは最強の方式だが、PICによる実装には厄介な問題がある。パルスをカウントするのにポーリングやってたのでは、他に何の処理もできなくて論外だ。とうぜん普通はピン割り込みを使うのだが、モーター制御用PICはSPI受信で既にピン割り込みを使ってしまっている。
 脱調検出の割り込み優先度を高くすると、SPI受信漏れが生じる。SPI受信割り込みの優先度を高くすると、脱調カウント漏れが生じる。

 脱調は高速回転になるほど問題となり、高速回転になるほど割り込み間隔が短くなって優先度を高くする必要性も上がる。

 ならば、TB6600HG の処理専用にPICを1つ用意し、そいつが脱調検出の割り込みだけ受け付ければ良いのではないか?
 この場合、モーター制御用PICから指令を送るのにSPI通信などやっていたのでは、元の木阿弥である。しかし考えてみれば、旋回量と向きは元々8ビットのデーターである。ならばその8ビット値を「パラレルで」送信すれば良いのではないか?
 互いのポートC同士を直結し、ポートCに8ビット値をそのまま出力する。受け取る側も、ポートCを読んでそのまま値を使う。

 通信だけでI/Oポートを8本も潰してしまうが、全ピン動員することで何とかなりそうだ。

 あと TB6600HG に限らないが厄介な問題として、速度のダイナミックレンジがある。
 Sタンクは遠距離の照準微調整を行うため、とんでもない低速で超信地旋回を出来ねばならない。一方で無砲塔の弱点を補うため、高速の超信地旋回も出来ねばならない。旋回モーターは、超低速から高速まで、非常に広い速度範囲で動作せねばならない。具体的には、毎分1回転未満から最大6000回転程度。1万倍ぐらいの速度差を実用にしたい。通常のモーターでは、100倍も苦しい。
 速度差が1万倍もあると、16ビットPWMでは分解能が不足する。65536段階をフル活用しても、1万倍だと最小6段階とか7段階になる。6と7では、PWM周期が15%ぐらい変化する。すなわち、回転数もいきなり15%も変化する。

 つまり、PWMの動作中にプリスケーラーを設定し直さねばならないかもしれない。
 かもしれない、というのは TB6600HG の設定を動的に切り替える方が勝る可能性が高いからである。

 秋月ドライバーで少し動かしただけでも、低速回転時にフルステップとマイクロステップでは、スムーズ差や振動が全く異なると実感できた。当然マイクロステップ駆動したい。しかし、マイクロステップ駆動は必要なクロックパルスの数が増える。
 フルステップの場合、TB6600HG はモーターを1周させるのに800パルス必要である。3000回転は毎秒50回転なので、40KHzということになる。ところが、TB6600HG に入力できるのは200KHzまでなのだ。だから 1/4 ステップまでしか対応できない。6000回転まで欲張ると、1/2 ステップまでに限定される。
 だが、超低速のスムーズさを優先させると、1/8 ステップは最低でも使いたい。

 ならば、低速時は 1/8 ステップで、ある程度高速になったらフルステップに切り替える・・・と誰でも考えるだろう。秋月ドライバーは、それを自動的に切り替えてくれた。ただし秋月ドライバーの場合、必要パルス数は変わらないのでクロック周波数は削減できない。
 TB6600HG は、自前で切り替えねばならない。しかし切り替えればダイナミックレンジを8倍稼ぐことができて、PIC側のPWMはプリスケーラーを切り替える必要はないかもしれない。

 TB6600HG のステップ切り替えは、3つのピンでパラレル入力するようになっている。フルステップと 1/16 ステップを切り替えようとすれば、3つすべての値を変更せねばならず、PICのピンも3つ消費してしまう。これに対し、フルステップと 1/8 ステップなら1本切り替えで済む。
 高速回転時はトルクが欲しいので、1/2 ステップではなくフルステップで動作させたい。だから、1/2 ステップと 1/16 ステップの切り替えは却下だ。

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

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

Comments

TrackBacks

Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4