DCモーターは電源さえ繋げば動きます。
子供のころ遊んだ電気仕掛けの戦車のおもちゃは、電池入りのリモコンをスイッチのON、OFFで動かしていました。
月日が経ち、コンピュータが身近なものとなった現在、人が操作していたモーターも、プログラムで行えるようになったのです。
DCモーターを操作すること自体は単純です。モーターに供給する2本のコードを順方向または逆方向に繋いだり、切ったりするだけなのです。
このスイッチングは、電磁リレーを使ったメカニカルなものでも可能ですが、半導体を使うことで、これを高速に行うことができます。
高速化のメリットとして、ON・OFFを比率を変えながら繰り返すことで、モーターのトルクもコントロールできるようになります。(PWM)
現在、半導体を使ったモータードライバーはIC化され、一つの部品として市販されています。
この自動組紐製造機も、既存のモータードライバーICを使っています。
今回使ったモータードライバーは、東芝製のTA7291Pです。古くからあるベーシックなもので、バイボーラトランジスタを使ったHブリッジと呼ばれる回路構成です。
基本的な考え方は2回路2接点のスイッチと変わりありません。4つのトランジスタをそれぞれモーターと電源の(+)、(-)につなぎ、そのON、OFFの組み合わせで正転、逆転、停止、ブレーキを行います。
例えば、電源(+)とモーター(+)、電源(-)とモーター(-)をONにすると正転、電源(+)とモーター(-)、電源(-)とモーター(+)をONにすると逆転、電源(-)とモーター(+)と電源(-)とモーター(-)をONにするとブレーキといった具合です。
しかし、このスイッチの状態で、やってはいけない組み合わせがあります。例えば、電源(+)とモーター(+)、電源(-)とモーター(+)をONにすると、電源はモーターを介さずにショートしてしまうのです。この時流れる電流を貫通電流と呼びます。
考えてみれば、戦車のおもちゃのリモコンで使われている2回路2接点のスイッチも、切り替わる瞬間では、どの接点にも触れず、結果的に貫通電流が発生しない仕組みだったのです。
通常、モータードライバは、4本のスイッチを直接制御させるのではなく、2本の入力で4つの状態を指定できるようになっています。
論理的には、ショートする状態はないのですが、内部で4つのトランジスタをON/OFFするのに、タイムラグが生じ、その時間もばらつきがあるので、一瞬、貫通電流が発生してしまうのです。
貫通電流が発生しても、モータドライバには、過電流防止や加熱防止の機能があるので、ドライバ自体を壊す心配はありません。しかしながら、貫通電流はドライバを加熱させ、加熱防止の安全回路が働き、貫通電流がなくなっても、しばらく電流を制限してしまうのです。
最近のモータードライバには貫通電流が発生しないような仕組みが組み込まれています。
ところが、私が使ったものには、これが無く、状態を変化させる場合、一旦、停止状態にする必要があったのです。
自動組紐機の試運転をしていたとき、モーターの出力が弱まる現象が発生しました。
これがモータードライバの発熱によるものだと気づき、冷却用にヒートシンクを取り付け、いくらかは改善されました。その後、貫通電流の問題だと分かったのは、しばらく経っての事でした。
貫通電流の問題は、運転状態を変更する際に停止状態を入れるようにソフトウェアで解決できるのですが、停止状態にするには2本の出力を同時に設定しなければなりません。
当初、プログラム言語として、Micro Pythonを使っていました。困ったことに、この言語用に提供されているMicro:Bitの出力機能では、同時に複数の出力を設定できないのです。
現在の出力状態を管理し、貫通電流を回避しながらビット単位に段階的に停止状態に移行できるのですが、PWMのスイッチングスピードを下げたくはありません。
私は、苦肉の策としてダイオードを使ったワイヤードOR回路を追加し、強制的に停止状態にする制御線を追加することで対応しました。
この対策の結果、常時発熱していたドライバICも、常態時にはほとんど発熱もなくなり、トルク低下もなくなりました。
DCモーターの制御は、単純なON-OFF動作だと考えていましたが、高速スイッチングを行う際、使用するドライバによっては、注意が必要なことを知らされた一件でした。