gpiozeroライブラリ入門⑫import Servo
前回まではDCブラシありモータを駆動するHブリッジICを使いました。ここでは、ラジコンや小さなロボットに使われるサーボ・モータのクラスServoを利用します。産業用機器の位置決めなどに用いられるモータもサーボ・モータと呼ばれますが、異なるジャンルです。
サーボ・モータはPWM信号を使います。HブリッジでもPWM信号を使いましたが、中身はまったく異なります。サーボ・モータのPWMは周期が業界でほぼ決まっており、回転角度(軸に取り付けられたホーンの動き)はHighのパルス幅で決定されます。Hブリッジのようにデューティ比で回転数を制御するのではありません。
●クラスServo
class gpiozero.Servo(pin, *, initial_value=0, min_pulse_width=1/1000, max_pulse_width=2/1000, frame_width=20/1000, pin_factory=None)CompositeDeviceを拡張し、GPIOピンに接続されたPWM制御のサーボ・モータを使う。3本のケーブルは次の接続をする。
パラメータ;
|
●接続
GPIO17に信号を出しています。使用したモータは、電源は3.3V、5Vのどちらでも動きました。
●プログラム
min、mid、maxの三か所にホーンを動かします。すこしプルプルと震えているのが気になります。
from gpiozero import Servo
from time import sleep,time
motor = Servo(17)
while 1:
motor.min()
sleep(1)
motor.mid()
sleep(1)
motor.max()
sleep(1)
motor.mid()
sleep(1)
つなぐサーボ・モータを増やしていきました。4台です。問題なく動きました。最大接続数は不明です。
from gpiozero import Servo
from time import sleep
motor = Servo(17)
motor1 = Servo(27)
motor2 = Servo(21)
motor3 = Servo(20)
while 1:
motor.min()
motor1.min()
motor2.min()
motor3.min()
sleep(1)
motor.mid()
motor1.mid()
motor2.mid()
motor3.mid()
sleep(1)
motor.max()
motor1.max()
motor2.max()
motor3.max()
sleep(1)
motor.mid()
motor1.mid()
motor2.mid()
motor3.mid()
sleep(1)
●波形
周期の実測値は20msです。
min()、mid()、max()の周期です。それぞれ1.05ms、1.65ms、2.1msでした。
いずれも、業界の標準に近い値です。