■
R8C/15によるサーボコントローラの作成実験をやってみた。タイマCの割り込みを使ってPWM信号を作成し、1つのサーボをコントロールする方法ならトラ技の応用で出来るんだけど、2つ以上だとちょっと面倒。これはトラ技のタイマCの解説では、タイマCの信号反転の機能を使ってPWM信号を実現しているからで、今回はこの部分を割り込みで処理することで各サーボ10msec間隔で3つのサーボをコントロールしてみた(ちなみに制御間隔が20msecでいいなら6個動かせる)
ポイントは、
tcc12 = 1; // コンペア1一致時にTCレジスタをクリア tcc13 = 1; // アウトプットコンペアモードを選択
と、タイマCを設定した上で、
ilvl0_cmp0ic = 1; ir_cmp0ic = 0; ilvl0_cmp1ic = 1; ir_cmp0ic = 0;
のようにしてcmp0、cmp1割り込みを有効にする(初めはこれを忘れて割り込みが入らなかった)
その上で、
#pragma INTERRUPT cmp0_int (vect=28) #pragma INTERRUPT cmp1_int (vect=16)
割り込み関数を用意して、あとは単純に出力ピンを変えていけばいい。
ようやくタイマCのアウトプットコンペアモードが理解出来た。これが理解出来ればM16Cを使って15個のサーボ(制御間隔が20msecでもいいなら30個まで対応可能)が利用出来るコントローラが作れる。作るか…。