RCサーボモータをH8/3048FでPWM制御する際、指定のレジスタや待機処理を正しく扱うことが重要です。この記事では、PWM周期途中でGRBを変更する際の注意点や、左45°・右45°の間を回転させるコードの改善ポイントについて解説します。
PWM制御の基本とGRB更新タイミング
RCサーボはPWM信号の幅で角度を制御します。H8/3048FのITU0では、GRAで周期、GRBでパルス幅を設定します。GRBはパルス周期中に更新すると誤作動するため、必ず1周期待ってから変更します。
具体的には、while(ITU0.TSR.BIT.IMFA==0); ITU0.TSR.BIT.IMFA=0; ITU0.GRB=値;の順序を守ることが重要です。
サーボが動かない原因の確認
サーボが動かない場合、考えられる原因は以下です:PWM周期の設定誤り、ポート設定不良、分周やモード設定の間違い、GRB更新タイミングの不一致など。特に分周やGRA/GRB値が仕様に合っていないと正しく回転しません。
また、ポート設定でP5.DR.BYTE=0x01としていますが、接続しているサーボのピンに応じて正しいポートを出力に設定する必要があります。
コード改善のポイント
まず、PWM周期GRAの値と分周設定がサーボ仕様に合っているか確認します。例えば20ms周期のPWMならGRAは分周比を考慮して正しく設定します。
GRBの値もサーボ角度に対応する幅(1ms〜2ms程度)を計算して設定してください。左45°・右45°の場合、GRBの値は適切に計算する必要があります。
また、wait_ms()関数での簡易ウェイトは、タイミング精度が低い場合があります。重要なタイミングでは、ITUの割り込みやIMFAフラグを使った正確な待機を優先するのが安全です。
サンプル改善案
改善例として、GRB更新前に必ずIMFAフラグを確認し、更新後に次の周期を待つ構造にすると安定します。ループ内で左45°・右45°の順にGRBを設定し、3秒待機後に次の角度に移行します。
さらに、サーボの接続ポートやPWM出力ピンを確認し、適切なポート設定を行うことで確実にモータが動作します。
まとめ
H8/3048FでRCサーボをPWM制御する場合、GRBの更新タイミング、PWM周期の設定、分周比、ポート設定がポイントです。これらを正しく設定し、IMFAフラグを用いた1周期待機を行うことで、サーボを仕様通りに左右45°間で回転させることが可能になります。コード改善の際は、各値の計算とタイミングを慎重に確認してください。


コメント