基于S3C2440的真空差压铸造控制系统

2014-10-14 09:27曾彦龙俞子荣陈黎娟
计算机与现代化 2014年2期
关键词:差压驱动程序内核

曾彦龙,俞子荣,陈黎娟

(南昌航空大学信息工程学院,江西 南昌 330063)

0 引言

随着科学技术和工业制造行业的迅速发展,人们对铸件的薄壁度、复杂度方面的要求越来越高。现代铸造中的真空差压铸造技术很好地满足了对铸件生产提出的薄壁化、精密化、复杂化、高质量的要求,因此在航空航天、国防和汽车工业领域被广泛运用[1-3]。目前国内外的真空差压铸造控制系统大都存在人机互动缺乏、成本过高的问题,例如西北工业大学研制的TY-1型调压铸造控制系统[4]和北京理工大学研制的基于8031单片机为核心的真空差压铸造控制系统[5],存在着成本和功耗过高、人机互动缺乏、可靠性不强等问题。本文针对此类问题设计了一种基于ARM的真空差压铸造控制系统。该系统通过LCD触摸屏进行人机交互,并设有远程通讯模块,以实施远程监控;同时具有制造过程参数存储、实时参数曲线显示及打印等功能。本文介绍了以S3C2440为核心来设计该真空差压铸造控制系统,描述了控制和铸造的实现原理、系统的硬件组成以及对应的应用软件。利用该系统可有效地实现对铸罐压力的精确控制。系统在铸造的过程中能够实时显示铸造过程中的参数变化曲线,并且实现网络传输、存储打印等功能。该系统有效地提高了控制的可靠性,节约了制造成本且提高了人机的互动性,具有良好的应用推广前景。

1 真空差压铸造的原理

系统通过对各种开关阀的动作进行控制来达到触摸屏设置的工艺参数要求。根据工艺流程要求,该控制系统的工艺流程包括抽真空、升液、充型、加压、升压、保压、卸压阶段等。工作流程如图1所示。

图1 真空差压工作流程

2 系统硬件设计

2.1 系统总体设计

基于ARM的真空差压控制系统主要由4个模块组成:S3C2440为核心的最小系统模块、数据采集模块、开关阀及数字组合阀模块和人机交互模块。S3C2440开发板为核心的最小系统模块包括256M的Nandflash、64M内存SDRAM以及网卡通信、串口等外围电路。真空差压铸造控制系统框图如图2所示。

图2 ARM为核心的控制系统框图

2.2 数据采集模块与开关阀模块

压力采集电路由电流型压力传感器ETM-634(X)-375(M)系列和电流环接收器芯片RCV420组成,传感器压力类型为绝压,输出方式为4~20 mA电流。电流环接收器芯片RCV420将压力传感器产生的电流直接转换成0~5 V的电压信号,由于S3C2440自带的AD芯片只有10位精度,所以利用I2C接口外扩一片16位的ADS1110,ADS1110的基准电压为2.048 V,所以前面需要把0~5 V电压转换成0~2.048 V,经过转换成数字量后传输给CPU采集数据。压力采集转换电路如图3所示。

图3 压力采集转换电路

控制输出开关阀信号共有9路。S3C2440输出的数字量信号由开关阀驱动电路放大成驱动电磁阀的控制信号,实现对开关阀的控制。开关阀驱动电路如图4所示。控制输出数字调节阀有2×8路,数字组合阀是组合式流量调节阀,调节方式是通过4个节流口面积大小成8∶4∶2∶1的比例关系来实现的,相当于8个开关阀,提供256种不同的流量。

图4 开关阀驱动电路

2.3 人机交互模块

本系统采用由Hitachi日立集团生产的TX09D70VM1CBA液晶屏作为人机界面显示。该液晶屏提供240×320图形点阵,262k色真彩色TFT的LCD,支持各种语言,还可自行设计字库,使用方便。芯片中VLINE水平同步信号连接CPU里的LCD控制器,表示一行数据的开始。VFRAME垂直同步信号表示一帧数据的开始。每个VCLCK信号表示正在传输一个像素数据,LCD根据 VLINE、VFRAME、VCLK不停地读取总线数据VD0~VD23显示。

S3C2440的触摸屏接口可以驱动4线电阻触摸屏,当按压时,相互绝缘的两层导电层在接触点相连,不同的触点在x、y方向上的分压值不同,将这两个电压值经过A/D转换后即可得到x、y坐标。

3 系统软件设计

该系统软件分为3个部分:操作性系统平台搭建、驱动程序的移植编写和用户应用程序的设计。

3.1 操作系统的平台搭建

操作系统的搭建主要包括:Bootloader移植、Linux系统移植、根文件系统的构建以及MiniGUI的移植。

(1)Bootloader第一段代码主要进行硬件设备初始化,为加载第二段代码准备RAM空间,并把第二段代码复制过去,然后跳转第二段代码入口。第二段代码最重要的任务是加载和启动内核并传递各类参数给内核。Bootloader移植主要有下列几个步骤,首先新建一个与开发板相应的目录和文件,直接在board目录下将smdk2410复制为100ask24x0,将 include/configs/smdk2410.h 复制为 100ask24x0.h,复制后根据开发板型号对上述两文件进行相应的修改。然后再修改下面两处配置文件,分别是顶层的Makefile和board/100ask24x0/Makefile,最后生成 U-boot.bin 下载。

(2)Linux内核移植:Linux内核主要分为2个阶段,第一个内核引导阶段主要是确定是否支持架构和单板、建立一级页表、使能MMU、保存机器ID等;第二阶段主要是设置与体系机构相关的环境参数、初始化控制台、启动init的程序等。内核移植主要步骤如下:更改顶层的Makefile文件来设置交叉编译工具的路径,修改目录arch/arm/mach-s3c2440中的晶振频率,修改mach-smdk2440.c中的机器ID,修改内存技术设备等,然后再使用arch/configs/S3C2410_deconfig文件来配置内核,之后编译内核。内核配置完成之后,直接执行make进行编译。最后在/arch/arm/boot目录中生成需要的内核镜像UImage[6]。

(3)构建根文件系统:编译安装busybox得到一些Linux命令以及第一个启动的应用程序init,然后创建etc配置文件,以及配置文件指定的应用程序,安装glibc库和创建dev目录,在Linux操作系统中,设备文件放在dev目录中,设备节点影响内核的启动,而内核的启动无法自动创建,因此要制作2个设备节点:console和null。这2个设备节点位于dev目录下。其他的硬件设备驱动也同样要制作相应的设备节点。

(4)MiniGUI的移植:首先,通过执行#tar-xvjf rmlinux-gcc-3.3.2命令建立交叉编译环境。从网上可以下载免费的源代码包。其中主要有3个:libminigui-1.6.10.tar.gz、minigui-res-1.6.10.tar.gz 和 mgsmaples-1.6.10.tar.gz。然后安装并编译 MiniGUI,首先通过#mkdir/minigui建立MiniGUI存放的目录,编译安装 MiniGUI函数库,包括 libminigui、libmgext和libvcongui。最后将MiniGUI资源加入开发板中。将/home/lib目录下所有库文件和/minigui/res目录下所有文件都拷贝在开发板的/usr/local/lib目录下;然后再将/home/etc目录下的MiniGUI.cfg拷贝到开发板上的/etc目录下[7]。

3.2 驱动程序的移植及编写

驱动程序包括周边硬件驱动程序和应用程序驱动。LCD、I2C等各种周边硬件驱动程序已经被编进内核模块的驱动中,再根据硬件不同进行移植修改。应用程序驱动主要包括底层ADC驱动程序和GPIO驱动程序。

3.2.1 AD 驱动程序设计

A/D转换属于字符设备。设备驱动程序就是硬件的接口,连接着用户空间与硬件。ADS1110通过I2C总线与S3C2440进行数据传输,I2C驱动框架如图5所示。

图5 I2C驱动框架

创建ADS1110相关的结构体,由于是I2C接口的AD,要先构造 i2c_client结构体,然后构造i2c_drive结构体,里面设置name以及attach_adapter、detach_client两个重要函数,使它们分别指向ads1110_attach和 ads1110_detach,以实现 I2C总线与ADS1110的连接和分离。还有最重要的函数ads1110_fops的构建,用来存储驱动内核模块提供的对设备进行各种操作的函数。

首先创建安装驱动时的加载函数ads1110_init,调用i2c_add_driver(&ads1110_driver),这个函数会注册ads1110_driver,把其放入driver链表,然后从a-dapter链表中取出每一个i2c_adapter,调用ads1110_attach函数中的 i2c_probe(adapter,&addr_data,ads1110_detect),来确定是否符合相应的设备地址。如果符合,则调用ads1110_detect(),否则继续取下一个i2c_adapter再比较。而在ads1110_detect()函数中,则设置ads1110_client,通过i2c_attach_client()注册,然后通过 register_chrdev(0,"ads1110",&ads1110_fops)注册驱动程序,并把ads1110_fops传入内核,最后调用class_create()和class_device_create()完成类和类设备的创建。

ads1110_detach()完成对类和类设备的注销以及驱动的卸载,然后通过调用i2c_detach_client(client)和kfree(i2c_get_clientdata(client))来完成i2c_client数据结构的注销。

最重要的是ADS1110的读函数ads1110_read(),因为ADS1110是通过I2C总线进行传输,所以需要确定ADS1110设备的地址,并按I2C时序来传输。首先把ADS1110设备地址构造成I2C消息数据组通过i2c_transfer()进行传输,确定了对的设备地址后,再发出读命令,调用i2c_transfer()把采集的数据传输给内核,最后通过copy_to_user()把数据从内核传给用户空间[8]。

3.2.2 GPIO 驱动程序设计

GPIO驱动程序属于字符设备驱动,本设计的GPIO驱动主要是用于控制LED显示和开关阀以及数字组合开关阀的输出控制。同样地,需要入口点通过一个file_operations数据结构在注册设备文件时与外部调用函数关联起来,里面有open函数以及ioctl函数等,ioctl中调用copy_from_user把所需要控制数字量从用户空间传进来,再来通过s3c2410_gpio_setpin输出控制GPIO口。

3.3 用户应用程序设计

图6 Main函数流程图

主任务是开机后通过MiniGUI中的API函数来进行界面的绘制,然后进入应用程序任务的主循环;信号采集任务中,利用16位A/D转换芯片的输出值经过v=Vmax/216×D16的计算得到电压值。其中Vmax是信号上限值,即2.048 V;D16为A/D转换芯片输出值。利用内核传回来的采集数据和MiniGUI提供的绘图函数建立二维坐标系,绘制参数曲线图形。在控制任务中,根据真空差压设定好的参数和实时采集的上下铸罐以及气源罐的压力来进行模糊自适应PID控制。PID控制器的输出值控制开关阀和数字组合阀,以达到真空差压铸造最佳的压力参数值。Main函数流程如图6所示。

4 结束语

本文实现了一种可靠性高的全自动化真空差压铸造控制系统,可以有效地把嵌入式微型计算机的优点结合到铸造领域,以实现低功耗、低成本的优点。系统设计中针对S3C2440的自身精度缺陷,外扩了4个高分辨率工业AD芯片,提高了系统的精度。

[1]熊博文,余欢,严青松,等.真空差压铸造薄壁铸件的研究进展[J].特种铸造及有色合金,2012,32(3):238-242.

[2]毕鉴智,曲万春,王宏伟,等.差压铸造的应用及发展[J].铸造技术,2000(2):16-18.

[3]王新,徐成海,张杨.真空铸造技术的研究现状[J].真空,2005,42(1):6-10.

[4]吴江,冯志军,闫卫平,等.调压铸造技术的研究现状及发展[J].铸造,2009,58(8):804-809.

[5]刘兵,齐燕山,毕维生,等.真空差压铸造调压系统及其微计算机控制[J].中国铸机,1995(6):43-45.

[6]唐征兵.S3C2440下的嵌入式操作系统的移植及应用程序开发[J].现代电子技术,2012,35(24):14-16.

[7]龚惠红.基于S3C2440的MiniGUI移植[J].现代电子技术,2012,35(12):16-18.

[8]黄建明,刘宝林,徐秀林.基于S3C2440多路A/D转换Linux驱动程序设计[J].微计算机信息,2011,27(9):110-111,104.

[9]刘天时,强新建,王瑞,等.ARM7嵌入式开发基础实验[M].北京:北京航空航天大学出版社,2007.

[10]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.

[11]范克东,肖世德,龚邦明.基于ARM微处理器的嵌入式数控系统[J].制造技术与机床,2006(1):15-17.

[12]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[13]强新建,田泽,刘天时.基于S3C2440的触摸屏驱动程序实现[J].航空计算技术,2007,37(4):85-87.

猜你喜欢
差压驱动程序内核
强化『高新』内核 打造农业『硅谷』
基于双差压的脉动流测量方法仿真研究
浅谈差压变送器的校验在应用中的几个问题
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
计算机硬件设备驱动程序分析
微生物内核 生态型农资
Endress+Hauser Deltabar FMD72电子差压液位计
河南省煤气(集团)有限责任公司天然气差压液化工艺研究
基于MPC8280的CPU单元与内部总线驱动程序设计