基于CAN总线智能数据采集模块设计
扫描二维码
随时随地手机看文章
引言
基于集中管理、分散控制的分散控制系统(distributed control system)解决了集中式直接数字控制系统对控制器处理能力和可靠性要求过高的缺陷,但由于其具有一定的封闭性、各分散控制系统之间的不兼容性,集散控制系统难以实现网络互连和信息共享。
现场总线的出现使得全数字化,全开放式,具有可互操作性,彻底分散的现场总线控制系统(fieldbus control system)得以实现,现场总线控制系统已成为自动化领域中的一个热点,也将成为工业过程控制的一个重要发展方向。
控制器局域网CAN(controller areanet work)是德国Bosch公司在现代汽车电子技术领域中推出的一种多主控制器局域网络技术,能有效支持分布式和实时控制,最早主要应用于汽车内部电子监测和控制器件数据通信。由于其高可靠性及高实时性而广泛应用于工业现场控制等领域。其突出的特点是采用最长8个数据字节的短帧结构,传输时间短,实时性高;另外CAN协议取消了传统的地址编码概念,取而代之的是基于数据块标识符的无损优先级仲裁,给分布式控制系统实现模块间的信息共享带来了极大的方便。
基于CAN总线的主要特点及发展趋势,我校电液实验室开放式电液伺服控制系统的改造中采用CAN总线作为现场总线标准,构建了一套基于CAN总线智能节点的现场总线控制系统。文中将详细介绍智能数据采集模块的软硬件设计,该模块可以实现控制现场的数字、模拟信号采集,现场数据预处理,数据传送以及与监控计算机通讯等功能。
液压伺服系统简介
开放式电液伺服控制系统包括数台电液伺服位置控制实验台、电液比例转速控制实验台、电液比例力控制实验台。各实验台配置1套基于CAN总线的智能数据采集模块和内置控制算法的智能控制模块,通过CAN总线将各分散的采集模块和控制模块组成一个控制网络,1台PC机通过内置的CAN适配卡接入局部网络,模拟工业现场的过程控制,PC机作为担任过程控制监控任务的控制站,可以实时显示各实验台工作状况及向各实验台发送启停命令,同时还可以通过高速以太网将现场数据远程传输至工程师站等管理级计算机,实现如图1所示的分层现场总线控制系统。
图1 开放式电液伺服控制系统总体结构
系统硬件设计
数据采集模块作为一种智能化现场仪表,主要包括硬件系统和控制软件2大部分。模块硬件部分以80C196KC单片机作为采集模块的核心,外围电路主要包括CAN总线接口,程序存储器,电源监控及复位电路,GAL译码电路,DI、A/D转换电路及模块参数设置电路等。模块结构如图2所示。
图2 数据采集模块结构
80C196KC单片机简介
80C196KC是Intel公司推出的高性能16位单片机。和MCS51系列单片机相比,MCS196系列单片机具有更快的运算速度和更丰富的片上外围设备,提高了控制系统的实时性,主要体现在以下几个方面:
a.可采用8/16位动态总线配置方式,增强系统的灵活性。
b.CPU中的算术逻辑单元不采用常规的累加器结构,改用寄存器-寄存器结构。CPU的操作直接面向256字节的寄存器,消除了51单片机中存在的累加器的瓶颈问题,提高了操作速度和数据吞吐能力。
c.有一套效率更高、执行速度更快的指令系统。可以对带符号数和不带符号数进行操作,16×16位只需1.4μs(20MHz),32÷16位只需2.4μs(20MHz),此外还有3操作数指令,大大提高指令效率。
选择80C196KC单片机作为数据采集模块的核心器件,可以满足应用系统的要求,保证系统的可靠性和实时性。
CAN总线接口电路
CAN总线接口由PHILIPS公司的独立总线控制器SJA1000和接口芯片82C250组成。SJA1000在软件上和引脚上都是与它的前款PCA82C200独立控制器兼容的,并增加了许多新功能:标准帧数据结构和扩展帧数据结构,并且这2种帧格式都具有单/双接收过滤器;64字节的接收FIFO;可读错误计数器和可编程的出错警告界限以及仅听模式和自测试模式等。硬件连接上比较简单:SJA1000的数据地址总线是分时复用的,可以直接与80C196KC的P3口连接,对应控制线相连即可。需注意的是,80C196KC是Intel公司的处理器,因此SJA1000工作在Intel方式,mode引脚应接电源正端,另外单片机的外部中断只有正跳变有效,而SJA1000的中断信号是低电平有效,因此需反相后才能连接单片机中断引脚。
82C250器件提供对总线的差动发送能力和对CAN控制器的差动接收能力,其RS引脚允许选择3种不同的工作方式:高速、斜率控制和待机。在低速和总线长度较短时,一般采用斜率控制方式,限制上升和下降斜率,降低射频干扰,斜率可通过由RS引脚至地连接的电阻进行控制。通信信号传输到导线的端点时会发生反射,反射信号会干扰正常信号的传输,因而总线两端通常应接有终端电阻,以消除反射信号,其阻值约等于传输电缆的特性阻抗,一般取120Ω。
数字信号采集电路
电液伺服实验台需要采集的物理量之一是液压缸的位移,实验室现有装备的位移传感器有2种:感应同步器和旋转光电编码器。二者都配有带BCD码输出的数显测量仪表,直接采集数显表的数字量可以保证采集模块具有仪表的高精度,避免因采集传感器前端脉冲而带来的误差,同时也使电路更加简洁。
数字显示仪表的有效BCD码位数为5位(个、十、百位及2位小数位),另带一位符号位,共有21位二进制位。80C196KC片内不带程序存储器,因而用P3和P4口作为地址数据总线,单片机剩余有效IO口资源较少,因此必须扩展并口。并口扩展可以采用专用扩展芯片或通用74系列的逻辑芯片,为了简化电路和编程,采用常见的可扩展24路IO口的82C55A并口扩展芯片。现场的数字显示仪表的输出是非标准的TTL电平,为了实现模块与前端仪表兼容和隔离,对输入的数字信号采用了TLP521光耦进行电平转换和信号隔离。
A/D转换电路电路
本模块中A/D转换器选用AD1*,它与AD574兼容,12位分辨率,输入电压范围0~±10V或0~±5V单双极性可选,转换时间为10μs,单通道最大采集速率50KHz,片内带基准电压、三态缓冲器,且具有采样保持电路,完全满足设计的需要。
模拟电压信号来自BLR1型拉压式称重传感器,传感器压力测量量程为0~5000kg,输出电压信号0~16mV。为适应AD1*输入电压范围,需对传感器的微弱电压信号放大,但同时并存许多噪声源:传感器内阻、电缆电阻、放大器电路以及电路周围的电磁干扰源。因此,电压信号前端采用低通滤波器和差分放大器AD620等来抑制差模噪声和共模噪声,如图3所示。
图3
设Vs为传感器的信号电压,Vn1、Vn2为外部噪声源在电缆线上的感应噪声信号,Vns为电路噪声。因此,差分放大器输出电压Vo为:
Vo=A(V1-V2)=A(Vs+Vns+(Vn1+Vn2));如果噪声源与信号源频谱不重叠,则经低通滤波电路后:Vf≈AVs。
GAL译码电路
本模块电路中,单片机扩展外围器件较多,有程序存储器AT28C256、CAN控制器SJA1000、并口扩展82C55A和A/D转换AD1*。196单片机在模块中主要工作于8位总线宽度下,由于AD1*采用了12位并行输出模式,因此还需动态改变总线宽度。为了简化电路,以及适应196单片机较高总线速度的要求,译码电路放弃了传统的门电路组合的方法,采用了可多次编程的通用阵列逻辑器件(generic array logic)GAL16V8。这样可以减少元器件数量、降低线路复杂程度,同时降低故障机率及提高硬件设计的灵活性。
GAL16V8引脚分配及逻辑表达式如下:
Input device‘P16V8AS’;
WR,RD,CAN,A12,A13,A14,A15,ADC
pin2,3,4,5,6,7,8,9;
BUSWIDTH,CSCAN,INTCAN,CEROM,CSADC, CS8255,NTADC,EADC
pin19,18,17,16,15,14,13,12;
EQUATI*
!CEROM=!A15&!A14&A13&!A12#
!A15&!A14&A13&A12
#!A15&A14&!A13&!A12#!A15&
A14&!A13&A12
#!A15&A14&A13&!A12#!A15&
A14&A13&A12
#A15&!A14&!A13&!A12#A15&!
A14&!A13&A12;
!CSCAN=A15&!A14&A13&!A12;
!CS8255=A15&!A14&A13&A12;
!CSADC=A15&A14&!A13&!A12;
BUSWIDTH=A15&A14&!A13&!A12;
!INTCAN=CAN;
!INTADC=ADC;
!CEADC=WR&RD;
由上述逻辑表达式可以看出,外围器件地址基地址由最高4位地址A12~A15决定,AT28C256、SJA1000、82C55A及AD1*对应基地址分别为:2000H,A000H,B000H,C000H。当选通AD1*时,单片机总线宽度控制引脚BUSWIDTH将置为高,动态调整到16位总线宽度,其余时刻,BUSWIDTH为低,单片机保持8位总线宽度。INTCAN和INTADC分别是对SJA1000和AD1*中断请求信号取反。GAL表达式文件用ABEL软件编译形成JED文件,使用通用编程器烧入芯片,且可反复多次烧写,方便调试。
软件编程
控制软件的合理设计是模块实时、有效地完成数据采集及通信任务的关键,主要包括系统初始化、CAN信息处理、数据采集及处理等功能模块。系统开放一个定时中断,定时时间对应上位机发送来的采样周期。CAN报文的接收主要有2种方式:中断和查询方式。为提高系统的实时性,同时也保证接收缓冲器不出现数据溢出现象,模块中采用中断接收方式。CAN报文发送采用查询方式,即当需要发送数据时,将预先组织好的数据帧按字节写入SJA1000的发送缓冲寄存器中。
SJA1000的初始化主要是在SJA1000的复位模式下设置相应寄存器。在初始化CAN内部寄存器时应注意同一网络中各模块的通信速率的设置应一致。下面给出SJA1000工作在BasicCAN模式下的简单的初始化源程序:
INIT-SJA1000:
LDB AL, #01H
STB AL, REG-CR ;复位SJA1000
LDB AL, #0AAH
STB AL, REG-OCR ;设置输出寄存器为普通输出模式
LDB AL, #048H
STB AL, REG-CDR ;使能内部比较器,禁止时钟输出
STB #01H, REG-BTR0 ;设置波特率为
250K(使用16M晶振)
STB #1CH, REG-BTR1
LDB AL, #00H
STB AL, REG-ACR ;设置验收码寄存器
LDB AL, #0FFH
STB AL, REG-AMR ;设置验收屏蔽码寄存器
LDB AL, REG-CR
ANDB AL, #0FEH ;SJA1000退出复位模式
LDB AL, #02H
STB AL, REG-CR ;设置中断寄存器,使能
接收中断
RET
以上程序段可以正确初始化SJA1000,为了提高程序可靠性和容错性,实际应用中应该读出SJA1000寄存器内容并加以比较,从而判断是否正确写入。
结束语
基于以上所述的软、硬件设计实现了CAN协议所包括数据链路层和物理层,由于CAN总线协议没有定义应用层,因此在实际的应用中有必要定义高层通信协议,即相应的命令、参数和数据的格式。国际上比较流行的基于CAN底层协议的高层协议有DeviceNet和CANopen,我们在简单应用中,采用了自定义的简单通信协议,在此不作叙述。设计的智能数据采集模块应用于电液伺服控制系统以来,运行情况良好,由于CAN总线的应用,大大提高了分布式数据采集和控制系统的灵活性、可靠性和实时性,建立了一个有效的现场总线控制系统的实验教学平台。同时该数据采集模块也可以方便地移植到工业上的其它控制系统中,与其它基于CAN总线的智能控制模块组成CAN现场总线控制系统。