今回は、サーボモーターをコントロールできるかテストプログラムを組んでみてテストしました。当初は、ワンショットパルスでいくつもりでしたが、テストしてみたところPWMモードでないとうまく動作しませんでした。このV850ボードで、はじめてサーボを動かすことができました。これで、要素技術のテストはテストボード上で出来たことになります。そこで、サーボの角度コントロールがちゃんとできるかも同時にテストを行いました。
【サーボの仕様】
90°→2100µs
0°→1500µs
−90°→ 900µs
【V850のPWMテストプログラムの一部】
*/************ PWM出力モード (抜粋)************
void TMP3_Init(void)
{
int msec;
TP3CE = 0; /* TP3CTL0.7:TMP3動作禁止 */
/* port register setting */
PFC9L.4 = 0; /* TOP31端子に設定(PWM出力) */
PFCE9L.4 = 1;
PMC9L.4 = 1;
/* timer register setting */
TP3CTL0 = 0x06; /* 内部カウント・クロック設定:fxx */
TP3CTL1 = 0x04; /* PWM出力モード */
TP3IOC0 = 0x04; /* TOP31出力許可 TOP31ハイ・アクティブ */
TP3CCR0 = (20000*20/256) - 1; /* 周期:20ms */
TP3CCR1 = (1500*20/256) - 1; /* 1500us(TP3CCR0設定値 > TP3CCR1設定値)*/
}
*/***************************************
*/************ Main.c (抜粋)************
TMP3_Init(); /* TMP3 initiate */
TP3CE = 1; /* PWM出力(TMP3)動作許可 */
while(1){
;
}
*/***************************************
InterfaceにV850ボードが付属していた時に、無料の開発ソフトもありましたので、PM+とデバッグを利用して開発を行います。フラッジュへの書き込みソフトもあるので、PCのUSBから書き込みできるので、簡単である。
次に、サーボコントロールは1つだけを考えており、首のサーボだけをコントロールするだけですから、複雑なことはしません。リモコン操作でなく、音に反応して首の向くようにしますので、マイク入力による音量で方向を決まるように演算が必要です。
【音方向の検知】
3つマイク出力をどのように演算するかの検討をして見ました。
(左側のマイク出力=VL、右側のマイク出力=VR、後側のマイク出力=VB)
(1)前面の音と後側の音の比較(音が後の場合)
√(VL^2+VR^2)がVBよりも小さい時
・VL>VRの場合、左真横
・VL≦VRの場合、右真横
(2)左側の音と右側の音の比較(音が前の場合)
VL/(VL+VB)=係数K
・K=0.5 で真正面(頭部向きのオフセット調整)
・1.0≦K<0.5 で左側に、角度⇒180*(K-0.5)
・0.5<K≦0 で右側に、角度⇒180*(K-0.5)
パルス幅は、1500+180*(K-0.5)*20/3 µs
このようになるか、MEMSのマイクを購入したらテストする予定。