访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
TMS320C24x DSP控制器上的CAN控制器
内容导读:


摘 要:德州仪器(TI)的TMS320F241、TMS320C241及TMS320F243数字信号处理器(DSP)控制器包括片上控制器局域网(CAN)模块。该模块是一种FullCAN控制器(规范2.0B)。该应用报告将介绍TMS320X241/3CAN模块,其中也包括了针对片上CAN模块不同操作模式的软件示例,及采用CAN总线控制三相感应马达速度的应用示例。

TMS320X241/TMS320F243CAN模块
---关于CAN
 ---控制器区域网(CAN)是一种多主控串行总线,其使用广播向所有CAN节点发送消息。CAN协议比其他通信协议更具优势。举例而言,CAN协议提供了很好的性价比。它可实现快速的数据传输速度(高达1Mbps),可实施于实时系统。此外,数据可靠性高,错误检测功能成熟且强大可靠。CAN也非常灵活,可以进行热插拔。
---CAN协议不是用物理地址与节点联系,而是发送带有标志符的消息(message),这样不同的节点可通过标志符辨认消息。标志符由两个功能:既可用于消息过滤,又可用于确定消息优先级。ID决定所发送的消息是否将由特定的CAN模块接收,当两个或更多节点需要同时发送消息时还可决定消息的优先级。
---DSP控制器需要连接至CAN总线上的收发器。CAN总线由双绞线制成。传输速率取决于总线长度。就总线低于40m的情况而言,传输速率高达1Mbps。DSP控制器可连接至SN75LBC031、TPIC8233及TPIC82501TI CAN收发器。
---CAN消息帧有以下不同类型:CAN数据帧从发送器向一个或多个接收机发送数据(0~8字节);CAN远程帧用于请求与指定标志符相关的数据帧的发送。帧可为标准帧或扩展帧。标准帧包括11位ID,而扩展帧包括29位ID。
---TMS320C241、TMS320F241及TMS320F243 CAN模块
---TMS320x241与TMS320F243 CAN模块是FullCAN控制器。它包括用于发送与接收管理及帧存储的信息处理程序,而且所需的CPU开销比BasicCAN控制器小。规范为CAN2.0B Active,也就是说模块可收发标准帧(11位标志符)及扩展帧(29位标志符)。
---外置为16位。控制/状态寄存器及CAN邮箱的存取(access)也均为16位。
---控制器有6个用于0~8字节数据长度对象的邮箱:
---两个接收邮箱(邮箱0与1)
---两个发送邮箱(邮箱4与5)
---两个可配置发送/接收邮箱(邮箱2与3)
---CAN模块包括15个不同的16位寄存器:
---● 控制寄存器
---MDER:邮箱方向(Direction)/启用寄存器,启用或禁用邮箱并进行邮箱2与3的配置
---TCR:用于发送消息的发送控制寄存器
---RCR:用于接收消息的接收控制寄存器
---MCR:主控制寄存器,用于更改位时序(timing)配置,例如写入CAN RAM或在自检模式中配置芯片
---BCR1与BCR2:配置位定时的位配置寄存器
---● 状态寄存器
---ESR:用于显示错误的错误状态寄存器
---GRS:全局状态寄存器(Global Status Register)
---CEC:CAN错误计数寄存器
---● 中断寄存器
---IFR:中断标志寄存器
---IMR:中断屏蔽寄存器
---● 本地接收屏蔽寄存器
---LAM0H与LAM0L:针对邮箱0与1的本地接收屏蔽寄存器
---LAM1H与LAM1L:针对邮箱2与3的本地接收屏蔽寄存器
---上述寄存器位于数据存储器中,地址从0x7100h到0x710Fh(见图4)。
---CAN模块包括6个邮箱,每个邮箱都分为以下几部分:
---● MSGIDL与MSIDH包括邮箱标志符。
---● MSGCTRL(消息控制字段)包括待收发的消息长度及RTR位(用于发送远程帧的远程发送请求)。
---● DATA_A到DATA_D包括数据。数据分为4个字或8字节。

不同的操作模式
 ---初始化CAN模块
---如欲使用CAN模块,CAN寄存器及CANRAM必须进行初始化。
---位定时与同步
---标称位时间在CAN总线的每个节点上均可编程,且在每个节点上必须相等。任何节点接收帧时,接收机都必须与发送器同步。共有两种同步类型:
---硬同步:当接收到帧起始时
---再同步:用于补偿发送器与接收机振荡器之间的振荡频率漂移与相位差。TSEG1可延长,而TSEG2可缩短,以进行采样点位置移动,最大量为SJW(同步跳宽(jump width))。
---SYNCSEG:用于实现总线上节点同步的分段(segment)。段中将出现位边缘(bit edge)。
---PROPSEG:用于补偿网络中物理延迟时间的时段。
---标称位时间除以时间量得到:
---1位时间=(TSEG1+TSEG2+1)*Length_of_1_time_quantum
---Length_of_time_quantum=(BRP+1)/ICLK
---BRP=波特率预定标器
---ICLK=时钟频率=20MHz
---因此,就传输速率为1Mbps(位长=1ms)的情况而言,以下为正确设置:
---BRP=0TSEG1=5且TSEG2=4
---BRP=1TSEG1=12且TSEG2=7
---用户可对上述参数进行配置(在BCR寄存器中)。
---说明:1)BRP:波特率预定标器
---2)SBG:下降沿同步
---3)SJW:同步跳宽(jump width)
---4)SAM:采样点设置
---如欲更改位定时配置,则应:
---步骤1:在MCR寄存器中设置更改配置请求位。
---CANMCR=0001000000000000b
---位12CCR=1≥更改配置请求
---步骤2:设置BCR寄存器(位配置寄存器)。
---总线上所有节点的标称位时间及波特率预定标器必须相同。如TSEG1=TSEG2=0,则CAN不能激活。
---TSEG1≥TSEG2≥2如SBG=0
---CANBCR2=0000000000000000b
---波特率预定标器=0
---CANBCR1=0000000101010111b
---位10SBG=0=>下降沿同步
---位8-9SJW=10=>同步跳宽
---位7SAM=0=>CAN模块采样仅一次
---位3-6TSEG1=1010
---位0-2TSEG2=111
---步骤3:请求正常模式。
---CANMCR=0000000000000000b
---CCE=更改配置启用(全局状态寄存器)

 ---邮箱初始化
---每个数据帧分为以下字段:
---● 仲裁场(arbitration field)包括标志符与RTR(远程发送请求)位。
---● 控制字段(controlfield)包括DLC位(数据长度)。
---● 数据字段
 ---用户设置邮箱内容可对以下字段进行编程:
---● MSGIDL与MSIDH包括邮箱标志符。
---● MSGCTRL(消息控制字段)包括消息长度与RTR位(用于发送远程帧的远程发送请求)。
---● DATA_A、DATA_B、DATA_C与DATA_D包含数据。数据分为4个字或8字节。
---初始化邮箱的步骤如下:
---步骤1:禁用邮箱,在CANMDER中写入0。
---CANMDER=0000000000000000b
---步骤2:在CANMCR中设置更改数据字段请求位。
---CANMCR=0000000100000000b位8CDR=1
步骤3:更改邮箱内容(数据、控制与标志符字段)。数据只能在发送邮箱中设置(2、3、4或5)。
步骤4:返回正常模式。
CANMCR=0000000000000000b
步骤5:启用邮箱。
CANMDER=0000000000000100b
位2ME2=1=>邮箱2启用
位6MD2=0=>邮箱2配置为发送邮箱

发送消息
发送消息步骤如下。
步骤1:发送邮箱初始化。
→禁用邮箱,在CANMDER中写入0。
CANMDER=0000000000000000b
→要求更改数据字段请求,在CANMCR中写入。
CANMCR=0000000100000000b
bit8CDR=1
→为发送邮箱设置消息ID。在CANMSGIDxH及CANMSGIDnL中写入,其中n=2、3、4或5。
CANMSGIDnH=1110000000000000b
bit15IDE=1=>待发送消息带有扩展标志符(29位)
bit14AME=1=>采用相应接收屏蔽(LAM寄存器)
bit13AAM=1=>自动应答模式位设置。如邮箱接收远程帧,则其响应时将内容回送
bit12-0:标志符上部。
CANMSGIDnL=0000000000001111b
标志符下部
→设置消息控制字段。在CANMSGCTRLn中写入,其中n=2、3、4或5。如待发送消息是远程帧,则RTR位将置为1。消息长度将在此选择。
CANMSGCTRLn=0000000000001000b
bit5RTR=0=>将发送一个数据帧(不是远程帧)
bit0-4DLC=1000=>数据长度=8bit
→创建消息(仅用于数据帧)。消息将写入CANMBXnA、CANMBXnB、CANMBXnC与CANMBXnD(其中n=2、3、4或5)。
CANMBXnA=0ABCDh
CANMBXnB=0123h
CANMBXnC=0EF32h
CANMBXnD=6789h
→请求正常操作,将CANMCR中的位8复位。
CANMCR=0000000000000000b
→启用邮箱,在CANMDER寄存器中写入。如邮箱2或3已选择,则其应配置为发送邮箱(CANDER寄存器)。
CANMDER=0000000000000100b
bit2ME2=1=>邮箱2启用
bit6MD2=0=>邮箱2配置为发送邮箱
步骤2:请求发送消息,在TCR寄存器中设置TRS位。
 TCR=0000000000010000b
位4TRS2=1=>邮箱2的发送请求
步骤3:等待发送确认(TA=1,在TCR寄存器中)与/或作为邮箱标志(CANIFR寄存器)。
步骤4:进行TA与发送标志复位,“1”应写入TA(TCR寄存器)。
TCR=0001000000000000b
位12TA2=1=>进行邮箱2的TA及中断标志复位。

接收消息
接收滤波器(Acceptance Filter)如何工作
在已接收消息ID与接收邮箱ID中接收屏蔽寄存器未屏蔽的位应相同。如果情况不是这样,则消息不被接受或不被存储。本地接收屏蔽可通过将消息标志符高字(MSGIDn)中的AME(接收屏蔽启用位)定为0加以禁用。随后所有标志符位必须匹配以存储消息。
如何进行CAN模块编程
 步骤1:设置本地接收屏蔽寄存器。LAM1用于邮箱2与3,而LAM0用于邮箱0与1。
LAM1H=1000000000000000b
位15LAMI=可接收1标准与扩展帧。
位12-00:相应的ID位未屏蔽。就上述位而言,已接收消息ID必须与邮箱ID相同。
LAM1L=1111111111111111b
位15-0 1:屏蔽位
步骤2:设置邮箱标志符及控制
→禁用邮箱,在MDER中写入0。
CANMDER=0000000000000000b
→要求更改数据字段请求,在MCR寄存器中写入。
CANMCR=0000000100000000b位8CDR=1
→设置发送邮箱消息ID。在MSGIDxH与MSGIDnL中写入,其中n=2、3、4或5。
CANMSGIDnH=1110000000000000b
位15IDE=1=>接收的消息带有扩展标志符(29位)
位14AME=1=>采用相应的接收屏蔽(LAM寄存器)
位13AAM=1=>对接收机无影响
CANMSGIDnL=0000000000001110b标志符下部
→设置消息控制字段。在MSGCTRLn中写入,其中n=2、3、4或5。如果待发送消息为远程帧,则RTR位将置为1。消息长度将在此选择。
CANMSGCTRLn=0000000000001000b
 位5RTR=0=>不请求数据帧。
位0-4DLC=1000=>数据长度=8bit
→请求正常操作,将MCR中的位8复位。
CANMCR=0000000000000000b
→启用邮箱,在MDER寄存器中写入。如选择邮箱2或3,必须将其配置为接收邮箱(MDER寄存器)。
CANMDER=0000000001000100b
位2ME2=1=>邮箱2启用
位6MD2=1=>邮箱2配置为接收邮箱
步骤3:等待接收确认(RCR寄存器中的RMP位)及CANIFR中的邮箱中断标志。
步骤4:如欲进行RMP与接收标志复位,RMP中必须写入“1”(在接收控制寄存器中)。
CANRCR=0000000001000000b
位6RMP2=1=>将RMP2与邮箱2中断标志复位
数据存储于MBXnA、MBXnB、MBXnC及MBXnD中。

自检模式
---什么是自检模式?
---TMS320F241/3 CAN模块可在回送模式下工作。它可接收自身发送的消息。该模块生成其自身的确认信号。总线无须连接至模块该模式即可工作,因此可以方便地测试程序。
---如何使用自检模式?
---CAN模块初始化后,用户可通过在MCR寄存器中设置自检模式位请求自检模式。
---CANMCR=00000000010000000b
---位6:STM=1.模块处于自检模式。
---发送的消息将接收并存储于适当的接收邮箱中。
---自检模式的局限性:
---自检模式中未实施自动应答模式设置情况下的远程帧处理。该模式不能用于远程帧测试。
---远程帧
---远程帧与数据帧形状相同,但不含数据。远程帧的RTR(远程发送请求)位设为1。与数据帧类似,其也可为标准帧或扩展帧(11位ID或29位ID)。
---远程帧通常用于请求信息。节点A发送远程帧至节点B。如果节点B待发送的消息与远程帧的标志符相同,则其将做出应答,发送相应的数据帧至总线。

---如何进行远程帧编程
 ---发送远程帧:
● 使用2、3、4或5。邮箱2及3可配置为发送邮箱或接收邮箱。
● 在MSGCTRLn字段中设置RTR(远程发送请求)位为1。
● 设置TRS(发送请求设置)位为1。
● 远程帧将发送至CAN总线。如果远程帧自接收邮箱发送(2或3),则发送成功后不设置TA(发送确认)或邮箱标志。TRS位随后复位。
对远程帧自动应答
 接收远程帧的邮箱通过发送数据帧进行自动应答。
● 仅将邮箱2或3配置为发送邮箱
● 在MSGIDn中设置自动应答模式位(AAM)。
● 如果节点接收的远程帧ID与邮箱ID相同,则其将通过发送数据帧进行自动应答(对禁用的本地接收屏蔽而言)。
发送远程帧至接收邮箱
● 仅将邮箱0、1或2、3配置为接收邮箱。
● 消息处理与数据帧一样。设置RMP(接收消息等待(Receive Message Pending))位及RFP(远程帧等待)位。
● CPU处理情况。
示例
步骤1:从邮箱5发送远程帧(节点A)
设置邮箱5的RTR(远程发送请求)位。邮箱5将在接到请求时发送远程帧。随后,当设置TCR寄存器(发送控制寄存器)中相应的TRS(发送请求设置)位时,远程帧将在CAN总线上发送。
本地接收屏蔽禁用时(MSGID2H位14),所发送的ID位(邮箱5节点A)与接收邮箱ID位(邮箱2节点B)必须匹配才能接收该帧。节点B辨认远程帧ID。邮箱5(节点A)与邮箱2(节点B)带有相同的29位标志符。
邮箱5设置:
MSGID5H=1101001100001111b
Bit15:1扩展ID
Bit14:1接收屏蔽启用
Bit13:0未设置自动应答模式
Bit12-0:标志符
MSGID5L=1111111111111111b
Bit15-0:标志符
MSGCTRL5=0000000000011000b
Bit4:1远程发送请求

邮箱2设置:
 MSGID2H=1011001100001111b
Bit15:1扩展ID
Bit14:0接收屏蔽禁用
Bit13:1设置自动应答模式
Bit12-0:标志符
MSGID2L=1111111111111111b
Bit15-0:标志符
MSGCTRL2=0000000000001000b
Bit4:0未设置RTR
Bit3-0:1000数据长度=8bit

步骤2:节点B自动应答
在节点B上设置AAM(自动接收模式)位时,邮箱2通过在CAN总线上发送相应数据帧自动应答。在节点A上,邮箱0启用本地接收屏蔽(MSGID0H、位14)。当节点B发送数据帧的未屏蔽位与邮箱0的ID位相匹配时,邮箱0接收并存储数据帧。
邮箱0设置:
LAM0H=1000000000000000b
Bit15:1接收的扩展及标准ID
Bit12-0:0发送ID与邮箱ID必须完全匹配
LAM0L=1111111111111111b
Bit15-0:1接收0或1
MSGID0H=1101001100001111b
Bit15:1扩展ID
Bit14:1接收屏蔽启用
Bit13:0未设置自动应答模式
Bit12-0:标志符
MSGID0L=1010101011110000b
Bit15-0:标志符
MSGCTRL5=0000000000001000b
Bit3-0:1000数据长度=8bit

CAN中断
 CAN模块包括两个中断寄存器:
● CANIFR:中断标志寄存器
● CANIMR:中断屏蔽寄存器
有两种不同类型的中断:
● 如邮箱收发消息,由邮箱产生的中断。每个邮箱在CANIFR上都有中断标志位,在CANIMR上都有中断屏蔽位。
● 错误生成的中断。以下事件将产生错误中断:
 - 中断(abort)确认
- 写入拒绝
- 唤醒
- 接收消息丢失
- 总线关闭
- 错误严重(error passive)
- 警告级
这些中断可发出高优先级或低优先级请求。CANIMR的位15与7用于选择优先级。可将两个中断请求发送至外设中断扩展(PIE):
● CAN邮箱中断(高优先级或低优先级)
● CAN错误中断(高优先级或低优先级)
错误处理
CAN模块包括错误检测、内部错误处理机制及错误信号发送。这提供了强大可靠的数据处理机制。
CAN模块检测以下错误类型:
● 位错误,如果被发送位与接收位不同。
● 位填充错误。在发送5个连续相等位后,发送器应在位流中插入带有补充值的填充位,它将由接收机移除。
● CRC错误,如接收的CRC(循环冗余校验)代码与发送的CRC代码不匹配。
● ACK错误,如发送节点未从接收机接收到ACK。
● 形式错误,如不符合帧格式。
上述错误记录在错误状态寄存器中:
检测到错误的每个节点会增加错误计数(发送或接收)。这两个计数位于CAN错误计数寄存器中(CEC)。
CAN模块可为三种状态:
● 错误激活状态(Error Active State):如发送与接收错误计数低于128。如二者计数之一达到96,则在CANIFR寄存器中设置标志(位0,警告标志),且错误状态寄存器的位0等于1。
● 错误严重状态(Error Passive State):如果发送错误计数或接收错误计数在127~255之间。设置CANIFR(位1)中的标志,且错误状态寄存器中的EP位等于1。
 ● 总线关闭状态:如发送错误计数大于255,节点随后自动从总线断开。在CANIFR中设置标志(位2),且错误状态寄存器中的BO位等于1。如ABO=0(MCR寄存器),则CCR位(MCR寄存器)置为1。
总线关闭后重新连接模块有两种不同的解决方案:
● 设置MCR寄存器的ABO(自动总线接通)位。模块将在128*11个连续隐性位后返回总线接通状态。
 ● 或清除MCR寄存器的CCR(更改配置请求)位。

马达控制应用
概述
---本应用的目的在于通过连接至马达驱动器的CAN总线发送速度命令以改变马达速度。
---为实施本应用,将采用一条双绞线(作为CAN总线)、两个TI SN75LBC031收发器及两个TMS320F243 DSP。受控马达是三相交流感应马达。
 ---电源连接至TMS320F243 DSP控制器的ADC0输入。该值作为马达控制的目标频率读取。第一个DSP(节点A)用ADC模块将该值转换为数字值,随后按比例确定这些值。0V对应于200rpm的频率,而5V对应于400rpm。数据存储于CAN邮箱中,随后由CAN总线发送至第二个DSP(节点B)。该DSP用接收到的目标频率控制马达。
---马达速度可通过改变ADC输入电压进行实时更改。为了实施该应用,我们需要两种不同的程序。软件在第一个节点上处理CAN总线中频率目标的发送。程序在第二个节点上处理频率接收,并进行马达控制。
---节点A:从电源到CAN总线
---DSPA连接至电源(ADC0输入)与收发器。运行在该DSP上的程序称作send_frequency.asm。该程序处理直流电与CAN模块初始化、模数转换、频率缩放、频率在邮箱中的存储及发送频率至CAN总线。图20显示了该过程。
---该程序中三次使用CAN:
● CAN初始化(邮箱与位定时)
 ● 在邮箱中存储频率
● 发送消息
---频率存储的原理与邮箱初始化相同。更新数据值之前,应禁用邮箱,并进行主控制寄存器中CCR位(更改配置请求)的设置。更改频率后,应清空该位,再启用邮箱。
---节点B:马达控制
---第二个DSP利用从CAN总线接收的目标频率值进行马达控制。
---在示例应用中,我们采用了交流马达的开放回路控制程序。马达控制程序与中断系统共同工作,它包括两个重要部分:主程序与中断服务程序(ISR)。
---在主程序中进行不同的初始化,如CAN模块初始化与PWM初始化。在主程序结尾处,事件管理器的下溢中断启用。
---在中断服务程序中,将计算新的PWM因素,并对CAN总线接收到的新频率目标进行调节。在该ISR中,如果接收的值不同于原值,则频率目标值将更新。
---CAN代码可分为两部分:第一部分是CAN初始化,在此进行CAN位定时设置及邮箱0(控制字段与标志符)初始化;该部分位于主程序。第二部分在中断服务程序中。如果从CAN总线上成功接收消息且该值已更改,则本部分将在变量FREQ_TRGT中处理消息副本。原FREQ_TRGT值从接收值中减去。如结果不为零,则更新FREQ_TRGT。
---如果成功从CAN总线接收,则设置邮箱中断标志与接收消息未决位。程序测试上述位(BIT指令)。如上述位已设置,则由下一指令清空。如值发生变化,接收的数据随后拷贝到累加器与变量FREQ_TRGT中。如未接收到邮箱标志,或没有消息等待(RMP位),则CAN_RD_END支路出现。

结论:CAN与DSP
---TMS320F241、TMS320C241与TMS320F243芯片包括片上CAN控制器。CAN是多主控串行总线,可在不同节点间实现高效数据传输。CAN是灵活、可靠、强大及标准化的协议,具备实时功能。
---DSP控制器可提高电动马达的效率,实现更高的性能与更低的成本,为传统的微控制器提供更好的解决方案,并实现了更先进的控制算法。

 

标签:
来源:今日电子 作者:德州仪器数字信号处理器解决方案 Claire Monnet 时间:2004/11/1 0:00:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐