■KRS-788HVをKCB-1で動かす(2)
前回の続きです。ここを読む前に必ず「KRS-788HVをKCB-1で動かす①」を読んで下さい。
今回はPWM信号をKCB-1で作成し、KRS-788HVを実際に動かすプログラムを作成します。
・PWM信号を作るための基礎知識
下の図はPWM信号を図示したものです。上に出っ張っている部分は信号がHIGHになっていることを表しており、へこんだ部分がLOWです。電気的にはHIGHは5VでLOWが0Vです。
図のように一定間隔で繰り返しHIGHとLOWを切り替えると、サーボモーターに繰り返し命令を送ったことになります。この切り換え間隔をPWM周期と呼びます。また、HIGHの時間の長さでサーボモーターに回転角度を命令します。

・今回のプログラム設計手順
- PWM周期が細かいほど命令をたくさん送ることと一緒なので、周期を速くすると反応は良くなる。しかし、ある程度以上になると違いは分からないので、今回はPWM周期を8[ms]とします。
- HIGHの時間(700[us]~2300[us])も細かいほど詳細な角度を指定することになりますが、細かすぎても違いが分からないので、今回は0度~180度を50分割ぐらいで指定できるようにします。つまり最小角度は3.6度。
・KCB-1でPWM信号を出力するために必要な計算
1) 周期の決定
KCB-1ではPWM信号を送るために8bit PWMモードと16bit PWMモードの2種類があります。おおまかな違いは、8bit PWMモードではHIGHの時間指定の細かさは255段階ですが、命令を送る間隔(PWM周期)の指定は255×4段階から選ぶことができます。一方16bit PWMモードでは、HIGHの時間指定の細かさは65535段階から選べますが、命令を送る間隔の指定は4種類(3.27675[ms]、6.5535[ms]、26.214[ms]、104.856[ms])しか選ぶことができません。16bit PWMモードの詳細についてはKCB-1のマニュアルをお読み下さい。
今回は8[ms]周期にするために、8bitモードを選択します。
2) 周期の計算
周期は下の式で計算できます。fqが周期を決定する変数0~255の間で選ぶことができます。Fjは分周比と言って、20MHz(PWM_F1)、10MHz(PWM_F2)、2.5MHz(PWM_F8)、625kHz(PWM_F32)のいずれかとなります。
周期=(fq + 1) × 255 / Fj
例えば、分周比Fj=PWM_F1=20MHzを選択すると、
周期=(fq + 1) × 255 / 20000000 ≒ (fq + 1) × 0.00001275
となります。fqの最大値255を代入すると、周期=3.25125[ms]となり、8[ms]に足りません。また、PWM_F2を選択しても6.5025[ms]となり少し足りませんので、今回はFj=PWM_F8を選択します。このときの周期決定変数fqを次のように計算で求めます。
fq = (周期 x Fj)/255 - 1
= (周期 x PWM_F8)/255 - 1
= (8ms x 2.5MHz)/255 - 1
= (0.008 x 2500000)/255 - 1
= 78.43 - 1
≒ 77
この計算から、KCB-1でPWM周期を決定する命令は、次のようになります。
pwm8_init (PIO0, PWM_F8, 77);
PWM8_init関数に、出力する端子"PIO0"、メインクロックの分周比"PWM_F8"、fqの"77"を指定して準備は完了です。
・HIGH時間の計算
8bit PWMモードでの周期8[ms]に対して、HIGHを指定できる細かさは255段階です。図のように、8[ms]と255を対比させると、角度を指定する有効なHIGH時間の長さ(700[us]~2300[us])は、だいたい22~72となり、ちょうど50段階となります。したがってサーボモーターを180度の位置へ回転させるには、KCB-1のプログラムでは、次のようになります。
pwm_out (PIO0, 72);
動作させる場合は、命令を送った後にサーボが目標角度へ到達するまで、必ずwait関数で待つようにして下さい。
より細かく角度を指定したい場合は、周期を狭くすることで可能になります。解説図のように8ms周期を4ms周期にすると、
44~144の100段階で設定できますので、約1.8度間隔でサーボを制御することができるようになります。
・サンプルプログラム
サンプルプログラムでは、サーボモーターを0度の位置へ回転させた後で、180度の位置へ回転させています。pwm_out関数の中の数値をいろいろ変えてみると、対応する角度へ移動します。
<プログラム ダウンロード (3KB)>
KCB-1はPWM信号を4つ同時に出すことができますので、KRS-788HVを4つ同時に制御することができます。
ぜひお試し下さい。






