マイクロビット(e_36)SG90 FS90R サーボモータ
サーボモータ
microbitでSG-90(OSOYOO製)±90°(180°)、FS90R(FEETECH製)連続回転サーボ(360°)を使ってみました。
※仕様、電気特性などの詳細はデータシートなど参照ください。
外観
下が外観写真になります。(左)SG-90 (右)FS90Rです。共にリード線の橙(PWM)、赤(Vcc)、茶(GND)です。
接続図
SG-90、FS90Rの動作電源は4.8V(~5V)なのでレベルコンバータを介してmicro:bitと接続しました。SG-90、FS90Rの接続は同じです。
※micro:bitのピン配置図は「https://tech.microbit.org/hardware/edgeconnector/」からの引用です。
実体図
写真のサーボモータはFS90Rです。SG-90を使う場合も接続は同じです。
SG-90
SG-90(OSOYOO製)の制御角:±約90°(180°)のマイクロサーボモータを使ってみました。
SG-90を動作させるにはT=20msec、Ton=2.4msecでポジション90°、Ton=1.45msecで0°、Ton=0.5msecで-90°になります。
スクリプト
SG-90の動作を確認するスクリプトは以下のようにしました。※thonny-microbitのMicroPythonを使っています。
Ton=2.4msecを得るPWM値は2.4/20*1024=122.9(90°)です。同様に計算すると 74.2(0°)、25.6(-90°)になります。スクリプトでは各々、123、74、26を使うことにしました。
set_analog_periodで周期20msecを設定し、write_analog(pwm)で各PWMを発生します。またmachine.time_pulse_us()でTon時間を測定しています。
servo_sg90_test_02b.py
from microbit import *
import machine
s_pin=pin16 # pulse PWM
r_pin=pin5 # read Ton
def POSI(pwm):
s_pin.write_analog(0) # 先にwrite_analogモード、出力は’0’V
s_pin.set_analog_period(20) # 周期を設定 20msec
s_pin.write_analog(pwm) # PWM output
t_ons= machine.time_pulse_us(r_pin,1)/1000 # Ton 計測 msec
print('pwm %3d' %pwm,'Ton',t_ons)
# pwm値
pos_L=123 # 90° 計算値
pos_M=74 # 0°
pos_R=26 #-90°
POSI(pos_L)
sleep(500)
POSI(pos_M)
sleep(500)
POSI(pos_R)
sleep(500)
実行結果
以下のように、Ton時間も概ね正しく出力されているようです。
>>> %Run servo_sg90_test_02b.py
pwm 123 Ton 2.416
pwm 74 Ton 1.452
pwm 26 Ton 0.514
>>>
以下の写真のように制御角±90°(180°)の動作はしましたが角度がかなりズレています。SG-90で検索するとTower Pro製が一般的なようです。OSOYOO製は兌換品?のためか制御角±90°で停止しませんでした。
PWM値を変更して調整して見ました。90°、0°、-90°のPWM値を各々130、78、32に変更して実行しました。
かなり制御角±90°(180°)の動作に近づいたと思います。
>>> %Run servo_sg90_test_02b.py
pwm 130 Ton 2.543
pwm 78 Ton 1.535
pwm 32 Ton 0.641
FS90R
FS90R(FEETECH製)連続回転サーボ(360°サーボ)を使ってみました。接続はSG90と同じです。
SG-90と違い正転、逆転して回ります。FS90Rを動作させるにはT=20msec、Ton=1500~2300usでCCW(正転)、700us~1500usでCW(逆転)、1500±45usでSTOP(停止)です。Ton=2300、1500、700usを得るPWM値を計算すると、各々117.645、76.725、35.805になります。スクリプトでは各々、118、77、36を使うことにしました。
スクリプト
先のスクリプトでPWM値を各々118、77、36に変更し、POSI(pos_M)を最後に追加して動作を確認しました。
# pwm値
pos_L=118 # 90° 計算値
pos_M=77 # 0°
pos_R=36 #-90°
POSI(pos_L)
sleep(500)
POSI(pos_M)
sleep(500)
POSI(pos_R)
sleep(500)
POSI(pos_M) # 調整のため追加
sleep(500) # 追加
実行結果
Ton時間はほぼ設定値になっているようです。POSI(pos_M)で停止するハズですが・・
>>> %Run servo_sg90_test_02b.py
pwm 118 Ton 2.314
pwm 77 Ton 1.502
pwm 36 Ton 0.701
pwm 77 Ton 1.499
>>>
調整
このままでは停止しないと思います。調整が必要です。裏面に調整ネジがあります。ネジを回して停止するように調整します。
動作状態
調整後は停止するようになりました。動画の前半は無調整、後半は調整後です。
まとめ
micro:bitでサーボモータ制御角±約90°(180°)のSG-90と連続回転サーボ(360°)FS90Rの動作確認をしました。