基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx

上传人:b****2 文档编号:23012138 上传时间:2023-04-30 格式:DOCX 页数:44 大小:710.17KB
下载 相关 举报
基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx_第1页
第1页 / 共44页
基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx_第2页
第2页 / 共44页
基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx_第3页
第3页 / 共44页
基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx_第4页
第4页 / 共44页
基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx

《基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx》由会员分享,可在线阅读,更多相关《基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx(44页珍藏版)》请在冰豆网上搜索。

基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文.docx

基于ARM平台AndroidLinux系统的网络温度控制系统ARM执行端设计论文

 

学士学位论文

论文题目:

基于ARM平台Android/Linux系统的

网络温度控制系统--ARM执行端

摘要

温度采集的传统方法不仅耗时,而且准确性差,不能满足生活工业中各界人士的精度高,可靠性高的需求。

嵌入式以及单片机处就可以完全处理接收到的温度数据,并根据得到的实时数据进行相应控制及报警。

数字温度计比传统的双金属温度计灵敏度更高,而且由于其测温元件很小,可以测量任何角落,成本低,方便实用。

本系统以嵌入式Linux系统以及STC89C52单片机为控制处理单元,采用DS18B20数字温度传感器来测量环境温度,并将所得到的实时数据进行远程网络传输。

实验表明,系统具有结构简单实用、控制方便、功能齐全、通用性强等特点,系统稍作修改即可被应用于其他生产领域,特别是人体无法接近的高温或危险场所的温度控制。

关键词:

嵌入式;单片机;远程控制;通信;温度;DS18B20

 

ABSTRACT

Traditionaltemperatureacquisitionmethodisnotonlytimeconsuming,buttheaccuracyispoor,cannotmeettheneedsofallwalksoflifeforhightemperaturedatatoimprovethereliabilityofprecisionequipment.SCMmakestheemergenceofcollectingandprocessingtemperaturedatahasbeensolved.Selecttheappropriatedeviceandtemperaturesensorsandfront-endprocessingcircuit,youcangethighprecisionmeasurement,notonlyconvenient,low-cost,time-saving,butalsogreatlyimprovethemeasurementaccuracy.

ThissystemisbasedonembeddedLinuxsystemandSTC89C52MCUTtocontroltheprocessingunit,theuseofsingle-wiredigitaltemperaturesensorDS18B20on-sitetemperaturemeasurements,andtemperaturedataforremotetransmission.Experimentsshowthatthesystemissimpleandpractical,easytocontrol,full-featured,versatilefeatures,thesystemcanbeappliedtootherslightlymodifiedproductionareas,especiallythebodytemperatureinaccessibleordangerousplacestemperaturecontrol.

Keywords:

Embedded;MCU;Remotecontrol;Communication;Temperature;DS18B20

 

第1章绪论

1.1引言

在电子技术飞速发展,信息化时代的21世纪,嵌入式单芯片的应用越来越多,随着科学技术的生产和不断发展,需要对各种参数来测量温度。

例如在钢铁炼钢、锅炉等工业生产中,利用温度的测量和控制来保证工厂生产的正常运行。

在农业农林中,用于保证温室大棚的恒温环境等。

温度在宏观上是表示物体冷热程度的物理量,高中物理课堂上老师还讲过,在微观上来说说是物体内部布朗运动的剧烈程度,而今温度测量是生产生活中很普遍的一个参数。

控制和测量温度对提高各行各业流水线的生产效率、保障人身安全、节约各种资源、促进国家经济水平的提高等方面起到了举足轻重的作用。

由于温度测量的广泛性,温度传感器的应用在生产生活中的应用越来越多。

1.2课题的研究背景、价值及意义

随着当代生活水平的提高,工业4.0的到来,温度的测量已经渗透到生活工厂的各个层面,而且智能家居互联网时代已经离我们不远了。

现如今,温度控制系统已被运用到生产生活的各个角落,但是温度控制是一个没有被研究的领域,但又是和人们生活起居紧密联系的一个现实问题。

由此可见,研究设计一个远程网络温度控制系统,能解决生产生活中的很多问题。

医生经常用温度计检测体温来判断一个人是否发烧感冒;而许多化学反应的工艺过程必须在适当的温度下才能正常进行。

如果环境温度过高或者过低,工厂里面的机器可能发生故障,家用电器可能无法正常工作,锅炉的周围可能发生火灾,储藏的食品可能会腐烂变质。

由此可见,各行各业对温度测量的要求越来越高,所以本课题的研究具有非常高的现实意义。

传统的测温元件是利用两种不同的金属叠压在一起形成的测温元件,但是只能现场显示,因为其测量温度的原理是当被测环境的温度上下波动时,由于测温元件上两种金属的变形程度的不同,然后带动指针显示当前的温度信息。

随着科学技术的发展,后来出现了铂热电阻传感器,可以远程显示。

之后美信公司又生产了一种数字温度计DS18B20,比铂热电阻更加经济实用一些。

本设计就是是利用的数字温度计DS18B20,和传统的测温元件相比,数字温度计方便快捷,抗干扰能力强,而且采集到的数据只通过一根线即可进行通信。

温度测量中测量温度是重点,本设计中远程网络温度的测量同样如此。

当今,ARM嵌入式发展到今天已经如火如荼,嵌入式系统已经渗透到消费电子、工业自动化、车载娱乐、航空航天以及物联网智能家居等各种领域。

如今很多高校对电子相关专业的还没有系统的嵌入式学习相关的课程体系,仍然还在用传统的8位单片机进行教学。

因此,本课题的开发设计也为电子信息相关专业的学生提供了嵌入式系统开发学习和研究指明了方向,甚至应用到实际的项目开发之中。

此论文就是设计基于ARM平台Android/Linux系统设计与实现的网络温度控制系统,通过以上分析可知,该系统的设计与开发具有很大的实用价值。

1.3课题的国内外研究现状

(1)国外温度测控系统研究

温度控制技术在国外,始于1970年代。

首先,使用模拟仪表组,收集现场信息和指令。

1980年代末出现了一个分布式控制系统,之后又在研究多点测控的一体化系统。

当今全球的温度测量和控制技术正在迅速发展,如基于嵌入式的远程网络温度控制系统等,在一些国家自动化的实现是朝着无人化的自动控制方向发展。

(2)国内温度测控系统研究

我们国内研究温度测量和控制技术,始于1980年代。

我们国家对于温度测量及控制的研究是比较落后的,开发的温度测量和控制技术都是吸收了其他国家的经验,后来才掌握到用嵌入式芯片来处理并控制温度数据的技术。

从技术上讲,一个参数的单环系统微处理器控制是我们主要研究的,而多参数综合控制系统没有真正意义上的发展,与那些发达的国家相比,仍有很大的差距。

温度测量和控制的现状还远远没有达到世界的水平,实际生产仍有很多难题困扰我们,如存在设备支持不完善,工业化水平低、技术落后不能自动控制以及远程查看访问温度数据和可靠性差,等不足。

1.4课题主要研究内容

按照任务书,我们主要研究内容就是设计一个客户——网络数据库——网络终端控制的系统,实现远程控制,并且作为控制端的手机使用安卓操作系统下编写应用程序,发出的动作数据到网络数据库,远程的受控对象访问网络数据库中数据,根据访问的数据执行相应动作。

受控对象用18B20检测温度,并控制两只继电器,一只控制温度,另一只超温报警。

重点是嵌入式开发系统平台的搭建、检测温度的18B20驱动程序设计和继电器的自动控制算法以及网络通信程序的开发。

系统总体框架如下图1-4所示:

图1-4系统总体框架图

第2章嵌入式开发系统配置

2.1嵌入式开发环境的搭建

2.1.1安装配置VMware虚拟机

开发嵌入式程序,需要linux环境。

但是很多时候我们又不愿离开熟悉的windows,而且windows中有一系列很好用的软件,如QQ、Word、PPT、Notepad++、SourceInsight,所以也需要windows。

既需要windows,又需要linux。

所以我们要使用虚拟机来运行Linux,即在个人计算机上安装windows7,然后在windows7中安装虚拟机软件,再在虚拟机中安装Ubuntu系统,这就是个人开发者的主流解决方案。

当前主要的虚拟机软件有两个:

VMWareWorkStation(简称VMWare)和VirtualBox,主流常用的是VMWare,下载非常方便,可以到官网也可以到baidu搜索,然后从第三方下载网站下载,目前最新版本为12.1.1.6932。

最后,VMWareWorkstation虽然不是免费软件,但是序列号很容易在网上找到,没有必要用破解版的。

下载好之后安装即可,和平常安装Windows里面的软件一样,直接点下一步即可。

2.1.2虚拟机安装Linux系统

比较主流的Linux发行版有RedHat和Ubuntu等系统,在这里我们使用Ubuntu来进行开发,因为Ubuntu的图形界面做得比较好,对与我们刚开始学习Linux系统的学生来说很容易上手,而且它是免费开源的,还有相应的官方社区,一旦有什么问题即可到社区里去提问,里面的大神会在第一时间回复。

下面简要介绍安装方法:

1.在Ubuntu官网下载Ubuntu的系统ISO文件镜像(ubuntu-12.04.5-desktop-i386.iso),后面安装Ubuntu系统会用到。

2.打开VMWare虚拟机软件,点击创建新的虚拟机,如图所示:

然后选择典型即可,点击下一步:

选择安装程序光盘映像文件(iso),然后点击浏览,选择ubuntu-12.04.5-desktop-i386.iso文件,点击打开,单击下一步:

这里全名填写Ubuntu12.04,用户名skyli,密码123456,这些信息可以按照自己的喜好填写,没必要和我一样,然后点击下一步:

然后一直点击下一步,到下面这个界面,点击完成,虚拟机即可自动完成Ubuntu的安装:

VMWare正在自动安装Ubuntu12.04系统:

VMWare正在自动安装Ubuntu12.04系统:

安装完成会自动开机,输入默认密码123456即可开启Ubuntu系统:

2.1.3交叉编译的配置开发

嵌入式开发有两种开发模式:

Ø非嵌入式开发:

在同一台系统平台上开发软件就叫非嵌入式开发,例如直接在Windows上编写Windows应用程序就是非嵌入式开发。

Ø嵌入式开发,在PC机(Linux系统)上编写源代码,编译得到二进制可执行文件然后传送到ARM开发板上去运行。

上面的嵌入式开发即为交叉编译那为何要使用交叉编译呢?

因为嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有。

交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)。

2.1.4安装交叉编译工具链

1、linux中装软件的特点

linux中安装软件比windows中复杂。

linux中安装软件一般有以下几种方法:

第一种:

在线安装。

譬如ubuntu中使用apt-getinstallvim来安装vim软件。

第二种:

自己下载安装包来解压或者用dpkg-i命令来安装,不过这种安装方法不能自动解决软件之间的依赖关系。

第三种:

最装逼的一种方式,就是源代码安装。

总结:

我们安装交叉编译工具链(arm-linux-gcc)实际采用第二种安装方式。

2、交叉编译工具链的选择

我们开发S5PV210的程序用的是arm-2009q3这个版本,为什么选择这个老版本而不是最新版本呢?

因为三星官方在开发S5pv210时就使用这个版本的交叉编译工具链,这样可以最大限度的避免稀奇古怪的问题出现。

3、交叉编译工具链的安装

步骤1:

打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹

步骤2:

先将安装包从Windows中copy到linux中去。

如果虚拟机里面安装了VMWareTools工具,直接在Windows里面复制,在虚拟机里面的Ubuntu系统中粘贴即可。

步骤3:

解压。

tar-jxvfarm-2009q3.tar.bz2   

到此相当于程序已经安装完毕,真正的应用程序安装在/usr/local/arm/arm-2009q3/bin目录下

4、安装后的测试

到真正的应用程序的安装目录下(也就是/usr/local/arm/arm-2009q3/bin),去执行arm-linux-gcc-v

执行方法是:

./arm-none-linux-gnueabi-gcc-v

执行后可以得到一长串输出,其中有“gccversion4.4.1”字样,即表示安装成功。

2.2U-boot的移植

2.2.1U-boot源码的下载

首先从官方uboot网站下载U-boot源码,下载可以从uboot的官方网站下载,下载地址为http:

//www.denx.de/wiki/U-Boot/SourceCode,也可以从官方ftp下载,下载地址为ftp:

//ftp.denx.de/pub/u-boot/,最新版的源代码可直接从u-boot-latest.tar.bz2这个文件来获取,下载完U-Boot源代码后需要将其解压,可以直接使用Ubuntu内置的tar命令来解压:

tarxvfu-boot-latest.tar.bz2。

我们常用的个人计算机上电后先执行BIOS程序,那BIOS是什么呢,BIOS就是基本输入数输出系统(BasicInputOutputSystem),它的的作用就是负责初始化DDR内存,初始化硬盘,然后从硬盘上将Windows操作系统镜像读取到DDR内存中,完成后电脑就跳转到DDR内存中去执行OS直到启动(OS启动后BIOS就无用了)。

嵌入式系统的启动和我们平常使用的计算机的启动是类似的,只是设备上有一些差别:

uboot程序烧录在能作为启动设备的Flash上,操作系统镜像烧录在FLash上而不是硬盘上。

嵌入式系统启动过程:

嵌入式系统上电后首先先启动U-boot、然后U-boot进行初始化内存、初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后U-boot就无用了)。

2.2.2U-boot的运行启动

U-boot自身可开机直接启动,能够引导操作系统内核启动并给内核传参。

U-boot可以进行soc级和板级硬件管理,比如U-boot支持串口的通信调试和网卡的网络通信等。

U-boot本质上是一个裸机程序(不是操作系统),一旦U-boot开始ARM芯片就会单独运行U-boot,如果连接了串口会有一个倒计时提示:

按任意键进入U-boot而不初始化inux操作系统,一旦U-boot结束运行则无法再回到U-boot(所以U-boot启动了内核后U-boot自己本身就死了,要想再次看到U-boot界面只有重启系统)。

2.2.3U-boot的移植烧录

从官方网站下载好了U-boot源码后先解压,解压好了后进入arch目录,在arch/ARM/ARMv7目录下查找S5PV210相关文件,配置可以参考include/configs/s5p_goni.h,对应的board在uboot/board/samsung/goni这个目录,配置对应的cpu、board文件夹分别为:

cpu:

u-boot-2013.10\arch\arm\cpu\armv7,board:

u-boot-2013.10\board\samsung\goni。

官方原版的uboot中CROSS_COMPLIE是没有定义的,需要自己去定义。

如果没定义就直接去编译,就会用gcc编译。

所以在配置文件中添加一行:

CROSS_COMPILE=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-。

然后就是配置编译测试,编译过程的命令分别为:

makedistclean、makes5p_goni_config和make。

最后就是得到u-boot.bin即可。

得到了bin文件后就可以烧录了,烧录u-boot.bin到SD卡中有2种方法:

windows下用烧录软件;linux下用dd命令烧录脚本来烧录。

因为windows下的工具不开源,出了问题没法调试,所以决定在linux下用烧录脚本来烧录(实质是dd命令进行sd卡扇区写入)。

移植原来的版本的uboot中的sd_fusing文件夹到官方uboot版本中,使用这个文件夹中的sd_fusing.sh脚本来进行烧录。

烧录好了之后打开开发板电源,用串口连接到电脑进行调试,如果串口上没有打印信息,在start.s入口添加调试信息,如点亮一颗开发板上的LED等,如果没亮就说明U-boot还是有问题,那就要回去检查一下代码是否有语法错误,比如野指针被赋值,除数等于零等,还可能是看门狗的问题,可以关闭看门狗试试。

如果LED亮了,就说明U-boot跑起来了,但是串口没输出,说明串口没初始化,在U-boot源码中加入串口初始化的代码,如果有乱码,再检查一下时钟频率和波特率的设置是否匹配。

当串口正常输出打印信息时,就可以移植u-boot网卡驱动了,移植好了用ping命令测试一下是否可以ping通主机,如果能够ping通,就说明移植好了,至此U-boot移植完成。

2.3Linux内核的移植

2.3.1官方内核源码的下载编译

首先从kernel.org上下载官方版本的内核源码,解压即可得到了一个kernel的源码目录树。

下面我们分析一下源码目录下的单个文件:

Kbuild:

Kbuild是kernelbuild的意思,就是内核编译的意思。

这个文件就是linux内核特有的内核编译体系需要用到的文件。

Makefile:

这个是linux内核的总makefile,整个内核工程用这个Makefile来管理的。

linux内核很庞大,里面模块很多,而且可配置性非常高。

所以linux源代码的配置是一个很复杂的事情,必须要有一套很复杂的机制来保证linux内核可以被正确的配置。

linux内核本身配置项有上千个,光靠人眼睛去看脑袋去记根本不可能,所以内核发明了一种体系用来帮助人进行简单化的配置。

Kbuild、Kconfig等文件,都是和内核的配置体系有关的。

linux内核源码目录结构如下所示:

Arch:

arch是architecture的缩写,意思是架构。

arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文件都在arch/x86目录下。

Block:

英文是块的意思,在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。

你几乎可以认为块设备就是存储设备。

block目录下放的是一些linux存储体系中关于块设备管理的代码。

Crypto:

加密。

这个目录下全部是加密算法:

如crc32、md5、sha1算法等。

Documentation:

里面放了一些文档。

Drivers:

驱动目录,里面分门别类的列出了linux内核支持的所有硬件设备的驱动源代码。

Firmware:

固件。

什么是固件?

固件其实是软件,不过这个软件是固话到IC里面运行的叫固件。

就像S5PV210里的iROM代码。

Fs:

fs就是filesystem,文件系统,里面列出了linux支持的各种文件系统的实现。

Include:

头文件目录,公共的(各种CPU架构共用的)头文件都在这里。

Init:

init是初始化的意思,这个文件夹下的文件就是内核启动时初始化内核的程序。

Ipc:

ipc就是interprocesscommuication,进程间通信,里面都是linux支持的IPC的代码实现。

Kernel:

kernel就是内核,就是linux内核,所以这个文件夹下放的就是内核本身需要的一些代码文件。

Lib:

lib是库的意思,这里面都是一些公用的有用的库函数。

在内核编程中是不能用C语言标准库函数,这里的lib目录下的库函数就是用来替代那些标准库函数的。

譬如在内核中要把字符串转成数字用atoi,但是内核编程中只能用lib目录下的atoi函数,不能用标准C语言库中的atoi。

譬如在内核中要打印信息时不能用printf,而要用printk,这个printk就是我们这个lib目录下的。

Mm:

mm是memorymanagement,内存管理,linux的内存管理代码都在这里。

net。

该目录下是网络相关的代码,譬如TCP/IP协议栈等都在这里。

scripts。

脚本,这个目录下全部是脚本文件。

security。

安全相关的代码。

不用去管。

sound。

音频处理相关的。

tools。

linux中用到的一些有用工具

usr。

目录下是initramfs相关的,和linux内核的启动有关,暂时不用去管。

virt。

内核虚拟机相关的,暂时不用管。

linux内核源码目录结中有很多文件夹,但跟我们内核移植关系很紧密的就是arch和drivers目录,然后其他有一点关系的还有include、block、mm、net、lib等目录。

2.3.2Linux内核源码的移植

我们先确认一下Makefile文件里面的配置,主要是检查交叉编译工具链有没有设置对:

CROSS_COMPILE?

=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-,再确认ARCH=arm是否一致,主要目的是为了编译时能找到arch/arm目录。

在终端键入命令:

makex210ii_defconfig,最后只要出现configurationwrittento.config这句话,就证明我们的操作是正确的。

如果没有出现这句话,就有错误。

可能出现的错误:

名字敲错了,名字是字符串匹配的,一定要正确。

要注意就是如果这一步配置没有得到.config文件,是不能进到下一步的。

在执行makemenuconfig前我们需要学习一下Kconfig文件的配置,Kconfig按照一定的格式来书写,menuconfig程序可以识别这种格式,然后从中提取出有效信息组成menuconfig中的菜单项。

将来在做驱动移植等工作时,有时需要自己添加Kconfig中的一个配置项来将某个设备驱动添加到内核的配置项目中,这时候就需要对Kconfig的配置项格式有所了解,否则就不会添加,#开头的行是注释行。

menuconfig表示菜单(本身属于一个菜单中的项目,但是他又有子菜单项目)、config表示菜单中的一个配置项(本身并没有子菜单下的项目)。

menuconfig或者config后面空格隔开的大写字母表示的类似于NETD

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1