APP下载

基于ARM7-μCLinux并采用超级终端监测两路电压参数

2010-03-26丘宏烈杨燕祥罗晓雪付元柄袁鹏飞

电子设计工程 2010年11期
关键词:驱动程序实时性内核

丘宏烈,杨燕祥,罗晓雪,付元柄,袁鹏飞

(西华大学 电气信息学院,四川 成都 610039)

在工业电力传动现场的实际应用过程中,常常需要监测现场设备。通过监测采集设备的运行参数实时了解、跟踪设备的运行状态,进而分析和诊断设备。

ARM技术是嵌入式系统的重要技术。在众多嵌入式系统厂家参与下,基于ARM系列处理器的应用技术在众多领域取得突破性进展。

ARM技术中的数据采集正向着强实时、高精度等方向发展;数据传输部分向多通信方式、远距离数据传输的方向发展。使用ARM处理器对工业电力传动现场的电力参数进行采集是基于ARM的数据采集系统具有高精度、高速度、强实时等特点。

本文采用μCLinux嵌入式操作系统构建ARM7硬件平台,并对实时性要求较高的数据采集、传输以及显示进行了研究设计和实现。

1 系统总体功能架构

1.1 系统功能图

系统采集两路电压参数的功能如图1所示。

图1 系统电力参数监测功能图Fig.1 Functional block diagram of system power parameters monitor

整个监测系统以ARM7-TDMI为核心处理器,通过A/D转换电路把连续的电压参数转换为处理器所识别的数字量,并通过串口超级终端实时地显示所采集到的电压参数值。选用ARM7处理器,避免了使用单片机不能有效、实时、精确地监测电压的缺点,也避免使用ARM9(包含MMU)使得整个内核庞大、消耗内存、程序运行速率降低的缺点影响监测电压的实时性。选用次开发板与RS-232串口通信不需要通信间的电平转换,系统供电电压与次串口通信电压都是3.3 V。

1.2 A/D转换器

A/D转换电路中的核心部分就是A/D转换模块,如图2所示。A/D转换模块外围电路如图3所示。

图2 A/D转换模块的寄存器功能框图Fig.2 Functional block diagram of A/D converter module registers

图3 A/D转换模块外围电路图Fig.3 Peripheral circuit diagram of A/D converter module

因为要求监测系统对可变电压具有实时监测能力,所以选用可变电阻来改变电压值。两路电压线连接芯片的两个引脚 P0_27和 P0_28,然后连接进 AIN0~AIN1,由 A/D转换模块进行模数转换。

图3中使用了AIN0~AIN1两个引脚作为监测两路电力参数的功能引脚,电压的测量范围为0~3.3 V。ADCR寄存器设置 A/D转换器的工作模式 (21 bit),A/D转换通道(7:0 bit),转换时钟(CLKDIV 时钟分频值)(15:8 bit),并启动 A/D转换(26:24 bit)。ADDR寄存器保存了转换后的二进制编码值(15:6 bit),A/D转换完成标志位,当A/D转换结束时该位置位(31 bit)。

A/D转换时钟分频值计算公式如下:

式中,Fadclk为所要设置的A/D转换器的时钟,其值不能大于4.5 MHz[1]。

1.3 A/D转换器的主要类型

目前,世界上有多种类型的A/D转换器,有传统的并行、逐次逼近型、积分型A/D转换器,也有近年来新发展起来的∑-Δ型和流水线型A/D转换器,多种类型的A/D转换器各有其优缺点并能满足不同的具体应用要求。低功耗、高速、高分辨率是新型的A/D转换器的发展方向。

这里采用逐次逼近型A/D转换器,它由比较器、D/A转换器、比较寄存器SAR、时钟发生器以及控制逻辑电路组成,将采样输入信号与已知电压不断进行比较,然后转换成二进制数。该转换器分辨率低于12位时,价格较低,采样速率可达1 Ms/s;与其他A/D转换器相比,功耗相当低。据此满足本系统10位的模数转换精度要求。但在高于14位分辨率情况下,价格较高;传感器产生的信号在进行A/D转换之前需要进行调理,包括增益级和滤波,这样会明显增加成本[2]。

2 嵌入式μCLinux平台的建立

2.1 μCLinux的特点及移植

μCLinux的开发模式和编程接口与Linux类似。因此μCLinux除了在内存管理方面与Linux差异较大而表现出自己的特点以外,其他很多特点与Linux相同[3]。

μCLinux能够很好地兼容Linux,在一定的条件下,几乎所有的Linux API函数都能够在μCLinux操作系统中使用,这极大地便利了嵌入式系统的开发[4]。

μCLinux的移植分为3个层次级,即处理器体系级、芯片级和目标板级移植。

1)处理器体系的源文件在arch目录下。处理器结构文件目录主要包括:kernel内核源代码,mm-内存管理源代码,lib处理器特定的内部库函数,bootloader包含压缩内核的代码,也是内核文件最后编译生成的地方,tools包含自动产生文件的脚本。μCLinux-dist-20040408在处理器结构上对ARM7TDMI核已经支持,只需修改μCLinux-dist/Makefile。在其中定义处理器架构ARCH:=armnommu和交叉编译器的设置:CROSS_COMPILE=arm-elf-。

2)芯片级移植指当待移植处理器是某种已支持体系的分支处理器,进行芯片层次的移植,需要在该处理器体系结构目录下增加修改部分目录和代码。同处理器体系级移植相比较,芯片级移植不用为μCLinux重新构造一个处理器结构,只需要在该处理器体系某个已存在的芯片基础上,根据二者之间的不同进行修改调试,达到芯片移植的目的。

3)板级移植。当使用处理器已经被μCLinux支持时,主要的工作就是针对目标板进行板级移植。板级移植的主要内容是由目标板相关地址与时钟频率设置,也可能会涉及部分驱动程序的编写[5-6]。

2.2 基于μCLinux的A/D设备驱动的建立

设备驱动程序是介于硬件和Linux内核之间的软件接口,是一种低级的、专用与某一硬件的软件组件。本文采用内核模块的方式安装驱动程序,使得系统内核更加精简,加快应用程序的运行速度。

程序中所用到的函数主要有:

1)访问 I/O 端口方法函数:static int adc_open(struct inode*inode,struct file*filp),用于打开A/D转换通道以及通道的使用计数器递增。这里应用程序用到两次打开函数,分别打开通道1和通道2。

2)read()方法:static ssize_t adc_read(struct file*filp,char*buf,size_t count,loff_t*f_pos),用于读取A/D转换的结果。根据设定的A/D精度的不同,可支持1和2字节数据。

3)ioctl () 方法:static int adc_ioctl (struct inode*inode,struct file*filp,unsigned int cmd,unsigned long arg), 这里要区分ioctl()(输入/输出控制),后者是针对设备的。一般情况下,程序正确地调用函数ioctl()时会导致对某个驱动程序ioctl()方法的调用。ioctl()函数的第 2 个参数会传递给 ioctl()方法的第3个参数,ioctl()函数的第3个参数会传递给ioctl()方法的第4个参数。

在arm-elf-tools编译环境中,编译其生成可执行的二进制文件,然后采用命令mknod建立设备文件。最后用insmod命令安装此驱动程序供应用程序使用[7]。

2.3 监测电压参数的应用程序的建立

应用程序应用于读取两路A/D转换电压参数,程序框图如图4所示。

图4 应用程序流程图Fig.4 Flow chart of application program

建立交叉编译环境,把应用程序编译成可执行二进制文件,并通过NFS挂载到开发板上,测试成功后下载到开发板。在底层结构建立完成后,如何读取两路电压成为关键的问题,此处采用轮流读取两路电压的方法,两路读取间隔为1 s。

3 实验结果

通过超级终端监测两路电压参数的结果如图5所示。据测量结果可知,当改变VIN2的可变电阻时,电压值VIN2迅速改变;随后改变VIN1的可变电阻时,电压值VIN1也迅速随之改变。其精确度比8位的模数转换高9.7 mV,其监测的实时性远超过单片机系统。

4 结 论

本系统建立在ARM7硬件平台及μCLinux操作系统的基础上,解决了监测两路电压参数与两路通道传输的问题。通过此监测试验,所得结果满足测量的实时性,有效性和精确度。硬件的设计本着低成本、低功耗、小体积和实时性的设计思想,采用了IPC2200微处理器,实现了两路电压参数测量,并完成了两路通信接口的传输。

图5 监测结果图Fig.5 The measuring results

[1] 周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.

[2] 兰勇.GEC2410开发板使用手册[M].广东省嵌入式软件公共技术中心,2009.

[3] Hallinan C.Embedded Linux primer-A practical real-world approach[M].New Jersey:Prentice Hall,2006.

[4] 刘峰,陈演平,顾利刚.μCLinux的特点及在嵌入式系统中的应用 [J].交通部上海船舶运输科学研究所学报,2009,32(1):20-27.LIU Feng,CHEN Yan-ping,GU Li-gang.Features of μClinux and its application in embedded system [J].Journal of Shanghai Scientific Research Institute of Shipping,2009,32(1):20-27.

[5] 杨诚.基于S3044BOX的uClinux内核移植实现[J].电脑与电信,2009,11:48-49,52.YANG Cheng.The realization of uClinux kernel transplantation based on S3C44BOX [J].Computer&Telecommunication,2009(11):48-49,52.

[6] 吴川,王斌.基于ADSP-BF533的μClinux嵌入式系统移植与开发[J].现代电子技术,2008,31(12):11-13,21.WU Chuan,WANG Bin.Transplanting and development of μClinux embedded system based on ADSP-BF533[J].Modern Electronic Technique,2008,31(12):11-13,21.

[7] 周立功,陈明计,陈渝.ARM嵌入式Linux系统构建与驱动开发范例[M].北京:北京航空航天大学出版社,2006.

猜你喜欢

驱动程序实时性内核
万物皆可IP的时代,我们当夯实的IP内核是什么?
强化『高新』内核 打造农业『硅谷』
基于规则实时性的端云动态分配方法研究
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于虚拟局域网的智能变电站通信网络实时性仿真
航空电子AFDX与AVB传输实时性抗干扰对比
一种车载Profibus总线系统的实时性分析
驱动程序更新与推荐
驱动程序更新与推荐