舵机的接线方式
三根线分别对应 红色-VCC 电源正极 棕色-GND 电源负极 橙色-信号线 这里接在支持PWM的引脚 Pin(2)
根据舵机的参数得知 这里SG90,MG996测试如下 PWM控制周期是20ms 频率为1s/20ms=50
来自文档:
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度 1.0ms------------45度 1.5ms------------90度 2.0ms-----------135度 2.5ms-----------180度
一个20ms周期 我们只需用到0.5ms-2.5ms 只要发出0.5ms-2.5ms之间的脉冲 舵机就会按照比例转至指定角度
公式计算
2ms/180度 = 转一度所需要的脉冲ms 90度为例 0.5为初始 + 2ms/180度(每度) * 90度 = 1.5ms 1.5ms/20ms = 得到需要的脉冲比例 这里PWM模块的精度是1024个 最后发出去的占空比值就是 1.5ms/20ms*1024=76.8
t1 = 0.5 + 2 / 180 * du #范围2ms 角度180度 起始0.5ms
pulse = int(t1 / 20 * 1024)
print('移动的角度:',du, pulse)
定义PWM
PWM(pin, freq, duty)
pin:支持PWM的引脚
Pin(0)、Pin(2)、Pin(4)、Pin(5)、Pin(10)、Pin(12~19)、Pin(21)、Pin(22)、Pin(23)、Pin(25~27)
freq:频率
0 < freq <= 78125
duty:占空比
0 ≤ duty ≤ 0x03FF (十进制:0 ≤ duty ≤ 1023)
实例:
from machine import PWM, Pin
pwm = PWM (Pin(2), freq=50, duty=0)
pwm.duty(77) #舵机转至90度
小技巧 舵机实例过后有使能的情况下舵机是用手转不动的 动作过后不需要使能 pwm.deinit()就能用手转动了
360度的舵机
同样的控制方式 只是脉冲控制对应的转动速度不能控制角度 参考: http://docs.dfrobot.com.cn/upycraft/3.2.8%20PWM.html https://blog.csdn.net/qq_37429313/article/details/117251040