PWMでサーボモーター制御(計算編)

PWMがある程度わかってきたのでサーボモーターの制御にトライしてみる。
まずはサーボモーターの制御の信号について、周期が10〜20msで位置指定の信号が1.0〜2.0msの範囲(1.5msが中立)。

サーボモーター制御の信号

サーボモーター制御の信号

で、まずはPWMの周期を20msにするにはどう設定すればいいのか?
PWMの周期の計算式はデータシートに次のように書いてある。

PWM Period = (PR2 + 1) * 4 * TOSC * TMR2 Prescale Value

この式のPR2に最大値の255を入れて、TOSC、TMR2 Prescale Valueに取りうる値を代入したテーブルを作った。
PWM Periodが20msになりうるTOSCとTMR2 Prescale Valueの組み合わせをテーブルから探すと、TOSC = 2μs(500kHz)、TMR2 Prescale Value = 16の組み合わせで可能ということがわかったので、後はPR2の値を計算。

PR2 = 155

で、後はPulse Widthが1.0ms、1.5ms、2.0msになる値を計算。
Pulse Widthの計算式は次。

Pulse Width = (CCPR1L:CCP1CON<5:4>)[10bit] * TOSC * TMR2 Prescale Value[1|4|16]

このうち、TOSCとTMR2 Prescale Valueはすでに決まっているので、それらを代入して、それぞれの(CCPR1L:CCP1CON<5:4>)[10bit]を計算。

1.0ms = 32 (0x20)
1.5ms = 47 (0x2F)
2.0ms = 62 (0x3E)

これで各パラメータがわかったので実装編へ。

カテゴリー: PIC タグ: , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA