1 引言
在线监测系统中,待测信号幅值在50μV左右,而背景噪声幅值在50mV以上,用一般的采集和测量系统无法准确检测该信号。针对被背景噪声覆盖的微小信号,采用滤波降噪和差分放大手段,提高信噪比,保证待测信号能被准确采集;采用基于ARM核的32位微处理芯片S3C44B0X和基于μClinux操作系统的嵌入式图形用户界面MicroWindows,完成实时显示测量结果和实现故障自动报警,同时具有体积小、功耗低、操作灵活的特点,为实现微伏信号在线监测功能提供了一种良好的解决方案。
2 系统硬件设计
整个微伏信号在线监测系统硬件主要分为两个部分,即前置放大电路和基于ARM的数据采集与显示电路,如图1所示。
2.1 前置放大电路
待测信号幅值为50μV,而背景噪声幅值在50mV以上,SNR(信噪比值)在1/1000以下,所以必须根据信号特点进行降低噪声功率,提高信噪比。通过实验,发现信号与噪声频谱不重叠,噪声频率主要集中在高频段。利用滤波器的频率选择特性,可设置低通滤波器,其通带范围能够覆盖信号的频谱,使信号通过滤波器衰减很少,同时噪声频率处于通带之外,通过滤波器后功率大幅度衰减,因此信噪比得以提高。
本设计采用二阶有源低通滤波器,经实验对比,取二阶有源低通滤波器的截止频率fH为200Hz,品质因数Q为0.707,可使SNR达10以上,SNIR(信噪改善比)达10000以上。
在实际应用中发现,待测信号和监测系统之间的参考零电势点之间存在电势差,由于两者由同一电源供电,因而形成“地环流”。电流从电源地线流入被测信号的接地点,然后通过信号地线流入监测系统,又通过监测系统的接地点回到电源地线,导致在线监测的过程中地线上出现很高的共模干扰噪声。在这样的工作环境下,使用普通的低温漂高精度运算放大电路,不能准确放大和测量待测信号。因此本设计采用高增益、高输入阻抗和高共模抑制比的三运放差分放大电路,消除共模干扰,如图2所示。
集成运放A1和A2都接成同相输入、比例运算电路形式,这样电路输入阻抗很高。电路结构采用严格地对称形式,以使漂移、噪声、失调电压及失调电流等互相抵消。同时采用高精密电阻,以提高测量精度。将滤波后的信号线接入Vi+端口,而把信号地线接入Vi-端口,经过三运放差分放大电路输出电压为:
经实验对比,本设计在强干扰环境下,对微伏信号有较好的放大效果。经过前置放大后的信号,有效地消除了干扰和噪声,具有良好的线性关系,实验结果如图3所示。经过差动放大后的信号,再经过普通运算放大器进行电压平移和放大,即可成为符合A/D采集要求的0~2.5V电压单极性信号。
2.2 数据采集与显示电路
本设计中数据采集和显示电路的核心器件采用32位ARM7内核嵌入式处理器S3C44B0X。S3C44B0X内置部件有8通道10位ADC(模数转换器)、8KB cache(高速缓存器)、内置SDRAM(同步动态存储器)、LCD控制器、2通道UART(通用异步收发器)、4通道DMA(直接存储器存取)、71个通用I/O端口等。
本设计中使用S3C44B0X完成A/D数据采集、LCD控制液晶显示器、键盘输入和故障报警四个主要功能。经前置放大电路处理完成之后的0~2.5V电压电极性信号,由S3C44B0X的10位精度片上A/D采集到CPU中。S3C44B0自带LCD控制器,利用DMA控制器从系统RAM中的显示缓冲区读取显示数据,提供给LCD控制器刷新液晶显示屏。键盘和报警电路利用S3C44B0通用I/O端口进行控制。
3 系统软件设计
本系统软件设计基于μClinux操作系统和MicroWindows图形用户界面。μClinux操作系统是从Linux内核派生而来,在标准的Linux基础上进行了适当的裁剪和优化,具有易配置、体积小、易移植的优点。用MicroWindows图形用户界面实现类似桌面电脑的视窗效果,易于实现人机交互。
系统软件包括操作系统自带的设备驱动程序、操作系统运行环境、根据用户需要自定义的设备驱动程序、封装了底层驱动的中间层接口程序、高级应用程序几个部分。在本系统软件设计中,分别在驱动层和高级应用层程序中实现,其中高级应用层程序框图如图4所示。
高级应用程序的设计以控制算法为核心,多个任务为控制服务。系统内核定时将测得的数据通过回调函数传递给高级应用程序。高级应用程序为每个被测通道分配一个数据缓冲区,数据缓冲区是个含有10个无符号整型数的数组,GCC编译器默认无符号整型数长度为16位。测量电路中ADC为10位模数转换器,缓冲区中的每个单元的低10位存储数值,最高位为1表示该数据无效或者已经被处理,为0表示该数据有效并等待处理,第10~14位表示数据编号,用以区分不同通道的数据。内核驱动程序把测量数据按格式准备好后,回调函数把数据传送给高级应用程序。应用程序只要使用“与”、“或”操作就可以提取数据类型、实际数据等信息。
3.1 自定义设备驱动
设备驱动程序是操作系统和硬件设备之间的接口,它主要完成对设备初始化、实现内核和应用程序与设备之间的数据交换、检测处理设备错误等功能。在μClinux操作系统使用设备文件的方式来进行设备管理应用,一个具体的物理设备被映射为一个设备文件,用户程序可以像对其它文件一样对此设备文件进行打开、关闭、数据读写等操作。
系统软件设计中的驱动层部分,除了使用μClinux操作系统自带的设备驱动程序以外,需要对外部设备编写自定义的设备驱动程序,以满足操作系统的要求。以字符设备为ADC为例,主要对其编写自定义的驱动程序。使用结构体file_operations{}作为ADC字符设备的函数接口,内核通过这个函数接口来操作设备。自定义后的file_operations{}结构体如下:
struct file_operations ADC_fops = {
read: ADC_read, //从设备中读数据操作
poll: ADC_poll, //查询设备
ioctl: ADC_ioctl, //进行读、写以外的IO控制操作
open: ADC_open, //打开设备
release: ADC_release, //关闭设备
……};
编写自定义的驱动程序完成后,内核调用相应的函数即对ADC设备文件进行open、ioctl等具体操作。
3.2 图形用户界面设计
图形用户界面(GUI)把图形视窗引入到嵌入式平台上,其友好的界面为大多数用户所接受,也得到越来越广泛的应用。本设计采用MicroWindows来实现图形界面,以窗口形式显示测量数据及其它参数。MicroWindows是一个较早出现的、开放源码的嵌入式图形用户界面软件,它提供了比较完整的图形功能,支持多种外部设备输入,具有占用空间小、可移植性好的优点。在μClinux操作系统上使用MicroWindows易于图形程序的开发。
MicroWindows采用了层次化结构:在底层提供设备的驱动,在中间层通过一个可移植图形引擎实现绘制多边形、区域填充、使用颜色等,在顶层实现多种API以适应不同的应用环境。MicroWindows API 之间采用消息传递的基本通信机制。消息被储存在应用程序的消息队列中,不同消息对应不同的事件,核心的API通过传递对应相应事件的消息来实现各种功能,如窗口的创建、绘制、移动等等。
在本设计中,编写基于Microwindows的应用程序,基本结构为初始化、创建窗口与资源、进入消息循环三部分。主程序中相关部分如下所示:
int WINAPI WinMain()
{MwRegisterEditControl(NULL); // 申明不使用控件
wndclass.style= CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndclass.lpszClassName = szAppName; // 创建窗口属性的结构体变量
RegisterClass(&wndclass);
hwnd=CreateWindowEx(); //创建窗口
while (1)
{if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) //消息查询
{TranslateMessage(&msg);DispatchMessage(&msg);} //传递消息至窗口处理程序
ScanKey_function(); //扫描键盘
RxKeyvalue(hedit_Param);
……}}
在调用窗口创建函数CreateWindowEx()后,系统在内存中创建了一个虚拟的窗口,之后调用窗口显示函数ShowWindow()就可将虚拟窗口显示为可视窗口,成为Windows风格的视窗界面。在本设计中,主程序运行时不断调用提取消息函数PeekMessage(),查看消息队列是否收到任务信息,当有信息产生时,就执行对应的消息处理函数。同时,在消息循环里也反复调用键盘缓冲区查询函数RxKeyvalue (),查看是否有键盘输入,以便随时响应。
4. 抗干扰措施
在本设计中,采用低温漂的基准稳压电源为前置放大电路供电,并且在每个元件的电源管脚处加去耦电容。元器件选用高精度、漂移小的精密运算放大器;选用高精度、低温漂的精密电阻;信号线采用双绞线或屏蔽线。印刷板布线时,尽量缩短前置放大电路的信号线,并确保了电路接地、屏蔽良好。
5 结语
本文创新点在于设计和实现了一种基于ARM的微伏信号在线监测系统,以差动放大方式消除外界对测量信号的干扰,利用S3C44B0X微处理器和μClinux操作系统实现液晶屏显示数据、人机交互和故障自动报警功能,为实现微伏信号在线监测提供了一种体积小、功耗低、操作灵活的解决方案。本设计已投入使用,长时间工作稳定。