マイコンによるラジコンサーボの制御についてまとめ。
最も簡単で、正確で、CPUの負荷が少ないのは、タイマのコンペアマッチによるPWM出力(H8のITUでいうところのPWMモード)を用いる方法だろう。機械研でも最初に用いられた方法である。しかしこの方法では、PWM出力のチャンネルの個数のラジコンサーボしか制御できない。たとえばH8/3048のタイマ(ITU)のPWM出力は全5チャンネルなので、制御できるサーボは5個までということになる。
4足歩行ロボットの場合、ふつう8自由度ないし12自由度のサーボを制御しなければならない。しかし8チャンネル以上のPWM出力が可能なタイマを持つマイコンは少ない。
そこで、タイマ割り込みと汎用出力ポートを用いてソフトウェアでパルスを出力する方法が考えられる。この場合に重要なのは、いかに割り込みの回数を少なくするかと、いかに1回の割り込み処理を軽くするかだ。割り込み処理が重いと、処理能力が低下するだけでなく、制御パルスの分解能と精度が確保できないからである。
おそらくソフトウェアによる方法で有望なのは次のような方法ではないかと思う。それは2個のタイマ割り込みを用いる方法である。一つのタイマには一定の周期割り込み(一般的に20ms)を発生させる。もう一つのタイマはワンショットで用いる。周期割り込みを起点としてワンショットのタイマ割り込みをn回発生させる。n回目のワンショットの時間設定はパルス幅テーブル[n]を参照する。n回目のワンショットの期間中には出力ポートnにHighを出力する。こうすることでn個のサーボを制御するパルスが生成できる。
ひとつの発想の転換は、複数のマイコンを用いるというものである。典型的には、サーボの制御に専念する一個ないし複数の小脳マイコンと、高次の統御をする大脳マイコンを設け、それらをI2CやSPI、UARTなどの神経で結ぶ。回路構成がかさむが、小脳にPICやAVRといった小さいマイコンを採用すれば小型で安価に実現することもできる。
もうひとつの別の発想は、FPGAやCPLDを用いるというものである。FPGAやCPLDを用いれば、マイコン内蔵のタイマによるPWM出力回路と同様のものを外部に多数設けることができる。これも機械研でも古くからある考えで、僕もかつて SH-2マイコンとFLEX 10KというFPGAを組み合わせた4足歩行ロボットを試作した。ソフトに適した処理はソフトで、ハードに適した処理はハードで、という発想である。
だたしこの方法は、回路がかさばりがちである。マイコンとFPGAをバスでつなぐので配線も煩雑になる。小型に実装しようとすると自前で基板を起こすしかないかもしれない。しかしそもそも今どきのワンチップマイコンにはバスが外部にでていないものも多い。
折衷的な方式として、マイコンでパルスとセレクト信号を生成し、外部の回路で掛け合わせる方法がある。タイマのコンペアマッチ出力で n本のパルスを生成させ、同じタイマの割り込みでパルス幅を変えつつ m本のセレクト信号を生成する。これらを外部のCLPDなり標準ロジックICなりでANDすれば m×n個のサーボを制御するパルスが得られる。
以上、ラジコンサーボ制御の種々の方法についてまとめた。結論としては、今回はなんとなくAVRマイコンを使ってみたいのでAVRマイコンを選ぶぜ!