Raspberry Pi Pico(d_32)FS90R 連続回転サーボモータ
FS90R continuous servo
Raspberry Pi PicoでFS90R(FEETECH製)連続回転サーボ(360°サーボ)を使ってみました。
記事(d_31)のFS90Rと違い正転、逆転して回ります。(以後はFS90Rと記載します)
FS90Rを動作させるにはPWM出力をT=20msecでTon=1500~2300usでCCW(反時計回り)、700us~1500usでCW(時計回り)、1500±45usでSTOP(停止)になります。※仕様、電気特性などの詳細はデータシートなど参照ください。
※micro:bitの記事(e_36)からRaspberry Pi Picoで使えるように追記、修正等をしました。
外観
接続例
FS90Rの動作電源は4.8V(~6V)なので外部電源が必要です。レベルコンバータを介して接続しました。
GP21をpwm出力、GP22をpulse-width測定用にしています。
スクリプト
FS90Rの動作を確認します。単純にCCW、STOP、CW動作をするだけです。
各動作のTon時間を測定表示します。スクリプトは以下のようにしました。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。
pico_pwm_fs90r_01.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, PWM
import time
print(f'machine-freg={machine.freq()/(10**6)}Mhz')
# PWM pin
pwm21=PWM(Pin(21)) #pwm3a pwm21
print(pwm21)
# measure pulse width time_pulse_us
dpin=Pin(22, Pin.IN) #mesure Ton
def mes_pls():
d=machine.time_pulse_us(dpin, 1, 1000000) #1回目は不定
d=machine.time_pulse_us(dpin, 1, 1000000)
print(f'Ton={d}(usec)')
return d
CW=700_000 #CW 700us~1500us
STP=1_500_000 #STOP 1500±45us
CCW=2_300_000 #CCW 1500~2300us
# 周波数設定 50hz(20msec)
pwm21.freq(50)
# 設定周波数の確認
f21=pwm21.freq()
print(f'get freq={f21}hz')
print('STOP---')
pwm21.duty_ns(STP)
time.sleep(1)
mes_pls()
print('CW---')
pwm21.duty_ns(CW)
time.sleep(1)
mes_pls()
print('STOP---')
pwm21.duty_ns(STP)
time.sleep(1)
mes_pls()
print('CCW---')
pwm21.duty_ns(CCW)
time.sleep(1)
mes_pls()
print('STOP---')
pwm21.duty_ns(STP)
time.sleep(1)
mes_pls()
pwm21.deinit() #PWM出力を無効
部分説明
machine class ‘PWM’の使い方は記事(s_28)を参照ください。
PWM出力をT=20msec(50Hz)に設定して、カタログにあるCW(時計回り)、STOP(停止)、CCW(反時計回り)の位置、Ton時間(duty_ns)それぞれ700us、1500us、2300usを
nsec単位にしてduty_ns(value)を与えています。
■mes_pls()
GP22のTonのパルス幅(usec)を測定して返します。ここではThonnyのシェルに表示します。
■FS90Rの調整
Thonnyのshellで以下のようにして確認します。PWM出力 Ton=1500usec で停止しない場合は、写真右にあるように裏面ネジで調整します。
>>> from machine import Pin, PWM
>>> pwm21=PWM(Pin(21))
>>> pwm21.duty_ns(1500_000) # 1500usec STOP
実行結果
結果は以下のようになりました。Ton時間の測定結果です。※Thonnyのshellに表示されます。
>>> %Run -c $EDITOR_CONTENT
machine-freg=125.0Mhz
get freq=50hz
STOP---
Ton=1498(usec)
CW---
Ton=698(usec)
STOP---
Ton=1498(usec)
CCW---
Ton=2298(usec)
STOP---
Ton=1498(usec)
>>>
動作確認の動画です。
以下のようにTon時間を可変して回転数を変えてみました。動画だけ掲載します。
#pico_pwm_fs90r_02.py
from machine import Pin, PWM
import time
# PWM pin
pwm21=PWM(Pin(21)) #pwm3a pwm21
print(pwm21)
CW=700_000 #CW 700us~1500us L
STP=1_500_000 #STOP 1500±45us
CCW=2_300_000 #CCW 1500~2300us R
#pwm.freq 50hz(20msec)
pwm21.freq(50)
time.sleep(1)
#Left
for s in range (1500,600,-100):
cw=s*1000
print(s)
pwm21.duty_ns(cw)
mes_pls()
time.sleep(1)
#Right
for s in range (1500,2400,100):
ccw=s*1000
print(s)
pwm21.duty_ns(ccw)
mes_pls()
time.sleep(1)
pwm21.deinit()
結果は以下のようになりました。Thonnyのshellにdutyの設定値(usec)が表示されます。
>>> %Run -c $EDITOR_CONTENT
1500
1400
1300
1200
1100
1000
900
800
700
1500
1600
1700
1800
1900
2000
2100
2200
2300
>>>
動作確認の動画です。
まとめ
Raspberry Pi PicoのPWM出力でFS90R 360°サーボの動作を確認しました。