0 引言
随着数字信息技术和网络技术的高速发展,各种嵌人式系统已成为了市场的新焦点。鉴于嵌入式系统是对功能、可靠性、成本、体积和功耗等有严格要求的专用计算机系统,因此降低其系统功耗、提高内置电源持续工作的能力就成为一项重要的研究内容。
与笔记本电脑类似,嵌入式系统通常配备一个由多只电池串联组成的整体式电池包 .当经过反复充电使用而其主要参数不再满足整个系统要求时,必须更换整个电池包。一般说来,由于电池包内部各个电池之间的电气参数略有差异,很难使得每个单体都得到平衡、充分的放电,进而导致在电池组充电的过程中,电压过高的电池芯可能提早触发电池组过充电保护,而在放电过程中电压过低的电池芯又可能首先导致电池组的过放电保护,从而使电池组的整体容量明显下降,使得整个电池组的实际容量常为电池组中性能最差的电池所限。
针对上述问题,目前常用两种解决方法:
①研究或选用新型电池,尽量减小个体差异并从整体上提高电池的额定容量,例如由最初的镍镉、镍氢电池发展到现在主流的锂电池;②提高电池芯的利用率,即利用监测技术探察每个电池芯的工作状况。若有部分电池芯过早地放电结束或者出现问题时,能够自动检测并予以提示,此时只需进行个别更换即可同样保证系统正常工作。
对于普通用户而言,难以直接涉足前者所属的相关领域,而后者所述方式能够较为方便、容易地得到实现。由此一来,可望较好地解决前述问题,同时避免了电池组整体更换时其中的正常电池也连带报废的现象,进而提高电池利用率。此外,尚可解决专用电池成本较高、购买不易的问题,以便有效降低系统的维护成本。
1 监测系统工作原理与电路设计
结合一个具体的手持/嵌入式超级终端系统,文中对其内置电源的监测模式进行了较为详尽的研究。
因其使用通用的五号可充电电池,所以可按第二方法考虑解决电池的使用和更换问题,进而基于LinuX操作系统较好地实现了相应的"电池管理与更换提示"功能。
1.1 监测系统工作原理
本系统采用12节额定电压为1.2V的镍氢电池串联供电,并通过专门设定的12个监测点逐一监测。
监测点上的模拟电压值通过多路开关和辅助电路输入ARM芯片S3C2410x自带的AD转换器,再经Linux(驱动程序和GPIO端读取相应监测点的电压值,传递给数据处理和图形显示等应用程序,从而实现了电源的监测。具体方法如图1所示。
图1 电源监测系统电路图
1.2 AD转换与辅助电路
监测系统利用S3C2410x自带的AD转换器将模拟电压输入转换为应用程序所需要的数据。芯片自带AD转换器为8路模拟输入、10bit数字输出,最大转换率为500ksps,转换时钟为2.5MHz,模拟输入范围为0-3.3V.本系统所需要监测的电压范围为0~14。
4V,针对这种情况,本系统设汁了分压电路,在应用程序中只需要利用比例公式就能计算出各个监测点的实际电压值。并且,考虑到监测精确度和电路功耗的因素,把分压电路的总电阻定为4.5kQ.这样一来,对应的模拟输人电压值范围为0.26-3.2V,以便充分利用的AD转换器的输入带宽。此时电路的耗损功率仅为0.04608W。
1.3 控制电路
利用S3C2410x的GPIO端口控制选通多路门开关电路,监测系统可以随机地提取不同监测点的电压值。选通逻辑通过译码实现,如表1所示。
表1 选通逻辑
2 电源监测系统驱动程序设计
鉴于文中所述的超级终端系在Linux环境下运行,各个检测环节的驱动程序和相关的实施策略、编写方法亦多有特点,现详细描述如下。
2.1 Linux驱动程序工作原理
在Linux内核中,设备驱动程序是作为文件系统的一个模块存在的,它对下负责与硬件设备的交互,对上通过一个通用的接口挂接到文件系统上,从而和系统的内核等联系起来。它是软件概念和硬件设备间的一个抽象层。系统调用是内核和应用程序之间的接口,而设备驱动程序则是内核和外设之间的接口。
设备驱动程序为应用程序屏蔽了外设硬件的细节,从应用程序角度来看,对于外设的操作方法与普通文件一样。设备驱动程序与系统外设关系如图2所示。
图2 Linux驱动程序与系统外设关系图
2.2 字符设备
字符设备是Linux系统中最简单的设备,可以像文件一样访问。当字符设备初始化的时候,其驱动程序向Linux核心登记,在chrdevs向量表中增加一个device_STruct数据结构条目。这个设备的主设备标识符用作这个向量表的索引。一个设备的主设备标识符是固定的。chrdevs向量表中的device_struct数据结构包括一个登记设备驱动程序名称的指针和一个指向一组文件操作的指针。这组文件操作本身位于这个设备的字符设备驱动程序中,并处理一些特定任务。本电池监测系统在Linux下的驱动程序就把外设视为字符设备,在驱动程序里实现了打开、读、写和关闭等操作。
2.3 电池监测驱动实现策略
系统内部,I/O设备的存取使通过一组固定的入口点来进行的。这组入口点由特定设备的设备驱动程序提供,在数据结构file_operatiONs()中定义。该程序定义了一个数据结构为file_operations()的变量adc_fops。
2.3.1 adc_open函数
此函数打开并初始化设备以待I/O操作。adc_open()子程序必须对其做好必要的准备,如果设备是独占的,adc_open()子程序必须设置一些标志以表示设备处于忙状态。
2.3.2 adc_read函数
对AD转换器设备文件进行读操作时调用adc_read()子程序。电池监测系统要求实时读取外设监测点的电压值。因此,在adc_read()函数中实时触发AD转换器开始工作,并且利用程序轮询方式读取转换后的数据。adc_read()函数内容如下:
2.3.3 adc_iocd函数
控制外围的辅助电路时调用adc_iocd()函数。对照监测点逻辑控制表,从S3C2410x的GPIO端口发出选择指令,接着就可以进行读操作以读取相应的数值。在不需要监测时,控制监测系统进入省电模式。
2.3.4 adc_close()函数
adc_close()函数用来关闭外设。当监测结束时,应用程序会调用此函数关闭设备文件。同adc_open()函数一样,也可以为NULL.
3 设计Qt/Embedded应用程序和植入Qtopia的方法
QT/Embedded为嵌入式Linux提供了一种友好交互接口,是完整的自包含C++GUI和基于LinuX的嵌人式平台开发工具 ,专为高端嵌入式图形领域应用而设并得以普及。鉴于文中所使用的系统需要按照手动点击检查和欠压自动报警的方式工作,所以,必须遵循相应的规则和方法,进行高效、美观的图形界面设计。
3.1 编写Qt/Embedded应用程序
在宿主机上编译Qt for Xll时生成的Qt Designer软件是一个非常流行的快速应用程序开发工具,用来设计界面和编制代码。在Qt Designer中,可以通过拖拉或点击的方式,在一张空白表单的适当位置上添加一些输入框和按钮等窗口组件。这时Designer工具会自动编写和维护代码。
使用Qt Designer进行C++程序编制的基本步骤是:首先建立窗体,并根据应用的需要在窗体中添加控件。Qt会将建立的窗体保存为。ui文件,使用Qt提供的uic工具将文件转换为。h和。cpp文件,对于控制动作是需要手动添加不同的操作函数。之后使用progen工具为该应用程序建立。pro工程文件,并通过tmake工具为该工程建立Makefile文件。最后,只需要运行make即可生成可执行文件。
在编写操作函数时,本系统通过计算相邻监测点的观测值确定每个电池芯的电压值。通过查询选用电池芯的放电结束电压查找表,得出每个电池芯的剩余电量。当电池组电量降至一定阈值或某个电池芯的储电量低于3%时,利用应用程序报警,通知用户予以充电或按照指示的电池编号及时进行个别更换。这样,既可保证电源的正常工作指标,又能够提高所有电池的利用率。
3.2 将应用程序植入Qtopia
在Qtopia平台上发布自己的应用程序,需要三个文件:一个执行文件、一个启动器文件、一个图标文件。
执行文件就是前面讲到编写并编译生成的可执行文件,需要将该可执行文件保存在qtopia/bin目录下。图标文件就是为应用程序制作48*48大小的PNG格式的小图像,它一般存放在qtopia/pics目录下。同时还需要建立应用启动器(。desktop)文件,把它保存在qtopia/apps/Applications目录下。将上述文件分别复制好以后,重新运行Qtopia,就可以看到添加的应用图标,点击此图标便可运行该应用程序了。
4 结束语
降低系统能耗需要嵌入式系统硬件环节提供可靠支持,同时也离不开嵌入式操作系统和应用程序对硬件资源的合理管理。现有的Linux提供了电源管理的部分功能,但由于具体进行嵌入式系统设计时的灵活性,一般需要根据特定需要而定制应用程序对电源电量进行精确的监测与提示。通过对手持式终端设备中电源监测技术的研究和实现,将有助于其它类型嵌入式系统的电源监测、管理工作的完成,亦有望对类似系统的建立具有一定的参考和借鉴价值。<
免责声明:本文仅代表作者个人观点,与电源在线网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
来源:c114