基于Freescale16位DSP的CAN总线通信
CAN (Controller Area Network)即控制器局域网,是德国BOSCH 公司在20世界80年代初为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通信协议。CAN 总线卓越的特性、极高的可靠性和独特的设计,特别适合工业过程监控设备的互联,因此受到工业界的重视,其应用范围已经遍及工业控制自动化、汽车自动化、机械工业、楼宇自动化等非常广泛的场合,成为最有前途的现场总线之一。
1 CAN总线的特点
CAN (Controller Area Network)总线是一种多主站控制器局域网总线.CAN 总线与一般的通信总线相比,具有独特的设计思想,良好的功能特性,极高的可靠性、实时性和灵活性,突出的现场抗干扰能力。
其特点可主要有:⑴ 通信方式灵活,为多主方式工作。⑵ 网络上的节点信息分成不同的优先级,可满足不同的实时要求。⑶ 只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式发送接收数据,无需专门的“调度”。⑷ 采用非破坏性总线仲裁技术。⑸ CAN通信格式采用短帧格式,每帧字节数最多为8个。⑹ 直接通信距离最远可达10 km(速率5 kb/s以下);通信速率最高可达1 Mb/s(此时通信距离最长为40 m)。⑺ 网络上的节点数主要取决于总线驱动电路,可达110个,报文标识符可达2032种(CAN2.0A)。而扩展格式(CAN2.0B)的报文标识符几乎不受限制。⑻ CAN 总线通信接口中集成了CAN 协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检查、优先级判别等项工作。⑼ CAN 的每帧信息都有CRC校验及其他检错措施,并可提供相应的错误处理功能,保证了数据通信的可靠性。⑽ 通信介质可为双绞线、同轴电缆或光纤。⑾ 通信节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点操作不受影响。
一个有效的数据帧由帧起始、仲裁场、控制场、数据场、校验场、应答场和帧结束组成。CAN2.OB协议规定的两种不同的帧格式,即标准格式和扩展格式,它们的主要区别在于仲裁场格式不同,标准帧的仲裁场由11位标识符和远程发送请求位RTR组成。扩展帧的仲裁场由29位标识符和替代远程请求SRR位、标志位和远程发送请求位RTR组成。如图1所示。
2 控制器的CAN模块通信
图1 CAN数据帧结构
DSP56F807芯片本身带有的CAN 控制模块MSCAN(Motorola Scalable Controller Area Network)是一个完全的CAN控制器,完全支持CAN2.OA/B协议。
MSCAN模块主要由时钟单元,发送缓冲区、接受缓冲区、接受过滤控制组成。CAN控制器必须通过CAN驱动芯片才能与CAN 总线相连,DSP56F807芯片的EVM 板上内置驱动芯片PCA82C250。本文使用两台PC机和两块DSP56F807EVM板完成了一个简单的MSCAN通信测试程序,一块EVM板把AD采集来的数据通过CAN总线发送出去,另一块EVM板完成数据的接收。图2为硬件连接总体结构图。
2.1 初始化MSCAN
Processor Expert(简称PE)是由捷克的UNIS公司开发的针对Freescale单片机和DSP的嵌入式软件开发包, 它集成在CodeWarrior7.0开发软件中。Processor Expert是在SDK的基础上发展起来的,它提供了各种类型的Bean。PE采用面向对象的用户接口,用户通过Bean库的选择窗口来选择并添加工程所需要的Bean,然后对这些Bean的属性进行设置、对方法和事件进行代码编辑。在设置好Bean以后,还要编写主程序来组织这些Bean从而完成自己的工程。
在工程中加入Init_MSCAN Bean,打开Bean属性设置窗口,如图3。在完成属性设置后,PE会自动生成CAN1_Init()函数,里面包含了MSCAN模块控制寄存器的初始化设置。
void CAN1_Init(void)
{
setRegBit(CANCTL0, SFTRES);
......
setReg16(CANBTR0, 9);
setReg16(CANBTR1, 35);
setReg16(CANCTL1, 128);
clrRegBit(CANCTL0, SFTRES);
setReg16(CANRIER, 0);
setReg16(CANTCR, 0);
setReg16(CANCTL0, 0);
}
2.2 MSCAN发送程序
MSCAN模块具有三发送缓冲器结构,这样的发送结构允许预先安排多个等待发送的信息,可获得最优化的实时性能。每个发送缓冲器带有一个优先级寄存器(TBPR),用户可以通过编程确定信息发送的顺序。
CPU通过一组发送缓冲器空标志位(TXE [2:0]),确认有效的发送缓冲器,当标志位为1时,CPU将标识符、控制位和数据内容存储到发送缓冲器中,并将该标志位清零。当标志位再次置为1时,说明缓冲器成功地发送了信息,并产生发送中断,重装发送缓冲器。图4为CAN总线发送程序流程图。
2.3 MSCAN接受程序
MSCAN具有双缓冲器的接收结构,两个缓冲器轮流映射到一个存储器区域。后台的接收缓冲器(RxBG)单独地与MSCAN相联系,而CPU只能访问前台的接收缓冲器(RxFG),这一结构简化了软件的处理过程。
当MSCAN控制器接收信息时,先将要接收的信息的标识符与接收缓冲器的标识符进行比较,只有标识符相同的信息才能被接收。MSCAN控制器的接收滤波器使得接收缓冲器可以忽略更多的位来接收信息,即如果只有被屏蔽的那几位标识符不相符,则接收缓冲器仍能接收此信息,此程序为测试程序,忽略了标识符的过滤,只要有数据就接收。这里用了一个Printf 语句来显示接收数据处理后的电压值,用以和实际电压值相比较。图5为数据接收程序流程图。
3 试验结果
在PC机上分别运行发送和接收程序,通过不断调节电位器,可以看到两块EVM板的测试等以同样的顺序点亮或熄灭。同时,在接收程序端,PC机显示出随电位器电压变化而变化的电压数据。CAN总线接收数据显示如图4。
4 结论
本文将CAN总线通信应用在实际的步进电机伺服控制系统中,上位机采用个人PC机,使用三纯科技有限公司的总线通信卡SC2102,下位机采用Motorola公司的嵌入式控制器DSP56F807,采用CAN总线完成上位机与下位机之间的通信任务,传输速率可高达1 Mb/s,可以达到系统对于实时性的要求,同时也能达到系统对于稳定性的要求。
责任编辑:售电衡衡