Mattです。先日は皆様方の多数のアドバイスありがとうございました。
今回はステッピングモータをステップ数に応じた回転させるための方法の相談です。
現在Robocup出場マシンを製作しようとしています。Robocupマシンは1/30秒
の(NTSCの関係上)コマンドに従いマシンを制御することが基本となります。
無線のプロトコルはRS232C(9800bps)に従い8バイトのコマンドを受け取る使
用です。
無線通信によるコマンドによりステッピングモータを動作させることは何とかできま
し
た。(どうもかなり取りこぼしがあるようです。)方法は下記のようにITUの
TIOCA0を
出力ポートとしてPWMモードを使用しました。
//PWMモードの設定
ITU.TMDR.BIT.PWM0 = 1; /* ITU0 PWMモード*/
ITU0.TCR.BYTE = 0x41; /* GRBコンペアマッチ clock 1/2 */
ITU0.GRA = 0x04B0; /* GRAを1200に設定(台形制御なし) */
ITU0.GRB = 0x0960; /* GRBを2400に設定(125Hz) */
ITU.TSTR.BIT.STR0 = 0; /* カウント停止状態 */
void pwm_on(){
int cnt;
ITU.TSTR.BIT.STR0 = 1; /* PWMカウント開始 */
if(P2.DR.BIT.B7==1){
PA.DR.BIT.B0=1; // FF
PA.DR.BIT.B1=0;
}else{
PA.DR.BIT.B0=0; //BACK
PA.DR.BIT.B1=1;
}
for(cnt=0;ITU0.GRA>1200;cnt++){ //台形制御
ITU0.GRA--;
ITU0.GRB=ITU0.GRA*2;
}
}
しかしこの方法では任意のステップ数を回転させることができません。
そこで例えば、TIOCA0の出力をTIOCA2のコンペア入力モードで取り
込んでカウンター割り込みをかける方法を試そうと思います。
これは受信が不安定なため受信中には割り込みをかけたくないので、
受信中でもパルスを発生させる方法を採用したからです。
しかしこんな方法でステッピングモータを制御するのは何か変な気が
します。皆様のご意見を伺いたいのでよろしくお願いします。