>
首页 » 技术文章 » CAN总线智能测控节点的设计

CAN总线智能测控节点的设计

作者:王月姣,朱家驹  时间:2006-10-03 00:23  来源:CAN 总线;P87C591 单片机;智能节点;CAN 通信
摘 要:分析了P87C591 这种Philips 公司近期推出的内带CAN 控制器的8 位高性能的微处理器的结构,给出了CAN 定时寄存器的设定,提出了以P87C591 为主构成的CAN 智能节点的硬件框图,并提供了CAN 通信的初始化、发送、接收各部分的程序设计。

关键词:CAN 总线;P87C591 单片机;智能节点;CAN 通信

引言

目前的测控系统一般以单片机为核心器件,基本具有二方面的功能:一方面是对工业现场各量进行采集、处理、控制;另一方面是通信。 对于前者,主要要求是要达到测控量的各项技术指标,如精度、速度及合理控制方案的选择与现场的抗干扰处理等。 这些已经历了近20年的开发与应用,技术较成熟,单片机的选择也较广。 对于后者,由于以往没有更好的选择,大都采用主从通信,标准为RS-485。 这种通信方式由于结构网上只能有一个主站,且数据通信为命令响应型,各从节点的通信都必须通过主站点,使得通信在很大程度上依赖主节点,造成网上的数据传输效率低下,且错误处理及抗干扰能力较差。 特别是当从节点多而通信距离远时,更是难以满足工控现场通信的需要。 基于此,本文以一个中小企业的生产现场为例,给出了一种性能优越、结构简单、易于实现的CAN 总线通信的智能节点的设计及通信实现的方法。

CAN总线的主要特点

CAN(Controller Area Network) 是德国Bosch 公司开发的一种有效支持分布式实时控制的串行通信网络,总线最大传输速度可达1Mbit/s (40M以内) ,最大传输距离为10kM(速率为5kbit/s 以下) 。 其主要优点是:

(1) 多主工作方式。 节点之间不分主从,每个节点均可成为主机,向其他节点主动发送信息,而无需都要通过主节点,保持了通信的实时性。

(2) CAN 总线提供了数据帧和远程帧。 2 帧的区别仅是帧信息中的RTR 位的为0或为1 ,这样,任何节点发送数据与“远段请求”命令有了明显的区别,任何节点可通过远程帧主动要求其他节点发送数据、索取信息,而无需等待信息的到来,大大提高了通信的效率。

(3) CAN 协议废除了传统的站地址编码,而代之以对报文的编码。 总线上的报文内容具有优先级的ID 标识符和欲传送的数据长度、数据字节及RTR 位,根据帧格式的不同, ID 可定义为211 (SFF) 或229(EFF) 个不同的编码,利用这种编码,不仅可使不同的节点同时接收到相同的数据,而且便于节点的扩展,对于新挂上总线的节点,CAN 总线只需根据报文的内容进行处理,无需对所有的节点重新编程。

(4) CAN 总线不仅提供了报文的优先级判别技术,还提供了对通信帧数据的CRC 循环冗余校验,并有相应的错误处理。 另外,当网络节点在错误严重的情况下,CAN 具有自动关闭输出、切断与总线的联系,使总线上其他节点不受影响,保证了通信的可靠性。

智能节点单片机的选择

性能价格比高是智能节点设计力求的目标,作为核心器件的单片机无论从测控与通讯的角度都希望内含的功能越多越好,这样可减少外扩器件,简化应用系统的硬件设计,有利于系统的小型化及现场的抗干扰。 根据实际需要,选用P8xC591 系列中的P87C591 单片机。 它是PHILIPS 公司继P8xC592 之后近期推出的又一款内带CAN 控制器的8 位高性能的微控制器。 它采用了强大的80C51 指令集并包含了PHILIPS 半导体SJA1000CAN 控制的PeiiCAN 功能。 其结构框图如图1 所示。

图1  P87C591 结构方框图

P87C591 (也可指P8xC591 系列) 为44 引脚,内部有16KB 的程序存储器, 512 字节的RAM,2 个8 位分辨率的脉宽调制输出(PWM) ,6 路逐次逼近式的10位ADC 或快速的8 位ADC(P1.2~P1.7) ,用于带字节的主从功能的I2C总线串口I/O 口(P1.6~P1.7) ,CAN 控制器等。 内部功能较齐全,可设计成在最小数量的器件下满足本节点CAN、模拟量的精度、抗干扰等的要求。

智能节点的硬件设计

智能节点的硬件结构如图2 所示。 包括测控与通信2 部分。 对于不同的生产现场,被测控的量有所不同,构成智能节点的测控部分的电路会有所差异。 这里设计的节点主要监控6 路模拟量,2 路开关量,一路电网补偿电容(交流负载) 的投切。 6 路模拟量先经信号调理,变成0~5V 的直流电压,再由1∶1 的隔离放大器送P87C591 的10位ADC(P1.2~P1.7) 。 10位ADC的选择与转换的操作,由P87C591 内部的特殊功能寄存器AUXR1 (页寄存器) 的D7 位(ADC8= 0) 及ADCON(控制寄存器、IEN0(中断允许寄存器) 、IPO(中断优先级寄存器) 、ADCH(数据寄存器) 编程控制完成。 SSR(过零触发型交流固态继电器)用于CPU 与交流负载的接口,实现对交流负载的控制。 图2 中扩展的RS-232 总线用于与PC 机的串口就近直连,便于PC 机设置参数与监视现场的运行。 为抑制现场的干扰入侵,单片机与外部输入、输出的量仅保持信号的联系而无电的直接联系。

图2  智能节点硬件结构框图

智能节点往往不光是局限于测控,根据需要还必须随时接收其他节点的远端请求与远端调度,接收或发送信息。 实时、安全可靠地通信是智能节点设计的重要内容。 选择CAN 总线通信的方案也很关键,由于P87C591 单片机内含有SJA1000CAN 控制器,无论从硬件、还是软件的设计都要比采用独立的CAN控制器外接一个微处理器的方案简单、方便。 硬件电路只需在P87C591 的P1.0(CAN 收发器输入脚) 与P1.1 (CAN 发送器输出脚) 外接CAN 总线驱动器即可。 图2 中PCA82C250是CAN 的收发器,它是连接CAN 控制器和物理总线之间的接口。 提供了CNA 控制器向总线的差动发送和差动接收的能力。 使用PCA82C250作为CAN 总线的收发时,通信速率最高可达1Mbit/s (传输距离40m) 。 CAN 总线信号传输介质使用特性阻抗为120Ω 的屏蔽双绞线。 高速的光电耦合器6N137 是将微控制器与CAN 总线部分的电源隔离,分开供电,能有效抑制由总线引入的干扰。

CAN总线智能节点CAN通信软件的设计

P8xC591 中的CAN 操作不支持SJA1000的BasicCAN 模式,只支持SJA1000的PeliCAN 模式。 并扩展了其功能。 为保证通信的成功,软件设计要合理选择CAN 总线传输的波特率;并针对P87C591 内部的PeliCAN 的具体结构,正确完成其通信的初始化、发送、接收等操作。

CAN总线传输的波特率与定时寄存器的设定 
CAN 控制器中提供了2 个可编程的总线定时寄存器BRT0、BRT1 。BRT0(决定BRP与同步跳转宽度SJW) ;BRT1 (决定每个位周期长度,采样点位置和每个采样点进行的采样次数,由时间段TSEG1和时间段TSEG2决定) 。波特率是CAN 总线传输的一个重要参数。 它与两节点之间的最大距离有一定的对应关系,不同的系统可根据不同的传输距离来选择、调整。

(1) CAN 系统时钟周期的设定。 P8xC591 中CAN 系统时钟的周期t sc1 是可编程的。 只是与独立的SJA1000CAN 的t sc1 计算有异。

t sc1 = (波特率预计值BRP + 1) /f XTAL

式中f XTAL ——P8xC591 的晶振频率,BRP = (32 ×BRP.5+ .......+ 2 ×BRP.1 +BRP.0) 。

(2) 位周期与波特率的计算。 一个位周期 tBIT = ( tSYNCSEG + tTSEG1+ tTSEG2) 。
其中:tSYNCSE = 1×tSCL , tTSEG1= tSCL×(8×TSEG1.3+ .+TSEG1.0+ 1) ,
tTSEG2= tSCL×(4×TSEG2.2+......+TSEG2.0+1) 。
波特率= 1/tBIT 。

若P8xC591 晶振为12MHz ,根据两节点的最大距离,选波特率为100kbit/s。设预设值BRP = 11 , tSYNCSEG = 1tSCL , tSJW = 2tSCL , tTSSEG1= 6 tSCL , tTSSEG2= 3tSCL 。则tSCL =(11+1)/12M=1μs , tBIT =(1+6+3)×1μs =10μs。
波特率= 1/tBIT = 100kbit/s。

选SAM= 0,则总线定时器BTR0、BTR1 的初始值为BTR0= 4 BH ,BTR1 = 25BH。

软件设计 
P87C591 内部80C51CPU 是通过5个特殊功能寄存器CANADR (地址) 、CANDAT(数据) 、CANMOD(模式) 、CANSTA(状态) 、CANCON(控制) 对PeliCAN 模块进行访问。 其中CANSTA 读是状态,写是中断使能,CANCON 写是命令,读是对PeliCAN 的中断寄存器访问。 下面针对P87C591 中PeliCAN的具体结构,进行了初始化,发送、接收的软件设计。

(1) 初始化。 P87C591 中的CAN 控制器在上电或硬件复位后必须进行初始化设定,以实现CAN 通信的初始化处理。 其内容包括:操作模式;TXDC 输出管脚的配置;总线定时寄存器BTR0、BTR1 的设定;验收滤波器中的ACRn 、AMRn 及ACFMOD、ACFEN、ACFPRIO 的设定;中断使能与优先级的设定。

(2) 发送。 P87C591 中peliCAN 提供2 种报文帧格式:分别是标准帧格式(SFF) 与扩展帧格式(EFF) 。SFF 有11 位的ID 标识码,EFF 有29 位的ID 标识码,二种帧格式最多传送的数据为8 个字节,可满足一般工业领域中的控制命令、工作状态及测试数据的要求。 本节点采用SFF 帧格式,其发送缓冲区(地址112~122) 的配置及发送帧、标识码的位分布见图3 所示。

图3 中:FF :为0/1 表SFF/EFF 帧格式的标志。 DLC3 —DLC0:发送数据长度代码位。 ID28-ID18 :11位的ID 标识码。 RTR :远程发送请求位,为0/1 表数据帧/远程帧。

图3 SFF 的发送缓冲器及帧格式、标识码的位分布报文的发送

首先将发送的顺序存入微处理器RAM中定义的TransmitMessage [ ]中,然后通过CANADR、CANDAT 由CAN 控制器根据CAN协议规格自动完成。 若PeliCAN 的地址大于等于32 ,任何对CANDAT 的访问将使CANADR 自动增加。

(3) 接收。 P87C591 中的peliCNA 接收的帧格式与发送缓冲器的相同,RXFIFO 共有64 字节的报文空间。 与独立的SJA1000CAN 控制器不同的是,接收缓冲区的地址(96~108) 与发送缓冲区的地址(112~124) 彼此是分开的。

P87C591 中的peliCAN 支持4 个独立的验收滤波器组(BANK) ,每组验收滤波器(ACF) 由验收代码寄存器(ACRn) 和屏蔽寄存器(AMRn) 定义。 如接收报文用SFF 帧格式,用BANK1 接收。 若11 位的ID 为00000101 xxx ,则ACR10= 00000101 ,AMR10= 00000000。 只有当接收报文中的格式与标识符与验收滤波器预定义的内容相等时,CAN 控制器才允许将已接收的报文传送到RXFIFO。 各组的滤波方式,是否使能以及优先权的选择由验收滤波器的模式寄存器(ACFMOD) ,使能寄存器(ACFEN) ,优先级寄存器(ACFPRIO) 确定。

(4) 程序流程图。 程序中设定验收滤波器的配置为Bank1 ,采用SFF 帧格式,接收的11 位ID( ID.28-ID.18) 为00000011 xxx。波特率为100kbit/s。其中Transmit [ ] ,Receiver[ ]在微控制器RAM中已定义。图4、图5、图6 是用C51 编写的初始化,中断服务程序中的发送、接收子程序流程图。

结 语

以上设计的智能节点正应用于一过程控制的集散系统中。 实际上,P8xC591 中的PeliCAN 在SJA1000的基础上增加了不少功能,内部功能齐全,利用P87C591 单片机(或P8xC591 系列) 构成的智能节点外扩器件少,结构简单,节点扩展非常方便,通信的可靠性、实时性及抗干扰能力大大提高。

相关推荐

从TI“蝗虫战略”到雷军“芯片免费”

芯片  嵌入式系统  2013-11-07

嵌入式系统领域迎来创新与转型时代

嵌入式系统  通信  2013-05-30

VDC:物联网将改写嵌入式系统开发趋势

物联网  嵌入式系统  2013-05-14

ARM-Linux嵌入式系统的BootLoader分析与设计

嵌入式系统  Linux  2011-09-19

嵌入式系统的实时数据接口扩展

嵌入式系统  CPLD  2011-09-02

嵌入式系统U盘实时启动技术

VxWorks  嵌入式系统  2011-09-01
在线研讨会
焦点