刘尧猛,丁忠林,畅卫功
(天津科技大学计算机科学与信息工程学院,天津 300222)
智能全站仪双电池供电及双LCD背光控制系统
刘尧猛,丁忠林,畅卫功
(天津科技大学计算机科学与信息工程学院,天津 300222)
采用OMAP3530微处理器和Linux操作系统设计了智能全站仪,可实现距离和角度测量、参数设置及数据管理等功能.为提高系统野外续航能力和显示效果,采用TLV0832微处理器设计了双电池供电和双LCD显示硬件电路.在分析Linux 2.6.29的SPI同步串行接口驱动运行机制和驱动接口功能的基础上,提出了Linux 2.6.29的内核配置SPI驱动方法,针对TLV0832的A/D转换时序和TLV5626的D/A转换时序,设计相应的测试程序并实现了双电池显示和双LCD背光控制功能.本文设计可为全站仪GUI应用程序调用底层驱动及其他户外仪器实现双电量显示与双LCD背光控制提供参考.
OMAP3530;全站仪;底层设计;Linux;SPI;驱动程序
全站仪主要应用于大地测量等工程领域[1].随着光电子技术、计算机技术等新技术的应用,全站仪已逐步向自动化、智能化方向发展,全站仪自动化程度高、功能多、精度好,通过配置适当的接口,可将野外采集的测量数据直接输入计算机进行数据处理或输入自动化绘图系统.与传统的测量方法相比,全站仪省去了大量的中间人工操作环节,使工作效率和经济效益明显提高,同时也避免了人工操作、记录等过程中差错率较高的缺陷.
当前智能全站仪大多采用WinCE系统,测量程序丰富,操作简单、便捷,并可全汉字显示,数据传输可采用电缆传输、PC卡传递或无线通信,还可以根据用户需要编写测量程序,进行系统开发.智能全站仪的代表产品有索佳POWERSET SET4000、尼康DTM750、南方NTS-960R等[2].
随着传统智能全站仪向影像辅助摄影扫描全站仪发展[3],就需要采用具有更好的图像处理能力和数据通信能力的嵌入式MCU和嵌入式操作系统.而当前采用的单核32位MCU处理器的图像处理能力不足,采用的WinCE操作系统在定制性、实时处理能力、高可靠性等方面都不如Linux操作系统;此外,大多全站仪都只配置单电池供电,单块LCD显示,不能很好地满足野外工作需要.
本文采用双核结构的OMAP3530微处理器和Linux2.6.29操作系统设计智能全站仪.为提高其续航能力和在室外环境的显示效果,采用双电池供电和两块LCD屏幕.
智能型全站仪器可实现距离测量和角度测量等测量功能[4],显示设置、电源设置、蜂鸣器设置、测距设置和测角设置等系统控制功能,存储管理、测点管理、文件管理等数据管理功能,内业通信等数据通信功能.智能全站仪的整体设计原理如图1所示.其中底层设计主要包括硬件层和设备驱动层.
图1 整体设计原理图Fig.1 Overall design
2.1 主控板硬件设计
微处理器选用OMAP3530,其采用65,nm低功耗工艺制造,内部集成了4倍于ARM9器件处理能力的CORTEX-A8弹性内核和430,MHz的TMS 320C64x+DSP内核.ARM+DSP的双核结构使操作系统效率和代码执行更加优化,ARM端负责系统控制工作,DSP端则承担实时信号处理任务,从而成功地解决了性能与功耗的最佳组合问题.具有双核结构的OMAP3530非常适合智能全站仪的设计:低功耗可以更好地实现测量的便携性,满足野外测量需要;借助ARM对多种操作系统的支持,可以获得更好的监护界面;利用DSP的运算能力可以对测量数据进行快速的计算[5].
图2 主控板硬件原理图Fig.2 Control board hardware
由于OMAP3530具有丰富的控制器接口,如USB,SPI,I2C等,基于OMAP3530的嵌入式系统可以支持多种接口:根据系统需要设计了键盘和LCD输入输出接口;此外还有MiniUSB,可以很好地挂载U盘,用户可以通过U盘下载系统中的数据;而数据采集接口主要用于采集测量数据;蓝牙接口可实现蓝牙数据通信;其他接口可用于系统的调试与测试,如RS232和JTAG接口.
2.2 双电池电量显示与双LCD液晶背光控制硬件设计
系统采用两块电池供电和两块LCD显示,控制原理如图3所示.
图3 双电池电量显示与双LCD背光控制原理图Fig.3 Double electric quantity display and double LCD backlight control
采用D/A转换器TLV5626实现双LCD显示的背光控制,采用双通道A/D转换器TLV0832实现双电池电量显示.TLV6526和TLV0832都是串行设备,OMAP3530上的SPI是一个主/从同步串行总线,有4个独立的SPI模块(SPI1,SPI2,SPI3,SPI4),其中SPI3支持2个SPI设备,由SPI3_CS0和SPI3_CS1分别选择TLV5626和TLV0832.TLV0832是双通道A/D转换器,可以直接通过DI选择通道.但是TLV5626只有1路D/A转换,无法同时实现两块LCD的背光控制,因此使用了单一控制双输出电源驱动芯片TPS61150A,该驱动芯片有2个选择引脚,可以控制2个输出单独打开或者同时打开,系统使用OMAP3530引脚GPIO_26和GPIO_27实现对两路电压的输出选择.
3.1 SPI驱动分析
在Linux2.6.29内核中,SPI的驱动架构可以分为3个层次:SPI核心层、SPI控制器驱动层和SPI设备驱动层[6–7].其中,SPI核心层的代码位于driver/ spi/spi.c.由于该层是平台无关层,本文将不再叙述.
3.1.1 SPI控制器驱动层
每种处理器平台都有自己的控制器驱动,SPI控制器驱动层属于平台移植相关层,它的职责是为系统中每条SPI总线实现相应的读写方法.在物理上,每个SPI控制器可以连接若干个SPI从设备.SPI控制器驱动程序的注册采用Platform设备和驱动机制.
Platform设备的注册代码位于内核文件的arch/arm/mach-omap2/devices.c中,代码主要包括Platform设备的定义和Platform设备的注册,其中注册是由内核在启动时完成的.
在Linux2.6.29内核中,SPI控制器驱动程序位于drivers/spi目录下,OMAP3530的SPI控制器驱动程序为omap2_mcspi.c.该驱动程序注册的目的是初始化OMAP3530的SPI控制器,并且向SPI核心层注册SPI控制器.该驱动程序主要包括Platform驱动的定义和Platform驱动的注册.
3.1.2 SPI设备驱动层
SPI设备驱动层为用户接口层,其为用户提供了通过SPI总线访问具体设备的接口.A/D和D/A均属于字符设备,可直接使用系统提供的SPI通用设备程序.
SPI通用设备驱动程序通过带有操作集file_operations的标准字符设备驱动为用户空间提供了访问接口.其中操作集和一般字符设备驱动一样,也包括打开、读、写和关闭等接口.此驱动模型是针对SPI设备的,只有注册board info时的modalias是“spidev”才能由此驱动访问.访问各个设备的基本框架是一致的,具体的差异将由从设备号来体现,代码位于drivers/spi/spidev.c中.
应用程序调用的驱动接口函数主要包括:打开和关闭设备节点函数open()和close()、读写设备函数read()和write()、接口函数ioctl().其中,读写设备函数每次读写不能大于4,096,Byte;接口函数可以实现读写SPI设备的模式、读取和设置SPI设备的字长、读取和设置SPI设备的通信时钟频率、一次进行双向/多次读写操作等功能.
3.2 SPI驱动配置
Linux内核配置时,在[Device Drivers]菜单下选择[SPI support]子菜单,在该子菜单下选择[McSPI driver for OMAP24xx/OMAP34xx]和[User mode SPI device driver support]即可.配置结束后,可以查看主控板文件系统下是否有/dev/spidev3.0和/dev/spidev 3.1,进行配置验证.
4.1 A/D驱动程序测试
在用户空间,Linux设备是以文件的形式进行操作的.如果驱动程序正常加载,系统启动后会在Linux根目录下自动生成/dev/spi3.0和/dev/spi3.1设备文件.其中,TLV0832对应的设备文件为spi3.1.打开设备文件后,可以直接利用SPI设备驱动接口函数控制TLV0832的模数转换.TLV0832的A/D转换时序如图4所示.
图4 TLV0832的A/D转换时序Fig.4 A/D conversion timing of TLV0832
利用SGL/DIF和ODD/EVEN地址复用选择不同的通道,从而实现双电池的电量显示,A/D测试程序流程如图5所示.
图5 采用TLV0832的A/D测试程序流程图Fig.5 Flow chart of A/D test program with TLV0832
SPI进行数据收发用到的结构体主要有两个:spi_message和spi_transfer,两者都定义在include/ linux/spi/spi.h中.spi_transfer用于实现数据收发,该结构体的成员包括接收缓冲区、发送缓冲区、发送数据的长度、速率、每个数据的位数等参数.以上流程实现代码主要使用了SPI设备驱动程序中的static long spidev_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)函数,其中参数cmd是要对SPI设备进行的具体配置与操作,具体命令参数可查看设备驱动程序.
使用万用表测量通道0的电压为2.305,V,通道1的电压为0.016,V;运行A/D测试程序转换后的电压值如图6所示,实测值和测试程序转换值一致.TLV0832的量程为0~3.3,V,而实际电池的电压为0~8.4,V,电池电压经过62 kΩ和30 kΩ电阻分压后得到通道电压,因此通道0的实测电压2.305 V对应的电池电压值为7.068 V.
测量电池的剩余电量一般有电压测试法、电池建模法、库仑计法.本文采用电压测试法,根据的原理是电池放电时其电压会随着电池电量的流失而下降.由于电池电压与电量不是线性关系,因此这种测量方法不精确.具体方法是,将电池的放电曲线按时间进行4等分,确定电池电压值与显示电量的关系为:电池最大电压为8.4,V,大于7.23,V时显示三格电量;大于6.84,V小于等于7.23,V时,显示两格电量;大于6.4,V小于等于6.84,V时显示一格电量;大于6,V小于等于6.4,V时不显示电量格数;小于等于6,V时,提示电量低.
图6 A/D测试程序运行结果Fig.6 Operation results of A/D test procedure
4.2 D/A驱动程序测试
TLV5626,D/A转换与TLV0832,A/D转换都采用SPI接口,可以直接利用系统提供的通用SPI设备驱动程序,只是选择的通道不一样.其中,使用SPI3_CS0选择TLV5626,对应的设备文件为/dev/spidev3.0.TLV5626的D/A转换数据格式见表1.
表1 TLV5626的D/A转换数据格式Tab.1 D/A conversion data format of TLV5626
SPD是速度控制位,决定转换的速率,PWR是电源控制,而R1和R0决定了写不同的寄存器.如果写控制寄存器,则12位数据中低两位决定了参考电压的选择.例如:写控制寄存器且参考电压为2.048,V,则16位控制数据为0xD002.如果是写数据缓冲器,则12位数据中高8位为新转换数据,而低4位为0.16位数据缓冲器dout的值可以通过如下程序得到:
根据以上转换原理,测试程序流程如图7所示.
图7 采用TLV5626的 D/A测试程序流程图Fig.7 Flow chart of D/A test program with TLV5626
通过给定不同数字量,利用万用表测量其转换后的模拟量进行验证.当给定数字量0x11时,理论电压为0.22,V,实测电压为0.266,V;当给定数字量128时(图8),实测电压为1.675,V,理论值(128/255)× 3.3=1.656,V;当给定数值量为255时,理论电压为3.3,V,实测电压为3.279,V.结果表明转换正确,符合设计要求.
图8 D/A测试程序运行结果Fig.8 Operation results of D/A test procedure
利用OMAP3530的SPI接口,通过A/D接口芯片TLV0832和D/A接口芯片TLV5626实现了全站仪双电池显示和双LCD背光控制.基于OMAP3530嵌入式双核微处理器的全站仪比当前使用ARM9微处理器的全站仪在性能上有较大的提升.当前广泛应用的Android操作系统其底层仍为Linux内核[8],因此,全站仪底层驱动程序也可以适用于Android操作系统.此外,如果全站仪添加GPRS等通信接口,可很好实现全站仪内外业数据通信和在线数据处理,从而全面提高全站仪的功能和生产效率.
[1] 周天彤.基于ARM技术的智能全站仪外业测量一体化系统设计与分析[D].南京:南京理工大学,2007.
[2] 王刚.全站仪结构原理与发展分析[J].现代物业,2013,12(10):35–36.
[3] Scherer M,Lerma J L.From the conventional total station to the prospective image assisted photogrammetric scanning total station:Comprehensive review[J].Journal of Surveying Engineering,2009,135(4):173–178.
[4] 杨俊志.全站仪的原理及其检定[M].北京:测绘出版社,2004.
[5] 黄飞.OMAP平台的开发及其在便携式仪器中的应用[D].长沙:国防科学技术大学,2004.
[6] 李忠良,陈卫兵,邹豪杰,等.嵌入式Linux下AD7714与SPI接口及驱动的实现[J].仪表技术与传感器,2011(4):42–44.
[7] 张晓雷,陈相宁,郭剑.嵌入式Linux下基于SPI总线的网络设备驱动设计与实现[J].计算机工程与设计,2008,29(23):6003–6005.
[8] 叶炳发.Android操作系统移植及关键技术研究[D].广州:暨南大学,2010.
责任编辑:常涛
Double Battery Power Supply and Double LCD Backlight Control System of Intelligent Total Station
LIU Yaomeng,DING Zhonglin,CHANG Weigong
(College of Computer Science and Information Engineering,Tianjin University of Science & Technology,Tianjin 300222,China)
OMAP3530 microprocessor and Linux operating system were adopted to design an intelligent total station,which can realize distance and angle measurement,parameter setting and data management,etc.In order to improve the filed endurance and display effect of the system,double battery powered with TLV0832 microprocessor and double LCD display were designed.SPI synchronous serial interface driver operation mechanism and driver interface functions of the Linux 2.6.29 were analysed.Based on this,a kernel configuration method for SPI driving was proposed.According to A/D conversion timing of TLV0832 and D/A conversion timing of TLV5626,corresponding test procedures were designed and the display function of the double power supply and control of double LCD backlight were realized.The research can provide reference for the application of total station GUI to the driver and other outdoor instruments in order to realize the display of double electric quantity and control of double LCD backlight.
OMAP3530;total station;bottom design;Linux;SPI;driver
TP216
A
1672-6510(2015)05-0062-05
10.13364/j.issn.1672-6510.20140109
2014–07–30;
2015–04–14
天津市科技型中小企业技术创新基金资助项目(13ZXCXGX55600);天津市科技支撑计划重点资助项目(12ZCZDGX02400)
刘尧猛(1972—),男,湖南汉寿人,副教授,liuym@tust.edu.cn.