ラズパイ 連続回転サーボ (duty)


Arduino に続いて、ラズパイで連続回転サーボを制御します。

接続
サーボには3本の線があります。
赤を+5v(pin4)、黒をGND(pin6)、白を制御ピン(pin15)に接続します。
20160505_raspi_servo
20160410_raspi_pin

RPi.GPIO の PWM モード
ラズパイには、GPIOを制御するための python ライブラリ RPi.GPIO が用意されています。
さらに、RPi.GPIO には、PWMモード が用意されています。
PWMの周期は周波数で指定します。
周期 20ms なので、 50 Hz です。
PWMのパルス幅は、デューティ比 で指定します。
停止のときのデューティ比は、周期 20ms、パルス幅 1.5ms なので、7.5% です。

servo.oy

import RPi.GPIO as GPIO
PIN = 15
duty = 7.5
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIN, GPIO.OUT)
servo = GPIO.PWM(PIN, 50)
servo.start(duty)

上記のコードを改版して、dutyの値をキー入力で設定できるようにしたものを、github で公開しています。
rpi_servo_duty.py

duty を 5.0、7.0、7.5、8.0、10.0 と変化させて、
時計周り(高速)、時計周り(低速)、停止、反時計周り(低速)、 反時計周り(高速) となることを確認します。

試してみたことろ、duty=7.5 では微速で回転して、停止しませんでした。
duty=7.2 くらいで、停止しました。

オシロでの測定
オシロで測定したところ。
duty=7.5 では、パルス幅は 1.5ms より少し大きくなり。
duty=7.2 では、パルス幅は 1.5ms になりました。
また、若干の ジッター が見られました。

周期 20ms
20160505_servo_cycle_20ms

duty=7.5
20160505_servo_duty_75

duty=7.2
20160505_servo_duty_72

なお、RPIO.PWM, PWM via DMA for the Raspberry Pi は動かなかった。
This module can only be run on a Raspberry Pi というエラーが出ます。
調べてみると、ラズパイ 2 では対応していないようです。
RPIO issues 53 -SystemError: This module can only be run on a Raspberry Pi!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です