嵌入式技术在推焦数据采集系统中的应用
引言在炼焦生产中,推焦时间、平煤时间、推焦电流等数据是反映焦炉实际操作情况的重要指标。由于推焦车是室外移动装置,而采集好的数据需及时传送到中心主控室的计算机中完成数据的分析、处理和记录,因此为了实现推焦过程的有效监测,需要解决数据采集和数据通信这两大问题。
1 监控系统的基本结构
按项目要求,中心主控站能对2个移动距离达200 m的推焦车上的电流信号进行数据采集,所以采用无线数据传输的模式,通过无线数传电台控制推焦车上的从站接收主控站的命令,并接收从站发出的推焦电流等模拟量以及炉号等数字量信息。系统的基本结构如图1所示,其中上位机(主站)由1个PC终端和D21DL无线数传模块(含天线)组成,二者之间通过串口通信。
图1 焦炉生产管理监控系统示意图
鉴于数据库技术已经相当成熟,中心主控站的数据管理可以较容易地实现,所以关键技术就在于下位机对现场数据的实时采集,以及下位机与上位机之间可靠的无线数据传输。
2 下位机的硬件组成
下位机以ARM7微控制器为核心,利用ARM7内核对外围设备,包括无线数传模块、LCD显示模块、模拟/数字信号输入、键盘扫描,进行控制和管理,基本框架如图2所示。
图2 系统外围设备框架图
(1) ARM控制板
控制板是下位机的核心,控制系统的各个功能模块。控制板的MCU采用Atmel公司的AT91SAM7S64芯片,它有64 KB高速Flash和16 KB的SRAM,片内主要有存储器控制器、复位控制器、时钟发生器、电源管理控制器、先进中断控制器、周期性间隔定时器、时间窗看门狗、实时定时器、并行输入/输出控制器、外设数据控制器、USB2.0全速设备接口、同步串行控制器、通用同步/异步收发器、主从串行外设接口、3通道16位定时器/计数器、4通道16位PWM控制器、两线接口、8通道10位A/D。控制板的外围电路主要包括电压转换电路、串口输入/输出控制电路、JTAG电路、模拟量数字量输入/输出电路、时钟芯片控制电路、USB接口电路、EEPROM电路等。
(2) 液晶显示模块
下位机的本地显示功能通过控制带有SED1335控制器的液晶显示模块实现。SED1335是日本Seiko Epson公司生产的液晶显示控制器。它的输入/输出缓冲器功能较强,指令功能丰富,并行发送4位数据,最大驱动能力为640×256点阵。SED1335硬件结构由MCU接口、内部控制和驱动LCM组成。
(3) 无线数传模块
由于推焦车要在较大范围移动,因而采用无线数据传输是一种较好的选择。北京捷麦公司生产的SA68D21DL无线数据收发模块是一种可在微机与微机之间或微机与单片机之间进行全双工远距离无线通信的收发模块,它还可以脱离微机组成多点报警、遥控系统。其主要特点为:串口具有TTL、RS232、RS485等多种电平接口;内含EEPROM看门狗电路,可掉电记忆设置参数;发送/接收距离为1~3 km。
(4) 电流变送器模块
在电力电子产品中,对大电流进行精确的检测和控制是产品安全可靠运行的根本保证。推焦车设备中,最大电流可达400 A。经多方调研比较,采用北京森社公司生产的霍尔电流变送器模块,其主要特点为:工作区内精度高于1%;动态性能响应时间小于l ms,跟踪速度高于50 A/ms;平均无故障工作时间>50 000小时;易于安装。
(5) 键盘控制模块
传统的行列式编码数字键盘要占用很多I/O引脚,而基于A/D转换器的键盘一般只用一个I/O引脚就能读取多个按键。其工作原理为:键盘由一系列分压电阻和按键组成,不同的按键对应着不同的分压电阻,从而得到不同的分压及不同的A/D转换数值。这种键盘只能识别单个按键按下的情况,本键盘只有12个按键,现场操作人员只需输入炉号1~10以及“确认”、“取消”键,因此完全满足要求。
3 下位机的软件设计
软件模块包括串口控制程序、A/D数据采集、无线模块收发控制、LCD更新显示控制、定时器控制和按键扫描输入控制部分。
由于下位机工作模式简单,出于精简代码量以及程序稳定性的考虑,未在控制器中使用操作系统等复杂的进程调度机制。下位机上电后直接运行主程序,完成初始化过程之后进入主循环,接收上位机发送的命令并据此进行相关操作。对于实时性要求较高的数据采集、LCD屏显示更新和键盘扫描任务,则在定时器中断服务程序中完成。
主程序主要包括系统初始化(初始化MCU、总线、I/O端口、LCD、A/D、参数、串口等)、无线数传模块设置(读取并设置地址和身份码)、显示开机画面、开定时器中断、接收串口数据、数据校验和发送数据。中断控制程序包括键盘扫描、判断键值响应按键、模拟量和数字量采样以及按照协议将数据填充到发送数组。
3.1 对LCD显示屏的控制
ARM系统使用12个I/O端口控制内置SED1335控制器的显示屏。其中4个端口为控制命令端口,8个端口为数据端口,端口控制信号图如图3所示。
图3 LCD并行数据接口
AT91SAM7S64并行输入输出控制器(PIO)管理多达32个全可编程I/O线。对于LCD显示屏的控制,实际上是根据SED1335控制器的时序进行操作,即通过PIO控制器控制并行数据输出。
程序的具体实现就是先总线初始化,配置控制LCD的8条数据总线和4条命令总线,设置外围设备时钟使能寄存器(PCER)、上拉禁止寄存器(PPUDR)、多驱动禁止寄存器(MDDR)、输入滤波禁止寄存器(IFDR)、输出写使能寄存器(OWER)、PIO使能寄存器(PER)、输出使能寄存器(OER)和输出数据寄存器(SODR)。
3.2 对无线数传电台模块的控制
AT91SAM7S64的USART,支持与使能由发送器到接收器的数据传输的外设数据控制器的连接,可管理多类型串行同步或异步通信。推焦车上的下位机通过USART口同无线数传电台模块通信,控制电台接收和发送数据,相关接口的核心芯片是MAX3232EEA,具体电路如图4所示。
图4 串口接口电路
串口的初始化包括初始化外设I/O,使能时钟,配置串口工作模式(如波特率)等,使能串口;串口接收采用超时接收,其含义是:当串口收到1字节的数据后,若在一定时间间隔内收到另外1字节数据,则可认为后1字节同前1字节为同一包数据中的内容,若在一定时间间隔内未收到数据,则认为此包数据接收结束。这时,串口状态寄存器的相应位置1,通过查询状态寄存器该状态位的值可判断是否接收结束。串口数据发送只要设置好发送数据寄存器和发送数据计数器,即可开始发送。
3.3 系统中定时器的作用
本系统通过AT91SAM7S64的定时器/计数器模块控制数据采集周期、按键扫描和LCD更新。AT91SAM7S64定时器/计数器(TC)包括3个相同但相互独立的16位定时器/计数器通道。
每个通道有3个外部时钟输入,5个内部时钟输入及2个可由用户配置的多功能输入/输出信号。每个通道驱动一个可编程内部中断信号来产生处理器中断。定时器/计数器有2个作用于这3个通道的全局寄存器。块控制寄存器允许使用同样的指令同时启动3个通道。块模式寄存器为每个通道定义外部时钟输入,允许将它们连接。另外,每个通道有一个16位寄存器,寄存器值在所选时钟每个上升沿处自减,当计数器达到0xFFFF并转为0x0000时,表明发生溢出,TC_SR(状态寄存器)中COVFS位置1。
定时器初始化包括设置定时器时钟,配置模式寄存器,设置定时器中断等。
定时器中断25 ms进行一次A/D转换,控制采集AI1、AI2模拟信号输入,以及键盘信号的扫描。由于AI模拟信号每250 ms采集一组,所以每进入10次中断将最近5次采集到的AI信号进行去极值求平均数操作,并装入发送数组通过串口发往无线数传模块;而键盘按键信号由于要求较高的实时性,所以每25 ms判断一次。之所以把AI数据采集和键盘扫描放在同一个定时器中,是因为这两个功能模块均用到了ADC控制器;若放在两个定时器中断中分别对ADC控制器进行操作,则会造成资源访问冲突,导致程序跑飞和系统瘫痪。当判断按键输入部分结束,对按键将作出实时响应,主要体现在LCD的显示内容上。每250 ms采集一组AI信号时,同样也会将采集到的数据转换为工程量通过LCD显示出来,实现数据的本地实时显示。
3.4 系统中A/D的使用
A/D是一个数据采集系统的基础,其信号采集精度和采集周期直接决定了系统的准确性和实时性。在AT91SAM7S64芯片内,8路模拟量通过1个八选一复用开关后进行A/D转换,相应的转换结果送入一个所有通道可用的通用寄存器,即通道专用寄存器中,可配置为软件触发、外部触发ADTRG引脚上升沿或内部触发定时器/计数器输出。ADC支持8位或10位的分辨率,默认情况为10位分辨率;对于所有通道只需要一个启动命令来初始化转换序列。ADC硬件逻辑对工作通道自动执行转换,然后等待新请求;当转换完成后,10位数字结果存于当前通道的通道数据寄存器(ADC_CDR)及ADC最后转换数据寄存器(ADC_LCDR)中。
本系统中,用AT91SAM7S64芯片的ADC控制器定时对相应通道的模拟量进行采集。另外,系统还通过A/D读取键盘数据,根据ADC转换值的不同判断按键。
ADC的初始化包括初始化时钟、复位ADC、配置模式寄存器、设置A/D通道等。在本系统中,程序使能4路A/D通道,2路用于对反映推焦参数的模拟信号进行数据采集,另外两路用于对键盘按键信号进行判断控制。相关程序如下:
void set_ADC(unsigned int channel) {
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC,1<<AT91C_ID_ADC ) ;
//使能ADC时钟
AT91F_ADC_SoftReset(AT91C_BASE_ADC);
//复位ADC
AT91F_ADC_CfgModeReg(AT91C_BASE_ADC, 0);
//配置mr寄存器
AT91F_ADC_CfgTimings(AT91C_BASE_ADC, MCK, 500000, 20, 1200);
AT91F_ADC_EnableChannel(AT91C_BASE_ADC,channel);
//设置A/D通道
}
读取A/D转换后的数据,将各个通道的数据分别存入相关数组准备后续处理。
void get_A/D(unsigned int ADC) {
AT91F_ADC_StartConversion(AT91C_BASE_ADC);
//开启转换
while (!((AT91F_ADC_GetStatus (AT91C_BASE_ADC)) & (1 << 4)));//等待转化完毕
ADC = (*AT91C_ADC_CDR6);//通道6的数据
ADC = (*AT91C_ADC_CDR7);//通道7的数据
ADC = *AT91C_ADC_CDR5;//键盘信号输入
ADC = *AT91C_ADC_CDR4;
}
对于所采集的数据,需要进行数字滤波以减少外界干扰的影响。综合考虑电磁环境以及算法复杂度等因素,采用去极值的平均滤波算法,即对短时间内采集到的数据,去除最大值和最小值,把其余值的平均数作为一次数据采集的信号量。
对于键盘按键信号,每个按键按下产生的模拟量值都在一个特定的区间范围内。从软件上看,只需要判断采集按键信号的2路A/D转换值处在哪个区间内,即可判断出哪个键被按下,并且增加相关保护程序,使按键长时间按下不会重复响应,以防止误操作。
结语
与现有的推焦数据采集系统相比,本系统有以下几个特点:将通过A/D采集到的模拟量经过工程量转换后,在LCD显示屏上实时显示,便于推焦车操作及维护人员直观监测数据的变化情况并作相应调整;上位机发送过来的炉号信息和时间信息也在LCD显示屏显示,增强了控制命令的可视性,降低了误操作的可能;采用无线数传模块实现上位机与下位机之间的数据通信,并通过软件校验的方式使传输的误码率降低到系统允许的范围。
此推焦数据监控系统已经交付贵州、山西和山东等地的一些焦化厂使用,达到了预期的运行效果。
贺康(硕士研究生),主要研究方向为嵌入式技术应用;蒋健(副教授),主要研究方向为计算机控制系统;车亮(工程师),研究方向为无线通信。 谢谢分享!:D
页:
[1]