基于80C196KC的CAN总线智能数据采集模块设计
时间:09-05
来源:作者:赵泉明 张桂香
点击:
数字信号采集电路
电液伺服实验台需要采集的物理量之一是液压缸的位移,实验室现有装备的位移传感器有2种:感应同步器和旋转光电编码器。二者都配有带BCD码输出的数显测量仪表,直接采集数显表的数字量可以保证采集模块具有仪表的高精度,避免因采集传感器前端脉冲而带来的误差,同时也使电路更加简洁。
数字显示仪表的有效BCD码位数为5位(个、十、百位及2位小数位),另带一位符号位,共有21位二进制位。80C196KC片内不带程序存储器,因而用P3和P4口作为地址数据总线,单片机剩余有效IO口资源较少,因此必须扩展并口。并口扩展可以采用专用扩展芯片或通用74系列的逻辑芯片,为了简化电路和编程,采用常见的可扩展24路IO口的82C55A并口扩展芯片。现场的数字显示仪表的输出是非标准的TTL电平,为了实现模块与前端仪表兼容和隔离,对输入的数字信号采用了TLP521光耦进行电平转换和信号隔离。
A/D转换电路电路
本模块中A/D转换器选用AD1674,它与AD574兼容,12位分辨率,输入电压范围0~±10V或0~±5V单双极性可选,转换时间为10μs,单通道最大采集速率50KHz,片内带基准电压、三态缓冲器,且具有采样保持电路,完全满足设计的需要。
模拟电压信号来自BLR1型拉压式称重传感器,传感器压力测量量程为0~5000kg,输出电压信号0~16mV。为适应AD1674输入电压范围,需对传感器的微弱电压信号放大,但同时并存许多噪声源:传感器内阻、电缆电阻、放大器电路以及电路周围的电磁干扰源。因此,电压信号前端采用低通滤波器和差分放大器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转换AD1674。196单片机在模块中主要工作于8位总线宽度下,由于AD1674采用了12位并行输出模式,因此还需动态改变总线宽度。为了简化电路,以及适应196单片机较高总线速度的要求,译码电路放弃了传统的门电路组合的方法,采用了可多次编程的通用阵列逻辑器件(generic array logic)GAL16V8。这样可以减少元器件数量、降低线路复杂程度,同时降低故障机率及提高硬件设计的灵活性。
GAL16V8引脚分配及逻辑表达式如下:
由上述逻辑表达式可以看出,外围器件地址基地址由最高4位地址A12~A15决定,AT28C256、SJA1000、82C55A及AD1674对应基地址分别为:2000H,A000H,B000H,C000H。当选通AD1674时,单片机总线宽度控制引脚BUSWIDTH将置为高,动态调整到16位总线宽度,其余时刻,BUSWIDTH为低,单片机保持8位总线宽度。INTCAN和INTADC分别是对SJA1000和AD1674中断请求信号取反。GAL表达式文件用ABEL软件编译形成JED文件,使用通用编程器烧入芯片,且可反复多次烧写,方便调试。
软件编程
控制软件的合理设计是模块实时、有效地完成数据采集及通信任务的关键,主要包括系统初始化、CAN信息处理、数据采集及处理等功能模块。系统开放一个定时中断,定时时间对应上位机发送来的采样周期。CAN报文的接收主要有2种方式:中断和查询方式。为提高系统的实时性,同时也保证接收缓冲器不出现数据溢出现象,模块中采用中断接收方式。CAN报文发送采用查询方式,即当需要发送数据时,将预先组织好的数据帧按字节写入SJA1000的发送缓冲寄存器中。
SJA1000的初始化主要是在SJA1000的复位模式下设置相应寄存器。在初始化CAN内部寄存器时应注意同一网络中各模块的通信速率的设置应一致。下面给出SJA1000工作在BasicCAN模式下的简单的初始化源程序:
以上程序段可以正确初始化SJA1000,为了提高程序可靠性和容错性,实际应用中应该读出SJA1000寄存器内容并加以比较,从而判断是否正确写入。
结束语
基于以上所述的软、硬件设计实现了CAN协议所包括数据链路层和物理层,由于CAN总线协议没有定义应用层,因此在实际的应用中有必要定义高层通信协议,即相应的命令、参数和数据的格式。国际上比较流行的基于CAN底层协议的高层协议有DeviceNet和CANopen,我们在简单应用中,采用了自定义的简单通信协议,在此不作叙述。设计的智能数据采集模块应用于电液伺服控制系统以来,运行情况良好,由于CAN总线的应用,大大提高了分布式数据采集和控制系统的灵活性、可靠性和实时性,建立了一个有效的现场总线控制系统的实验教学平台。同时该数据采集模块也可以方便地移植到工业上的其它控制系统中,与其它基于CAN总线的智能控制模块组成CAN现场总线控制系统。
电液伺服实验台需要采集的物理量之一是液压缸的位移,实验室现有装备的位移传感器有2种:感应同步器和旋转光电编码器。二者都配有带BCD码输出的数显测量仪表,直接采集数显表的数字量可以保证采集模块具有仪表的高精度,避免因采集传感器前端脉冲而带来的误差,同时也使电路更加简洁。
数字显示仪表的有效BCD码位数为5位(个、十、百位及2位小数位),另带一位符号位,共有21位二进制位。80C196KC片内不带程序存储器,因而用P3和P4口作为地址数据总线,单片机剩余有效IO口资源较少,因此必须扩展并口。并口扩展可以采用专用扩展芯片或通用74系列的逻辑芯片,为了简化电路和编程,采用常见的可扩展24路IO口的82C55A并口扩展芯片。现场的数字显示仪表的输出是非标准的TTL电平,为了实现模块与前端仪表兼容和隔离,对输入的数字信号采用了TLP521光耦进行电平转换和信号隔离。
A/D转换电路电路
本模块中A/D转换器选用AD1674,它与AD574兼容,12位分辨率,输入电压范围0~±10V或0~±5V单双极性可选,转换时间为10μs,单通道最大采集速率50KHz,片内带基准电压、三态缓冲器,且具有采样保持电路,完全满足设计的需要。
模拟电压信号来自BLR1型拉压式称重传感器,传感器压力测量量程为0~5000kg,输出电压信号0~16mV。为适应AD1674输入电压范围,需对传感器的微弱电压信号放大,但同时并存许多噪声源:传感器内阻、电缆电阻、放大器电路以及电路周围的电磁干扰源。因此,电压信号前端采用低通滤波器和差分放大器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转换AD1674。196单片机在模块中主要工作于8位总线宽度下,由于AD1674采用了12位并行输出模式,因此还需动态改变总线宽度。为了简化电路,以及适应196单片机较高总线速度的要求,译码电路放弃了传统的门电路组合的方法,采用了可多次编程的通用阵列逻辑器件(generic array logic)GAL16V8。这样可以减少元器件数量、降低线路复杂程度,同时降低故障机率及提高硬件设计的灵活性。
GAL16V8引脚分配及逻辑表达式如下:
由上述逻辑表达式可以看出,外围器件地址基地址由最高4位地址A12~A15决定,AT28C256、SJA1000、82C55A及AD1674对应基地址分别为:2000H,A000H,B000H,C000H。当选通AD1674时,单片机总线宽度控制引脚BUSWIDTH将置为高,动态调整到16位总线宽度,其余时刻,BUSWIDTH为低,单片机保持8位总线宽度。INTCAN和INTADC分别是对SJA1000和AD1674中断请求信号取反。GAL表达式文件用ABEL软件编译形成JED文件,使用通用编程器烧入芯片,且可反复多次烧写,方便调试。
软件编程
控制软件的合理设计是模块实时、有效地完成数据采集及通信任务的关键,主要包括系统初始化、CAN信息处理、数据采集及处理等功能模块。系统开放一个定时中断,定时时间对应上位机发送来的采样周期。CAN报文的接收主要有2种方式:中断和查询方式。为提高系统的实时性,同时也保证接收缓冲器不出现数据溢出现象,模块中采用中断接收方式。CAN报文发送采用查询方式,即当需要发送数据时,将预先组织好的数据帧按字节写入SJA1000的发送缓冲寄存器中。
SJA1000的初始化主要是在SJA1000的复位模式下设置相应寄存器。在初始化CAN内部寄存器时应注意同一网络中各模块的通信速率的设置应一致。下面给出SJA1000工作在BasicCAN模式下的简单的初始化源程序:
以上程序段可以正确初始化SJA1000,为了提高程序可靠性和容错性,实际应用中应该读出SJA1000寄存器内容并加以比较,从而判断是否正确写入。
结束语
基于以上所述的软、硬件设计实现了CAN协议所包括数据链路层和物理层,由于CAN总线协议没有定义应用层,因此在实际的应用中有必要定义高层通信协议,即相应的命令、参数和数据的格式。国际上比较流行的基于CAN底层协议的高层协议有DeviceNet和CANopen,我们在简单应用中,采用了自定义的简单通信协议,在此不作叙述。设计的智能数据采集模块应用于电液伺服控制系统以来,运行情况良好,由于CAN总线的应用,大大提高了分布式数据采集和控制系统的灵活性、可靠性和实时性,建立了一个有效的现场总线控制系统的实验教学平台。同时该数据采集模块也可以方便地移植到工业上的其它控制系统中,与其它基于CAN总线的智能控制模块组成CAN现场总线控制系统。
- 基于MSP430系列单片机的CAN总线接口转换卡设计(01-17)
- CAN总线—PROFIBUS-DP总线网关的实现方法(01-17)
- 汽车CAN总线(01-21)
- CAN总线控制器与DSP的接口(01-21)
- 基于ARM的CAN总线智能节点的设计(01-24)
- 基于WinCE的液位遥测系统软件设计(04-13)