基于PIC单片机的便携式测试记录仪设计
基于PIC单片机的便携式测试记录仪(以下简称记录仪)既有一般数据采集装置的实时采集与保存功能,同时又能够对采集数据进行实时处理、显示和打印。适用于对采集速度要求不高、交流供电比较困难以及无须长期留人值班的场合。
以追求高可靠、低功耗、小体积设计思想的本记录仪具有如下功能:对现场物理量进行实时采集、保存、处理与显示;自动识别现场安装的传感器数量、传感器号和量程;自动和手动两种采集方式,自动采集适用于长期无人值班的固定场合,手动采集便于对分布在不同区域的物理量进行测试;与PC机通讯,可根据需要将采集数据下载至PC数据库;实时打印;自检功能,避免了系统运行过程中可能遇到本身无法容错处理的异常事件而导致的死机现象。
1 硬件设计
1.1 总体设计原则
根据高可靠、低功耗、小体积的设计思想及应用对象几乎对采集速度无要求(此处指系统本身的采集速度已远远超过实际应用要求)的特性,总体设计原则是: 元器件采用低功耗、宽范围工作电源的CMOS集成电路;总线采用口线少的串行总线;允许情况下,尽量用软件实现硬件功能,用中断代替查询工作方式;一旦系统空闲则立即使其进入低功耗休眠状态,当需要时再用外部中断予以唤醒。
1.2 硬件组成
根据总体设计原则,硬件组成如图1所示。其中:单片机为美国MicroChip公司的中档产品PIC16C74,+5V供电、4MHz主频时功耗低于2mA;E2PROM存储阵列由超低工作电压(+2.5V~+5.5V)、具有可编程选择多种特性的8KB智能化电可擦除存贮器24LC65芯片组成。其中,0#为传感器识别片(以下简称识别片),保存现场实际安装的传感器数量、传感器号及量程。该芯片被设计在放大器板上,永久安装于现场。传感器号由4位数字组成,前2位表示组号,后2位表示传感器组内号。1# 为字典片,分为三个存储区:第一存储区被设置成高寿命写入区,保存表头参数,如疵点单元计数器、记录计数器、记录指针、自动采集时间等;第二存贮区为字典区,保存传感器修正系数、实时打印所涉及的汉字国标码等,查找时以传感器号为关键字进行指针定位;第三存储区被定义为疵点单元地址队列,保存在写过程中遇到的疵点单元地址。2#~7# 为数据片,保存实时采集的数据。RS232口为最简单的零调制3线经济型,具有双重功能,接上TPμP_T微型打印机,则进行实时打印;接上PC机,则与PC进行全双工通讯。A/D转换器MAX189为串行、12位逐次逼近型,功耗75mW,最大转换时间8.5μs。实时时钟DS1302具有可编程涓流充电功能,能够提供秒、分、时、日、月、星期、年至2100年,并且对闰年和小于31天的月份进行自动调节。键盘由手动、自动、通讯、打印、清零等五个触摸按键组成,通过按键产生外部中断唤醒单片机完成相应功能。液晶显示器(LCD)采用4位半静态方式驱动,用来显示处理后的结果以及系统运行过程中检错的代码。32.768kHz晶振用于自动采集时产生定时中断。
图1 基于PIC单片机的便携式测试记录仪组成
1.3 工作原理
本记录仪基本工作原理是:一旦系统完成某项工作后,立即进入低功耗休眠状态,当需要时再由外部中断予以唤醒。
1.3.1 加电初始化
加电后,首先初始化有关寄存器和接口,然后自检各功能部件。测试结果无论正常或错误均以代码形式显示在LCD上,进入休眠状态。
1.3.2 采 集
本记录仪有自动和手动两种采集方式。
休眠状态下,当按手动键时则进入手动采集过程。首先读识别片和字典片,以确立现场中实际安装的传感器数量、量程及数据片可写空间。若数据片未写满,则从组内0通道传感器开始,循环对现场中实际安装的所有传感器进行采集、处理、显示,直至当再按一次手动键时,方将传感器号、量程、最近一次采集值(注意不是实时处理后结果,而是原始A/D转换码值)以及采集时刻的日历信息─年、月、日、时、分、秒等组成的记录写入记录指针指向的数据片中,接着对表头参数进行修改,进入休眠状态。
休眠状态下,当按自动键时则进入自动采集过程。首先开放定时中断,然后进入采集─保存─休眠─唤醒─再采集─再保存─再休眠─再唤醒的循环状态,直到数据片被写满或人工干预结束自动采集过程为止。上述唤醒由外部中断完成,其单片机从休眠状态到唤醒工作之间的时间间隔有等距和变距两种形式可供选择。所谓等距即每次采集的时间间隔相同。与其相反,变距则每次采集的时间间隔随采集次数的增多而变长或缩短,视实际应用需要而确定。本记录仪出厂设置为等距1小时,即每间隔1小时采集1次。
1.3.3 通讯和打印
休眠状态下,当按通讯键时,进入和PC通讯过程。首先由PC端Win98下的专门处理软件完成串口1(若记录仪与PC Com1口相连)或串口2(若记录仪与PC Com2口相连)的自动配置,然后可根据工具条上的图文进行等距、变距、选择、数据下载、事后处理等操作。
休眠状态下,当按打印键后,则在TPμP_T微型打印机上打印出所有保存的记录。
1.3.4 清 零
休眠状态下,当按清零键时,则清除数据片中保存的所有记录,即使记录指针指向数据片首址。
2 软件设计
本记录仪软件由实时处理程序和组成记录仪诸功能部件的驱动程序组成。
2.1 实时处理程序
实时处理程序调用相关驱动程序完成模拟量采集、数字滤波、插值运算、实时显示、记录合成及记录保存。本记录仪采用的记录格式从高至低依序为:传感器号,量程,采集值,年,月,日,时,分,秒。
2.2 驱动程序设计
驱动程序设计的基本思想是:首先完成相关接口、寄存器的初始化,然后根据具体物理部件产生微操作时序,并对操作过程中遇到的异常事件进行容错处理。
2.2.1 读/写E2PROM 驱动程序
I2C总线由时钟线(SCL)和数据线(SDA)组成。根据I2C总线协议,将图1所采用的24LC65芯片的读/写操作按操作顺序分解为:使总线处于空闲状态(SCL、SDA均为高电平);发送读/写启动信号(SCL保持高电平,SDA从高变低产生下降沿);在数据线SDA上读或写数据位(SCL高电平时,SDA状态为有效的读或写数据位,SDA状态,即0或1的变化必须在 SCL低电平期间完成);发送读/写结束信号(SCL保持高电平,SDA从低变高产生上升沿)。如果为写操作,每写完1字节数据后,24LC65在数据线SDA上回送握手应答信号,表示该字节数据已被可靠写入。以上微操作通过汇编语言编程实现。
本记录仪以记录方式读/写数据片。因此,对写来说,首先读字典片,以便用其中的表头参数判断当前数据片是否已写满。若已写满,则在LCD上显示无写空间标记代码,然后返回休眠状态;否则,将记录写入记录指针所指向的数据片中,同时对表头参数进行修改。在写过程中,重要的是处理疵点单元。尽管24LC65在写过程中出现的疵点概率极少,但若不正确处理,则会导致目标数据丢失甚至出现系统死机现象。作者曾采用数据轮询技术进行容错处理,收到了良好的效果。其基本思想是:每当在数据线上写完1字节数据后,便反复查询24LC65回送的应答信号,但最多不超过50次(此数足够24LC65写入时间);javascript:window.open(this.src);" style="cursor:pointer;"/>若超过查询次数仍无应答信号,便认为该单元为疵点单元,将其地址记入疵点单元地址队列,并使疵点单元计数器加1,然后在下一比邻单元继续写入原数据。如果连续两单元为疵点单元,则认为整个芯片有问题,此时,在LCD上显示该单元所在的芯片号(芯片号参见图1),然后,返回休眠状态。
对读来说,首先判断数据片是否为空。若为空,则在LCD上显示无记录标记代码,然后返回休眠状态。否则,继续判断数据片是否有疵点,如果无疵点,则从数据片首址开始按序读出所有记录;否则,在按序读记录过程中,根据疵点单元地址队列内容,跳过所有疵点单元,以保证读出的记录连续、真实、可靠。
2.2.2 采集驱动程序设计
A/D转换器MAX189所带串口与单片机PIC16C74的SPI口完全兼容。因此,在A/D转换完成后,只要启动单片机SPI口产生13个同步时钟脉冲便可连续两次从SPI数据缓冲器上获得12位转换结果。由于本记录仪采集的参数个数依现场安装的传感器数不同而不同,因此,驱动程序必须能予以自动识别。图2为采集驱动程序流程,其基本设计思想是:首先读识别片,以确定实际安装的传感器数量,然后从0通道传感器开始进行采集,直到实际安装的最后一个传感器采集完毕为止。图2中:CHAN:通道寄存器;COUNT:传感器数量寄存器。
3 测试设计
测试设计是通过测试程序完成对记录仪本身各功能硬件的性能测试。测试程序独立于实际应用程序,在单独的单片机中,使用时只要拔掉记录仪模板上的单片机而用其代之即可。测试程序设计的基本思想是:首先根据不同测试对象(即部件)产生不同的测试数据和测试期望数据,然后以测试数据为入口参数,调度相关驱动程序产生目标数据,最后用测试期望数据与目标数据进行比较,以此判断所测硬件性能之良劣。
3.1 E2PROM测试设计
E2PROM测试需要与PC机通讯。其基本原理是:首先产生8种测试数据:0x00、0xff、0x55、0xaa、0x0f、0xf0、0x5a、0xa5(0x表示16进制数),然后分别以此8种测试数据为入口参数,交替调度写、读E2PROM驱动程序3次(即先写后读3次)。每读一次,与测试期望数据(此处测试数据与测试期望数据相同)进行比较,若不相等,则对相应片错误计数器加1。测试结果实时地显示在记录仪LCD和PC机上。LCD只显示总错误个数,PC机则依次显示、保存总错误个数及错误单元地址。
3.2 A/D测试设计
A/D测试也需要与PC机通讯。由于本记录仪最多可采集8路传感器参数,因此,测试程序对键盘重新定义如下:当手动、自动、通讯、打印、清零键有键按下时,对应测试0~4通道传感器;当手动、自动、通讯键其中之一与清零键同时按下时,则对应测试5~7通道传感器。测试只对放大器满量程的10%、50%、90%等3点进行采集。其原理是:首先,测试程序扫描键盘,当扫描到有键按下时,则调度采集驱动程序对该键盘定义的通道传感器进行连续采集,采集结果不作任何处理,实时地显示在记录仪LCD和PC机上。LCD只显示当前的A/D转换码值,PC机则显示并保存当前A/D转换码值、各点最大、最小转换码值及两者绝对差值。技术人员可以此判断前向通道(传感器、放大器、A/D)工作性能的好坏。笔者曾连续测试0通道传感器6个半小时,发现最大码差为9,表明前向通道工作相当稳定。
3.3 实时时钟测试设计
实时时钟DS1302测试需要借助PC机完成。其测试原理是:首先PC机上的测试程序读PC系统日历信息─年、月、日、时、分、秒、星期,并进行发送。记录仪在接收后,立即调度写DS1302驱动程序将接收的PC系统日历信息写入DS1302相关功能寄存器中,并使DS1302以此为时基进行计时。此后,进入记录仪发送、PC接收的无限循环状态,即:每隔10ms,记录仪调度一次读DS1302驱动程序,并将获得的最近日历信息予以迅速发送;而处于接收状态的PC接收后,立即与PC系统当前日历信息进行比较,如此循环,直到人工干预结束测试为止。在上述测试过程中,记录仪LCD只实时地显示日历信息的分、秒两位,PC机则实时地显示记录仪和PC机两端完整的日期、时间及两者比较差。另外,通过观察记录仪LCD上显示的分、秒位变化,也可初步判定DS1302的性能。笔者曾连续运行该测试程序24小时,偏差极小,足以满足本系统的需要。
4 实际应用
本记录仪已投入实际应用一年多,其可靠性、稳定性、操作性和精度均受用户欢迎。不足之处是:目前功耗还比较大,作者在+12V供电时测得电流为45.5mA尚需进一步改进。