Raspberry Pi 3 で pigpio のサーボ制御を利用して不安定だったので色々調べた覚書。
今回のトラブルはGPIO4の故障で発生。原因は詳しくは不明。
<現象>
Servo PWM制御が不安定。サーボ側の故障も考えたが、arudinoでは問題なく動く。
GPIO4を利用してして pi.set_servo_pulsewidth(4,1500) とかやっていたが下記のように不安定。
- gpio実行の失敗。 pi.set_servo_pulsewidth(4,1500) とかのコマンド10回に2-3回失敗する。piscope で見ると何も出力されていない。
- 動作不定。繰り返し実行すると動いたりする。
- PWMが2-3秒で停止。piscope で見ていると、コマンド実行後2-3秒でPWMの出力が止まる。しかしpi.get_servo_pulsewidth(4) では1500とか出力されていることになっている。
- ノイズ。上記停止後はpi.set_mode(4,0) として止めないとノイズが入る。誤動作の元。
- ポートOUT/INモードまで変わってしまう。gpio readall で見ると、PWM出力中は MODEがOUTだが、2-3秒でINに代わる。だいたいこのタイミングでPWMの出力がかわる。
<解決?>
GPIOを4をやめて26に変更したら安定した。GPIOは4以外では正常だった。
- 失敗なし。 pi.set_servo_pulsewidth(26,1500) とかで2-30回中失敗なし。
- 動作安定。繰り返しでも動作変わらず。
- 無停止。コマンド実行後停止するまでずっと PWM出力。ちなみに50Hzで出力。
- ノイズなし。
- ポートモード変化なし。gpio readall でずっとOUT.
- 空いているGPIOざっと確認したがGPIO4以外では同様のトラブルなし。
何かがGPIO4を利用しているようにも見えるが不明。OCTPY使っているだけなんだが。