《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于TMS320F2812和USB100的CAN-USB总线通信系统设计
基于TMS320F2812和USB100的CAN-USB总线通信系统设计
电子元器件应用
叶成,刘晓刚,刘春生
摘要: 摘要:介绍了一种基于DSP的CAN控制器和USB芯片的USB总线和CAN总线的通信模块的设计,提出了一种使用USB接口实现CAN总线网络与计算机连接的方案。利用USB100芯片可在不了解任何USB协议的情况下,完成计算机RS232串口
关键词: DSP CAN USB TMS320F2812
Abstract:
Key words :

摘要:介绍了一种基于DSPCAN控制器和USB芯片的USB总线和CAN总线的通信模块的设计,提出了一种使用USB接口实现CAN总线网络与计算机连接的方案。利用USB100芯片可在不了解任何USB协议的情况下,完成计算机RS 232串口升级为USB接口,同时CAN接口采用DSP片上CAN控制器,硬件设计极为简单。在DSP的控制下,PC机与CAN节点可以双向通信,通信波特率可高达1 Mb/s,传输数据稳定,可靠。实验证明,运用TMS320F2812片上eCAN模块来构成CAN总线通信系统更为简单,实用。
关键词:USB;CAN总线;eCAN;TMS320F2812

0 引言
    随着计算机技术的飞速发展,全电子的计算机连锁控制系统由上位机,联锁机和智能执行单元三层结构组成。本文所介绍的模块正是在此背景下为数据通信进行服务的。CAN总线是目前为止唯一有国际标准的现场总线,由于采用了许多新技术及独特的设计,与一般的通信总线相比,它的数据通信具有突出的可靠性,实时性和灵活性,其应用范围目前已不再局限于最初的汽车行业,而扩展到了机械工业包括数控机床,医疗器械,家用电器等领域。USB接口速度快、连线简单和即插即用的特性是与上位机通讯非常好的外设接口。因此,基于USB接口实现CAN总线与PC机之间数据通信的研究具有一定的应用意义。

1 系统结构
    本系统主要是由USB接口和CAN接口等模块组成,其中微处理器TMS320F2812控制全局,实现通过USB接口将CAN总线数据传送给PC机,以及通过USB接口将PC机数据传送给CAN节点的双向通信功能。传统的CAN总线通信模块一般要用到独立的CAN控制器芯片,本系统微处理器F2812片上带有eCAN模块,设计时较为方便,下面简要介绍eCAN模块。
    eCAN模块是TMS320F2812 DSP片上的增强型CAN控制器,其性能较之已有的DSP内嵌CAN控制器有较大的提高,数据传输更加灵活方便,数据量更大、可靠性更高、功能更加完备。eCAN模块它完全兼容CAN2.0B协议,可以在有干扰的环境里使用上述协议与其他控制器串行通信。除具有一般DSP内嵌CAN控制器的所有功能外,与TMS320LF240x系列DSP的CAN模块相比,它主要具有如下的一些增强特性:增加了邮箱数量,多达32个;eCAN是一个32位的高级CAN控制器;具有时间标识;具有超时功能。
    以上这些增强特性使得TMS320F2812进行CAN通信时,传输更加方便灵活、数据量更大、功能更完备。图1为系统结构图。

1.JPG



2 系统硬件设计
2.1 USB模块的硬件设计
    本系统USB接口模块采用USB100模块作为主控芯片。USB100模块是USB通用设备接口芯片,具有8位数据总线接口,内部多达384 B的发送缓冲区和128 B的接收缓冲区,数据通信速率最高可达8 Mb/s,USB100模块读写数据分别由RD和WR2个引脚控制,相当于有读写2个地址,因此将这两个地址映射到F2812外设接口的区域xzcs01中,0x2000作为写地址,0x4000作为读地址,通过XA13,XA14,XZCS01,XWE,XRD5个管脚进行译码,即可方便地控制USB模块的数据收发。选用altera公司的CPLD芯片EPM7032作为译码器件,可以进行在系统编程操作,其中上述5个管脚作为CPLD的输入引脚,CPLD2个输出引脚分别接至USB100模块的RD和WR两个引脚。由于USB100模块是5 V供电,F2812是3.3 V供电,所以8位数据总线通过电平转换器件741vc4245相连,数据方向由F2812的XR/W控制。根据USB100模块时序图,当F2812检测到USB100模块TXE引脚为低时,表示内部发送缓冲区允许发送数据到USB端口,可以将数据通过八位总线发给USB100模块;当F2812检测到USB100模块RXF为低时,表示内部发送缓冲区有来自USB端口的数据。
2.2 eCAN模块应用设计
    由于采用TMS320F2812片上增强型控制器eCAN,所以CAN模块硬件电路极为简单,只需将F2812的RX和TX引脚经过电平转换器件连接至CAN收发器PCA82C250的TXD和RXD引脚,并以F2812作为CAN总线系统的微处理器,进行实时数据收发。其硬件系统分为2层:第一层,CAN总线与F2812接口层;第二层,F2812与外围器件的信息处理。CAN收发器采用低廉的PCA82C250,系统的扩展性强,至少可连接110个节点,其引脚8(Rs)用于选择工作模式,高速工作时上接一个斜率电阻,根据总线通信速度可适当调整,一般在16~140 Kb/s之间。

3 系统软件设计
3.1 DSP程序设计
    本系统中,微处理器TMS320F2812主要完成2个功能:一是对eCAN控制器进行初始化;二是完成上位机USB接口和下位机CAN接口的数据通信。USB接口通信通过查询USB100的TXE和RXF引脚的状态来完成上位机与微处理器F2812的数据交换,CAN接口的通信主要包括eCAN模块的消息发送和接收。
    F2812上电复位后,必须对软件进行初始化,其中最重要的是对eCAN模块初始化。消息发送时,需要初始化发送邮箱,包括向寄存器CANME使能相应邮箱、设置CANMD方向、通过MBOXn.MSGID(n=O~31)设置发送邮箱的ID等操作,初始化后向消息数据寄存器ECanaMboxes.Mboxn.MDR写入上位机USB接口发送的数据,然后设置EcanaRegs.CANTRS.bit.TRSn为1请求发送消息,等待传输响应位TA=1,表示消息成功发送,并产生发送中断,本系统通过发送中断子程序统计发送消息个数。消息接收时,同样需要初始化相应的接收邮箱,完成初始化后,当下位机通过CAN接口发送数据时,如果eCAN模块的接收邮箱的ID与下位机消息的ID匹配,并成功接收,则相应的接收消息挂起寄存器(CANRMP)的相应位被置1;若CPU开放了eCAN接收中断,则同时也产生接收消息中断,在接收中断子程序,可以将相应的消息数据寄存器的内容发给USB100模块的写地址,同时需要查询USB100的TXE端是否允许向USB端口发送数据。
    上位机通过USB接口发送数据,下位机通过CAN接口接收数据基本步骤为:
    (1)F2812初始化通用IO口以及eCAN控制器;
    (2)F2812检测USB模块是否有来自上位机的数据;
    (3)若有,将数据读入配置好的eCAN发送邮箱;
    (4)启动配置好的eCAN发送邮箱;
    (5)当邮箱发送消息给下位机成功后,会进入eCAN发送中断程序;
    (6)清除相应标志后退出中断程序,继续等待上位机发送数据。
    上位机通过USB接口接收数据,下位机通过CAN接口发送数据基本步骤为:
    (1)F2812初始化通用IO口以及eCAN控制器;
    (2)当下位机通过CAN接口发送数据时,根据邮箱标识符,已配置好的eCAN接收邮箱收到下位机数据,同时进入eCAN接收中断子程序;
    (3)F2812检测USB模块内部缓冲区是否允许向上位机发送数据,若禁止,则等待;
    (4)若允许向上位机发送数据,则将数据写入上位机;
    (5)清除相应标志后退出中断程序,继续等待下位机发送数据。图2为系统软件流程图。

2.JPG


3.2 上位机软件编写
    采用NI公司的LABWINDOWS/CVI8.0进行上位机控制界面设计,实现通过PC机发送和接收CAN总线系统的数据的功能。
    由于USB100模块将USB接口虚拟成了RS 232标准的串口,程序要实现的任务是调用WINDOWS下串口函数,使得用户在CVI的界面下完成PC机数据的收发。该系统与PC机之间的通信主要通过调用LABWINDOWS/CVI函数库中提供的RS 232函数库,这几个函数在设计驱动程序中具体实现。主要的函数有:配置串口函数:int OpenComConfig(int COMPort,char deviceName[],long baudRate,int parity,int dataBits,int stopBits,int inputQueueSize,int outputQueueSize);将字节写入指定端口函数:int ComWrt(int COMPort,char buffer[],int count);从指定端口读入字节函数:int ComRd(int COMPort,char buffer[],int count);在PC机上通过相应控件启动相应端口函数,使得数据通过USB接口发送。

4 通信测试
    系统测试时,利用CAN调试器作为一个CAN节点,并利用调试器自带的调试软件在下位机上显示。
    首先,进行上位机通过USB接口发送数据,下位机通过CAN接口接收数据实验,CAN节点设置为扩展帧,帧格式为数据帧,帧ID为0x000000 82,下位机CAN调试软件以十六进制接收数据,发送的是字符‘1’、‘2’、‘3’、‘4’、‘5’,下位机接收到的是对应的ASCII码值0x31~0x35,以十六进制显示。
    然后,进行下位机通过CAN接口发送数据,上位机通过USB口接收数据实验,CAN节点设置不变,发送的数据是0x31~0x35五个数据,上位机收到的是‘1’~‘5’五个字符。具体测试界面见图3和图4。

3.JPG



5 结语
    设计了一套USB-CAN总线通信模块,其中CAN控制器特别的使用了F2812内嵌eCAN模块,在实际应用中,该通信部分能有效,及时的与系统其他节点进行通信,较为有效地将DSP的高速处理能力和CAN总线的优良特性结合起来,并且硬件电路设计更为简单实用,采用C语言编程,提高了程序的可维护性,大大缩短了研发周期。

此内容为AET网站原创,未经授权禁止转载。