自作全方向移動型ラジコン戦車完成までの記録 ~PWM制御系編~
自作全方向移動型ラジコン戦車完成までの記録の4回目。
今回はデジタル回路で出力電圧の調整を行うのによく使うPWM制御について書く。
前回はこちら
PWMとは
詳しくは知らないが、PWMとは、Pulse Width Modulationの略で、その名の通りパルスの幅を調整して擬似的に電圧を調整する方法。
一定時間内に電圧オンの状態と電圧オフを切り替えて、そのオンオフの割合で電圧の高さを擬似的に変える。
時間あたりの平均で見るとオンが70%だったら元の出力の70%程度になるみたいなイメージ。
ウィーヴィルは、脚の三輪をPWM制御しているが、他にも砲塔や前照灯二つと尾灯二つのLEDの制御でもPWMを使用している。
これだけの部品のPWM制御を全てラズパイだけでやらせるのは無理(PWM制御できるGPIOが足りない)なので、下記の16chPWM制御可能なボードを使用した。
このボードをラズパイと繋いでI2Cで通信して制御した。
そんでもってボードは下記のライブラリで制御した。
砲塔と各部LEDの制御
過去の日記でサーボとLEDの実装と制御について書いていたのでそちらを参照。
日記に書いてなかった問題点として、ゆっくり明滅させる等、常時PWM制御する処理を行うとボードが処理落ち(?)してサーボの動作速度が低下する。
LED制御は別のArduino基板とかに任せるようにできればよかったかもしれないが、前照灯のLEDがRGB三色を個別のLEDで表現しているため、LEDだけで前照灯(Rx2,Gx2,Bx2)、尾灯(Bx2)の計8ピンも必要になってしまい、ArduinoUnoではちょっと足りないっぽい。
Dueとかならいけたんだろうか?
過去の日記の日付が半年くらいまえで自分でも驚いている。
MFTの少し前に撮った動画はこちら。
ボードとラズパイの接続時の失敗
本番の数日前までしっかりLEDやサーボが動いていたのに、ある日突然まともに動かなくなって非常に焦った。
原因は、PCA9685ボードとラズパイの接触不良という単純なミスだった。
PCA9685ボードとラズパイには、フラットケーブル(またはリボンケーブル)を使用した。
フラットケーブルは、数本のケーブルを横に並べてくっつけてきしめんみたいにしたやつ。
今回初めて使ったが、1つの芯が複数の細い先を束ねているタイプの線だったため、ハンダ付けしても外力で線が少しづつちぎれて非常に接触不良が起きやすくなってしまった。
この手のケーブルは、コネクタでつなぐようにしたほうが良かったのだろうか?
一応ボードをつなぐ方はコネクタをつけたが、付け方が悪かったのかGND側が断線してしまった。
補強としてホットボンドを端子と線の周りにたっぷり塗りたくって固めた。
そもそもちゃんとボードを固定しておけば余計な力が加わることは無かったと思う。
今回外装はしっかりデザインしたが、中身は収まればいいや的な感じで固定とか全く考えていなかった。
次に何か作るときは内部の基板の固定などもちゃんと考えて設計したい。