Top > blog > 2014-07-19

広告

Raspberry PiでPWM

モーターやサーボモータを回すのにPWMを良く使う。
Raspberry PiでもPWMができるがハードウエアとしては1つだけ。(実は2つあってイヤフォンジャックに使われていてGPIOには出ていない)
そこでWiringPiというのを使ってソフトウエア的にPWMを生成するの(ソフトウエアPWM)が一般的になっているみたいだ。ハードウエアPWMもこれで設定できる

WiringPiの使い方は日本語を含めいろいろなサイトで紹介されているのであえて書かないけどいくつか気になった点を書いてみる。

  • 当たり前だけどプログラムを終了するとPWM出力が止まる。
    • 逆にハードウエアPWMはプログラム終了でも止まらない。プログラム内で終了させておく
      • これでサーボを一つ壊してしまった
  • どうもソフトウエアPWM間で混信があるみたい。回路上の干渉かと思ったけどタイミング的には違うようだ。走行用のモーターをPWMで動かすとサーボも動いてしまった。
    • プログラムの書き方が悪いのかもしれない。
  • ソフトウエアPWMの場合、最高で100段階しかない

ハードウエアPWMでもあまりちゃんと書いていないみたいなので気づいたところを書いてみる。

pinMode(1, PWM_OUTPUT);
pwmWrite(1, val);

とやってvalの値を変えていけばいいみたいに書いてあったりするけど、実際は周波数が変わるだけでデューティ比は変わらない。
さらに周波数がやたら早いのでサーボみたいな遅いものには使えない

そこで実際には

pinMode(1, PWM_OUTPUT);
pwmSetMode(PWM_MODE_MS);
pwmSetClock(1900);
pwmSetRange(2000);
pwmWrite(1, val);

のようにいろいろ設定してから使う必要がある。

これよりもちょっと使いにくい(Pythonだと使いやすい)が、RPIOの方が良さそうだ。
こちらはどのピンもハードウエアPWMみたいに使える。

Category: [Raspberry Pi] - 10:29:24


広告

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Fri, 18 Jul 2014 15:29:24 HAST (1949d)