拓达TSDA-C21B, 通过单片机CAN通信发送命令控制电机转向

本文详细介绍了从使用串口通信控制电机转向到改用CAN通信的过程,分析了串口通信的局限性和CAN通信的优势。在理解CAN通信原理后,作者针对拓达TSDA-C21B驱动器的CAN命令格式,修改了程序以适应驱动器的要求,最终实现了通过CAN通信精确控制电机转向。在实践中遇到了CAN通信的数据帧格式问题,通过调整解决了数据接收不匹配的难题。

拓达TSDA-C21B, 通过单片机CAN通信发送命令控制电机转向

上篇链接: 拓达TSDA-C21B,通过单片机串口发命令控制电机转向.

一、串口通信的不足之处

上篇博客中,我们用单片机的串口对驱动器进行了控制。串口控制的优点是 相对简单,廉价,对于任意的单片机都提供串口,入门单片机必学串口,而且串口的操作也是比较简单,学习成本比较低(有基础甚至不用学习😁))。
至于缺点,先来看看这个驱动器提供的串口发命令的格式
在这里插入图片描述
串口 控制的方式 需要延时 (此处是一帧数据之间需要延时10ms,每帧数据之间又需要延时10ms, 所以一帧数据至少需要延时20ms!!),对于一些精读要求较高而且发命令较频繁的场合,这非常致命,而且一般串口的最大波特率为 115200,大概100K (bit/s)。串口本身发命令的速度也不快。

二、CAN通信控制优势

咨询过拓达的工程师这个问题之后我们,了解到 CAN通信的速度快很多。

先来分析一下CAN通信为什么要快:
1、从数据手册上我们知道 CAN通信,每帧数据之间不需要延时,基于缓存的收数据方式,每帧之间也不需要延时。
2、CAN通信本身的速度就很快最快能 1000K (bit/s)是串口通信最大传输速度的十倍左右!!

至于用 CAN通信进行控制的缺点,主要是 CAN通信控制的技术门槛相对高一些,CAN总线偏向工业控制,平常学习单片机开发中少有涉及。 而且 CAN通信需要驱动芯片支持, CAN芯片相对较贵。网上资料也较少。

三、CAN通信实现电机的转向角度控制原理分析

由上面的图和 阅读数据手册可以知道 CAN通信发送命令的格式和 串口发送数据的格式类似。(这里就不做详细的分析说明了,看不懂数据手册的可以从串口命令看是看,可以去看 上一篇 串口通信控制的软件设计部分。)
我们只需要写数据给驱动器,所以只关注下面的信息
在这里插入图片描述
发命令的格式:
ID + 从机组号 + 功能码+ 寄存器数据 1地址 + 数据内容1高8位 + 数据内容1低8位 + 寄存器数据 2地址 + 数据内容2高8位 + 数据内容2低8位。

在这里插入图片描述
电机启动与停止 发命令的格式
在这里插入图片描述
这部分和串口发命令格式一样,在 0x50地址处发高16位数据,在 0x05地址处发低 16位地址,只是 CAN通信没有检验位
在这里插入图片描述
位置模式下绝对模式和相对模式的控制命令和 速度限幅的控制命令。(由上图可知,如果不设置的话默认为绝对模式,看它写入的值 0x00 0x00可知)

在这里插入图片描述
接上面位置模式速度限幅的命令的16位数据对应速度的转速, 实际转速 = 写入值(16位数据的大小)/8192 x 3000 RPM。

四、CAN通信控制电机转向的程序设计

1、先用单片机测试CAN通信
(1)、硬件环境搭建

两个带CAN模块的STM32单片机、仿真器、USB线、串口调试助手、杜邦线若干
在这里插入图片描述

(2)、软件设计

软件设计思路:先用两个单片机进行 CAN通信,一个单片机写发送 CAN命令程序,另一个单片机写接收程序 模拟驱动器内的 CAN设备的接收。确保硬件没问题。通过串口观察收到的数据。收发数据与数据手册上的描述无误之后再到驱动器上去测试。

CAN 主机的程序设计:
根据 CAN发命令的格式可知,发CAN命令和串口命令类似,都是将32位的数据分成高16位和低16位发送,并且高16位数据也要分高8低8发送。
CAN发送的格式为:
ID + 从机组号 + 功能码 + 寄存器1地址 + 数据高8位 + 数据低8位 + 寄存器2地址 + 数据高8位 + 数据低8位 我们设置从机ID 为0x01,组号为 0, 功能码为点对点写指令 0x1a, 寄存器1位高16位地址 0x50,寄存器2为低16位地址。发送命令的格式可以简化为:
0x01 + 0 + 0x1a+ 0x50 + 32位数据高16位的高8位 + 32位数据高16位的低8位 +0x05 + 32位数据低16位的高8位 + 32位数据低16位的低8位

参考 串口通信代码的格式,所以我很快总结写出以下代码:
如果你没有CAN通信的驱动程序,可以点击此处下载

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值