基于arm的虚拟直流电测量仪器
摘 要: 为了提高直流电测量精度并简化直流电相关数据采集和处理的流程,设计了一种基于4位半BCD输出的A/D转换直流电测量虚拟仪器。该仪器测量采用了具有双积A/D转化的ICL7135芯片完成直流电数据采集,采用ARM9嵌入式芯片和Linux+Qt/E系统进行数据处理和显示。软件部分采用模块化设计,可以对数据进行多种计算机处理。该系统抗工频干扰性能好,测量精度高,接口丰富,系统应用方便,软件功能强大。相关的实验取得了预期良好的效果。
关键词: A/D转换; 嵌入式系统; ICL7135; 虚拟仪器
中图分类号: TN919?34; TP368 文献标识码: A 文章编号: 1004?373X(2013)08?0133?03
0 引 言
虚拟仪器是在计算机技术的基础上发展起来的,结合数据采集技术,实现各种电量的测量[1]。在直流电测量时,采用速度高的AD,工频电压等干扰量使得测量结果不稳定。本文采用了转换速度低双斜积分式4位半单片A/D转换器ICL7135实现了一种直流电测量仪器。ICL7135输入阻抗达109 Ω以上,对被测电路几乎没有影响;有自动校零;精确的差分输入电路;自动判别信号极性;可输出超、欠压输出信号;采用位扫描与BCD码输出[2]。计算机系统采用嵌入式ARM开发板,有串口、网口、USB接口。可实现通道选择、数据处理、存储、共享、传输。
1 系统构成
系统由ICL7135外围电路及与ARM开发板接口电路组成,ICL7135外围电路如图1所示。
ICL7135采用了双电压供电。SingnalInput为被测电压输入,2脚为基准电压,22引脚为时钟输入[3],频率100~200 kHz之间,不同的时钟输入决定了采样速率,时钟频率为120 kHz是可以有效地抑制工频干扰。23引脚输入电压极性,D1~D5分别为输出电压低位到高位,B1,B2,B4,B8对应的BCD码。ICL7135时钟输入信号由ARM2440的12 MHz晶振通过74HC4040芯片64分频得到187.5 kHz;每秒约4次A/D在转换。与ARM接口电路参见图2。
ICL7135的D1~D5分别接ARM2440的GPG0,GPG3,GPG5,GPG6,GPG7引脚;B1,B2,B4,B8接GPG8~GPG11脚;CLK和74HC4040的Q5端相连。ICL713转换完毕后D5~D4时序如图3所示。ICL7135AD转换完毕后D5产生脉冲,B1~B8输出最高位数值的BCD码,接着D4~D1分别输出下一位数值的BCD码[4]。
2 驱动程序
嵌入式系统采用ARM2440开发板,操作系统为Linux,虚拟仪器驱动程序流程图如图4所示。
其中全局变量GPG(0,3,5,6,7)设置为外部中断模式,GPG(8~11)设置成I/O模式;vaule[ ]存取A/D转换后各位的数值。
3 应用程序设计
嵌入式系统对实时性的要求高,对的GUI提出了更高的要求,嵌入式GUI必须占用空间小、可裁减定制、运行速度快,而且要满足高可靠性和高性能。当前嵌入式轻型GUI的工具库有很多,如Microwindows,MiniGUI,Xfree86,Ot/E等[5]。Qt/E作为嵌入式GUI的实现工具,支持帧缓冲驱动,它可以在没有X?Server或XLib的支持的条件下直接写帧缓冲,节省了内存使用,提高了程序的运行效率[6]。
3.1 交叉编译环境(基于ubuntu?10)
第1步 安装交叉编译工具链[7]:
解压arm?linux?gcc?3.4.1.tar.bz2
解压后的默认目录/usr/local/arm/3.4.1,修改/etc/profile设置环境变量
PATH=/usr/local/arm/3.4.1/bin:¥PATH
第2步 编译tslib?1.4:触摸屏库
解压到/home下
#./autogen.sh
#./configure ??prefix=/home/linux/mytslib ??host=arm?linux ac_cv_func_malloc_0_nonnull=yes
#make
#make install
第3步 交叉编译QT:解压 qt?embedded?linux?opensource?src?4.4.2.tar.gz
进入解压目录运行:
#./configure ?embedded arm ?xplatformqws/linux?arm?g++ ?qt?libpng ?qt?gfx?linuxfb ?qt?gfx?qvfb ?qt?gfx?vnc ?qt?gfx?transformed ?qt?gfx?multiscreen ?qt?kbd?usb –libdir /lib ?confirm?license ?qt?mouse?tslib ?I /home/linux/mytslib/include ?L /home/linux/mytslib/lib
通过configure配置可以增加或者裁减掉opengllibpnglibjpeg等库支持。
#make
#make install
设置Qt环境变量:
QTEDIR=Qt目录
PATH= Qt目录/bin/:¥PATH
LD_LIBRARY_PATH= Qt目录/lib/:¥LD_LIBRARY_PATH
配置完成后用QCreater编写程序,交叉编译成arm开发板可执行文件。
3.2 应用软件编写
Qt采用C++语言编写。为了体现程序可读性,为显示、存储、传输部分分别建立了类[8]。
程序框图如图5所示。
其中:
(1)数据采集部分参考代码:
intfd=open(设备)
read(fd,buffer)
(2)曲线以图片形式存储到U盘参考代码:
fn="/udisk/"+QString::number(num)+".png";
pixmap=QPixmap::grabWidget(&figure);
pixmap.save(fn,"png"))
远程传输采用串口参考代码:
fd=open("/dev/ttySAC1",O_RDWR|O_NOCTTY|O_NDELAY);
write(fd,data)
图6为虚拟仪表在arm2440开发板运行界面。
4 结 语
本为设计了一种基于嵌入式ARM系统的虚拟仪器,该仪器抗干扰性强,测量精度高,且接口丰富,可实现数据处理、存储、共享,传输。本仪器设置了串口通信传输距离近,如需远程传输数据可采用Socket编程[9],基于TCP/IP协议实现可靠数据传输。
参考文献
[1] 徐波,童悦.基于虚拟仪器的高准确度电子式电流互感器模拟输出校验系统[J].电力自动化设备,2011,31(2):146?148.
[2] 王存堂,陈刚,徐国芳.基于ICL7135的电子水平仪[J].灯与照明,2006,30(3):49?51.
[3] 廖钜锋.7135在智能电压/电流表中的应用[J].中国仪器仪表,2004(5):44?45.
[4] 井俊凯,章广富,刘明兰.PIC单片机与7135在温度变送器中的应用[J].2006,30(3):49?51
[5] 陈重文,杨邦荣,李晓卫,等.基于Qtopia Core的嵌入式Linux GUI平台移植与开发[J].四川理工学院学报,2008,21(1):50?53.
[6] 张娟,张雪兰.基于嵌入式Linux的GUI应用程序的实现[J].计算机应用,2003,23(24):11?13.
[7] 谭大鹏,李培玉,潘晓弘.基于Qt/E的嵌入式工业监测轻型图形用户界面构件库开发[J].计算机集成制造系统,2009,15(2):399?405.
[8] HEIMER M K.HANSEN S.Embedded developmentwith Qt/Embedded [J]. Dr. Dobb’s Journal, 2002, 27(3): 48?53.
[9] 梁小容,万相奎.基于Linux的嵌入式心电监护仪[J].重庆大学学报,2004,27(10):14?17.
[10] 金锋,武志辉.轻量级嵌入式Linux图形驱动程序与图形用户接口[J].北京理工大学学报,2008(3):233?236.
[11] 李聪玲.液氧/煤油发动机试验控制系统软件架构与设计[J]. 火箭推进,2009,35(2):46?53.
[12] 刘丽宁,李志勋.双曲梁传感器推力测量技术应用[J].火箭推进,2009,35(6):57?61.