カラクリ人形等を動かす為に、電池などでも駆動でき、基本的には電源の接続・切断だけで簡単に制御できる直流(DC)モーターを使ってきた。しかし、負荷が重い場合や高速制御が必要な場合などでは、回転角度や停止位置を精度よく実現するのに苦労させられる。此の辺りに付いては、別途述べてみたい。
一方、くるくる回転させる必要のない用途であれば、回転角度や停止位置を精度よく出せるサーボモーターは頼もしい。しかし、制御方法は、DCモーターのそれよりも若干面倒の様だ。例によって、インターネットでいろいろ調べてみたが、すんなりと理解させてくれるような記事には出会えなかった。
そこで、インターネットの幾つかの記事で教えて頂いた事と、私の疑問を実験で確認した事等を合わせて、サーボモーターの制御方法を纏めてみようと思った。
サーボモーターは、駆動電源の他に一定周期のパルス信号を与えて制御する。そのパルス信号のパルス幅でサーボモーターの回転角を指定する。例えば、サーボモーター型番SG90では、パルス周期は20mSで固定。パルス幅を0.5mSから2.4mSの間で変化させて、回転角を-90°から+90°の間で実現する。
つまり、サーボモーターの制御には、パルス信号のパルス幅変調(PWM)が必要と言う事だ。私は以前からカラクリ人形等の制御にマイクロコンピュータPIC16F88を使ってきたが、幸いにも、そのマイコンはPWM機能を内蔵しているので、その機能を使ってサーボモーターを制御する方法を整理してみる。
サーボモーターとPIC16F88との接続
PWMに必要な設定などは次の通りだ。
◆CCP1CONレジスターの設定
此のマイコンでPWM機能を実行する事を設定する。
CCP1CONに:00001100 : 0CHを書き込む
◆T2CONレジスターの設定
ビット1と0でTMR2カウンターの計数倍率を16とする設定を行う。
ビット2のTMR2ONはパルス幅カウンターの動作/停止を指定するが、
此の指定は実行プロ グラムの中で行う。此処では停止としておく。
T2C0Nに00000011 : 03Hを書き込む。
◆PR2レジスターの設定
パルス信号の周期を指定する。
この設定は、マイコンの初期設定と共にバンク1の中で行う。
設定値に付いては後述する。
◆CCPR1Lレジスターの設定
パルス信号のパルス幅を指定する。
この設定は、実行プログラムの中で随時・適宜行うが、後述する。
◆CONFIGの設定
PWM処理されたパルス信号を出力するマイコンの端子を指定する。
特に設定しなければRB0端子から出力される。
RB0端子を他用途で使う場合は、CONFIGで設定すればRB3端子に出力される。
&_CCP1_RB3 これをCONFIGに追記する。
基本的な設定は以上だが、マイコン クロック周波数、パルス信号周期とパルス幅の3個の設定値は、下記の式に基づいて決める。
周期計算法 : (PR2内容+1) X 4T X (TMR2計数倍率16)
幅計算法 : (CCPR1L+CCP1CON45bit)の内容 X T X (TMR2計数倍率16)
此処でTはマイコンクロック周期
また、サーボモーターSG90の仕様書には、パルス周期20mS、パルス幅0.5mS~2.4mSの間で設定、と記されているので、それらを実現し得る上記の3個の設定値の組み合わせを導き出す事が求められる。
上記の検討と実験で得た設定値と、それによる実測値を下記に示して置くので、まだ微調整が必要の様だが、まずはご参考までに。
*システムクロック: 500KHz。 バンク1で、OSCCONに30Hを書き込む。
*パルス周期 20mS。 バンク1でPR2に80Hを書き込む。
*パルス幅 0.5mS -90° CCPR1L に04(04H)を書き込む
1.45mS 0° 13(0CH)
2.4mS +90° 20(14H)
上記以外の細かい角度・パルス幅に付いては、按分などして決めて調整する。
++++++++++++++++++++++++++++++++++++++++++++++++
実行プログラムの中では、下記の様にパルス幅の設定を行う。
ポイントは、パルス幅の設定を行う前にタイマーを停止させ、設定が終わった後でタイマーを動作開始させる事。そして、次のパルス幅(回転角度)を設定する時は、サーボモーターの応答時間(SG90仕様書 : 動作速度: 0.12 s/60°)に相応する時間を確保する。
JOB1 BCF T2CON,TMR2ON ;タイマーTMR停止
MOVLW 04H ;04をWレジスタに書込み 0.5mS -90°
MOVWF CCPR1L ;W→CCPR1Lレジスタに書込み パルス幅設定
BSF T2CON,TMR2ON ;タイマーTMR動作開始
CALL TIM150 ;150mSサブルーチン
JOB2 BCF T2CON,TMR2ON ;タイマーTMR停止
MOVLW 0CH ;13 1.45mS 0°
MOVWF CCPR1L ;パルス幅設定
BSF T2CON,TMR2ON ;タイマーTMR動作開始
CALL TIM150
JOB3 BCF T2CON,TMR2ON ;タイマーTMR停止
MOVLW 14H ;20 2.4mS +90°
MOVWF CCPR1L ;パルス幅設定
BSF T2CON,TMR2ON ;タイマーTMR動作開始
CALL TIM150
GOTO JOB1
皆様の参考になれば幸いです。
動作状況の映像です。