咸鱼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按键看效果
在这里插入图片描述

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