出入り検知器にサーボ・モータを動かす機能を追加できないか相談を受けた。水平と垂直の2方向の動きをサーボで作る。そこでSG-90という最も安価なサーボを秋月で入手して動かしてみる事に。
SG-90にはSG90-HVという軸が360度回転するタイプもあるが、入手したSG-90は可動域が180度のタイプである。SG-90の角度を制御するには電源5Vを加え、次のような20ms周期のパルス幅変調の信号を制御端子に加え角度を制御する。角度は0.5ms~2.4msのパルス幅に対応して0度~180度に変化する。中点(90度)のパルス幅は1.45msである。パルスを0.05ms(50μs)単位で変化させると180度を39ステップ、即ち4.7度単位で制御する事ができる。SG-90のデッドバンド巾は1μs(本当?)なので問題にはならないだろう。
この幅のパルスを作る事は難しくない。問題は周期の50Hz(20ms)との関係である。ポイントは大きなデューティ比 0.5/20~1.45/20~2.4/20 を細かく制御する必要がある事である。これを整数比に直すと10/400~29/400~48/400 であり、20msの1/400である50μs単位で制御する事になるが、これは試算値であって実際のSG-90がこれをどれ程の精度で追従できるかは分からない。
8ピンのPIC16F18313には2個のPWM(パルス幅変調器)が内蔵されていて丁度良い。このPWMはタイマー2(TMR2)と組み合わせて使う。
TMR2はFosc/4のクロックで動く8ビットカウンタであり、1/1, 1/4, 1/16, 1/64 のプリスケーラが利用可能。これを使ってFosc/4=500KHz、プリスケーラ=1/64、カウンタの上限(PR2)を155に設定すると約50Hz(=500KHz/64/156)が取り出せる。なおTMR2のポストスケーラ(1/1~1/16)からは直接信号が取り出せず割り込み用にしか使えない。
TMR2と組み合わせて使うPWMのパルス幅は10ビットで指定する。つまり8ビットカウンタの1カウント値の1/4まで指定でき、これは約32μsステップ(=20ms/156/4)単位で指定できる事になる。これを使って改めてパルス幅の指定範囲を計算するとカウント値は 0.5ms÷32μs≒15、1.45ms÷32μs≒45、2.4ms÷32μs=75 という値となる。つまり90度で30カウント差だから1カウントが3度の回転に相当する。
(続く)
0 件のコメント:
コメントを投稿