Micropython之pwm控制舵机

Micropython的定时器Timer
舵机原理可以参考这篇文章(侵删)51单片机PWM双舵机控制详解

简单例子

from pyb import Pin, Timer

p = Pin('X1') # X1 has TIM2, CH1
tim = Timer(2, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p)
ch.pulse_width_percent(50)

虽然Micropython有四个引脚能直接控制舵机,一两句话就能控制舵机,但总感觉不好设置舵机角度范围,默认是180度,不好更改。
所以直接用PWM控制,用百分比形式的占空比来实现。

控制舵机的PWM波是一种方波,频率为50Hz,周期即其倒数:20ms,在每个周期里面,高电平占0.5ms到2.5ms之间。0.5ms代表的是0度,2.5ms代表的是180度,其他的度数可以按比例换算。

下面看程序:

from pyb import Pin, Timer

i = 7.5    # 20ms内的0.5-2.5换成百分比形式就是2.5%-12.5%。7.5即为中间。
sw = pyb.Switch()    # 用板子上的按键控制
tm2 = Timer(2, freq=100)
tm3 = Timer(5, freq=50)    # 选择定时器5,频率50hz
led3 = tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15)
led3.pulse_width_percent(50)
a4 = tm3.channel(1, Timer.PWM, pin=Pin.cpu.A0)  # 选择通道1和定时器5对应引脚A0
while True:
    sw_state = sw()
    if sw_state:
        i += 0.01
        pyb.udelay(500)    # 延时500us,减点速
        if i > 12.0:
            i = 12.0
    else:
        i -= 0.01
        pyb.udelay(500)
        if i < 3.0:
            i = 3.0
    a4.pulse_width_percent(i)   # 控制占空比,20ms内0.5-2.5ms的百分比(不给满)

效果:下入程序后,按下user键转到180度左右,松开回到0度左右。

你可能感兴趣的:(Micropython之pwm控制舵机)