• 头条基于DSP的CAN总线通信的设计与实现
    2020-10-27 作者:李璐、张宏川 等  |  来源:《电气技术》  |  点击率:
    分享到:
    导语本文介绍了TMS320F2812的eCAN模块与TMS320LF2407的CAN模块之间通信以及两者与广州致远的CAN-USB I智能接口卡之间通信时CAN控制器的硬件电路设计及应用方法。利用该方法可以在波特率高达1Mbps的条件下可靠、稳定地传输数据,而且时间延时很小。在双PWM变频调速系统中的应用结果表明了该方法的可行性。

    1 引言

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

    许多微处理器都将CAN控制器嵌入到系统中,成为片上的微处理器,TI公司推出的TMS320F2812和TMS320LF2407就在其中。这种结构成本低、运行稳定、功能完备,是一种很有前途的CAN通信系统组成方案。

    上述两种DSP上的CAN模块有所不同,TMS320F2812 DSP片上的增强型CAN控制器eCAN模块,其性能比TMS320LF2407 DSP内嵌CAN控制器有较大的改进。

    本文主要介绍TMS320F2812的eCAN模块与TMS320LF2407 的CAN模块之间通信以及两者与广州致远的CAN-USB I智能接口卡之间通信时CAN控制器的硬件电路以及软件设计,同时对程序运行结果进行了分析,实验证明了这种通信方式的可行性,并在双PWM变频调速系统中得到了应用。

    2 CAN节点通信设计

    TMS320F2812的eCAN模块与TMS320LF2407的CAN模块之间通信以及两者与广州致远的CAN-USB I智能接口卡之间的连接示意图如图1所示。由于TMS320F2812和TMS320LF2407上的CAN模块集成了CAN控制器,提供了完整的CAN协议,因此图1中 的TMS320F2812的eCAN模块与TMS320LF2407的CAN模块之间的通信仅需收发装置即可。两者与上位机的通信则通过CAN-USB I智能接口卡。

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

    图1 通讯电路连接示意图

    2.1 CAN节点的硬件设计

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

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

    图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节点的软件设计

    本文主要讨论下位机的程序。TMS320F2812的eCAN模块的邮箱0为发送邮箱,邮箱16为接收邮箱。TMS320LF2407的CAN模块的邮箱3为发送邮箱,邮箱2为接收邮箱。

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

    2.2.1 主程序

    图3为主程序流程图。主程序如下:

    void main(void)

    {

    InitSysCtrl(); //初始化系统

    /*关中断*/

    DINT;

    IER = 0x0000;

    IFR = 0x0000;

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

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

    /*使能PIE中断*/

    PieCtrl.PIEIER9.bit.INTx5 = 1;

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

    EINT; //开全局中断

    ERTM; //开实时中断

    for(;;){}

    }

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

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

    图3 主程序流程图

    2.2.2 初始化程序

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

    基于DSP的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分别对应TMS320F2812的MDRH的低8位和高8位数据。

    程序如下:

    int32 i=0;

    int32 j=1;

    int32 MessageSendCount=0;

    i++; //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;

    MessageSendCount++; //发送次数

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

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

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

    从图5中可以看出,当程序停止时当i和j分别为10000和10001,此时 TMS320F2812的邮箱0的MDRL和MDRH发送的数据分别为10000和10001,与变量i和j的值对应相等,同时MessageSendCount为10000,说明程序运行了10000次。

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

    图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模块的接收程序正确。

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

    图7 上位机的接收界面

    从图7中可以看到,上位机收到的数据的序列号为10000,说明收到了10000个数据,数据的帧ID为0x00000000,帧类型为标准帧,与TMS320F2812的发送邮箱0的帧ID和帧类型相同。上位机收到的数据一组为从0到2710,另一组为0到2711,是十六进制的数据,转换成十进制为0到10000和0到10001,对应TMS320F2812的MDRL和MDRH中的数据。

    2.2.4 数据接收程序

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

    interrupt void ECAN0INTA_ISR(void)

    {

    while(ECanaRegs.CANRMP.all!=

    0x00010000 ) ;

    ECanaRegs.CANRMP.all = 0x00010000;

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

    R_l = ECanaMboxes.MBOX16.MDRL.all;

    R_h = ECanaMboxes.MBOX16.MDRH.all;

    MessageReceiveCount++; //接收次数

    PieCtrl.PIEACK.bit.ACK9 = 1;

    /*CAN的发送程序*/

    ......

    EINT;

    }

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

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

    图8为双PWM异步电机变频调速系统结构框图。整流部分和逆变部分分别由TMS320F2812 DSP和TMS320LF2407 DSP控制。控制过程中,整流部分和逆变部分要进行数据传输,即两片DSP之间需要数据通信。本文采用两片DSP上自带的CAN模块进行通信。此外,两片DSP还需要与上位机进行通信。其硬件和软件设计如第二节所示。

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

    图8 双PWM异步电机变频调速系统结构框图

    4 结束语

    本文介绍的TMS320F2812的eCAN模块与TMS320LF2407 的CAN模块之间通信以及两者与上位机之间的双向通信的硬件结构简单,软件实现方便。在双PWM变频调速系统中程序运行的结果,证明了这种通信方式的可行性。

    (编自《电气技术》,作者为李璐、张宏川 等。)