嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc

上传人:小小飞 文档编号:3928105 上传时间:2019-10-10 格式:DOC 页数:25 大小:1.26MB
返回 下载 相关 举报
嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc_第1页
第1页 / 共25页
嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc_第2页
第2页 / 共25页
嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc_第3页
第3页 / 共25页
嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc_第4页
第4页 / 共25页
嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc》由会员分享,可在线阅读,更多相关《嵌入式控制系统与应用课程论文-基于MSP430G2553和ds18b20的测温系统.doc(25页珍藏版)》请在三一文库上搜索。

1、嵌入式控制系统与应用课程论文题 目: 基于MSP430G2553和ds18b20的测温系统 院系名称: 专业班级: 学生姓名: 学 号: 摘 要为了在现实生活和工业生产及过程控制中准确测量温度,设计了一种基于低功耗MSP430单片机的数字温度计,整个系统通过单片机MSP430控制DS18B20读取温度,采用LCD1602显示,温度传感器DS18B20与单片机之间通过串口进行数据传输,且外围的整合性高,DS18B20只需一个端口即可实现数据通信,连接方便,通过多次实验证明,该系统的测试结果与实际环境温度一致,除了具有接口电路简单,测量精度高,误差小,可靠性高等特点外,其成本低,功耗低的特点使其拥

2、有更广阔的应用前景。关键字:DS18B20 MSP430G2553单片机 液晶显示 目 录1 引言12 测温系统硬件构成12.1 硬件设计13 软件设计63.1 总体设计流程图63.2 初始化模块64 实验展示74.1 实物整体展示74.2 报警显示和蜂鸣器报警85设 计 心 得116本设计的不足和反思12参 考 文 献13附录14附一:元器件及仪器明细表14附二:实验设计程序14III1 引言温度的测量和控制在储粮仓库、智能楼宇空调控制及其它的工农业生产和科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结(如AD590)之类的模拟传感器,经信号取样电路、放大电路和模

3、数转换电路处理,获取表示温度值的数字信号,再交由微处理器或DSP处理。被测温度信号从敏感元件接收的非电模拟量开始,到转换为微处理器可处理的数字信号之间,设计者须考虑的线路环节较多,相应测温装置中元器件数量难以下降,随之影响产品的可靠性及体积微小化。由此会造成整个检测系统有较大的偏差稳定性和抗干扰性能都较差。本文设计一种基于数字温度传感器DSl8820的小型测温系统,主控芯片采用TI公司的MSP430单片机,数字温度传感器通过单总线与单片机连接,系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,可应用于仓库测温、楼宇空调控制和生产过程监控等领域。2 测温系统硬件构成2.1 硬件设计2

4、.1.1 系统硬件设计总方案系统硬件设计总方案如图1所示:电源模块MSP430G2553DS18B20LCD1602液晶显示模块温度图1 硬件设计方框图电源系统由miniUSB输出5V以及芯片LE33组成,实现对MSP430G2553核心处理芯片、LCD1602液晶显示等硬件模块提供所需电源;显示部分由LCD1602液晶对温度进行实时显示;软件设计部分包括模拟串口对DS18B20数据进行读取以及LCD1602液晶的驱动和显示。2.1.2 MSP430G2553引脚功能说明本次设计需要用到MSP430单片机的1脚电源、16脚复位端、20脚接地端、配置P2.2口为待测信号输入端,P2.0为LCD片

5、选信号端,P1为LCD并行数据输出端,如表1所示。图2所示为MSP430G2553单片机的最小系统图。表1 MSP430G2553引脚及功能说明引脚序号引脚名称功能说明1VCC电源正2P2.2频率信号输入端5P2.0LCD片选信号端6P1.xLCD并行数据输出端13P2.5蜂鸣器报警16RST复位脚20GND电源地图2 MSP430G2553最小系统2.1.3 LCD1602引脚功能说明LCD12864液晶显示屏用到电源接口线,脚背光电源接口线,脚并行接口选择。LCD1602引脚功能如表2所示。表2 LCD1602引脚功能说明引脚序号引脚名称功能说明1VSS模块的电源地2VDD模块的电源正端4

6、RS(CS)并行指令/数据选择信号、串行片选信号5R/W(SID)并行读写选择信号、串行的数据口6E(CLK)并行使能信号、串行的同步时钟15LED_A背光源正极16LED_K背光源负极(0V)2.1.4 DS18B20说明DSl8820是美国DALLAS公司推出的单总线数字测温芯片。它具有独特的单线接口方式,将非电模拟量温度值转换为数字信号输出仅需占用1位A)端口,能够直接读取被测物体的温度值,提高了抗干扰能力和测量精度。它体积小,电压适用范围宽(30V一55v),可以采用外部供电方式(如图1所示),也可以采用寄生电源方式即从数据线上获得电源。用户还可以通过编程实现9一12位的温度读数,即具

7、有可调的温度分辨率。因此它的实用性和可靠性比同类产品更高DSl8820采用3脚TO一92封装,形如三极管:同时也有8脚SOIC封装。测温范围为一55一+125。C,在一10一+85范围内,精度为05。每一个DSl8820芯片的ROM中存放一个“位ID号:前8位是产品类型编号,随后48位是该器件的自身序号,最后8位是前面56位的循环冗余校验码。又因其可采用寄生电源方式供电。因此,一条总线上可以同时挂接数个DSl8820,可方便的实现多点测温系统。另外用户还可根据实际情况自设定非易失性温度报警上下限值TH和TL(掉电后依然保存)。DSl8820检测到的温度值经转换为数字量后,自动存入存储器中,并与

8、设定值TH或TL进行比较,当测量温度超出给定范围时,就输出报警信号,并自动识别是高温超限还是低温超限。 图3 DS18B20引脚连接图4 DS18B20温度寄存器格式图5 温度/数据关系2.1.5 UART转USB电路图6 UART电路PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利联接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几只电容就可实现USB信号与RS232信号的转换,能够方便嵌入到各种设备所以2000年左右开始经常推荐使用

9、该款芯片;该器件作为USB/RS232双向转换器,一方面从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为USB数据格式传送回主机。这些工作全部由器件自动完成,开发者无需考虑固件设计.3 软件设计3.1 总体设计流程图系统软件设计包括测量初始化部分、显示部分、报警部分。系统软件整体流程图如图7所示。图7 系统软件整体设计流程图3.2 初始化模块设备初始化包括关闭看门狗,I/O口输入/输出功能的配置,时钟初始化,端口初始化以及液晶初始化,其流程图如图8所示。图8 系统初始化流程图3.3 显示模块首先根据LCD1602液晶的时序图写出液晶驱动函数

10、,并调用驱动函数完成在指定位置处显示字符的功能函数,这样通过定时刷新液晶屏就可以显示温度值了。 4 实验展示4.1 实物整体展示图9 实物整体展示图4.2 报警显示和蜂鸣器报警当温度t30时蜂鸣器报警,红灯闪亮模拟通风降温。LCD显示警告。当温度t27时蜂鸣器报警,黄灯闪亮模拟加热升温。LCD显示警告。当温度27t=300) P2OUT|=BIT3;/红灯亮 LCD1602_write_string(1,1,warning!); LCD1602_write_string(2,0,hig-); LCD1602_display_temperature(2,4,t); P2OUT|=BIT5;/蜂鸣

11、器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(t270) P2OUT&=BIT5;/蜂鸣器关 LCD1602_write_string(1,1,The temprature ); LCD1602_write_string(2,0,is ); LCD1602_display_temperature(2,4,t); /* * DS

12、18b20.H * * Created on: 2015-6-28 * Author: Administrator */#ifndef DS18B20_H_#define DS18B20_H_#includemsp430g2553.h/* 引脚定义 */#define DQ_1 P2OUT |= BIT2#define DQ_0 P2OUT &= BIT2#define DQ_in P2DIR &= BIT2#define DQ_out P2DIR |= BIT2#define DQ_val (P2IN & BIT2)/* 命令字符定义 */#define Read_ROM 0x33 /读RO

13、M#define Match_ROM 0x55 /匹配ROM#define Skip_ROM 0xcc /跳过ROM#define Search_ROM 0xf0 /搜索ROM#define Alarm_Search 0xec /告警搜索#define Convert_Temperature 0x44 /温度转换#define Read_Scratchpad 0xbe /读暂存存储器9字节内容#define Write_Scratchpad 0x4e /写暂存存储器,写的是TH and TL ,接着发送两位数据就可以/* 定义变量 */extern unsigned int Check_val

14、;/初始化检测变量/extern unsigned int Temp;/存放温度/extern unsigned int Temp_l;/存放温度低四位/extern unsigned int Temp_h;/存放温度高四位/* 函数定义 */extern void DS18b20_Port_Init(void);extern unsigned int DS18b20_Init(void);extern void DS18b20_write_byte(unsigned int dat);extern unsigned int DS18b20_read_byte(void);extern uns

15、igned int get_one_temperature(void);#endif /* DS18B20_H_ */* * DS18B20.C * * Created on: 2015-6-28 * Author: Administrator */#includemsp430g2553.h/* DQ 接 p2.4 */#includeDS18b20.hvoid DS18b20_Port_Init(void) P2DIR = BIT2;/* DS18b20 操作时序: 1.DS18b20 初始化 2.对64位ROM进行操作 读ROM 搜索ROM 跳过ROM 告警搜索 3.对寄存器进行操作 包括

16、读取温度 4.精度默认的为0.0625 ,无法重新设定,没找到相应的指令 相对应的转换时间为750ms*DS18b20 初始化方法: 1 主机发送 480 - 960 us 的低电平,释放总线 2 等待 15 - 60 us 3 检测DQ上是否有低电平出现 有:复位成功 ,通常时间为 60-240 us 无:复位失败 , 继续等待 4 DQ上出现低电平后,低电平持续15us,然后DS18b20开始对单片机发送的数据进行采样*/unsigned int DS18b20_Init(void) unsigned Check_val; DQ_out; DQ_0; _delay_cycles(600);

17、 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); return Check_val;/*DS18b20 写数据方法: 1 DS18b20 是“一位一位”的写0和1 2 每写一次1或0为一个周期,每个周期约为 45 - 60 us 3 DQ拉低 1 us ,表示写周期开始,释放总线,让DQ随写入的值变化 4 若写1: DQ

18、拉高至少60us,保证在采样周期内采到的值均为高 5 若写0: DQ拉低至少60us,保证在采样周期内采到的值均为低 6 释放总线* 单片机发送数据时,是从写的数据的最高位开始发送*/void DS18b20_write_byte(unsigned int dat) unsigned int i; for(i = 0; i = 1; DQ_1; _delay_cycles(10); /*DS18b20 读数据方法: 1 DS18b20 是“一位一位”的读0和1 2 每读一次1或0为一个周期,每个周期约为 45 - 60 us 3 DQ拉低 1 us ,表示读周期开始,释放总线,让DQ随DS18

19、b20传送的值变化 4 若传1:则检测到高电平,持续时间为60us左右,所以检测一次后要延时60us,再检测下一位传送的数据 5 若传0:则检测到低电平,持续时间为60us左右*DS18b20 传送数据是从最低位开始传*所以单片机在接受数据时,存储变量一共移动8次,将所有数据都接收并回到最高位*/unsigned int DS18b20_read_byte(void) unsigned i; unsigned int byte = 0; for(i = 0;i = 1; DQ_0; _delay_cycles(2); DQ_1; _delay_cycles(2); DQ_in; _NOP();

20、 if(DQ_val) byte |= 0x80; _delay_cycles(60); DQ_out; DQ_1; _delay_cycles(10); return byte;/*当用一个DS18b20进行温度测量时步骤1.初始化2.跳过ROM3.控制寄存器: 温度转换 ,读取ROM , 读取温度低8位 , 温度高8位注意的是,一定要初始化两次*/unsigned int get_one_temperature(void) /只读取了整数,没读取小数的部分 unsigned int Temp_l=0,Temp_h=0,Temp=0; float f_temp; DS18b20_Init()

21、; 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; /18

22、b20的分辨率是0.0625 Temp=f_temp*10+0.5; /乘以10表示小数点后面取一位,加0.5是四舍五入 return Temp; /Temp是整型/* * LCD1602.H * * Created on: 2015-6-28 * Author: Administrator */#ifndef LCD1602_H_#define LCD1602_H_#includemsp430g2553.h#define rs_0 P2OUT &= BIT1#define rs_1 P2OUT |= BIT1#define en_0 P2OUT &= BIT0#define en_1 P2O

23、UT |= BIT0/* 函数定义*/extern void LCD1602_Port_Init(void);extern void LCD1602_write_command(unsigned int com);extern void LCD1602_write_data(unsigned int dat);extern void LCD1602_Init(void);extern void LCD1602_set_position(unsigned int x,unsigned int y);extern void LCD1602_write_string(unsigned int x,u

24、nsigned int y,unsigned char *str);extern void LCD1602_display_temperature(unsigned int x,unsigned int y,unsigned int temp);extern void LCD1602_write_varia(unsigned int x,unsigned int y,unsigned int varia,unsigned int n);#endif /* LCD1602_H_ */* * LCD1602.C * * Created on: 2015-6-28 * Author: Adminis

25、trator */#includemsp430g2553.h#includeLCD1602.h/* 数字变量显示定义*/char Digital=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39;void LCD1602_Port_Init(void) P1DIR |= 0XFF; P2DIR |= BIT0 + BIT1 ;void LCD1602_write_command(unsigned int com) rs_0; P1OUT=com; _delay_cycles(500); en_1; _delay_cycles(500); en_

26、0;void LCD1602_write_data(unsigned int dat) rs_1; P1OUT=dat; _delay_cycles(500); en_1; _delay_cycles(500); en_0;void LCD1602_Init(void) LCD1602_write_command(0x38); /5*7点阵,双行显示 LCD1602_write_command(0x0c); /0x0f 有光标, LCD1602_write_command(0x01); /清屏 LCD1602_write_command(0x06); /写入数据后,光标右移,显示屏不动 voi

27、d LCD1602_set_position(unsigned int x,unsigned int y) if(x=1) LCD1602_write_command(0x80+y); if(x=2) LCD1602_write_command(0x80+0x40+y); void LCD1602_write_string(unsigned int x,unsigned int y,unsigned char *str) _delay_cycles(1000); LCD1602_set_position(x,y); while(*str!=0) LCD1602_write_data(*str)

28、; str+; void LCD1602_display_temperature(unsigned int x,unsigned int y,unsigned int temp) LCD1602_set_position(x,y); LCD1602_write_data(Digitaltemp/100); LCD1602_write_data(Digitaltemp%100/10); LCD1602_write_data(.); LCD1602_write_data(Digitaltemp%100%10); LCD1602_write_data(C);void LCD1602_write_va

29、ria(unsigned int x,unsigned int y,unsigned int varia,unsigned int n) _delay_cycles(1000); LCD1602_set_position(x,y); switch(n) case 1 : LCD1602_write_data(Digitalvaria); break; case 2 : LCD1602_write_data(Digitalvaria/10); LCD1602_write_data(Digitalvaria);break; case 3 : LCD1602_write_data(Digitalvaria/100); LCD1602_write_data(Digitalvaria/10); LCD1602_write_data(Digitalvaria); break; case 4 : LCD1602_write_data(Digitalvaria/1000); LCD1602_write_data(Digitalvaria/100); LCD1602_write_data(Digitalvaria/10); LCD1602_write_data(Digitalvaria);break; 22

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1