版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式控制系统与应用课程论文题目:基于MSP430G2553和ds18b20的测温系统院系名称:专业班级:学生**:学号:摘要为了在现实生活和工业生产及过程控制中准确测量温度,设计了一种基于低功耗MSP430单片机的数字温度计,整个系统通过单片机MSP430控制DS18B20读取温度,采用LCD1602显示,温度传感器DS18B20与单片机之间通过串口进展数据传输,且外围的整合性高,DS18B20只需一个端口即可实现数据通信,连接方便,通过屡次实验证明,该系统的测试结果与实际环境温度一致,除了具有接口电路简单,测量精度高,误差小,可靠性高等特点外,其本钱低,功耗低的特点使其拥有更广阔的应用前景。关键字:DS18B20MSP430G2553单片机液晶显示目录1引言12测温系统硬件构成12.1硬件设计13软件设计63.1总体设计流程图63.2初始化模块64实验展示74.1实物整体展示74.2报警显示和蜂鸣器报警85设计心得116本设计的缺乏和反思12参考文献13附录14附一:元器件及仪器明细表14附二:实验设计程序141引言温度的测量和控制在储粮仓库、智能楼宇空调控制及其它的工农业生产和科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结(如AD590)之类的模拟传感器,经信号取样电路、放大电路和模数转换电路处理,获取表示温度值的数字信号,再交由微处理器或DSP处理。被测温度信号从敏感元件接收的非电模拟量开场,到转换为微处理器可处理的数字信号之间,设计者须考虑的线路环节较多,相应测温装置中元器件数量难以下降,随之影响产品的可靠性及体积微小化。由此会造成整个检测系统有较大的偏差.稳定性和抗干扰性能都较差。本文设计一种基于数字温度传感器DSl8820的小型测温系统,主控芯片采用TI公司的MSP430单片机,数字温度传感器通过单总线与单片机连接,系统构造简单,抗干扰能力强,适合于恶劣环境下进展现场温度测量,可应用于仓库测温、楼宇空调控制和生产过程监控等领域。2测温系统硬件构成2.1硬件设计2.1.1系统硬件设计总方案如图1所示:电源模块电源模块MSP430G2553DS18B20LCD1602液晶显示模块温度图1硬件设计方框图电源系统由miniUSB输出5V以及芯片LE33组成,实现对MSP430G2553核心处理芯片、LCD1602液晶显示等硬件模块提供所需电源;显示局部由LCD1602液晶对温度进展实时显示;软件设计局部包括模拟串口对DS18B20数据进展读取以及LCD1602液晶的驱动和显示。2.1.2本次设计需要用到MSP430单片机的1脚电源、16脚复位端、20脚接地端、配置P2.2口为待测信号输入端,P2.0为LCD片选信号端,P1为LCD并行数据输出端,如表1所示。图2所示为MSP430G2553单片机的最小系统图。表1MSP430G2553引脚及功能说明引脚序号引脚名称功能说明1VCC电源正2P2.2频率信号输入端5P2.0LCD片选信号端6P1.*LCD并行数据输出端13P2.5蜂鸣器报警16RST复位脚20GND电源地图2MSP430G2553最小系统2.1.3LCD1602LCD12864液晶显示屏用到电源接口线,脚背光电源接口线,脚并行接口选择。LCD1602引脚功能如表2所示。表2LCD1602引脚功能说明引脚序号引脚名称功能说明1VSS模块的电源地2VDD模块的电源正端4RS(CS)并行指令/数据选择信号、串行片选信号5R/W(SID)并行读写选择信号、串行的数据口6E(CLK)并行使能信号、串行的同步时钟15LED_A背光源正极16LED_K背光源负极〔0V〕2.1.4DSl8820是美国DALLAS公司推出的单总线数字测温芯片。它具有独特的单线接口方式,将非电模拟量温度值转换为数字信号输出仅需占用1位/A)端口,能够直接读取被测物体的温度值,提高了抗干扰能力和测量精度。它体积小,电压适用*围宽(3.0V一5.5v),可以采用外部供电方式(如图1所示),也可以采用寄生电源方式.即从数据线上获得电源。用户还可以通过编程实现9一12位的温度读数,即具有可调的温度分辨率。因此它的实用性和可靠性比同类产品更高.DSl8820采用3脚TO一92封装,形如三极管:同时也有8脚SOIC封装。测温*围为一55℃一+125。C,在一10℃一+85℃*围内,精度为±0.5℃。每一个DSl8820芯片的ROM中存放一个“位ID号:前8位是产品类型编号,随后48位是该器件的自身序号,最后8位是前面56位的循环冗余校验码。又因其可采用寄生电源方式供电。因此,一条总线上可以同时挂接数个DSl8820,可方便的实现多点测温系统。另外用户还可根据实际情况自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。DSl8820检测到的温度值经转换为数字量后,自动存入存储器中,并与设定值TH或TL进展比拟,当测量温度超出给定*围时,就输出报警信号,并自动识别是高温超限还是低温超限。图3DS18B20引脚连接图4DS18B20温度存放器格式图5温度/数据关系UART转USB电路图6UART电路PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利联接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几只电容就可实现USB信号与RS232信号的转换,能够方便嵌入到各种设备所以2000年左右开场经常推荐使用该款芯片;该器件作为USB/RS232双向转换器,一方面从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为USB数据格式传送回主机。这些工作全部由器件自动完成,开发者无需考虑固件设计.3软件设计3.1总体设计流程图系统软件设计包括测量初始化局部、显示局部、报警局部。系统软件整体流程图如图7所示。图7系统软件整体设计流程图3.2初始化模块设备初始化包括关闭看门狗,I/O口输入/输出功能的配置,时钟初始化,端口初始化以及液晶初始化,其流程图如图8所示。图8系统初始化流程图3.3显示模块首先根据LCD1602液晶的时序图写出液晶驱动函数,并调用驱动函数完成在指定位置处显示字符的功能函数,这样通过定时刷新液晶屏就可以显示温度值了。4实验展示4.1实物整体展示图9实物整体展示图4.2报警显示和蜂鸣器报警当温度t>30℃时蜂鸣器报警,红灯闪亮模拟通风降温。LCD显示警告。当温度t<27℃时蜂鸣器报警,黄灯闪亮模拟加热升温。LCD显示警告。当温度27℃<t<30℃时LCD实时显示温度。图10实物调试图图11实物调试图5设计心得通过嵌入式控制系统与应用这门课,通过这门课的学习,我对MSP430G2553有了较为深入的了解。这门课王教师通过分工合作,同学讲解,同学讨论,以及课后周记总结这样的方式来进展的,不仅提高了自己的自学能力和学习主动性,而且使自己得到了很多方面根本技能的训练。这次做的设计所需要的知识有很多在书本上是找不到的,而且这些知道并不是像以前一样由教师系统的详细的教授。所以,这就强迫我去图书馆和网上查阅资料,不过这也培养了我查阅资料的能力,让我受益颇多。在第一节课上完之后觉得实在是无从下手,根本不知道干什么,对外电路和内电路都十分迷茫,可是后来通过同学之间的分工合作,而且我们先从非常简单的小实验入手,一点一点我就每次可都有了很多收获,通过同学讲解中断,定时器,计数器,捕捉,比拟器,PWM,串口,ADC,低功耗,触屏等,我对这些知识能够拿来应用,并能实现根本功能要求,能够把程序弄明白,发现自己会的越来越多,一次课比一次课进步。通过本次实验,让我对MSP430G2553芯片的输入与输出以及中断查询方式有了一定的了解。MSP430实验虽然很简单,但也费了不少功夫。首先,对CCS软件操作不熟练,Grace工程可以快速方便地帮助我们配置存放器,但是自己还不太熟悉。设置断点和单步调试,是一种很好的找到问题的方法。而且我学会了多文件编写软件,以后要尽量用多文件操作,把之前写好的程序做成头文件,方便以后调用。其次,DS18B20是单总线的通讯。硬件连接较容易,但是时序要求很严格,软件编程一开场,读不出数据。千方百计地调整时序,准确延时,依旧没有读出温度数据。查阅大量资料发现,DS18B20的接法不通,会影响到时序问题。寄生模式和单独电源供电模式,他们的时序一定的区别。而且电源和地直接接不接10k电阻,时序也不一样的。这一块废了很大功夫。最后,MSP430的IO口最大6mA,整个芯片最大电流总和不超过48mA。然而有源蜂鸣器驱动需要130mA,所以就要加9012NPN三极管来获得大电流。9012的常温最大输出500mA电流。6本设计的缺乏和反思最为一个温度监控系统,应该加上按钮,当温度异常,蜂鸣器报警时,按下复位按钮,蜂鸣器停顿报警,但是红灯继续闪烁。当故障排除后,红灯灭,系统恢复正常。如果一分钟后故障没有排除,蜂鸣器再次报警。检测的实时温度应该通过UART上传到上位机,记录下来。参考文献[1]胡大可.MSP430系列超低功耗16位单片机[M].航空航天大学,2001.[2]童诗白,华成英.模拟电子技术根底〔第四版〕,清华大学,2006.[3]MSP430G2553DataSheet.[4]MSP430中文手册.[5]Op37DataSheet.[6]MSP430G2系列单片机原理与实践教程.[7]MSP-E*P430G2系列单片机试验板使用指南.附录附一:元器件及仪器明细表见另外e*cel文档。附二:实验设计程序/**main.c*/*include"msp430g2553.h"*include"LCD1602.h"*include"DS18b20.h"intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1DIR=0*FF;P2DIR=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;//P2DIR=BIT3+BIT4+BIT5;unsignedintt;LCD1602_Init();DS18b20_Init();while(1){ P2OUT&=~BIT3;//红灯灭 P2OUT&=~BIT4;//绿灯灭//P2OUT&=~BIT5;//蜂鸣器关t=get_one_temperature();if(t>=300) { P2OUT|=BIT3;//红灯亮 LCD1602_write_string(1,1,"warning!!!!!!!!"); LCD1602_write_string(2,0,"hig-"); LCD1602_display_temperature(2,4,t); P2OUT|=BIT5;//蜂鸣器kai }if(t<=270) { P2OUT|=BIT4;//绿灯亮 LCD1602_write_string(1,1,"warning!!!!!!!!!");LCD1602_write_string(2,0,"low-"); LCD1602_display_temperature(2,4,t); P2OUT|=BIT5;//蜂鸣器kai }if(t<300&&t>270) { P2OUT&=~BIT5;//蜂鸣器关 LCD1602_write_string(1,1,"Thetemprature"); LCD1602_write_string(2,0,"is"); LCD1602_display_temperature(2,4,t); }}}/**DS18b20.H**Createdon:2015-6-28*Author:Administrator*/*ifndefDS18B20_H_*defineDS18B20_H_*include"msp430g2553.h"/***********************************引脚定义***********************************/*defineDQ_1P2OUT|=BIT2*defineDQ_0P2OUT&=~BIT2*defineDQ_inP2DIR&=~BIT2*defineDQ_outP2DIR|=BIT2*defineDQ_val(P2IN&BIT2)/**************************************命令字符定义***************************************/*defineRead_ROM0*33//读ROM*defineMatch_ROM0*55//匹配ROM*defineSkip_ROM0*cc//跳过ROM*defineSearch_ROM0*f0//搜索ROM*defineAlarm_Search0*ec//告警搜索*defineConvert_Temperature0*44//温度转换*defineRead_Scratchpad0*be//读暂存存储器9字节内容*defineWrite_Scratchpad0*4e//写暂存存储器,写的是THandTL,接着发送两位数据就可以/***********************************定义变量***********************************///e*ternunsignedintCheck_val;//初始化检测变量//e*ternunsignedintTemp;//存放温度//e*ternunsignedintTemp_l;//存放温度低四位//e*ternunsignedintTemp_h;//存放温度高四位/****************************************函数定义****************************************/e*ternvoidDS18b20_Port_Init(void);e*ternunsignedintDS18b20_Init(void);e*ternvoidDS18b20_write_byte(unsignedintdat);e*ternunsignedintDS18b20_read_byte(void);e*ternunsignedintget_one_temperature(void);*endif/*DS18B20_H_*//**DS18B20.C**Createdon:2015-6-28*Author:Administrator*/*include"msp430g2553.h"/***************************DQ接p2.4**************************/*include"DS18b20.h"voidDS18b20_Port_Init(void){P2DIR=BIT2;}/*******************************************************************************DS18b20操作时序:1.DS18b20初始化2.对64位ROM进展操作读ROM搜索ROM跳过ROM告警搜索3.对存放器进展操作包括读取温度……4.精度默认的为0.0625,无法重新设定,没找到相应的指令相对应的转换时间为750ms**************************************************************************************************************************************************************DS18b20初始化方法:1主机发送480-960us的低电平,释放总线2等待15-60us3检测DQ上是否有低电平出现有:复位成功,通常时间为60-240us无:复位失败,继续等待4DQ上出现低电平后,低电平持续15us,然后DS18b20开场对单片机发送的数据进展采样*******************************************************************************/unsignedintDS18b20_Init(void){unsignedCheck_val;DQ_out;DQ_0;__delay_cycles(600);DQ_1;__delay_cycles(60);DQ_in;_NOP();if(DQ_val==1){Check_val=0;//初始化失败}if(DQ_val==0){Check_val=1;//初始化成功}__delay_cycles(10);DQ_out;DQ_1;__delay_cycles(100);returnCheck_val;}/*******************************************************************************DS18b20写数据方法:1DS18b20是“一位一位〞的写‘0’和‘1’2每写一次‘1’或‘0’为一个周期,每个周期约为45-60us3DQ拉低1us,表示写周期开场,释放总线,让DQ随写入的值变化4假设写1:DQ拉高至少60us,保证在采样周期内采到的值均为高5假设写0:DQ拉低至少60us,保证在采样周期内采到的值均为低6释放总线********************************************************************************单片机发送数据时,是从写的数据的最高位开场发送*/voidDS18b20_write_byte(unsignedintdat){unsignedinti;for(i=0;i<8;i++){DQ_0;__delay_cycles(2);if(dat&0*01)DQ_1;elseDQ_0;__delay_cycles(60);dat>>=1;;DQ_1;__delay_cycles(10);}}/**************************************************************************************************DS18b20读数据方法:1DS18b20是“一位一位〞的读‘0’和‘1’2每读一次‘1’或‘0’为一个周期,每个周期约为45-60us3DQ拉低1us,表示读周期开场,释放总线,让DQ随DS18b20传送的值变化4假设传1:则检测到高电平,持续时间为60us左右,所以检测一次后要延时60us,再检测下一位传送的数据5假设传0:则检测到低电平,持续时间为60us左右***************************************************************************************************DS18b20传送数据是从最低位开场传**所以单片机在承受数据时,存储变量一共移动8次,将所有数据都接收并回到最高位*/unsignedintDS18b20_read_byte(void){unsignedi;unsignedintbyte=0;for(i=0;i<8;i++){byte>>=1;DQ_0;__delay_cycles(2);DQ_1;__delay_cycles(2);DQ_in;_NOP();if(DQ_val)byte|=0*80;__delay_cycles(60);DQ_out;DQ_1;__delay_cycles(10);}returnbyte;}/*******************************************************************************当用一个DS18b20进展温度测量时步骤1.初始化2.跳过ROM3.控制存放器:温度转换,读取ROM,读取温度低8位,温度高8位注意的是,一定要初始化两次*******************************************************************************/unsignedintget_one_temperature(void)//只读取了整数,没读取小数的局部{unsignedintTemp_l=0,Temp_h=0,Temp=0;floatf_temp;DS18b20_Init();DS18b20_write_byte(Skip_ROM);DS18b20_write_byte(Convert_Temperature);__delay_cycles(500000);DS18b20_Init();DS18b20_write_byte(Skip_ROM);DS18b20_write_byte(Read_Scratchpad);Temp_l=DS18b20_read_byte();Temp_h=DS18b20_read_byte();//Temp_l>>=8;Temp_h<<=8;Temp=Temp_h+Temp_l;f_temp=Temp*0.0625;//18b20的分辨率是0.0625Temp=f_temp*10+0.5;//乘以10表示小数点后面取一位,加0.5是四舍五入returnTemp;//Temp是整型}/**LCD1602.H**Createdon:2015-6-28*Author:Administrator*/*ifndefLCD1602_H_*defineLCD1602_H_*include"msp430g2553.h"*definers_0P2OUT&=~BIT1*definers_1P2OUT|=BIT1*defineen_0P2OUT&=~BIT0*defineen_1P2OUT|=BIT0/***********************************************************函数定义***********************************************************/e*ternvoidLCD1602_Port_Init(void);e*ternvoidLCD1602_write_mand(unsignedint);e*ternvoidLCD1602_write_data(unsignedintdat);e*ternvoidLCD1602_Init(void);e*ternvoidLCD1602_set_position(unsignedint*,unsignedinty);e*ternvoidLCD1602_write_string(unsignedint*,unsignedinty,unsignedchar*str);e*ternvoidLCD1602_display_temperature(unsignedint*,unsignedinty,unsignedinttemp);e*ternvoidLCD1602_write_varia(unsignedint*,unsignedinty,unsignedintvaria,unsignedintn);*endif/*LCD1602_H_*//**LCD1602.C**Createdon:2015-6-28*Author:Administrator*/*include"msp430g2553.h"*include"LCD1602.h"/**********************************数字变量显示定义***********************************/charDigital[]={0*30,0*31,0*32,0*33,0*34,0*35,0*36,0*37,0*38,0*39};voidLCD1602_Port_Init(void){P1DIR|=0*FF;P2DIR|=BIT0+BIT1;}voidLCD1602_write_mand(unsignedint){rs_0;P1OUT=;__delay_cycles(500);en_1;__delay_cycles(500);en_0;}voidLCD1602_write_data(unsignedintdat){rs_1;P1OUT=dat;__delay_cycles(500);en_1;__delay_cycles(500);en_0;}voidLCD1602_Init(void){LCD1602_write_mand(0*38);//5*7点阵,双行显示LCD1602_write_mand(0*0c);//0*0f有光标,LCD1602_write_mand(0*01);//清屏LCD1602_write_mand(0*06);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件中国气候教学课件
- 北师大版四下英语教案
- 《麦比乌斯圈》大班科学教案
- 智能化停车场建设项目招投标
- 小学二年级语文下册第四.五.六单元教案
- 养殖业资格证发放管理办法
- 图书馆吊顶施工合同
- 地铁站通信信号系统招投标文件
- 灾害救援:枪支弹药管理办法
- 上海市物业招投标策略与技巧
- 登高车检查表
- 5陶行知的学前教育思想课件(42页PPT)
- 科技论文写作与学术规范PPT通用课件
- 磷酸铁锂电池工商业储能项目施工组织设计方案
- CNAS-CC01:2015 管理体系认证机构要求
- 矿山规模划分标准
- 北师大版小学数学五年级上册重点练习试题(全册)
- 木兰辞(拼音打印)
- 心血管介入考试器械植入模拟试题卷
- 意愿类能愿动词偏误分析——以“要”、“想”、“敢”、“肯”为例
- 职业病防治监理实施细则
评论
0/150
提交评论