DCモータの駆動
モータを駆動するには,大きな電流を流す必要があるので,PICに直接モータを接続することはできない.(接続しても電流が足らず,回らない).そこで,モータを駆動する専用のIC(モータドライバ図1)を利用し,モータを駆動する.PICからモータドライバに信号を出し,モータドライバはその信号に従ってモータを駆動する.

図1.使用するモータドライバ(TA8440)(詳細は左のデータシート参照)
モータドライバへの信号は,BRAKE(ブレーキ),CW/CCW(正転/逆転),PWMの3つの信号である.それぞれがPICのC0,C1,C2に接続されている(図4.).
各信号の働きは次の通り.
・モータドライバのBRAKEに0を出力すると,モータが止まる.1を出力すると回る.
・モータドライバのCW/CCWに0を出力するとモータが正転し,1を出力するとモータが逆転する.
・PWM信号は疑似的にモータにかける電圧を調節する.
<<ここでPWMとは?>>
PWMはPluse Width Modulationの略で,パルス幅変調を意味する.パルス信号のONとOFFの幅を調節することで,疑似的に印加する電圧を調節する.
周期一定のパルス波形の1と0の時間を変化させ,パルスが1の時にだけモータに電圧を印加する.1の時間が長ければ(0の時間が短ければ),モータの回転数は大きく,1の時間が短ければ(0の時間がながければ),モータの回転数が小さくなる.この周期一定のパルス波形の周期に対する1の時間の割合をデューティー比と呼ぶ(図2参照).
正論理の場合(1の場合にモータに電圧をかける),デューティー比が大きいほど(図3参照)モータは早く回転する.負論理(0の場合にモータに電圧をかける)の場合は,デューティー比が0に近くなるほど,モータの回転数が大きくなる.論理の正負はモータドライバの仕様によって異なる.今回使用するモータドライバは,PWMに負論理を採用しているため,デューティー比が0に近くなるほど,モータの回転数が大きくなる.

図2.PWM信号とデューティー比

図3.デューティー比の大小の例
したがって,これら3つのピン(BRAKE,CW/CCW,PWM)の値(0か1)を変えることでモータの動きも変わる.

図4.Servo Zero1の入出力ピンの使用状況
モータ駆動のためのプログラム
1.PWMの初期設定(プログラムの最初に一回だけ記述する)
モータのスピードを調節するためのPWM信号を発生させる準備を行う.PWM信号はPICのC2から出力され,モータドライバへ伝えられる.
// PWMの設定 //
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,0xB0,1);
set_pwm1_duty(255);
<<解説>>
1行目:PICのCCPモジュールをPWMとして使用するための宣言(通常このまま記述.おまじないと考えればよい)
2行目:PWM信号を生成するためのタイマの設定(通常このまま記述.おまじないと考えればよい)
3行目:デューティー値の設定.デューティー値を255段階で記述.0で最大回転数,255で最低回転数(停止).安全のため最初は255(停止)を設定
2.モータ動作の初期設定(回転方向とブレーキの解除) (必要に応じてプログラムの中で記述)
output_high(PIN_C1); //モータの回転方向
output_high(PIN_C0); //ブレーキを解除
<<解説>>
1行目:回転方向を決定するため,C1に1(high)か0(low)を出力する.C1にモータドライバのCW/CCWが接続されているため.
2行目:ブレーキはモータドライバのBRAKEピンが0のときに有効になるので,C0(モータドライバのBRAKEピンに接続されている)を1(high)に設定し,ブレーキを解除した.
3.デューティー値の変更(モータのスピードの変更) (必要に応じてプログラムの中で記述)
set_pwm1_duty(128);
<<解説>>
初期設定の3行目と同様.引数の値(カッコの中の値)を変更することで,モータの回転数を変更できる.0が最大で,255が停止.
直接数値を指定するのではなく,変数を用いることができる.
例えば,int型の整数dataに何かの値が入っていたとし,その値を利用し,デューティー値を設定する場合は,
set_pwm1_duty(data);
とすることができる.