1. 首页 > 快讯

基于DSP的CAN总线通信设计与实现

1 引言

CAN总线是一种支持分布式控制和实时控制的串行通信网络。由于其独特的设计理念和高可靠性,具有较高的通讯速率和较强的抗干扰能力,可以作为现场总线用于电磁噪声比较大的场合。 CAN总线已成为最有前途的现场总线之一。

许多微处理器将CAN控制器嵌入到系统中,成为片上微处理器。 TI推出的TMS320F2812和TMS320LF2407就是其中之一。这种结构成本低、运行稳定、功能齐全。这是一种很有前景的CAN通信系统解决方案。

上述两种DSP上的CAN模块是不同的。 TMS320F2812 DSP 芯片上的增强型CAN 控制器eCAN 模块比TMS320LF2407 DSP 的嵌入式CAN 控制器具有更高的性能。

2 CAN节点通信设计

TMS320F2812 的eCAN 模块与TMS320LF2407 的CAN 模块的通信示意图以及两者与广州致远CAN-USB I 智能接口卡的连接示意图如图1 所示。 TMS320LF2407集成CAN控制器并提供完整的CAN协议,图1中TMS320F2812的eCAN模块与TMS320LF2407的CAN模块之间的通信仅需要收发器器件。两者与上位机的通信是通过CAN-USB I智能接口卡进行的。

图1 通讯电路连接示意图

2.1 CAN节点硬件设计

硬件结构图如图2所示。该硬件结构主要实现TMS320F2812与TMS320LF2407之间的通信以及两者与上位机的通信。

图2 CAN节点硬件结构图

考虑到TMS320F2812和TMS320LF2407之间数据传输的电平匹配问题,TMS320F2812和TMS320LF2407均采用PHLIIP公司的PCA82C250作为CAN收发器。它可以提供CAN总线的差分发送能力和CAN控制器的差分接收能力。采用差分电压传输信号;两条信号线称为CAN总线(CAN_H和CAN_L),收发器的RS端接地。为了实现高速传输,可以在CAN_H和CAN_L之间连接一个120欧姆的电阻作为终端匹配电阻。

TMS320F2812的CANTXD和CANRXD输出的高电平信号为3.3V,而PCA82C250需要5V供电,因此收发器与TMS320F2812之间增加高速光耦6N137,实现电平匹配,并将TMS320F2812与CAN总线隔离。功能,从而保护TMS320F2812。 TMS320LF2407的电路连接原理相同。当TMS320F2812和TMS320LF2407与上位机通信采用CAN总线时,只需添加一条CAN-USB I.

2.2 CAN节点软件设计

虽然MS320F2812的eCAN模块和TMS320LF2407的CAN模块不同,但是两者的CAN寄存器(都有的寄存器)在结构和功能上是相同的,所以即使代码不完全兼容,移植起来也非常容易。简单的。 CAN节点的软件设计主要分为三部分:初始化程序、数据发送程序、数据接收程序。这三部分程序的基本流程大致相同,因此下面仅介绍TMS320F2812的eCAN模块的程序。

2.2.1 主程序

图3是主程序流程图。主要程序如下:

无效主(无效)

{

InitSysCtrl(); //初始化系统

/*关闭中断*/

DINT;

IER=0x0000;

IFR=0x0000;

InitPieCtrl(); //初始化PIE中断

InitPieVectTable(); //初始化PIE中断向量表InitECan(); //初始化CAN寄存器

/*使能PIE中断*/

PieCtrl.PIEIER9.bit.INTx5=1;

基于DSP的CAN总线通信设计与实现

IER |=M_INT9; //使能CPU中断

EINT; //使能全局中断

ERTM; //启用实时中断

为了(;){}

}

该程序中的InitSysCtrl()是系统初始化程序,同时设置系统时钟。本程序选择系统时钟为120MHZ,CAN时钟等于系统时钟。 InitEcan() 是初始化CAN 寄存器的子程序。 for(;)是一个等待CAN接收中断的循环。一旦TMS320F2812成功接收到TMS320LF2407或上位机发送的数据,立即进入中断程序,读取邮箱中的数据。 CAN发送程序写在CAN接收中断程序中,用于向上位机发送需要的数据。

图3 主程序流程图

2.2.2 初始化流程

初始化程序一般是CAN模块的初始化。在双PWM系统中,TMS320F2812需要接收TMS320LF2407发送的数据并将数据发送给上位机,因此邮箱的初始化也写在CAN初始化程序中,发送和接收初始化程序写在CAN初始化程序中。相同的程序。中间。这样可以避免重复初始化两个邮箱所使用的寄存器并简化程序。具体流程图如下:

图4 初始化流程图

本程序采用查询方式发送,中断方式接收,因此初始化流程图中还包括中断相关的设置。

2.2.3 数据发送流程

TMS320F2812 中的每个邮箱都是64 位,分为两个32 位邮箱消息数据低位寄存器(MDRL)和高位寄存器(MDRH)。程序中设置邮箱0为发送邮箱,变量i和j分别赋值给邮箱0的MDRL和MDRH,标准帧ID为0x00000000。

TMS320LF2407 CAN 中的每个邮箱有4 个16 位存储空间,分别是MBXnA、MBXnB、MBXnC 和MBXnD。在TMS320LF2407的接收程序中,设置邮箱2为接收邮箱。同时也设置MBXnA和MBXnB分别对应TMS320F2812的MDRL的低8位和高8位数据,MBXnC和MBXnD分别对应低8位和高8位数据TMS320F2812 的MDRH。

程序如下:

int32 i=0;

int32 j=1;

int32 消息发送计数=0;

我++; //i 自增1

j++; //j 自增1

ECanaShadow.CANME.all;

ECanaRegs.CANTRS.all=0x00000001;

while(ECanaRegs.CANTA.all==0);

ECanaRegs.CANTA.all=0x00000001;

ECanaMboxes.MBOX0.MDRL.all=i;

ECanaMboxes.MBOX0.MDRH.all=j;

消息发送计数++; //发送次数

基于DSP的CAN总线通信设计与实现

发送程序结果如图5-图7所示:

图5 CCS3.3变量窗口显示TMS320F2812邮箱0的发送状态

从图5可以看出,当程序停止时,i和j分别为10000和10001时,TMS320F2812的邮箱0的MDRL和MDRH发送的数据分别为10000和10001,分别等于变量i 和j。MessageSendCount为10,000,表示程序已运行10,000次。

图6 CCS2000变量窗口显示邮箱2的接收状态

从图6可以看出,TMS320LF2407的邮箱2的MBX2A和MBX2B分别为10000和0,对应图5中TMS320F2812的MDRL的低8位和高8位。MBX2C和MBX2D分别为10001和0,对应图5中TMS320F2812的MDRH的低8位和高8位。同时接收数量RXCOUNT为10000,与TMS320F2812的发送数量相等。说明TMS320LF2407的CAN模块的接收程序是正确的。

图7 上位机接收接口

从图7中可以看出,上位机接收到的数据的序号为10000,表示已接收到10000条数据。数据的帧ID为0x00000000,帧类型为标准帧,与TMS320F2812的发送邮箱0的帧ID相同。帧类型相同。上位机接收到的一组数据为02710,另一组数据为02711。为十六进制数据,转换成十进制的010000和010001,对应TMS320F2812的MDRL和MDRH。数据。

2.2.4 数据接收流程

中断子程序的功能是一旦接收到TMS320LF2407或上位机发送的数据,产生接收中断,进入中断子程序,将接收到的数据读入变量R_l和R_h。具体接收流程如下:

中断无效ECAN0INTA_ISR(void)

{

而(ECanaRegs.CANRMP.all!=

0x00010000);

ECanaRegs.CANRMP.all=0x00010000;

/*接收到的数据在接收邮箱Mbox16中*/

R_l=ECanaMboxes.MBOX16.MDRL.all;

R_h=ECanaMboxes.MBOX16.MDRH.all;

消息接收计数++; //接收次数

PieCtrl.PIEACK.bit.ACK9=1;

/*CAN发送程序*/

.

EINT;

}

由于篇幅限制,不再给出接收程序的运行结果。

3 CAN模块通信在双PWM变频调速系统中的应用

用户评论

荒野情趣

基于DSP做的CAN总线通信还挺酷!

    有16位网友表示赞同!

巷口酒肆

这个技术看起来很有前途啊。以后汽车电子系统越来越依赖CAN总线了。

    有16位网友表示赞同!

落花忆梦

看标题就是学术论文类型,我猜能学到不少专业知识。

    有12位网友表示赞同!

醉枫染墨

想了解一下DSP如何处理CAN总线的复杂数据?

    有15位网友表示赞同!

海盟山誓总是赊

基于DSP的CAN通信比传统的MCU方案更灵活吗?

    有12位网友表示赞同!

淡淡の清香

希望这篇文章能详细介绍设计过程和实现步骤,我好参考下

    有11位网友表示赞同!

颓废人士

我正在学习DSP,这篇文章正好可以帮我理解CAN总线方面的应用。

    有11位网友表示赞同!

迷路的男人

对汽车行业来说,这个技术意义很大!

    有19位网友表示赞同!

在哪跌倒こ就在哪躺下

看样子很专业啊,等我稍微了解一点知识后再看吧。

    有14位网友表示赞同!

封锁感觉

是不是很复杂?

    有16位网友表示赞同!

。婞褔vīp

DSP处理起来更方便高效吗?

    有6位网友表示赞同!

屌国女农

学习一下基于DSP的CAN总线这方面的知识,以后在工作中应该派上用场!

    有7位网友表示赞同!

苍白的笑〃

对嵌入式系统比较感兴趣,想了解一下DSP和CAN总线的应用场景。

    有15位网友表示赞同!

玻璃渣子

CAN通信真的非常重要,希望这篇文章能深入探讨其应用模型。

    有15位网友表示赞同!

寂莫

基于DSP的CAN总线通信设计更加安全可靠吗?

    有12位网友表示赞同!

夜晟洛

这种技术可以应用到哪些领域?汽车以外还有吗?

    有16位网友表示赞同!

涐们的幸福像流星丶

我比较想知道具体设计的方案和实现方法,这篇文章能讲得详细一点吗?

    有15位网友表示赞同!

该用户已上天

对DSP的处理能力很感興趣!

    有14位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/5928.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666