仅仅是驱动电机,实现加减速,具体实现方式数据传输见于电机说明书,对于其数据传输存在疑惑,可以串口助手先进行尝试,可以利用上位机,然后配合串口监控精灵,观察他到底是传的是什么。
这个作为代码存档,这是一大坨屎山,但网上没有相关代码可以抄,对于串口传输规范并没怎么研究,没有像其他地方的范例一样规范,CV进入代码绝对会有报错,补充相关变量即可,实现驱动功能的芯片为stm32f103zet6
STM32驱动实现
代码的实现均在速度模式下实现
串口初始化:
1 | void UART5_init(u32 bound) |
电机运动控制,其传输指令结合为:地址+写功能(一个读取一个写入)+功能码+转速(若功能码为速度)+CRC校验码,更多功能详见说明书
CRC16校验,采用的是查表法:
1 | /* CRC 高位字节值表 */ static unsigned char auchCRCHi[] = { |
前进,后退和停止基本上都是这么处理的:若是前进,将其速度分成两个两位数字,就像0XFFFF分成,0XFF,0XFF,因为数值位有4位,便于CRC函数校验数组,然后依次将数存入数组,然后扔给CRC校验函数即可,获得CRC的值,然后依次发给电机即可,反转就传入负数,取反加一即可
1 | void run(u16 Left,u16 Right)// |
有了底层实现,加减速与普通代码实现就类似,建议传输的间隔小一点,与普通直流电机相比,内部会闭环控制,当你给定一个速度时,电机会立马到达这个速度,导致电机加减速时一震一震的,还有个方法,修改其内部加速度。
YZ-AIM上位机
对于打开串口,软件不能自动识别已经连接了哪个串口,打开设备管理器或者一个个试下去,然后不能开太久,软件会自己崩掉。
电机连接RS485转USB连接电脑并且上电,打开串口,左下出现数值,先modbus使能电机,改为速度模式,将特殊参数改为3(速度模式对应的值)。根据实际情况,修改下电机内部的pid的值。完成一系列操作后,最后将参数保存,将其置2。