稼働中

マイクロビット(e_36)SG90 FS90R サーボモータ

サーボモータ

microbitでSG-90(OSOYOO製)±90°(180°)、FS90R(FEETECH製)連続回転サーボ(360°)を使ってみました。
※仕様、電気特性などの詳細はデータシートなど参照ください。

外観

下が外観写真になります。(左)SG-90 (右)FS90Rです。共にリード線の橙(PWM)、赤(Vcc)、茶(GND)です。
SG90  FS90R

接続図

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の動作確認をしました。