SSブログ

PWMって使えねー [ソフト]

完全に面白半分で買ったサーボモーターも気になるので試してみることに。

マイクロサーボ SG90 (2個入)

マイクロサーボ SG90 (2個入)

  • 出版社/メーカー: Tower Pro
  • メディア:


安いので買ってもたけど、飛行機ようにそこそこ使われているモデルみたい。
他から拾ってきたスペックは、下記のようになってる。
* Dimensions: 22 X 11.5 X 22mm
* Operating Speed (4.8V no load): 0.12sec/60 degrees
* Stall Torque (4.8V): 17.5oz/in (1 kg/cm)
* Temperature Range: -30 to +60
* Degree CDead Band Width: 7usec
* Operating Voltage: 3.0-7.2 Volts
* Each servo comes with 3 different servo horns and fittings as seen.
Pulse Width:500-2400 μs
電源を繋いで、信号線にパルスを入れれば動くようで、
パルスの周期は決まってなくて、0.5msから2.4msまでのパルスを入れると
その長さに応じてほぼ180度までの角度で止まるという。

パルスを出すのでPICのPWMという機能を使うのが簡単だろうということで、
調べてみると、
どうやら、タイマー2のオーバーフローでパルスの周期を決めるらしく、
この時、PR2というものを設定しておくとタイマーが255にならなくてもPR2の値と同じになった時に、
ブレークして割り込みが発生する。これで周期を細かく設定できるようにしている。
さて、肝心のパルス幅の方は、CCPR1LとDC1B <1:0>の値の10bitで決まるらしいが、
「この値とタイマー2が一致すると」と書いてあるところがあり、惑わされたけど、
ただしくは、1024で割った値がデューティ比になるということらしい。

まとめると、パルス周期=システムクロック÷4÷プリスケーラ値÷255×PR2
       パルス幅=パルス周期÷1024×(CCPR1L×4+DC1B <1:0>)

で、計算しようとしたんだけど、タイマー2のプリスケーラーって16までしか設定できない。
ほかのタイマーは256まで設定できるのに。
代わりにポストスケーラーというのが16まで設定できて、結局、スケーラーとしては256まで機能するんだけど、
割り込みの記述には、このポストスケーラーがあるのに、PWMの記述にはなく
PWM period =[(period ) + 1] x 4 x TOSC x TMR2 prescaler な感じ。
(period )がPR2で、 TOSC は、クロックの時間=4MHzで動かしてれば0.25us。
たとえば、4MHzでプリスケーラ=16だとPR2=249で、パルス周期=4ms。
0.5msは、CCPR1LとDC1B <1:0>の値が128、2.4msは、614。

とりあえず、プログラムにこの値を突っ込んでテストして見ると、動いた!
だけど、ちょっと不安定。なんか震えてるのよね。
パルス周期が4msじゃダメなのかなと思い、変えてみようと
一応、ポストスケーラーにもトライしてみたけど、まるでシカトされ、
クロックを1MHzにしてと思ったら、プリスケーラーが16、4、1しか指定できない。8は?
仕方ないので、1MHz、プリスケーラー16、PR2=78で何とか安定したかなー。というより前よりましな程度。
まーこんなものなんでしょうか。ロボットが震えてるのもよく見るもんね。
しかし、ここまでクロックを落とさないと使えないとなると、なんだかなー。

で、試しに、PWMを使わず、プログラムで直に時間指定して動かすと
シャキッ!
なんか、とってもスムーズかつシッカリ動く。PWM使えねー。
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

いろいろ覚えることも多く、知りえた知識を貯めておこうと思います。先はまるで見えないですけどね。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。