Raspberry Pi Pico(s_30)FS90R サーボモーター 用モジュール
FS90R FS90Rc.py
FS90R(FEETECH製)は連続回転(360°)サーボモータです。※詳細はFS90Rのデータシートを参照ください。
Raspberry Pi PicoでFS90Rサーボモータを使う自作の’FS90Rc.py’を作成しました。
記事(d_32)を元に作成しています。’FS90Rc.py’は末尾にあります。
使い方だけを記載します。
使い方
■ ファイル転送
Raspberry Pi Picoへ’FS90Rc.py’を送った後でimportして使います。
※FS90Rc.pyの末尾に、使用例(FS90Rc_ex.py)の## example以降をコピペ追加しても動作確認できます。
■ メソッド
‘FS90Rc’をimportすると「fs_90、de_init」のメソッドが使えるようになります。
FS90R(pw_pin=21)で初期化します。
PWM出力は50Hz(20msec)です。
pw_pin:PWM出力で使うGPIOの番号です。デフォルトはGP21です。
(01)fs_90(dat)
FS90RにPWM出力します。
dat:Ton時間を与えます。msecx100で与えます。
FS90RのカタログではCW(700~1500us) STOP(1500±45us) CCW(1500~2300us)です。
fs_90(700)、fs_90(1500)、fs_90(2300)のように与えます。
(02)de_init()
PWM出力を無効にします。
使用例
FS90RをSTOP > CW > STOP > CCW > STOP 動作させています。
各動作時にTon時間を測定しています。
FS90Rc_ex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#FS90R 360° Servo Motor
from machine import Pin
import time
from FS90Rc import FS90R
## example
# measure pulse width time_pulse_us
dpin=Pin(22, Pin.IN) #mesure Ton
def m_Ton():
d=machine.time_pulse_us(dpin, 1, 1000000)
d=machine.time_pulse_us(dpin, 1, 1000000)
print(f'Ton={d}usec')
return d
# instance
a=FS90R()
# CW(700~1500us) STOP(1500±45us) CCW(1500~2300us)
a.fs_90(1500) #STOP
time.sleep(1)
m_Ton()
a.fs_90(700) #CW
time.sleep(1)
m_Ton()
a.fs_90(1500) #STOP
time.sleep(1)
m_Ton()
a.fs_90(2300) #CCW
time.sleep(1)
m_Ton()
a.fs_90(1500) #STOP
time.sleep(1)
m_Ton()
a.de_init() #pwm.deinit
time.sleep_ms(10)
m_Ton()
実行結果
実行すると指定の動作をしました。
Ton時間だけThonnyのshellに表示されます。
>>> %Run -c $EDITOR_CONTENT
Ton=1500usec
Ton=700usec
Ton=1500usec
Ton=2300usec
Ton=1500usec
Ton=-2usec # pwmを無効にしたのでTimeoutで-2が返っている
>>>
FS90R 用モジュール
FS90Rc.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from machine import Pin, PWM
#FS90R 360° Servo Motor
class FS90R:
def __init__(self,pw_pin=21):
self.s_pwm=PWM(Pin(pw_pin)) #
self.s_pwm.freq(50) #50Hz 20msec
# CW(700~1500us) STOP(1500±45us) CCW(1500~2300us)
def fs_90(self,dat):
self.s_pwm.duty_ns(dat*10**3)
# pwm deinit
def de_init(self):
self.s_pwm.deinit()