实时温控报警器设计4.docx
《实时温控报警器设计4.docx》由会员分享,可在线阅读,更多相关《实时温控报警器设计4.docx(20页珍藏版)》请在冰豆网上搜索。
实时温控报警器设计4
.
《嵌入式系统原理与应用》综合设计
实时温控报警器设计
系部:
电子与信息工程系
专业班级:
通信工程10秋2班
姓名:
学号:
小组成员:
指导教师:
完成日期2013年7月
目录
1绪论1
1.1嵌入式系统简介1
1.2课程设计目的3
1.3课程设计题目及设计要求3
1.3.1设计题目3
1.3.2设计要求3
1.3.3工作流程3
1.3.4实验设备与器材4
2硬件设计5
2.1系统结构框图5
2.21602液晶屏6
2.2.21602管脚功能7
2.3ARM开发板8
2.3.1LM3S2110简介8
2.4LM75A数字温度传感器10
2.4.1LM75A数字温度传感器简介10
2.4.2LM75A数字温度传感器特点11
3软件设计12
3.1程序流程图12
3.2系统控制软件概述13
3.2.1系统软件主要实现以下几大功能:
13
3.3系统软件的设计13
3.3.1主程序设计13
3.4设计过程及结果13
3.4.1对于LCD1602液晶屏显示器的描述13
3.4.2程序执行基本流程13
4系统程序设计与调试14
4.1方案论证14
4.2调试过程15
5结束语17
5.1调试过程中的问题和解决方法17
5.2心得体会17
6参考文献18
7附录19
7.1程序清单19
1绪论
1.1嵌入式系统简介
嵌入式系统(Embeddedsystem),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电器工程师协会(U.K.InstitutionofElectricalEngineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。
与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。
由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。
由于嵌入式系统通常进行大量生产。
所以单个的成本节约,能够随着产量进行成百上千的放大。
嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。
与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是暂时不变的;所以经常称为“固件”。
国内普遍认同的嵌入式系统定义为:
以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。
因此可以这样理解上述三个面向的含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。
嵌入式系统是将先进的计算机技术、半导体技术和电子技术和各个行业的具体应用相结合后的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
所以,介入嵌入式系统行业,必须有一个正确的定位。
例如Palm之所以在PDA领域占有70%以上的市场,就是因为其立足于个人电子消费品,着重发展图形界面和多任务管理;而风河的Vxworks之所以在火星车上得以应用,则是因为其高实时性和高可靠性。
嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。
所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。
目前的嵌入式系统的核心往往是一个只有几K到几十K微内核,需要根据实际的使用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。
一般而言,嵌入式系统的构架可以分成四个部分:
处理器、存储器、输入输出(I/O)和软件(由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对其不加区分,这也是嵌入式系统和一般的PC操作系统的最大区别)。
图1.1是常见的一些应用嵌入式系统的实例
图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.3.4实验设备与器材
实验设备:
PC机一台、LM3S2110实验开发板。
实验器材:
蜂鸣器、LM75A数字温度传感器、LCD1602液晶屏。
2硬件设计
2.1系统结构框图
1)ARM开发板:
LM3S2110;
2)温度测量与显示:
LM75A数字温度传感器、LCD1602液晶屏;
3)蜂鸣器:
环境温度超过报警温度时实施报警;
系统结构框图如图2.1所示。
ARM开发板
LED显示
蜂鸣器报警
图2.1系统结构框图
2.21602液晶屏
在本次试验中,因为要显示温度的高低大小,我们决定使用1602液晶屏来显示。
2.2.11602液晶屏简介
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)
注:
为了表示的方便,后文皆以1表示高电平,0表示低电平。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
如图2.2所示
图2.21602的实物图
2.2.21602管脚功能
1602采用标准的16脚接口,其中:
第1脚:
VSS为电源地
第2脚:
VCC接5V电源正极
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
如图2.3所示
图2.31602管教图
2.3ARM开发板
2.3.1LM3S2110简介
LuminaryMicro公司Stellaris所提供一系列的微控制器是首款基于ARM®Cortex™-M3的控制器,它们为对成本尤其敏感的嵌入式微控制器应用方案带来了高性能的32位运算能力。
这些具备领先技
术的芯片使用户能够以传统的8位和16位器件的价位来享受32位的性能,而且所有型号都是以小占位面积的封装形式提供。
该Stellaris_系列芯片能够提供高效的性能、广泛的集成功能以及按照要求定位的选择,适用于各种关注成本并明确要求具有的过程控制以及连接能力的应用方案。
该Stellaris_LM3S1000系列使用更大的片上存储器、增强型电源管理和扩展I/O以及控制功能来扩展Stellaris家族。
该Stellaris®LM3S2000系列是针对控制器局域网应用方案而设计的一组芯片,它在Stellaris系列芯片的基础上扩展了BoschCAN网络技术——短距离工业网络里的黄金标准。
该StellarisLM3S2000系列芯片还标志着先进的Cortex-M3内核和CAN能力的首次结合运用。
该StellarisLM3S6000系列芯片结合了10/100以太网媒体访问控制(MAC)以及物理层(PHY),标志着ARMCortex-M3MCU已经具备集成连接能力,还是唯一集成了10/100以太网MAC和PHY物理层的ARM架构MCU。
该Stellaris_LM3S8000系列结合了Bosch控制器局域网技术和10/100以太网媒体访问控制(MAC)以及物理(PHY)层。
该LM3S2110微控制器是针对工业应用方案而设计的,包括远程监控、电子贩售机、测试和测量设备、网络设备和交换机、工厂自动化、HVAC和建筑控制、游戏设备、运动控制、医疗器械、以及火警安防。
除此之外,该LM3S2110微控制器的优势还在于能够方便的运用多种ARM的开发工具和片上系统(SoC)的底层IP应用方案,以及广大的用户群体。
另外,该微控制器使用了兼容ARM的Thumb®指令集的Thumb2指令集来减少存储容量的需求,并以此达到降低成本的目的。
最后,LM3S2110微控制器与Stellaris系列的所有成员是代码兼容的,这为用户提供了灵活性,能够适应各种精确的需求。
为了能够帮助用户产品快速的上市,LuminaryMicro公司提供了一整套的解决方案,包括评估和开发用的板卡、白皮书和应用笔记、方便使用的外设驱动程序库、以及强劲的支持、销售和分销网络。
LM3S2110开发板如下图2.4所示。
图2.4LM3S2110开发板
2.4LM75A数字温度传感器
2.4.1LM75A数字温度传感器简介
LM75A是一款内置带隙温度传感器和∑-Δ模数转换功能的温度数字转换器,它也是温度检测器,可提供过热输出功能。
LM75A包含多个数据寄存器:
配置寄存器(Conf)用来存储器件的某些设置,如器件的工作模式、OS工作模式、OS极性和OS错误队列等;温度寄存器(Temp)用来存储读取的数字温度;设定点寄存器用来存储可编程的过热关断和滞后限制,器件通过两线的串行I2C总线接口与控制器通信。
LM75A还包含一个开漏输出管脚,当温度超过编程限制的值时该输出有效。
LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。
LM75A可配置成不同的工作模式。
它可设置成在正常工作模式下周期性地对环境温度进行监控,或进入关断模式来将器件功耗降至最低。
OS输出有2种可选的工作模式:
OS比较器模式和OS中断模式。
OS输出可选择高电平或低电平有效。
错误队列和设定点限制可编程,可以激活OS输出。
温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125℃的精度,在需要精确地测量温度偏移或超出限制范围的应用中非常有用。
当LM75A在转换过程中不产生中断(I2C总线部分与∑-Δ转换部分完全独立)或LM75A不断被访问时,器件将一直更新温度寄存器中的数据。
正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80℃,滞后75℃,这时,LM75A就可用作独立的温度控制器,预定义温度设定点。
2.4.2LM75A数字温度传感器特点
器件可以完全取代工业标准的LM75,并提供了良好的温度精度(0.125℃),单个器件的电源范围可超出2.8V~5.5V的范围
具有I2C总线接口,同一总线上可连接多达8个器件
电源电压范围:
2.8V~5.5V
环境温度范围:
Tamb=-55℃~+125℃
提供0.125℃的精度的11位ADC
温度精度:
-25℃~+100℃时为±2℃
-55℃~+125℃时为±3℃
可编程温度阈值和滞后设定点
为了减低功耗,关断模式下消耗的电流仅为3.5μA
上电时器件可用作一个独立的温度控制器
ESD保护:
JESD22-A114为2000VHBM
JESD22-A115为200V和JESD22-C101为1000VCDM
超过100mA的JESDEC标准JESD78要进行栓锁测试(Latch-uptesting)如下图2.5所示
图2.5LM75A数字温度传感器
3软件设计
3.1程序流程图
主程序的主要功能是负责读出并处理LM75A数字温度传感器测量的当前温度值,并在LCD1602液晶屏上进行温度的实时显示,并根据设置的报警温度判断是否报警。
系统开始运行时,温度传感器测量并计算温度值进行处理,经过处理后的数据传输到液晶屏进行显示。
程序中预先编写进温度报警界限,当实时温度超过报警界限时,蜂鸣器报警,反之不报警。
其程序流程见图3.1所示。
图3.1主程序流程图
3.2系统控制软件概述
3.2.1系统软件主要实现以下几大功能:
(1)利用键盘设置初始判断温度,并在LCD1602液晶屏上显示;
(2)通过LM75A数字温度传感器将感应的实际温度送入寄存器;
(3)根据设定的参数初值对数据进行判断,从而并控制蜂鸣器的报警。
3.3系统软件的设计
3.3.1主程序设计
主程序中仅实现系统的初始化,对系统进行自检和调用数据处理子程序。
包括键盘读取子程序,温度传感器获取温度子程序,温度转化子程序,显示子程序。
3.4设计过程及结果
3.4.1对于LCD1602液晶屏显示器的描述
用一个LCD1602液晶屏来实现实验。
其中第一位显示C,表示温度单位。
第二位显示“°”,第三位显示个位温度;第四位显示十位温度,第五位显示“!
”,表示温度报警。
3.4.2程序执行基本流程
1.输入一个两位温度给模块作为其初始温度。
显示温度在LCD1602液晶屏上的第0x85、0x86位。
2.假设一个具体数值,如30,把此数值假设为温度传感器感应的温度,与LCD1602液晶屏上显示的报警温度进行比较。
3.若30小于LCD1602液晶屏上显示的报警温度,则蜂鸣器无任何操作。
因为对应管脚位低电平,蜂鸣器不激活。
4.若30大于LCD1602液晶屏上显示的报警温度,则蜂鸣器蜂鸣。
因为对应管脚为高电平。
5.在步骤4的情况下,可再次改变LCD1602液晶屏上显示的报警温度。
6.在步骤5的情况下,若LCD1602液晶屏上显示的报警温度大于30,则蜂鸣器不工作,即停止蜂鸣。
4系统程序设计与调试
4.1方案论证
烧写程序后,进行调试。
LM75A数字温度传感器能有效的测量当前环境温度并实时传送显示到液晶屏幕上。
当手握住传感器时,温度上升,液晶屏上的温度变化也能很及时的显示。
没有时延的问题,真正的做到了实时性。
当温度变化超过了程序预先编写的报警温度时,蜂鸣器便会报警,温度下降到报警温度以下,蜂鸣器便停止报警。
结果证明方案可行。
4.2调试过程
1)将硬件根据电路原理图正确连接,烧写程序。
如图4.1,可以看到液晶屏幕上显示出当前室温,与电脑上串口端显示温度相同,如图4.2所示。
两者同步变化,说明LM75A数字温度传感器很准确的测量了实时温度。
图4.1硬件连接图
图4.2温度显示
2)如果没到规定温度,蜂鸣器不响如图4.3,如果到了规定温度,蜂鸣器就响了如图4.4所示
图4.3蜂鸣器不响图4.4蜂鸣器响
5结束语
5.1调试过程中的问题和解决方法
在调试的时候,我们发现,一开始做的时候很多都不是很会,然后慢慢地做着就上手了,中间,我还发现了很多问题。
问题1:
一开始拿到显示屏之后,连接电脑后,发现显示屏不亮,也不知道怎么回事,后来发现旁边有两个旋钮,就随便的转了,经过一步一步的摸索,知道扭一个旋钮可以调节显示屏的亮度。
:
问题2:
满足报警温度,蜂鸣器就会一直鸣响,不管以后温度是否低于报警温度,这个问题也困扰了我很久,最后我分析了一下,发现是因为程序只写了满足条件蜂鸣器响,而没有写不满足时蜂鸣器不响,所以跳入蜂鸣器响的程序,程序一直执行就蜂鸣。
后来我在主函数main()中加了一句话else语句;这句话的作用是不满足时蜂鸣器不响。
还有一些由于粗心而造成的问题就不细说了。
通过我们大家的努力,这些ing人头疼的问题也跟着一一解决了。
成功也在一个一个的小问题的解决后变得难能可贵。
5.2心得体会
这次实验的心得体会:
经过这次大型作业,让我们对ARM系统具有了更深刻的了解与认识,通过一组人得努力合作下,我们终于一起完成了这个项目,自己动手,从在网上挑选需要用的材料,下订单,到最后的装程序,连线调试。
每个人都付出了自己的辛劳与汗水。
6参考文献
[1]周立功.ARM嵌入式系统基础教程.北京:
北京航空航天大学出版社,2005.1
[2]周立功.ARM嵌入式系统实验教程.第三版.北京:
北京航空航天大学出版社,2005.9
[3]周立功.ARM嵌入式系统实验教程.第三版.扩展实验.北京:
北京航空航天大学出版社,2005.11
[4]田泽.嵌入式系统开发与应用实验教程.第二版.北京:
北京航空航天大学出版社,2005.4
[5]LabrosseJJean.邵贝贝译.嵌入式实时操作系统μc/os-II.第二版.北京:
北京航空航天大学出版社,2003
参考网站:
[1]周立功单片机;
[2]广州致远电子网页;
[3]电子电路图网;
[4]中国互动出版网http:
//www.china-。
7附录
7.1程序清单
#include"systemInit.h"
#definelcdenGPIO_PIN_0//PB0;
#definelcdrsGPIO_PIN_1//PB1;
#defineKEY_PERIPHSYSCTL_PERIPH_GPIOB//数码管段选,GPIOB模块
#defineKEY_PORTGPIO_PORTB_BASE
#defineKEY_PINSGPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6
#defineBUZ_PERIPHSYSCTL_PERIPH_GPIOH//BUZ
#defineBUZ_PORTGPIO_PORTH_BASE
#defineBUZ_PINSGPIO_PIN_0
#defineKEY1_PERIPHSYSCTL_PERIPH_GPIOH//数码管段选,GPIOH模块
#defineKEY1_PORTGPIO_PORTH_BASE
#defineKEY1_PINSGPIO_PIN_1
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);//开始清屏
}
//主函数(程序入口)
intmain(void)
{
clockInit();//时钟初始化:
晶振,6MHz
SysCtlPeriEnable(KEY_PERIPH);//使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT,KEY_PINS);//设置KEY所在管脚为输入
SysCtlPeriEnable(KEY1_PERIPH);//使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY1_PORT,KEY1_PINS);//设置KEY所在管脚为输入
SysCtlPeriEnable(BUZ_PERIPH);//使能BUZ所在的GPIO端口
GPIOPinTypeIn(BUZ_PORT,BUZ_PINS);/