实时温控报警器设计3.docx

上传人:b****2 文档编号:23195024 上传时间:2023-05-15 格式:DOCX 页数:27 大小:608.86KB
下载 相关 举报
实时温控报警器设计3.docx_第1页
第1页 / 共27页
实时温控报警器设计3.docx_第2页
第2页 / 共27页
实时温控报警器设计3.docx_第3页
第3页 / 共27页
实时温控报警器设计3.docx_第4页
第4页 / 共27页
实时温控报警器设计3.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

实时温控报警器设计3.docx

《实时温控报警器设计3.docx》由会员分享,可在线阅读,更多相关《实时温控报警器设计3.docx(27页珍藏版)》请在冰豆网上搜索。

实时温控报警器设计3.docx

实时温控报警器设计3

 

.

 

《嵌入式系统原理与应用》综合设计

 

实时温控报警器设计

 

系部:

电子与信息工程系

专业班级:

通信工程10秋2班

姓名:

学号:

小组成员:

指导教师:

完成日期2013年6月

目录

 

1绪论1

1.1嵌入式系统简介1

1.2综合设计目的3

1.3设计题目及设计要求3

1.3.1题目3

1.3.2设计要求3

1.3.3工作流程3

1.4实验设备与器材4

2方案设计4

2.1总体方案4

2.2硬件方案5

2.2.1原理框图5

2.3ARM开发板与各模块5

2.3.1ARM2110开发板简介5

2.3.2蜂鸣模块6

2.3.3温度测量模块7

2.4软件方案9

2.4.1程序流程图9

3系统程序设计与调试11

3.1方案论证11

3.2调试过程11

4结束语14

4.1课程设计体会14

4.2致谢15

5参考文献16

6附录17

6.1程序清单17

1绪论

1.1嵌入式系统简介

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。

通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。

事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。

嵌入式系统(Embeddedsystem),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。

由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。

由于嵌入式系统通常进行大量生产。

所以单个的成本节约,能够随着产量进行成百上千的放大。

根据以上定义我们也可以看出嵌入式系统具备以下特点:

  1)系统内核小。

由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。

  2)专用性强。

嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。

同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。

  3)系统精简。

嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。

4)嵌入式系统开发需要开发工具和环境。

由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。

开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。

5)高实时性的系统软件(OS)是嵌入式软件的基本要求。

而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。

近年来,随着社会信息化革命的深入以及网络技术的发展,计算机技术也取得了前所未有的发展。

在实际应用过程中,人们为了完成特定的功能而逐渐倾向于采用嵌入式系统。

嵌入式系统作为专用的计算机系统已经逐渐渗透到社会生活的各个领域,从而深刻的改变着人们的生活方式。

嵌入式系统是以应用为中心的知识密集型产业,具有不断创新的特点,是社会发展的重要推动力。

图1.1常见的嵌入式系统应用实例

 

1.2综合设计目的

通过本次综合设计,运用已学的课程知识,根据题目要求进行软硬件系统的设计和调试,对《嵌入式系统原理与应用》课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力,从而加深对本课程知识点的理解,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等方面有显著提高。

1.3设计题目及设计要求

1.3.1题目

实时温控报警器设计

1.3.2设计要求

1)利用实验系统的资源来设计一个“带液晶屏显示的实时温控报警器”。

2)控制面板包括:

1602液晶屏显示、十个数字按键键盘、电源按键、电源指示灯、运行键。

1.3.3工作流程

1)按下电源键,电源指示灯亮;

2)启动系统运行,1602液晶屏幕上显示出当前环境温度与预先设定临界温度值;

3)手握传感器,1602液晶屏上显示传感器测得的环境温度变化;

4)1602液晶屏幕实时显示当前的温度,当超过预先设定温度值时,蜂鸣器报警;

5)运行过程中,若再按下电源键,则系统停止,电源指示灯灭。

1.4实验设备与器材

实验设备:

PC机一台、LM3S2110实验开发板。

实验器材:

蜂鸣器、LM75A数字温度传感器、LCD1602液晶屏。

2方案设计

2.1总体方案

方案一:

由于本设计是测温电路,根据设计要求可以使用热敏电阻之类的感温器件利用其感温效应,然后将随被测温度变化的电压或电流采集过来,经过A/D转换后,将数据传输到单片机进行数据的处理,然后在显示电路上显示,这样就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。

方案二:

在嵌入式综合设计中,大多都是使用传感器,这就非常容易想到利用数字温度传感器,所以可以采用一只温度传感器LM75A,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。

从以上两种方案,很容易看出,采用方案二,设计比较简洁,程序编写也比较简单,故采用方案二。

程序编码中预先设定一个温度临界值,即报警温度。

LM75A数字温度传感器测得的当下环境的实时温度与设定的报警温度进行比较,报警温度和实时温度都会显示在LCD1602液晶屏上。

我们可以清楚看到实时温度的变化,程序会判断实时温度与报警温度的大小,若实际温度大于所设置的温度,则蜂鸣器蜂鸣;反之,蜂鸣器不蜂鸣。

 

2.2硬件方案

2.2.1原理框图

1)ARM开发板:

LM3S2110;

2)温度测量与显示:

LM75A数字温度传感器、LCD1602液晶屏;

3)蜂鸣器:

环境温度超过报警温度时实施报警;

ARM开发板

LED显示

蜂鸣器报警

 

图2.1系统结构框图

2.3ARM开发板与各模块

2.3.1ARM2110开发板简介

ARM2110开发板中包含一块LM3S2110微控制器,是由LuminaryMicro公司提供的Stellaris系列芯片,该系列的微控制器是首款基于ARM®Cortex™-M3的控制器,Stellaris微处理器LM3S2110有如下特点:

1)32位ARM®的Cortex™-M3的25-MHz的处理器与系统定时器的核心(SysTick的),集成的嵌套向量中断控制器(NVIC),记忆体保护单元(MPU),以及Thumb-2指令集。

2)功能齐全的调试解决方案,通过JTAG和串行线接口,IEEE1149.1-1990标准的测试访问端口(TAP)控制器调试访问。

3)11-40个GPIOGPIO中断和键盘配置的可编程控制(取决于配置)。

4)兼容ARMFiRM的看门狗定时器,加上3个通用定时器模块(GPTM),每个提供两个16位定时器/计数器和可配置独立运作。

5)10位模拟-数字转换器(ADC),模拟输入通道和一个采样/秒的采样率。

6)同步串行接口(SSI),支持飞思卡尔SPI接口,MICROWIRE,或德州仪器同步串行接口操作。

7)内部集成电路(I2C)接口,提供标准(100Kbps)和快速(400Kbps)无论是作为主机或从机发送和接收数据的传输和支持。

另外开发板上主要可以使用的元器件有:

1个RST键,4个独立按键,8个LED小灯和1个蜂鸣器。

图2.2ARM2110实验开发板

2.3.2蜂鸣模块

ARM2110开发板中的蜂鸣器电路原理图如图2.3所示,由于蜂鸣器的工作电流一般比较大,以致于MCU的I/O口是无法直接驱动的,所以要利用放大电路来驱动。

在嵌入式应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。

一般驱动蜂鸣器的方式有两种:

一种是PWM输出口直接驱动,另一种是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。

PWM输出口直接驱动是利用PWM输出口本身可以输出一定的方波来直接驱动蜂鸣器。

只要打开PWM输出,PWM输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。

利用I/O定时翻转电平来产生驱动波形的方式则必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。

本次设计采用了蜂鸣报警。

图2.3蜂鸣模块原理图

2.3.3温度测量模块

 用LM75A数字温度传感器测量当前环境温度,LM75A是一个使用了内置带隙温度传感器和Σ-△模数转换技术的温度-数字转换器。

它也是一个温度检测器,可提供一个过热检测输出。

LM75A包含许多数据寄存器:

配置寄存器(Conf),用来存储器件的某些配置,如器件的工作模式、OS工作模式、OS极性和OS故障队列等(在功能描述一节中有详细描述);温度寄存器(Temp),用来存储读取的数字温度;设定点寄存器(Tos&Thyst),用来存储可编程的过热关断和滞后限制,器件通过2线的串行I2C总线接口与控制器通信。

LM75A还包含一个开漏输出(OS),当温度超过编程限制的值时该输出有效。

LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。

LM75A可配置成不同的工作条件。

它可设置成在正常工作模式下周期性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。

OS输出有2种可选的工作模式:

OS比较器模式和OS中断模式。

OS输出可选择高电平或低电平有效。

故障队列和设定点限制可编程,为了激活OS输出,故障队列定义了许多连续的故障。

LM75A利用内置的分辨率为0.125℃的带隙传感器来测量器件的温度,并将模数转换得到的11位的二进制数的补码数据存放到器件Temp寄存器中。

Temp寄存器的数据可随时被I2C总线上的控制器读出。

读温度数据并不会影响在读操作过程中执行的转换操作。

图2.4LM75A数字温度传感器

 

 

 

 

A2A1A0SCLSDA

GND

 

图2.5LM75A简化功能框图

2.4软件方案

2.4.1程序流程图

主程序的主要功能是负责读出并处理LM75A数字温度传感器测量的当前温度值,并在LCD1602液晶屏上进行温度的实时显示,并根据设置的报警温度判断是否报警。

系统开始运行时,温度传感器测量并计算温度值进行处理,经过处理后的数据传输到液晶屏进行显示。

程序中预先编写进温度报警界限,当实时温度超过报警界限时,蜂鸣器报警,反之不报警。

其程序流程见图2.6所示。

开始

图2.6主程序流程图

3系统程序设计与调试

3.1方案论证

烧写程序后,进行调试。

LM75A数字温度传感器能有效的测量当前环境温度并实时传送显示到液晶屏幕上。

当手握住传感器时,温度上升,液晶屏上的温度变化也能很及时的显示。

没有时延的问题,真正的做到了实时性。

当温度变化超过了程序预先编写的报警温度时,蜂鸣器便会报警,温度下降到报警温度以下,蜂鸣器便停止报警。

结果证明方案可行。

3.2调试过程

1)将硬件根据电路原理图正确连接,烧写程序。

如图3.1,可以看到液晶屏幕上显示出当前室温,与电脑上串口端显示温度相同,如图3.2所示。

两者同步变化,说明LM75A数字温度传感器很准确的测量了实时温度。

图3.1硬件连接图

图3.3温度显示

2)如图3.4,手握住传感器导致实时温度上升,实时温度大于报警温度时,蜂鸣器蜂鸣。

图3.4温度显示

4结束语

4.1课程设计体会

为期近一个月的大型作业圆满的结束了,这几周对于我来说有着很深刻的印象。

不管是在课程设计中出现的困难,还是同学老师对我的帮助。

都或多或少的引发了我的思考。

大学接近尾声,而我们平时专业课的学习究竟掌握了多少知识,在这次课程设计中便看到了各自的区别。

有的同学可以很轻松的便编写出一个程序,而有的是怎么都写不出来。

我也深刻意识到实践和理论的有效结合才能真正的提高自己的专业技能。

这次的大型作业一方面加深了我对课本理论知识的理解,另一方面也提高了实践动手能力。

实验的过程老师只是会做稍微提示,其他部分从软件测试到硬件连接全要靠自己动手来完成。

最开始的几天大家都会比较松懈,会依赖自己的组员,其实真正的成功是要靠两个人的共同努力,合理分工才能完成的。

写不出程序时,大家一起讨论便会有新的进展,我也意识到团队的力量是取胜的关键。

整个大型作业的时间还是比较充裕的,因为老师会给一些基础的程序代码,我们需要在其基础上进行改进和创新,做出新的东西。

这都需要创新的思维和不怕失败的精神,中间免不了出现问题。

我也遇到了一些问题。

不过后来都得到了解决。

就将遇到的问题和解决方法总结如下。

1)LCD1602液晶屏不显示。

这个问题其实挺多小组都碰到了,而原因各不相同,起初我们以为是连线问题或者是电脑里没有正确安装驱动。

但经过仔细检查这些都没有问题。

后来我突然想到会不会是开发板或者液晶屏本身坏了,于是便借了其他小组的器材,进行两两组合来检验是哪里出了问题,后来终于验证了我的想法,是开发板坏了,后来便找老师换了一块。

2)传感器测量的实时温度只传到串口,无法显示在液晶屏。

这个实验的核心内容就是解决这个问题,需要在老师给的原始程序上进行改进,使实时温度两边都能够显示。

最后经过多次的简单程序重组和测试,发现了解决问题的关键在于要将LM75A数据寄存器的地址找对,并且将数据重新取出并送给液晶显示屏。

而不能简单的加入数据输出语言。

3)报警温度不显示。

实时温度显示出之后,我们想更改进,将报警温度显示在实时温度下方,可是我改了程序,发现还是不行,后来和同学一起讨论之后才发现我只是加入了报警温度显示的位置,却忘记了数据转换和循环,后来加入了一个for语句,问题便迎刃而解了。

其实真正动手实践了才发现很多问题,有的问题虽然很小,但却影响着整个实验的成败。

因此我们应该有耐心,更细心,这样才能够成功的完成整个实验。

4.2致谢

其实这次课程设计能够顺利的完成,最应该感谢的便是我们的指导老师王永明老师和徐振老师。

整个过程中他们都很细心和耐心帮我们。

从硬件是否坏了,程序是否出错,电脑是否没正确安装驱动,我们只要提出问题,他们都很快的帮我们解决。

他们的讲解和指导,给我们带来很多帮助。

哪怕平时上课已经讲过的知识,当我们问的时候,他们还是会认真的再讲一遍。

实验的整个过程中,花费了老师很多的宝贵时间和精力,在此向老师表示衷心地感谢,老师认真的态度和对学生的关爱我们都看在眼里,记在心里,我相信通过他们的言传身教下学期我会更努力的学习专业课。

其次要感谢的便是我身边的同学了,我对程序编写其实不是很懂,每次很简单的问题也要请教他们,他们会不厌其烦的给我讲,这次实时温度报警器的设计程序是所有设计中最难的一组,程序也比较复杂,团结就是力量,我真心的感谢给过我帮助的同学们。

真心谢谢所有帮助过我的人。

5参考文献

[1]周立功.ARM嵌入式系统基础教程.北京:

北京航空航天大学出版社,2005.1

[2]周立功.ARM嵌入式系统实验教程.第三版.北京:

北京航空航天大学出版社,2005.9

[3]周立功.ARM嵌入式系统实验教程.第三版.扩展实验.北京:

北京航空航天大学出版社,2005.11

[4]田泽.嵌入式系统开发与应用实验教程.第二版.北京:

北京航空航天大学出版社,2005.4

参考网站:

[1]周立功单片机;

[2]广州致远电子网页;

[3]电子电路图网;

[4]中国互动出版网http:

//www.china-。

 

6附录

6.1程序清单

#include"systemInit.h"

#include"uartGetPut.h"

#include"LM3S_I2CM.h"

#include

#include

//定义LM75A(NXP半导体数字温度传感器,I2C接口)

#defineLM75A_SLA(0x90>>1)//定义LM75A的器件地址

#defineLM75A_REG_TMP0x00//定义LM75A的温度寄存器地址

#defineBUZ_PERIPHSYSCTL_PERIPH_GPIOH//BUZ

#defineBUZ_PORTGPIO_PORTH_BASE

#defineBUZ_PINSGPIO_PIN_0

#definelcdenGPIO_PIN_0//PB0;

#definelcdrsGPIO_PIN_1//PB1;

unsignedchardata;//PD0-PD7;

unsignedcharnum;

voidwrite_com(unsignedcharcom)//写命令

{

GPIOPinWrite(GPIO_PORTB_BASE,lcdrs,0x00);//lcdrs=0;

GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|

GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,com);//PD=com;

SysCtlDelay(5*(TheSysClock/4000));//延时5ms

GPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF);//lcden=1;

SysCtlDelay(5*(TheSysClock/4000));

GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;

}

voidwrite_data(unsignedchardate)

{

GPIOPinWrite(GPIO_PORTB_BASE,lcdrs,0xFF);//lcdrs=1;

GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|

GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,date);//PD=date;

SysCtlDelay(5*(TheSysClock/4000));

GPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF);//lcden=1;

SysCtlDelay(5*(TheSysClock/4000));

GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;

}

voidinit()

{

SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD);//使能A端口

GPIOPinTypeOut(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|

GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);

SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB);

GPIOPinTypeOut(GPIO_PORTB_BASE,GPIO_PIN_0|GPIO_PIN_1);

GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00);//lcden=0;

write_com(0x38);//8位数据,双列,5*7字形

write_com(0x0c);//显示功能开,有光标,光标闪烁

write_com(0x06);//

write_com(0x01);//开始清屏

}

//读取LM75A的温度值,并通过UART发送显示

voidLM75A_TmpDisp(char*pcTmp)

{

intsec[2];

charTab[8][4]={"000","125","250","375","500","625","750","875"};

chars[20];

shortt;

intm=30;

t=pcTmp[0];

t<<=8;

t|=pcTmp[1]&0xE0;

if(t<0)

{

t=-t;

uartPutc('-');

}

sprintf(s,"%d",(t/256));

uartPuts(s);

uartPutc('.');

uartPuts(Tab[(t>>5)&0x07]);

uartPuts("\r\n");

write_com(0x87);

write_data(223);

write_com(0x88);

write_data(67);

write_com(0x85);

write_data(s[0]);

write_data(s[1]);

write_com(0x80+0x47);

write_data(223);

write_com(0x80+0x48);

write_data(67);

write_com(0x80+0x45);

sec[0]=m/10;//取十位

sec[1]=m%10;//取个位

for(inti=0;i<2;i++)

{

write_data(sec[i]+48);//整型数据转换为ASC2

SysCtlDelay(100*(TheSysClock/4000));

}

if((t/256)>m)

{

GPIOPinTypeOut(BUZ_PORT,BUZ_PINS);

GPIOPinWrite(BUZ_PORT,BUZ_PINS,0xff);

}

else

{

GPIOPinTypeOut(BUZ_PORT,BUZ_PINS);

GPIOPinWrite(BUZ_PORT,BUZ_PINS,0x00);

}

}

//主函数(程序入口)

intmain(void)

{

unsignedlongulStart,ulStop;

unsignedlong

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

当前位置:首页 > 自然科学 > 物理

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

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