电机控制
直播中

李霞

7年用户 1224经验值
私信 关注
[文章]

如何使用MicroPython中的脉冲宽度调制来控制带有Raspberry Pi Pico的伺服电机?

在本教程中,我们将使用 MicroPython中的脉冲宽度调制来控制带有 Raspberry Pi Pico的伺服电机。到目前为止,我们已经学会了如何连接OLED和LCD。除此之外,我们还必须学习如何与Raspberry Pi Pico实现I2C,ADC通信。现在让我们了解脉宽调制的工作原理。

脉宽调制

脉宽调制(PWM)是一种改变数字信号幅度以控制需要电源或电力的设备和应用的技术。它通过快速循环数字信号的开和关相位并改变“导通”阶段或占空比的广度,从电压分量的角度有效地调节输送到器件的功率量。对于设备,这将显示为恒定功率输入,其平均电压值由导通时间的比例决定。占空比表示为完全

(100%) 开启的百分比。

脉宽调制

下图表示占空比为 50% 的 PWM

信号。我们可以通过将占空比从0%改变到100%来控制PWM信号的“导通时间”。我们将通过改变特定PWM信号的占空比来控制伺服电机。一个周期是PWM信号的完整ON和OFF时间,如上图所示。PWM 信号的频率决定了 PWM 完成一个周期的速度。计算频率的公式如下

Frequency = 1/Time Period
Time Period = On time + Off time

通常,微控制器产生的PWM信号约为500

Hz,这种高频将用于逆变器或转换器等高速开关设备。但并非所有应用都需要高频。例如,要控制伺服电机,我们需要产生频率为50Hz的PWM信号,因此PWM信号的频率也可以通过程序控制所有微控制器。

带有树莓派Pico的伺服电机电路图

树莓派皮科伺服电机控制电路图

伺服电机的连接非常简单。我们知道伺服电机有三根电线。黑色或棕色线用于接地,红色线用作VCC,黄色或橙色线用于提供脉冲信号。在电路图中,您可以看到我们已经将伺服的VCC与Pico板的VBUS引脚连接起来。伺服电机的信号引脚已与皮科板的GPIO0连接,舵机的接地引脚已连接到皮科板的接地针。

树莓派Pi Pico伺服电机控制代码在MicroPython中

打开“ T6_How使用Pico控制伺服电机” 文件夹。在此文件夹中,您可以找到“ 代码 ”文件夹。在Thonny编辑器中打开 “main.py” python文件。现在,让我们讨论一下 main.py 文件。

from machine import Pin, PWM
from time import sleep

首先,我们需要如上所述从 machine.py 库中导入 Pin() 和 PWM() 类。在我们之前的教程中,我们已经多次使用机器库,希望您现在熟悉机器库。Pin() 用于声明伺服电机的信号引脚。

pwm = PWM(Pin(0))
pwm.freq(50)

当我将伺服电机的信号引脚连接到 Pico 板的 GPIO0 时,我声明了 Pin(0) 并将该引脚设置为 PWM,方法是将其传递到 PWM() 函数中。pwm 变量在这里用作对象。然后我使用 pwm.freq(50) 将频率指定为 50Hz。

#Function to set an angle
#The position is expected as a parameter
def setServoCycle (position):
    pwm.duty_u16(position)
    sleep(0.01)

setServoCycle(position) 函数可用于通过将位置参数从 1000 传递到 9000 来设置伺服的位置。duty_u16的值以微秒为单位,而不是以度为单位。伺服值 1000-9000 表示 0-180 度。

while True:
    for pos in range(1000,9000,50):
        setServoCycle(pos)
    for pos in range(9000,1000,-50):
        setServoCycle(pos)

在上面的 while 循环中,我使用了两个 for 循环。第一个用于将伺服位置从 0 设置为 180,即 1000 到 9000,第二个 for 循环用于将伺服位置从 180 设置为 0,即 9000 到 1000。现在,在Thonny IDE中,打开 “main.py” 文件。首先,通过按键盘上的“ctrl+shift+s”键将**“main.py”文件保存在** Pico 板上。在保存文件之前,请确保您的 Pico 板已连接到笔记本电脑 。保存代码时,会出现一个弹出窗口,如下图所示,您必须先 选择树莓派 Pico ,然后将 文件命名为“main.py”保存 。此过程使您能够在 Pico 打开时运行该程序。

树莓派皮库项目

当您在微微板上上传并运行代码时,您将看到伺服器从 0 到 180 度和 180 到 0 度连续旋转。

from time import sleep

from machine import Pin

from machine import PWM

pwm = PWM(Pin(0))

pwm.freq(50)

#Function to set an angle

#The position is expected as a parameter

def setServoCycle (position):

pwm.duty_u16(position)

sleep(0.01)

while True:

for pos in range(1000,9000,50):

    setServoCycle(pos)

for pos in range(9000,1000,-50):

    setServoCycle(pos)

更多回帖

发帖
×
20
完善资料,
赚取积分