嵌入式课程设计报告-基于web的嵌入式远程监控系统Word下载.doc
《嵌入式课程设计报告-基于web的嵌入式远程监控系统Word下载.doc》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告-基于web的嵌入式远程监控系统Word下载.doc(34页珍藏版)》请在冰点文库上搜索。
1引言
嵌入式系统课程设计是本专业在学习完C语言、LINUX操作系统、嵌入式系统原理与接口设计、嵌入式操作系统原理之后的专业课程设计,属于专业课内容。
通过课程设计建立嵌入式系统主体环节,嵌入式系统的最小结构和系统应用设计基本技能,培养分析和解决一些简单的实际问题的能力,为今后毕业设计奠定基础。
随着嵌入式技术的发展和高速宽带网络的普及,利用网络实现远程监控已为人们广泛接受,嵌入式网络监控技术正是在此条件下逐步发展成熟起来的。
用户使用Web浏览器,通过以太网远程访问内置Web服务器的监控摄像机,不但可以实现对现场的远程视频监控,而且可以向监控现场发送指令。
在整个系统的实现过程中,嵌入式Web服务器起着十分重要的作用。
本课题就是基于该项技术,最终编程实现通过网络控制下位机嵌入式控制器的电机启动和停止。
1.1研究目的和意义
1、通过嵌入式课程设计,熟练掌握C语言的编程方法。
基于WEB的远程监控的实现,CGI的编写和使用,将理论联系到实践中去,提高我们的动脑和动手的能力。
2、通过基于WEB的嵌入式远程监控系统的设计,掌握S3C2410实验箱,直流电机的工作原理,BOA服务器的使用,CGI的使用和简单程序的编写及调试方法,最终提高我们的动手实践能力。
3、本课题的研究目的是用BOA服务器、CGI、IE浏览器设计一个通过IE浏览器监控电机的系统,能够通过两个简单的按键对电机进行启动和停止的控制,并能够在IE浏览器上看到电机的当前状态。
4、由于基于WEB的嵌入式远程监控系统将成为今后远程监控技术发展的主流方向,所以需要设计出简单实用,让人们更满意的产品。
1.2本设计任务和主要内容
1.基本要求
本课题主要设计和研究基于WEB的嵌入式远程监控系统,要求在保证可靠运行的前提下,电路设计尽量简洁紧凑,以减小成本、提高系统的效率和安全性。
2.应解决的问题
1)设计系统网络方案
2)分析网络程序结构和应用程序的使用方法
3)编程实现嵌入式系统服务器功能
4)编程实现嵌入式系统联网功能
5)编程实现通过网络控制下位机嵌入式控制器的电机启动和停止
3.扩展功能
演奏时可以通过按键选择是手动演奏还是自动演奏,手动演奏是通过按键进行简易乐曲的演奏。
2总体方案设计
2.1整体方案设计
系统总体设计是基于嵌入式系统和WEB服务器结合的思想开发的,其网络拓扑结构如图2.1所示
图2.1系统网络拓扑图
针对本次课程设计提出的系统设计如图2.2所示
图2.2系统方案框图
2.2硬件系统设计
2.3.1核心处理器的选择
核心处理芯片需要完成处理和支持整个系统的功能需求,通过运行BOA服务器要实施的接收来自各个客户端的请求和信息,并根据获得的请求和信息进行相应的后台处理以及信息的反馈。
为完成上述功能,实现服务器正常运行,对处理芯片进行选型,对比现有处理芯片的优缺点,选择ARM9S3C2410X芯片作为设计开发嵌入式服务器系统的核心处理芯片。
S3C2410X微处理器是一款由Samsung公司为手持设备设计的低功耗、高集成度的基于ARM920T核的微处理器,为了降低系统总成本和减少外围器件,这款芯片还集成了以下部件:
16KB指令Cache、16KB数据Cache、MMU、外部存储器控制器、LCD控制器、NANDFLASH控制器、4个DMA通道、3个UART通道、1个IIC总线控制器、1个IIS总线控制器、4个PWM定时器、1个内部定时器、通用IO口、实时时钟、8通道10位ADC和触摸屏接口、USB主、USB从、SD/MMC卡接口等。
2.3软件环境选择
2.3.1操作系统的选择
当选定了硬件系统后,为了配合硬件达到系统的最优控制要求,对市面上常用的嵌入式系统进行分析比较。
(1)价格比较:
Linux是完全免费的操作系统,只需遵循GPL声明,不需支付任何费用;
WinCE是微软的商用嵌入式操作系统,使用它需要支付WinCE及其开发环境的费用,开发出来的每套产品也需交纳一定费用。
uc/os—II系统,可以免费用于学习或科研,但开发商使用产品或销售都是收费的。
(2)开放性比较:
Linux是源代码完全开放的操作系统,可以自由下载,并且在遵循GPL声明的前提下可以自由地修改、移植,为系统的开发和调试带来极大的便利;
winCE是部分源码开放的商用操作系统,如果要修改其中的代码,需获得微软公司的授权;
uc/os—II也是开放的实时操作系统。
(3)文件系统的比较:
Linux支持绝大部分文件系统,只需选择相应的文件系统即可;
WinCE仅支持Windows系列的FAT16、有限文件系统;
uc/os—II本身没有包括文件系统,需购买或移植。
Linux与ARM处理器从以上可以看出,Linux系统在诸多方面都存在优势,而且本身的ARM处理器与Linux也有着紧密的联系。
因此采用Linux操作系统。
2.3.2服务器的选择
典型的嵌入式Web服务器有Boa和thttpd两种,它们和Apache等高性能的Web服务器主要的区别在于它们一般是单进程服务器,只有在完成一个用户请求后才能响应另一个用户的请求,而无法并发响应,但这在嵌入式设备的应用场合里已经足够了。
Boa是一个非常小巧的Web服务器,可执行代码只有约60KB。
它是一个单任务Web服务器,只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。
但Boa支持CGI,能够为CGI程序fork出一个进程来执行。
Boa的设计目标是速度和安全,在其站点公布的性能测验中,Boa的性能要好于Apache服务器。
经过上述的对比和判断,选择Boa作为系统的嵌入式服务器。
综合以上的讨论以及选择,根据系统的实际需求,最终确定了采用S3C2410X为核心处理器,Linux为嵌入式操作系统,boa为服务器以及相应的http浏览器的系统设计方案。
3硬件设计
3.1系统硬件平台介绍
我们所介绍的硬件平台是基于ARM体系结构,由北京博创兴业科技有限公司开发的UP-NetARM2410-S实验仪器。
UP-NetARM2410-S的CPU为ARM920T内核的三星S3c2410芯片,由于有MMU(内存管理单元)可以运行标准的ARM-LINUX内核。
通过这个平台,我们可以实现嵌入式LINUX中的针对无MMU的开发过程。
3.2s3c2410芯片介绍
图3.1芯片结构图
3.3ARM处理器的外围设备
3.3.1电源电路
设备提供12v的电源,经LM1085-3.3V和AS1117-1.8V分别得到3.3V和1.8V的工作电压。
开发板上的芯片多数使用了3.3V电压,而1.8V是供给S3C2410内核使用的。
5V电压供给LCD、电机、总线等电路使用。
图3.2电源电路
3.3.2硬件复位电路
硬件复位电路由IMP811T构成,实现对电源电压的监控和手动复位操作。
2410-S主板复位电路设置专用逻辑:
IMP811T的复位电平可以使CPUJTAG(nTRST和板级系统(nRESET)全部复位;
来自仿真器的ICE_nSRST信号只能使板级复位;
来自仿真器的ICE_nTRST可以使JTAG(nTRST)复位,通过跳线选择是否使板级nRESET复位。
nRESET反相后得到RESET信号。
硬件复位电路如图3.3所示
图3.3硬件复位
4软件设计
4.1设计思想
基于web的嵌入式监控系统设计主要的功能有简单的网页浏览,实现简单应用功能(客户端与服务器的交互)以及服务器端的控制功能。
因此软件的设计分为三个部分:
boa服务器的搭建、应用程序设计和驱动程序的加载。
4.2BOA服务器的简介与搭建
4.2.1嵌入式Web服务器Boa的特点
Boa是一款单任务的HTTP服务器,与其他传统的Web服务器不同的是当有连接请求到来时,它并不为每个连接单独创建进程,也不通过复制自身进程来处理多链接,而是通过建立HTTP请求列表来处理多路HTTP连接请求,同时它只为CGI程序创建新的进程,这样就在最大程度上节省了系统资源,这对嵌入式系统来说至关重要。
同时它还具有自动生成目录、自动解压文件等功能,因此Boa具有很高的HTTP请求处理速度和效率,在嵌入式系统中具有很高的应用价值。
4.2.2Boa的功能实现
嵌入式Web服务器Boa和普通Web服务器一样,能够完成接收客户端请求、分析请求、响应请求、向客户端返回请求结果等任务。
它的工作过程主要包括:
(a)完成Web服务器的初始化工作,如创建环境变量、创建TCP套接字、绑定端口、开始侦听、进入循环结构,以及等待接收客户浏览器的连接请求;
(b)当有客户端连接请求时,Web服务器负责接收客户端请求,并保存相关请求信息;
(c)在接收到客户端的连接请求之后,分析客户端请求,解析出请求的方法、URL目标、可选的查询信息及表单信息,同时根据请求做出相应的处理;
(d)Web服务器完成相应处理后,向客户端浏览器发送响应信息,关闭与客户机的TCP连接。
嵌入式Web服务器Boa根据请求方法的不同,做出不同的响应。
如果请求方法为HEAD,则直接向浏览器返回响应首部;
如果请求方法为GET,则在返回响应首部的同时,将客户端请求的URL目标文件从服务器上读出,并且发送给客户端浏览器;
如果请求方法为POST,则将客户发送过来的表单信息传送给相应的CGI程序,作为CGI的参数来执行CGI程序,并将执行结果发送给客户端浏览器。
Boa的功能实现也是通过建立连接、绑定端口、进行侦听、请求处理等来实现的。
4.2.3BOA的搭建与移植
(1)准备源代码、解压软件包,安装源代码到boa网站http:
//www.boa.org下载boa-0.94.13.tar.gz源代码,或者使用光盘的boa-0.94.13.tar.gz软件包。
$tarxzvfboa-0.94-13.tar.gz
(2)进入src目录,编译源代码。
解压后src目录下有Makefile.in文件,但没有Makefile文件,为了编译源代码,需要先生成Makefile文件,在src目录下运行configure命令$./configure
生成的Makefile文件是针对X86平台的,为了生成能够在ARM上运行的boa,需要修改Makefile文件。
将Makefile的31~32行内容:
CC=gcc
CPP=gcc–E
应用(在交叉编译时使用):
然后输入make命令进行编译,在src目录下就会生成boa文件。
$make然后将该文件添加到文件系统中,重新下载文件系统。
如果不幸出现―ickyLinuxkernelbug!
‖的错误,请将src下boa.c的第226行注释掉,重新编译下载即可。
(3)安装boa服务器
主要是配置boa服务器。
boa启动时需要一个配置文件boa.conf,该文件的缺省目录由src/defines.h文件的SERVER_ROOT定义,或者在启动boa的时候通过参数―-c‖指定。
其中指定的默认目录是:
/etc/boa/
(4)登录boa服务器
在PC机浏览器地址栏输入目标系统的IP地址(http:
//172.31.55.91),访问存在于目标系统中的网页。
4.3应用程序设计
4.3.1程序设计依赖关系
通过对系统的分析以及对服务器的了解,系统确定了以下的软件开发系统方案,如图4.1所示
图4.1软件依赖关系
4.3.2应用程序流程图
乘法功能
图4.2乘法功能实现流程图
程序段电机程序的流程图
图4.3电机部分流程图
4.4驱动程序设计
驱动部分主要有两部分组成:
电机驱动和网卡驱动,其中以电机驱动为主。
由于在本套系统设计中,不可能每次开机都要由操作人员将驱动加入内核,这样既不方便又费时费力,所以系统采用将驱动编译进内核的模式。
4.4.1电机驱动
电机驱动程序流程
1、开启设备时,配置IO口为定时器工作方式
2、配置定时器的各控制寄存器
3、在s3c2410_dcm_ioctl中提供调速功能接口
4、应用程序dcm_main.c中调用
5、实现直流电机速度的调整
4.4.2驱动加载过程
以电机驱动为例:
编译直流电机cd/arm2410s/kernel-2410smakemenuconfig进入MainMenu/Characterdevices菜单,选择DCMOTOR
模块加载:
编译内核模块:
makedep
make
makemodules
直流电机模块的编译结果为:
/arm2410s/kernel-2410s/drivers/char/s3c2410-dc-motor.o
2、加载模块
在超级终端中,通过加载NFS运行编译结果:
mount–tnfs192.168.0.121:
/arm2410s/host
Insmod/host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
5系统整体调试与分析
系统的调试分了x86和arm架构下的调试,其中以进阶方式进行开发测试,根据实现难度分为三步:
第一步先实现简单的网页浏览,然后通过乘法操作的简单设计来实现人机交互最后通过电机控制的设计完成整个服务器监控系统的设计。
5.1linux平台下的调试
5.1.1简单网页浏览的调试与分析
结果:
网页正常显示
分析:
遇到的问题主要集中在BOA服务器的搭建上,经过仔细学习参考资料成功解决了问题。
5.1.2基于web的乘法操作的调试与分析
网页可以正常显示但在调试的开始阶段遇到了程序不能正常运行的问题,但经过同一起努力在两天后解决了问题。
存在的问题主要是服务器调用结构不理解导致的cgi程序无法正常调用,结果显示为乱码等问题,在正确理解了服务器、cgi-c编程的原理后,使网页能够正确运作。
5.1.3电机控制的调试与分析
由于牵涉到硬件设备的调试所以在X86环境下只进行了程序的编写和编译,而没有实际的进行调试。
5.2嵌入式平台下的调试
5.2.1客户端与服务器交互的调试与分析
由于/etc目录只允许读不允许写,但我们搭建的BOA服务器的运行要求在/etc目录下有mime.types(用来指明不同文件的扩展名对应的MIME类型)并且还要在/etc/boa/下有相应的配置文件BOA.conf,则需要我们重新生成根文件系统等,将我们需要的文件填到相应的位置,然后再重新生成镜像文件并烧写文件系统。
将编写好的html程序(名称改为index.html,因为这是输入地址后默认的访问文件)放到目录var/www下。
需要的c语言程序用arm-linux-gcc编译生成相应的cgi程序,到目录/var/www/cgi-bin下。
启动boa服务器,在根目录下输入ifconfig命令可以查找到服务器的ip地址,在客户端的地址栏输入该地址,就可以访问到相应的网页,通过该网页用户可以监控电机。
5.2.2电机控制的调试与分析
Linux下的直流电机程序包括模块驱动程序和应用程序两部分。
Module驱动程序实现了以下方法:
staticstructfile_operationss3c2410_dcm_fops={
owner:
THIS_MODULE,
open:
s3c2410_dcm_open,
ioctl:
s3c2410_dcm_ioctl,
release:
s3c2410_dcm_release,
};
开启设备时,配置IO口为定时器工作方式:
({
GPBCON&
=~0xf;
GPBCON|=0xa;
}
配置定时器的各控制寄存器:
({TCFG0&
=~(0x00ff0000);
TCFG0|=(DCM_TCFG0);
TCFG1&
=~(0xf);
TCNTB0=DCM_TCNTB0;
/*lessthan10ms*/
TCMPB0=DCM_TCNTB0/2;
TCON&
=~(0xf);
TCON|=(0x2);
TCON|=(0x19);
})
在s3c2410_dcm_ioctl中提供调速功能接口:
caseDCM_IOCTRL_SETPWM:
returndcm_setpwm((int)arg);
应用程序dcm_main.c中调用:
ioctl(dcm_fd,DCM_IOCTRL_SETPWM,(setpwm*factor));
实现直流电机速度的调整。
a.编译直流电机模块
cd/arm2410s/kernel-2410s
makemenuconfig
进入MainMenu/Characterdevices菜单,选择DCMOTOR为模块加载:
b.编译内核模块:
c.编译应用程序
cd/arm2410s/exp/basic/10_dcmotor/
生成dcm_main
d.挂载驱动模块
insmod/host/kernel-2410s/drivers/char/s3c2410-dc-motor.o
e.运行程序
mount–tnfs192.168.0.xxx:
cd/host/exp/basic/10_dcmotor/
./dcm_main
程序运行结果:
直流电机转动1秒,停转1秒。
由于是根据原有变速程序稍做改动完成的程序,所以遇到的问题不是很多,经过几次尝试就得到了期望的结果。
5.3调试结果分析
5.3.1调试结果
1、静态网页
图5.1静态网页
2、乘法网页
图5.2乘法网页
3、电机控制网页
图5.3电机控制网页
图5.4返回结果
5.3.2结果分析
经过x86下的调试和基于ARM的下载与调试后,系统能够实现静态网页浏览,简单人机交互以及电机控制的功能,系统工作稳定,响应速度快,组网方便快捷,如果与DNS服务器或者WINS服务器相结合即可实现用主机名就能登录相应平台的功能。
6设计总结
经过三个周的学习与努力,经过系统分析、方案论证、硬件和软件设计、调试等阶段完成了基于web的嵌入式远程监控系统的设计制作。
在这三个周的课程设计中,我得到了老师和同学很大的帮助,有时候觉得进行不下去了,老师或同学一句话就能让我茅塞顿开。
即使听不懂,他们也会耐心的讲解。
在系统的设计制作过程中,确实遇到了各种各样的问题,如调试思路正确但是没有能够进行找到合适的方法进行进一步的实验,设计中对于程序的编写以及目录结构的认知上存在偏差,其主要原因还是基础功不扎实,把握系统的能力不足,这为我们以后的学习和工作提了一个醒。
在问题的