鹹魚ZTMR實例—舵機

鹹魚ZTMR實例—舵機


主控板:ZTMR開發板

SG90舵機
範圍180°(-90°~90°)
在這裏插入圖片描述

舵機是一種位置(角度)伺服的驅動器,適用於那些需要角度不斷變化並可以保持的控制系統。目前在高檔遙控玩具,如航模,包括飛機模型,潛艇模型;遙控機器人中已經使用得比較普遍。舵機是一種俗稱,其實是一種伺服馬達。

引腳說明

引腳 說明
暗灰(棕色) GND
紅色 5V
橙色 X1

舵機用法
from pyb import Servo

用法 說明
s1=Servo(1) 使用X1控制(X1,VIN,GND)
s1.angle(45) 轉到45°
s1.angle(-60,1500) 1500ms內轉到-60°
s1.speed(50) 以速度50繼續轉動
# main.py -- put your code here!
from pyb import Servo
s1=Servo(1)          #使用X1控制
s1.angle(45)         #轉到45°
s1.angle(-60,1500)    #1500ms內轉到-60°

原理及代碼說明鹹魚硬件—舵機Servo

例程1:用戶按鍵USER控制舵機轉動,並在串口中顯示轉動角度

# main.py -- put your code here!
from pyb import Servo,Switch

sw = Switch()     #定義按鍵對象名字爲sw
s1 = Servo(1)     #構建舵機對象s1,輸出引腳爲X1

#定義7組角度:0,30,60,90,-30,-60,-90
angle=[0,30,60,90,-30,-60,-90]

key_node = 0  #按鍵標誌位
i = 0         #用於選擇角度

def key():
    global key_node
    key_node = 1

sw.callback(key)  #記錄按鍵


#X1指定角度,啓動時i=0,默認0°
s1.angle(angle[i])

while True:

    if key_node==1: #按鍵被按下
        i = i+1
        if i == 7:
            i = 0
        key_node = 0 #清空按鍵標誌位,迴歸到0°
        s1.angle(angle[i]) #X1指定角度
        print(angle[i])#打印X1角度     

串口顯示效果
在這裏插入圖片描述
之前講過PWM,試着用佔空比來實現

控制舵機的PWM波是一種方波,頻率爲50Hz,週期即其倒數:20ms,在每個週期裏面,高電平佔0.5ms到2.5ms之間。0.5ms代表的是0度,2.5ms代表的是180度,其他的度數可以按比例換算。

PWM(脈寬調製模塊)

from pyb import Pin,Timer

p = Pin('X1')
ti = Timer(2,freq=1000)              #X1是定時器2的CH1
ch = ti.channel(1,Timer.PWM,pin=p)   #設置PWM引腳
ch.pluse_width_precent(50)           #設置PWM輸出佔空比

舵機的控制一般需要一個20ms左右的時基脈衝,該脈衝的高電平部分一般爲0.5ms-2.5ms範圍,總間隔爲2ms。脈衝的寬度將決定馬達轉動的距離。例如:1.5毫秒的脈衝,電機將轉向90度的位置(通常稱爲中立位置,對於180°舵機來說,就是90°位置)。如果脈衝寬度小於1.5毫秒,那麼電機軸向朝向0度方向。如果脈衝寬度大於1.5毫秒,軸向就朝向180度方向。以180度舵機爲例,對應的控制關係是這樣的:
0.5ms————-0度;
1.0ms————45度;
1.5ms————90度;
2.0ms———–135度;
2.5ms———–180度;

在這裏插入圖片描述
例程2:用戶按鍵USER控制舵機轉動,並在串口中顯示轉動角度

from pyb import Pin, Timer, Switch

i = 7.5    # 20ms內的0.5-2.5換成百分比形式就是2.5%-12.5%。7.5即爲中間。
sw = Switch()   # 初始化用戶按鍵
p = Pin('X1')
ti=Timer(5,freq=50)
ch1=ti.channel(1,Timer.PWM,pin=p)  #X1爲PWM輸出

while True:
    swt=sw()
    if swt:
        i += 0.01
        pyb.udelay(1000)    # 延時1000us,減點速
        if i > 12.4:
            i = 12.4
    else:
        i -= 0.01
        pyb.udelay(1000)
        if i < 2.6:
            i = 2.6
    ch1.pulse_width_percent(i)   # 控制佔空比,
    print(i)

按住USER按鍵看效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章