微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 半导体培养箱的ARM嵌入式控制系统研制

半导体培养箱的ARM嵌入式控制系统研制

时间:08-10 来源:互联网 点击:

2.1嵌入式Linux软件平台的搭建
本培养箱的嵌入式Linux软件平台是在PC机上的Federa 12操作系统下建立,具体内容如下:(1)建立交叉编译环境。为了能在宿主机的平台上编译出可在目标机体系结构平台上运行的程序,需要建立交叉编译环境,包括可用于目标平台ARM的编译器arm-gcc、相关的链接和运行库-Glibc以及二进制文件处理工具-Binutils等,这些GNU软件都是在i386平台上使用。本设计以EABI _4.3.3为交叉编译工具,修改PATH参数完成配置。(2)制作Bootloader。Bootloader是嵌入式Linux系统的引导加载程序,是系统上电后运行的第一段代码。它可以初始化必要的硬件设备,创建内核需要的基本信息,从而将系统的软硬件环境带到一个合适的状态,便于引导和加载操作系统。本设计采用支持Nand Flash启动和USB下载内核镜像文件系统的u-boot。(3)Linux内核的配置、裁剪和编译。Linux内核配置系统由Makefile、配置文件(config.in)以及配置工具三部分构成,其中Makefile定义内核的编译规则,配置文件给用户提供的选择功能,配置工具包括配置命令解释器和配置用具界面。本设计使用Linux-2.6.30.4内核版本,针对交叉编译要求,定义Makefile的CROSS_COMPILE=arm-linux-,并根据实际需要完成内核配置,最后制作内核镜像文件[4]。(4)制作根文件系统。文件系统负责管理系统的数据与文件。YAFFS是专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备。而且此系统提供了损耗平衡和掉电保护等功能,可以方便地集成到系统中去,具有速度快、占用内存少的特点,因此选用Busybox- 1.13.0制作的YAFFS作根文件系统。
2.2 系统内核层的驱动程序设计
系统内核层的程序主要为外接硬件设备的驱动程序,是内核与设备之间的交互层。Linux支持三类设备:字符设备、块设备和网络接口。在Linux操作系统中,每个硬件设备的应用程序可以利用open( )、release( )、read( )及write( )等函数对硬件设备进行操作[6]。内核层的驱动程序主要指DS18B20、SHT11、热电半导体与超声波加湿等硬件设备的驱动程序,它们分别定义在三个源文件中,其中ctrb.c中包含热电半导体、超声波加湿、T4灯及风扇等设备的驱动程序,18b20.c与sht.c分别为DS18B20与SHT11传感器的驱动程序。上述设备均属字符型的驱动设备, 在系统启动后利用insmod指令将其动态加载到内核中。驱动程序包括初始化模块、卸载模块、读模块和写模块。其中初始化模块主要包括初始化内部数据结构、硬件以及使用设备前应该完成的工作;读写模块主要负责对DS18B20与SHT11的读写。在Linux2.6内核中CPU使用虚拟地址访问外部设备, ctrb_ioctl()函数实现用户程序通过访问设备文件的方式对设备的间接操作。由于驱动程序属于内核层,程序最后要将数据从内核态拷贝到用户态,供应用程序使用。图4为初始化模块驱动程序工作流程图。

2.3 系统应用层的程序设计
应用层的程序设计主要是在Qt/Embedded平台上完成的,负责设计触摸屏的应用程序GUI,另外通过调用驱动程序以实现硬件平台的工作算法。Qt/Embedded是由Trolltech公司开发的面向嵌入式的Qt版本。它通过Qt API与Linux I/O以及Framebuffer直接交互,拥有较高的运行效率,其类库采用C++封装且完全面向对象以实现真正组件编程。其开发套件使用C++语言编程,具有功能强大、使用简单、控件资源丰富且可移植性好等特点[7]。
本系统主程序的触发来自两方面。其一是按照系统时钟,依据时序触发各事件并完成相应的处理;另一方面由用户界面操作触发。根据设计要求,系统主程序采用双线程工作方式,分别定义Ctrb_n 与SensorT继承QThread实现双线程。 QThread代表在程序中一个单独的线程控制[4],在多任务操作系统中,它和同一进程中的其他线程共享数据,但运行起来就像一个单独的程序一样。QThread不是在main()中开始,而是在run ()中开始运行的。
在工作算法中添加模糊PID自适应控制,使控制器能够在线自动调整比例系数Kp、积分系数Ki和微分系数Kd,以期获得最佳的温度控制。在PID控制器中,比例系数Kp值的选取决定于系统的响应速度,积分控制Ki用于消除系统的稳态误差,微分系数Kd在于改变系统的动态特性。调节初期选取较大的Kp值以提高响应速度,较小的Ki值以防止积分饱和,Kd=0以保证系统的稳定性;在调节中期,随着误差的减小Kp也逐渐变小,Ki值加大以尽量消除余差,Kd值取较小值以调节系统的动态特性;在调节过程后期,Kp值调到较小值以保证系统的平稳性,Ki值取适中以消除余差,Kd值取小值以控制过程的制动作用[5]。主程序的工作流程如图5所示。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top