信大ロボ研のブログ

信州大学ロボット研究会のブログです。

PIC16F84Aによるサーボ制御

2年のたぬである。
PICマイコンシリーズでもとりわけ有名なPIC16F84Aの研究報告をする。
今回のお題は「サーボ」だ。

サーボは、PWMで制御する。
PWMについては、ググってWikipediaにいけばわかるので、ここで詳しい解説はしない。

自分が今回使用したサーボは、
「1波長16ミリ秒、デューティー比の最大最小は求めていないが、1パルスにおける最大H出力時間は2.4ミリ秒、最低H出力は0.6ミリ秒」
という仕様だ。
ほかのサーボがどうなっているかは知らない。

AVR(ATMEGA88とか)ならば、標準でデューティー比をいじれるPWM出力端子が存在しているのだが、PIC16F84Aにはそれが無い。
つまり、ソフトウェアによってPWMを擬似的に再現しなければならない。
「擬似的」というのは、正確な波長を作るのが難しいという意味だ。

まずは制御方法を選ぶことから始める。
私が実験した時点では、選択肢は2つ存在した。
●適当なウェイトをかけることによるPWM制御
●TMR0(タイマー0)を利用した時間割り込みによるPWM制御
両方試したが、明らかに下のほうが優秀であった。上の制御法では、ディレイをかけている間は他の制御ができず、PICがPWM制御のためだけのマイコンになってしまうからである。

クロックは10MHzで行った。
下の場合の処理法は以下の通りである。
>>割り込み処理の初期化(TMR0の初期値設定)

>>TMR0割り込み発生

>>PWM制御用端子のHorLの変更

>>TMR0の初期値の再設定

>>割り込み終了
プリスケーラは、TMR0に対して256分周で割り当てた。
タイマー0の初期値は、HとL用にそれぞれ別の時間を設けた。
以上が簡単な説明である。
詳細な説明はここでしても仕方がない。ググったほうがいい。よりよい解説が出てくる。