TMS320F280049C 学习笔记23 CAN入门

时间:2024-04-07 22:54:23


第一次调试CAN通信,记录一些入门信息。本文只讨论最基本的数据收发功能,远程帧、错误帧等高级功能未来再学习。
推荐资料[1],第16章讲述了CAN的基础知识,适合入门。
自己的硬件电路使用了恩智浦的TJA1057T,收发器使用了USBCAN-II C。还使用了具有CAN解码功能的示波器。

基础知识

CAN总线上的信号使用差分电压进行传送。两条信号线分别被称为CAN_H和CAN_L,静态时均为2.5V,这时的状态表示为逻辑“1”,也称隐性电平;用CAN_H的电平比CAN_L的电平高的状态表示逻辑“0”,称为显性电平,此时CAN_H的电平通常为3.5V,CAN_L的电平为1.5V。

自发自收

首先使用CAN收发器的自发自收模式进行调试,这里将波特率设置为1000K,也即1M。
TMS320F280049C 学习笔记23 CAN入门
将示波器的探头的参考地接在CAN_L,探针接在CAN_H,开启示波器解码模式,设置总线类型为CAN_DIFF(差分信号)。注意示波器将波特率也设置为1000K。示波器探测到的信号如下:

TMS320F280049C 学习笔记23 CAN入门
DLC位附近的细节如下图:
TMS320F280049C 学习笔记23 CAN入门
注意一次只能发送0~8个字节的数据,也即DLC的取值是0-8。上图的示例是发送3个字节。
接下来测试TJA1057T的工作状况,接收同样的信号,测量芯片的4号引脚RXD。
由于芯片将信号逻辑取反,所以这里开启示波器探头的反向功能,示波器就可以正确解码了。由于开启反向,所以下图中电平读数变为负值,真实值是逻辑相反的正值。
TMS320F280049C 学习笔记23 CAN入门
至此,基本确定接收信号回路的硬件没有问题。

使用Simulink代码生成技术调试

接下来配置软件,确保可以和上位机完成通讯。由于对代码生成技术较为熟悉,这里用此方法调试。
首先配置引脚,波特率配置为1000k
TMS320F280049C 学习笔记23 CAN入门
配置硬件中断,根据手册,使用CANA_0中断。(选择其他CAN中断也可以)
TMS320F280049C 学习笔记23 CAN入门
TMS320F280049C 学习笔记23 CAN入门
配置的模型如下图所示,帧地址默认值是455,对应二进制111000111,对应十六进制1C7。帧地址也可以设定为其他值。
由于一帧可以发送0-8个字节,所以CAN模块的输出默认直接设定为8个字节,如果接收值不足8字节,则自动补0。
个人比较习惯使用一个uint8的信号控制DSP,所以后接8选1模块。如果使用uint16,则后接4选1模块;使用uint32,后接2选1模块。
在RCV模块中还要配置中断,与前文一致,使用CANA_0。
TMS320F280049C 学习笔记23 CAN入门
上位机的帧地址也要配置为455,提示输入十六进制,所以设置为1C7。
TMS320F280049C 学习笔记23 CAN入门
又上图也可以看到,上位机可以收到DSP回送的信号,不足的数据位自动补0。
至此,CAN的硬件回路调试完毕。

示例代码小结

也可以使用C语言编程来测试系统,TI一共提供了4个例程,位置在C:\ti\C2000Ware_DigitalPower_SDK_3_00_00_00\c2000ware\driverlib\f28004x\examples\can
推荐学习的例程是can_ex3_external_transmit 使用同时启用CANA和CANB两个模块,使用中断进行通信,稍加修改就可以形成自己的代码。

参考文献

  1. 《手把手教你学dsp2812》