闭环控制电机可以实现速度控制,以避免在简单pwm功率控制过程中因阻力增大导致速度降低的问题。
下面以程欢欢开源的直流有刷闭环控制电机为基础的麦克纳姆轮小车为例记录一下制作过程。
源码传送门:http://gofile.me/4CS5h/DDBtWBcaP
根据闭环电机通讯协议,用python重构了 MX_motorControl函数,实现用串口向电机发送控制指令的目的,通讯波特率115200
def MX_motorControl(self, MX_motorControl_port, MX_motorControl_function, MX_motorControl_content1,
MX_motorControl_content2):
# ######电机方向设置#############
if (MX_motorControl_port == self.MX_digitalIO_1 or MX_motorControl_port == self.MX_digitalIO_3): # 左侧电机反转
MX_motorControl_content1 = -MX_motorControl_content1
# #######电机端口易用化###########
if (MX_motorControl_port == 1):
MX_motorControl_port = self.MX_digitalIO_1
elif (MX_motorControl_port == 2):
MX_motorControl_port = self.MX_digitalIO_2
elif (MX_motorControl_port == 3):
MX_motorControl_port = self.MX_digitalIO_3
elif (MX_motorControl_port == 4):
MX_motorControl_port = self.MX_digitalIO_4
# ########处理负值##############
if (MX_motorControl_content1 < 0): # 负值要取反加一
MX_motorControl_content1 = (~(-MX_motorControl_content1) & 0xFF) + 1
# ########开始发送操作##########
GPIO.output(MX_motorControl_port, False) # //通讯标志位置低,通知开始发送
serial_data = bytes(
[165, MX_motorControl_function, MX_motorControl_content1, (MX_motorControl_content2 >> 24) & 0xFF, \
(MX_motorControl_content2 >> 16) & 0xFF, (MX_motorControl_content2 >> 8) & 0xFF,
MX_motorControl_content2 & 0xFF, \
MX_motorControl_function ^ MX_motorControl_content1 ^ (MX_motorControl_content2 >> 24) & 0xFF ^ (
MX_motorControl_content2 >> 16) & 0xFF ^ (
MX_motorControl_content2 >> 8) & 0xFF ^ MX_motorControl_content2 & 0xFF])
self.ser.write(serial_data) # 发送数据准备:起始位0xa5,功能位,内容位1,内容位2(4部分),校验位###
time.sleep(0.001) # 等待1ms
GPIO.output(MX_motorControl_port, True) # 通讯标志位置高,通知结束发送