読者です 読者をやめる 読者になる 読者になる

EnsekiTT Blog

EnsekiTTが書くブログです。

Arduinoでパルス幅が知りたくて

ArduinoでラジコンのPWMのパルス幅を入力に扱いたかったので、ちょっと調べたらinPulse()で即解決したので、ついでにArduinoのPWMの性能とかinPulseでどれくらいパルス幅が正しく取れるのか調べてみた。

利用したコード https://gist.github.com/EnsekiTT/5967723

実験内容

Servo.WriteMicroseconds()でPWMを発生させる 発生させるPWMは10μsごとに10〜3000μs inPulse関数でパルスがHIGHになる時間を各PWMごとに100回計測し、平均を算出する。 Servo.WriteMicroseconds()で指定した値とinPulseによる100回計測の平均の差によってPWMデコード性能を評価する。 評価とは言っても、どっちのズレによって差が出ているかはわからないのであんまりあてにならない。 オシロスコープ使える時にでも…

pwm結果

10~550はWriteMicroseconds()で出力できない 2400~3000もWriteMicroseconds()で出力できない

560~2390の間は14~24μs程度の差が発生する。 ほぼ線形に出力の値が大きくなるほど差も大きくなる

結論

ArduinoでPWM扱うときは550~2390の間じゃないと使えないよ ラジコン用の受信機からPWMの値を拾うのは割と簡単にできそうだぞ。

今後の展望

ラジコン用の受信機からPWMの値を実際に拾ってみる。 誤差修正を簡易的に導入してみる。

おわり

2013/7/11 追記 おまけ 有効範囲内の差だけ表示したもの。pwm2