单片微机 CAN控制器的应用与实践①
2010-12-26张全柱黄成玉邓永红潘玉民
张全柱 黄成玉 邓永红 潘玉民
(华北科技学院信息与控制技术研究所,北京东燕郊 101601)
单片微机 CAN控制器的应用与实践①
张全柱②黄成玉 邓永红 潘玉民
(华北科技学院信息与控制技术研究所,北京东燕郊 101601)
介绍了 C8051F020单片机内部 CAN控制器的应用。叙述此控制器的构成及其访问方式,并重点介绍了其在电机监控系统中的应用。阐述了 CAN控制器外围硬件和通信软件的设计与实现,并给出了 CAN
通信软件的流程图,实践证明了该设计的正确性。
CAN控制器;寄存器;报文对象;C8051F020;电机监控
0 引言
单片机与 CAN总线连接的传统方式是将CPU与总线控制器和总线收发器相连后再接入总线网络,这样使 CPU外围电路复杂化,整个系统易受外部影响。为了解决这一问题,很多单片机厂商纷纷将 CAN控制器集成在单片机芯片上。目前,单片机内部集成 CAN控制器的有Motorola公司的 MC68HC912DG128A、Philips公司的P87C591、Atmel公 司 的 AT89C51CC01 和AT89C51CC02、Intel公司的 TN87C196CA 和TN87C196CB以及 Cygnal公司的 C8051F020等[1]。本文以 C8051F020为例详细介绍其内部 CAN控制器的使用方法,并应用于电机监控系统。
1 CAN控制器在电机监控系统中的应用
CAN总线一般用在工业检测和控制现场,它将各功能模块连接在一起组成一个现场通信网络。在本应用中,CAN总线完成下位机各部分之间的通信以及各下位机与上位机之间的通信。下位机以单片机 C8051F020为核心,上位机由 PC机构成。下位机的 CAN通信物理层的电路在下面将做详细说明,为了完成上位机与下位机的通信,需要外加一块 PC-CAN通信卡。图 1为电机监控系统结构图[2]。
1.1 CAN控制器外围硬件电路实现
由于 Cygnal内部的 CAN控制器只是个协议控制器,不能提供物理层驱动,所以在使用时还需外加 CAN总线收发器,常用的 CAN总线收发器有Philips公司的 PCA82C250收发器、高速 TJA1050收发器等[3]。这里使用的是 PCA82C250收发器,它可提高总线的差动发送和接收能力。它与ISO11898标准完全兼容,有三种不同的工作方式,即高速、斜率控制和待机,可根据实际情况选择。
为了进一步提高系统的抗干扰能力,在 CAN控制器引脚 CANTX、CANRX和收发器PCA82C250之间并不是直接相连,而是通过由高速光耦 6N137构成的隔离电路后再与PCA82C250相连,这样就可以很好的实现总线上各节点的电气隔离。这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。
在 PCA80C250与 CAN总线接口部分也采用了一些安全和抗干扰措施。PCA82C250的 CANH和 CANL引脚各自通过一个 5Ω的电阻与 CAN总线相连,电阻可起到一定的限流作用,从而保护PCA82C250免受过流的冲击。在 CANH和 CANL与地之间各自接一个 30pF的小电容,可以起到滤除总线上的高频干扰和防电磁辐射的能力。另外,在 CANH和 CANL之间并联一个 15V的瞬态电压抑制二极管 (TVS),可以保护 PCA80C250在瞬间高电压情况下而不受损坏。PCA82C250的 RS脚上接有一个下拉电阻,电阻的大小可根据总线速率适当的调整,其值一般在 16kΩ~140kΩ之间。
C8051F020供电电源为 2.7V~3.6V,其所有 I/O口允许 5V(极限值为 5.8V)输入,但是 I/O输出电平为 VDD。而 PCA82C250为 5V系统,为了能够驱动其工作,在 CANTX引脚上拉一上拉电阻,其值为 4.7kΩ。
1.2 CAN通信软件实现
此下位机 CAN通信部分主要完成的任务是:将现场检测到的数据传送给上位机或其它的下位机节点;同时,上位机可以对下位机的相关参考进行设置,即下位机还须接收一定量的数据。
由上可知,此节点的 CAN通信主要包括系统初始化程序、发送程序、接收程序等。软件部分设计的好坏将直接决定系统能否正常工作,对于初次接触 CAN总线系统的设计人员来说是一个难点,也是一个重点。在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。
1.2.1 系统初始化
初始化程序主要完成对所有的报文对象进行初始化 (一般将所有值置零),对 CAN控制寄存器 (CAN0CN)、位定时寄存器 (B ITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为 8MHz,CAN通信速率为 500k/s,得到 B ITREG的初始值为 0x2301。主程序中规定对象初始化、发送和接收初始化,最后才启动 CAN处理机制 (对 B ITREG和 CAN0CN初始化),下面为 CAN启动程序:
1.2.2 发送程序
CAN报文发送是由 CAN控制器自动完成的,用户只需根据接收到的远程帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件来完成。这里,我们使用定时更新发送报文对象中的数据,数据的发送有控制器自动完成,当其收到一个远程帧时,就将具有相同识别符的数据帧发送出去。其发送程序结构如下:
1.2.3 接收程序
CAN报文的接收与发送一样,是由 CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:
1.2.4 CAN通讯协议
上位机向监控模块发帧号为 0x11的指令帧,控制电机启停和 4个电磁阀通断。监控模块向上位机发帧号为 0x21的状态帧,反馈电机状态信息。
1)指令帧定义 (帧号为 0x11)
位7位6位5 位4 位3 位2 位1 位0字节 1预留 预留 预留电磁阀4控制=1打开=0关闭电磁阀3控制=1打开=0关闭电磁阀2控制=1打开=0关闭电磁阀1控制=1打开=0关闭电机启停控制=1启动=0停止
2)状态帧定义 (帧号为 0x21)
位7位6位5位4位3位2位1位0字节 1 电机温度字节 2 电机转速低字节字节 3 电机转速高字节字节 4 电机电压低字节字节 5 电机电压高字节字节 6 电机电流字节 7预留 预留 预留 过流 欠压 过压 超速 超温字节8 预留
1.2.5 软件流程图
图 2 控制软件流
2 结语
针对设计的电机在线监控系统,进行了调试试验。实验结果表明,系统具有电机转速、电机温度、驱动电压、驱动电流、IGBT模块温度等参数和状态的自动检测功能,且系统具有良好的运行稳定性。
本文是在实际应用中得到的应用经验,期望对使用 C8051F020中 CAN控制器以及研究 CAN总线的同行提供借鉴和帮助。文中的 CAN控制器物理层电路完全能够使用,而且抗干扰能力较强。CAN总线以其稳定的特性、低廉的价格将会被更多用户所使用,而集成于微控制器内部的CAN控制器更是在设计过程中的首选芯片。
[1]赵嘉蔚 .单片机原理与接口技术[M].清华大学出版社,2010:42-154
[2]吕俊芳 .传感器接口与检测仪器电路[M].北京航空航天大学出版社,1994:87-254
[3]刘泽祥 .现场总线技术 [M].北京:机械工业出版社,2005:10-54
Application and Practice of Single Chip Computer CAN Controller
ZHANG Quanzhu,HUANG Chengyu,DENG Yonghong,PAN Yum in
(North China Institute of Science and Technology Information and Control Technology Research Institute,Yanjiao Beijing-East,101601)
The paper introduces application of C8051F020 single chip computer CAN controller and structure and mainly emphasizes on application of the controller inmotormonitoring system,expounds design and implementation ofCAN controllerperipheral hardware and communication sof tware,provides CAN communication software flowchart.The validity of the design was proved by practice.
CAN controller;Register;Packet object;C8051F020;Motormonitoring
TP273
A
1672-7169(2010)04-0078-03
2010-10-09
张全柱 (1965-),男,内蒙古察右中旗人,博士,华北科技学院电信系教授,研究方向:电力电子与电力传动,微型计算机控制,轨道牵引电气化与自动化、煤矿电气自动化装备等。