2020-12-25 16:40:40 [显示全部楼层]
3419浏览
查看: 3419|回复: 1

[入门] 如何使用BeagleBone Black控制伺服电机?

[复制链接]

本文讲述使用BeagleBone® Black由Python测试程序控制伺服电机,将伺服电机角度设置在0度到180度之间。在BeagleBone® Black预安装的操作系统(Angstrom Linux)中安装好Python IO BBIO软件库。
如何使用BeagleBone Black控制伺服电机?图3
控制伺服电机角度的Python测试程序代码:

# python servo.py
Angle (0 to 180 x to exit):90
Angle (0 to 180 x to exit):180
Angle (0 to 180 x to exit):0
Angle (0 to 180 x to exit):x
#

硬件:BeagleBone® Black、标准伺服器、1kΩ电阻(可选)、5V电源、内螺纹端子、面包板、跳线。1kΩ电阻不是必需的,但可以保护BeagleBone® Black。

连线

如何使用BeagleBone Black控制伺服电机?图2
使用跳线连接开发板和面包板,如下图。将外部5VDC电源连接到DC电源插孔,引脚P8_13作为PWM输出控制伺服器。BeagleBone® Black唯一需要的其他连接是GND。

Python控制台

写入Python程序,将伺服电机角度设置为0度到180度,在此之前,可在Python控制台( Python Console)进行实验。输入下列指令,启动Python控制台:

# python
Python 2.7.3 (default, Apr 3 2013, 21:37:23)
[GCC 4.7.3 20130205 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

首先,输入下列指令导入函数库

>>> import Adafruit_BBIO.PWM as PWM

在Python控制台逐个输入下列指令,将会看到伺服电机的位置发生改变:

>>> PWM.start("P8_13", 95.0, 60)
>>> PWM.set_duty_cycle("P8_13", 97.0)
>>> PWM.stop("P8_13")
>>> PWM.cleanup()

注意:如果伺服电机没有移动,则可能需要更改PWM信号极性,然后重试。向PWM.start函数添加第4个参数,其值为1,将反转PWM信号。

下面是相似的代码,但是设置了相反的参数:

>>> PWM.start("P8_13", 95.0, 60, 1)
>>> PWM.set_duty_cycle("P8_13", 97.0)
>>> PWM.stop("P8_13")
>>> PWM.cleanup()

写入程序

退出Python控制台:

>>> exit()

回到Linux提示符。输入以下命令创建名为Servo.py的新文件:

nano servo.py

将下面的代码粘贴到编辑器窗口中。注意:如果需要伺服器反向移动,将相应的参数添加到PWM.start函数中。

import Adafruit_BBIO.PWM as PWM
servo_pin = "P8_13"
duty_min = 3
duty_max = 14.5
duty_span = duty_max - duty_min
PWM.start(servo_pin, (100-duty_min), 60.0)
while True:
angle = raw_input("Angle (0 to 180 x to exit):")
if angle == 'x':
PWM.stop(servo_pin)
PWM.cleanup()
break
angle_f = float(angle)
duty = 100 - ((angle_f / 180) * duty_span + duty_min)
PWM.set_duty_cycle(servo_pin, duty)

如何使用BeagleBone Black控制伺服电机?图4
输入下列指令启动程序:

# python servo.py
Angle (0 to 180 x to exit):90
Angle (0 to 180 x to exit):180
Angle (0 to 180 x to exit):0
Angle (0 to 180 x to exit):x
#

输入介于0到180之间的值将相应地设置伺服电机角度。
要停止程序,输入“ x”。
如果伺服电机在其范围的一端抖动,或者没有提供完整的180度运动范围,请尝试调整duty_min和duty_max中的值。
当输入“ x”时,PWM停止并运行“清除”,否则即使程序停止运行,PWM信号仍会在后台继续。

伺服电机

伺服电机的位置由脉冲长度设置。伺服电机预计大约每20毫秒接收一次脉冲。如果该脉冲在1毫秒或更短时间内处于高电平,则伺服角度将为零;如果为1.5毫秒,则它将位于其中心位置;如果为2毫秒或更长,则将为180度。
如何使用BeagleBone Black控制伺服电机?图1
连续作用的伺服电机(continuous Servo)可以像位置伺服电机(position servo)一样使用。连续伺服电机以不同的脉冲宽度调整其速度,而不是使用绝对位置调整速度。本示例使用GPIO软件库的PWM功能生成用于伺服的脉冲,PWM频率设置为60Hz,以便伺服器大约每17毫秒接收一次脉冲。通过在3%到14.5%的相当窄的范围内调整占空比,可以更改脉冲的长度。对这些数字进行估算,然后进行一些微调,以提供所使用伺服电机的最大工作范围。

pATAq  版主

发表于 2020-12-26 01:12:13

这是啥
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail