からくり等を直流(DC)モーターで動かすことが多い。それは、DCモーターが安価(数百円程)で、電池などで簡単に駆動出来て、電源への接続(オン)・切断(オフ)で容易に制御出来る事などがその理由だろうか。
そんな訳でよく使われるDCモーターだが、回転速度を変えたり、回転方向を頻繁に変えたり、狙った位置でキチッと止めたり等々、モーターの回転へ色々な要求が出てくると、それぞれに対応する然るべき制御が必要になる。
逆に言えば、DCモーターは、簡単な構造のモーターだが、その使い方で色々な動きを引き出せる魅力あるモーターだと言える。
ここでは、簡単に色々な制御ができる方法として、マイクロコンピュータ(マイコン) PIC16F88とモーター ドライバーIC TA7291Pを用いた方法を説明する。 マイコン自体の使い方には触れないが、それは別途考えたい。
PIC16F88はポピュラーで、安い事(500円程)、周波数可変の発振器内蔵、プログラムEEPROM内蔵、アナログ入力可、PWM機能内臓等々の特長を持ち、少ない電子回路部品等で制御装置が実現できる優れたマイコンと思う。
回路接続図
モータードライバーTA7291Pの機能
◆回転速度の制御
DCモーターは、流す電流の大きさで回転速度を変える事が出来る。電圧を変える事でもそれが出来るが、ここでは、モーターにパルス状の電圧を与えて、そのパルスの幅を変える事で実効的な電流値を変える方法を採る。これはパルス幅変調(PWM)法と呼ばれる。
電子回路としては、マイコンのRBn端子にパルス信号(PWM信号)を出力させて、それをモーター ドライバーで増強してモーターへ送る形とする。
マイコンの動作としては、RBレジスターのnビットに1を書き込み、パルス幅を決める時間が経過したところで、RBレジスターのnビットに0を書き込む。そしてモーターを回転させておきたい時間の間、1の書き込み0の書き込みを繰り返す。これでRBn端子にPWM信号が出力される。止めるのは0を書き込んだ所にする。
一つの例として、RAレジスターの0ビットに信号が入力したら、RBレジスターの0ビットに0を書き込んだ所で、その書き込み繰り返しを止めて、モーターを止める様な形が作れる。この部分のプログラムは下記の様になる。
JOB1 MOVLW 01H ;0000 0001→Wレジスター1 書込み
MOVWF PORTB ;W→RBレジスターへ書込み
CALL TIM10 ;10mS間サブルーチン パルス幅
MOVLW 00H ;0000 0000→Wレジスター0書込み
MOVWF PORTB ;W→RBレジスターへ書込む
CALL TIM1 ;1mS間サブルーチン
BTFSC PORTA,0 ;RA0=0? RAレジスター 信号あり?
GOTO JOB1 ;RA0≠0 信号無し
GOTO JOB2 ;RA0=0 信号有り
JOB2
◆回転方向の制御
DCモーターは、流す電流の向きで回転方向を変える事が出来る。
電子回路としては、マイコンのRBn およびRBn+1端子で二つの信号を出力させて、それらをドライバーで増強してモーターへ送る形とする。図 参照。
マイコンの動作としては、RBレジスターのnビットでPWM信号を作り、n+1ビットには0を書き込み続ける。逆回転させる時は、n+1ビットでPWM信号を作り、nビットには0を書き込み続ける。止める時は双方のビットに0を書き込んだ所とする。
一つの例として、RAレジスターの0ビットに信号が入力したら、回転方向を変える形が作れる。この部分のプログラムは下記の様になる。
JOB1 MOVLW 01H ;0000 0001→Wレジスター01 書込み
MOVWF PORTB ;W→RBレジスターへ書込み
CALL TIM10 ;10mS間サブルーチン パルス幅
MOVLW 00H ;0000 0000→Wレジスター00書込み
MOVWF PORTB ;W→RBレジスターへ書込む
CALL TIM1 ;1mS間サブルーチン
BTFSC PORTA,0 ;RA0=0? RAレジスター 信号あり?
GOTO JOB1 ;RA0≠0 信号無し
GOTO JOB2 ;RA0=0 信号有り
JOB2 ;以下逆回転
MOVLW 01H ;0000 0010→Wレジスター1 0書込み
MOVWF PORTB ;W→RBレジスターへ書込み
CALL TIM10 ;10mS間サブルーチン パルス幅
MOVLW 00H ;0000 0000→Wレジスター00書込み
MOVWF PORTB ;W→RBレジスターへ書込む
CALL TIM1 ;1mS間サブルーチン
BTFSC PORTA,0 ;RA0=0? RAレジスター 信号あり?
GOTO JOB2 ;RA0≠0 信号無し
GOTO JOB3 ;RA0=0 信号有り
JOB3
◆回転にブレーキを掛ける
低速や軽負荷で回転している時なら、PWM信号を停止すればモーターは概ね期待通りの所で止まってくれる。しかし、高速や重負荷で回転している時はPWM信号を止めただけでは期待通りの所で止まってくれない。
そこでブレーキ操作が必要になる。まず試みるのは、RBレジスターのnビットとn+1ビット双方に1を書き込む。そしてその状態を一定時間(数100mS等)保持する。
それでも期待通りの所で停止してくれない事は珍しくない。その時は然るべき時間(数10mS等)逆回転によるブレーキを掛ける。当然の事だが、逆回転ブレーキを長時間掛け過ぎると所望の停止位置より前に戻ってしまうので、その点への配慮が必要だ。
逆回転によるブレーキを掛ける場合は、その前に100μS程度の間、RBレジスターのnビットとn+1ビットの双方に0を書き込む操作が求められている。
[参考] モータードライバー TA7291P仕様書の注意書き
入力を切り替えたときに貫通電流が流れます。
入力切り替え時 (正転⇔逆転、正転/逆転⇔ブレーキ) に STOP モード (約 100 µs) を入れてください。
JOB1 CALL TIM01 :100μS間サブルーチン
MOVLW 01H ;0000 0011→Wレジスター11書込み
MOVWF PORTB ;W→RBレジスターへ書込み
CALL TIM10 0 ;100mS間サブルーチン ブレーキ時間
MOVLW 00H ;0000 0000→Wレジスター00書込
MOVWF PORTB ;W→RBレジスターへ書込み
GOTO JOB2
JOB2
◆モーターのノイズ対策
逆転ブレーキ操作を行った場合等は特に、モーターとその周辺から大きな電気的雑音を出してマイコンを誤作動させる事は珍しくない。モーターの回転等にまつわるマイコンの誤動作が疑われる時はモーターのノイズ対策を行うのが良い。
その方法は、モーターの二つの電極の間と各電極とモーターの外皮(金属のカバー)との間に、セラミックコンデンサー0.1μF程度を接続する。
モーターへのコンデンサー取付
以上で、DCモーターを意のままに制御できる、と思います。皆様のご成功を祈ります。