1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python控制硬件_用Python控制硬件14-脉冲驱动伺服电机

python控制硬件_用Python控制硬件14-脉冲驱动伺服电机

时间:2020-04-26 10:24:18

相关推荐

python控制硬件_用Python控制硬件14-脉冲驱动伺服电机

这次要演示的是控制伺服电机,用输入脉冲数控制旋转角度。

左侧是个低功率的步进电机,连接至右侧的伺服控制器,把复杂的相位控制转换成了简单的脉冲控制:只需确定旋转方向,输入指定数量脉冲,就能获得想要的角度。

如何让控制板输出想要的脉冲?之前演示过gpio命令可以翻转引脚电平高低从而产生脉冲,但在这个场景下明显效率太低,脉冲宽度也不能保证。这里要用到MCUSH提供的另一个实用命令“pulse”,可以产生指定数量脉冲,并保证脉冲宽度。

打开控制台,看看语法说明:

=>pulse --help

usage: pulse [--delay=] [-p ] [-I] [-D] [--invert]

options:

--delay default 5

-p/--pin default 0.0

-I/--init init

-D/--deinit deinit

--invert invert

number number

=>

首先初始化需要的端口,确定脉冲时间宽度,以及脉冲是否电平翻转。

=>pulse -p0.0 --delay=50 -I

=>

然后指定需要的脉冲数即可,所有脉冲全部输出完成后返回。

=>pulse 3

=>

上面的命令使得PA0口生成了3个脉冲,脉冲宽度50us,示波器检验如下:

需要注意的是脉冲的宽度是保证的(此时固件实时操作系统进入“临界区”,禁止任务抢占调度),而脉冲间的延时是允许任务调度的(实际延时时间可能大于指定的时间)。

下面用封装好的Python接口控制伺服,生成转一圈需要的脉冲数,然后翻转方向,继续转一圈,如此反复……

import time

from mcush import *

STEP = 1600 # 根据控制器组合开关设置

# 以下三个控制引脚共阴输入

ENABLE = '0.0' # 允许

DIR = '0.1' # 方向

PULSE = '0.2' # 脉冲

s = Mcush.Mcush(‘/dev/ttyACM0’)

s.pinOutputLow( [ENABLE, DIR, PULSE] ) # 同时控制3个引脚输出低电平

s.pulseInit( pin=PULSE, delay_us=50 ) # 初始化PULSE引脚

direction = True

try:

s.pinClr( ENABLE )

while True:

# 准备方向信号

print( "Direction:%d"% (int(direction)) )

if direction:

s.pinSet( DIR )

else:

s.pinClr( DIR )

# 旋转一圈

s.pulse( STEP ) # 产生STEP个脉冲

time.sleep(1)

# 反转方向

direction = not direction

finally:

s.pinSet( ENABLE ) # 按Ctrl-C中止后,恢复该控制引脚

运行效果:脉冲输出控制步进电机伺服/video/1165645385912700928

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。