水温控制系统(有程序)_第1页
水温控制系统(有程序)_第2页
水温控制系统(有程序)_第3页
水温控制系统(有程序)_第4页
水温控制系统(有程序)_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、水温控制系统(C题)重庆大学光电工程学院 参赛队员:吴 蔡 傅摘要 本水温控制系统是基于MSP430单片机为主控芯片,键盘输入设定温度,并在LCD1602上显示设定温度和实时温度。通过DS18B20温度传感器对水温进行采样,将采得的数字温度信号送给单片机,单片机对温度进行PID算法,通过改变加热控制方波的占空比达到精确控制温度的目的。本水温控制系统的静态误差0.2°C,当设定的温度比实时温度高0.12°C时,则启动风扇降温,10分钟左右到达稳定状态。本系统能够很精确地实现水温控制,是一个很好的水温控制方案。关键字 MSP430 PID算法 DS18B20温度传感器Abstr

2、act:The temperature control system is based on the MSP430 microcontroller as the master chip, control temperature is set through keyboard and the LCD1602 display the control temperature and the real-time temperature. Temperature sensor DS18B20 samples the water temperature and sents the digital sign

3、al to the microcontroller, the microcontroller on the temperature of PID algorithm changes the duty cycle of heating control square wave to achieve precise control of temperature. The temperature control system of static error 0.2 ° C.when the set temperature higher than the real-time temperatu

4、re 0.12 ° C, then the fan starts to cool , reaching the steady state cost about 10 minutes. The system can achieve a very precise temperature control, this temperature control is a good program.Keywords: MSP430 PID algorithm temperature sensor DS18B20摘要11 方案论证与比较41.1 温度传感器的比较与选择41.2 控制器的选择41.3

5、加热器的比较与选择41.4 显示器的比较与选择52 系统设计52.1总体设计52.2 单元电路设计62.2.1 温度传感器电路设计62.2.2 键盘电路设计72.2.3 电热杯加热电路设计82.2.4 风扇冷却电路设计82.2.4 液晶显示电路设计93 软件设计103.1总体设计103.2 主函数103.3 温度获取函数113.4 端口1中断函数123.5键盘扫描函数133.6 液晶显示函数143.7信号控制函数154 系统测量165 结束语16参考文献16附录171 方案论证与比较1.1 温度传感器的比较与选择方案一、AD590是一种半导体集成电路,它是利用晶体管的 b-e 结压降的不饱和值

6、 VBE 与热力学温 度 T 和通过发射极电流 I 的下述关系实现对温度的检测具有线性好,精度适中,灵敏度高,体积小,使用方便等优点。AD590D的输出形式有电流和电压两种形式,要将温度传感器采集的温度值经过AD转换,然后送入单片机进行处理。方案二、采用DS18B20数字温度传感器对水温进行采样,无需进行AD转换。将采集的值直接送入单片机进行处理。DS18B20测温范围 55+125,固有测温分辨率0.5,支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温。在市面上AD590比DS18B20贵几倍,同时AD590的外围电路比DS18B20的复杂,就这价格

7、和电路实现难易的考虑,本系统选择方案二。1.2 控制器的选择方案一、采用最简单的51单片机处理温度数据、键盘的输入和LCD的显示。利用51单片机的优点是价格便宜,使用比较方便,缺点是接口少,使用时需扩展,外围电路比较多,运算处理速度不高,功耗高。方案二、利用MSP430对温度数据等进行处理,处理能力强、运算速度快、超低功耗、片内资源丰富、方便高效的开发环境。对于实现本系统的功能绰绰有余。综合比较以上两个方案,本系统选择方案二。1.3 加热器的比较与选择方案一、将搪瓷器皿直接放在加热炉上进行加热,方便简单,很容易实现,但是缺点是对于加热一升水能源浪费比较大,不能完全有效地利用加热炉,同时加热炉功

8、率较大,不能很好地精确地控制水温。方案二、用电热杯对一升水进行加热,电热杯功率较小(300W),能够实现很好地精确控制,同时电热杯使用方便,体积小,质量轻,价格便宜。综合比较上面两个方案,本系统选择方案二。1.4 显示器的比较与选择方案一、采用TFT_LCD作为显示温度值的器件。每个液晶像素点都是由集成在像素点后面的薄膜晶体管来驱动,从而可以做到高速度、高亮度、高对比度显示屏幕信息,是目前最好的LCD彩色显示设备之一。方案二、采用LCD1602作为显示温度值的器件。LCD1602是工业字符型液晶,能够同时显示16x2个字符,1602采用标准的16脚接口,其中包括8根数据线,三根控制线,电源、地

9、、就液晶驱动电压引脚。使用方便,价格适中。由于本系统只需要显示温度值,对分辨率和颜色方面要求不高,所以综合价格和系统需求考虑,本系统选择方案二。2 系统设计2.1总体设计该系统控制核心采用MSP430F149单片机,采用4x4矩阵键盘作为设定温度的输入,采用LCD1602显示数据,采用DS18B20单线温度传感器,单片机通过控制两个继电器,达到分别控制风扇和电热杯的目的。 图1 总体设计框架图2.2 单元电路设计 2.2.1 温度传感器电路设计图2DS18B20采用一总线技术,在使用时需在外部接一个上拉电阻(取经验值4.7K),在总线闲置时为高电平。信息通过单总线接口将数字温度值送入单片机进行

10、处理和显示。DS18B20的特性:(1) 电压范围为3.05.5V,在寄生电源方式下可由数据线供电。(2) 温度使用范围为-55°C +125°C,在-10°C +85°C时精度为±0.5°C。(3) 可编程的分辨率为912位,对应的课分辩温度为0.5°C、0.25°C、0.125°C和0.0625°C,可实现高精度测量。(4) 具有负电压特性。2.2.2 键盘电路设计图3键盘的行列线接入单片机的P1口,当有键按下时就会产生中断信号(P1口的每一个位都可以产生中断信号),然后进入中断程度,对键盘

11、进行扫描,确定按键的值。 表一 键盘功能键表行列一二三四I1234II5678III90确定IV清除2.2.3 电热杯加热电路设计图4当单片机P5.5脚输出高电平时,三极管8050导通,从而固态继电器打到NO端,电热杯与220V交流电形成通路,对水进行加热。二级管IN4148固态继电器起着保护作用。2.2.4 风扇冷却电路设计图5当实时温度比设定的温度高出0.12°C时,P5.7输出高电平,导通8050,从而使固态继电器打到NO端是风扇工作,对水降温。风扇由5V直流电源驱动。2.2.4 液晶显示电路设计图6P3.0、P3.1、P3.2接LCD1602的三个控制引脚,P4口作为LCD1

12、602的数据接口。通过对控制引脚的控制,从而实现温度显示的功能。3 软件设计3.1总体设计总程序一共包含五个c文件,程序结构框图如图7所示:main.c系统初始化调用各种初始化函数端口1(键盘)中断循环执行温度获取函数ds18b20.c温度获取函数写入各种控制命令读取温度转换结果将数字温度转换为BCD码keypad.c键盘初始化按键判断获取键值延时消抖lcd1602.c液晶初始化显示单个字符显示多个字符显示一个字符串control.c显示键盘输入的温度实时与设定温度进行比较PID算法获取控制信号看门狗定时控制加热时间图7 总程序结构框图 开始系统初始化键盘初始化LCD初始化I/O端口初始化温度

13、获取函数图8 主函数流程图3.2 主函数主函数流程图如图8所示YN传感器初始化发送skip命令初始化成功否开始发 送温度转换命令延 时发送skip命令发 送读ScratchPad命令读 取温度转换结果将二进制温度转换为可显示的十进制数逐位显示温度确定键按下否温度比较函数返回YN3.3 温度获取函数温度获取函数流程图如图9所示图9 温度获取函数流程图3.4 端口1中断函数端口1(键盘)中断函数如图10所示中断开始中断返回数字键键值判断及获取函数键值性质逐位显示在LCD1602上将输入温度转换为二进制数置位标志位各种控制信号初始化键盘初始化清除键确定键图10 端口1中断函数3.5键盘扫描函数键盘扫

14、描函数流程图如图11所示图11 键盘扫描函数流程图 3.6 液晶显示函数液晶显示函数流程图如图12所示图12 液晶显示函数流程图3.7信号控制函数信号控制函数流程图如图13所示图13 信号控制函数流程图4 系统测量经过系统对温控系统加热的过程录像,然后加热时间段每5秒记一次数,到达60度是每2秒记一个数据,最后将获得的数据在MATLAB中画出相应图。图14 温控响应图 图 15 局部放大图 表2 峰值时间稳定时间超调量6.93min7.30min2.8%5 结束语 由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。参考文献1 曹磊MSP430单片机C程

15、序设计与实践北京航空航天出版社,2007.52 张德丰MATLAB控制系统设计与仿真电子工业出版社,2009.63 杨邦文新型继电器实用手册人民邮电出版社,2004.64 岂兴明 唐杰51单片机编程基础与开发实例详解人民邮电出版社,2008.115 杨素行模拟电子技术基础简明教程高等教育出版社,2008.46 阎石数字电子技术基础高等教育出版社,2009.12 附录附录1 系统总电路图附录2 元件清单#DesignatorLibRefDescriptionComment1C1, C3CAPACITOR POLCapacitor10uf2C2, C4, C7CAPCapacitor1043C5,

16、 C6CAPCapacitor33pF4D1LEDLED5D2, D3DIODEDiodeIN41486F1FENGSHANFENGSHAN7J1CON4ConnectorUSB8JP1HEADER 7X2JTAG9K1, K2RELAY-SPDTRELAY-SPDT10L1LCD1602LCD160211MSP430F149IPM1MSP430F149IPMMSP430F149IPMMSP430F149IPM12Q1, Q2NPN1NPN Transistor805013R1RES2RES214R2RES24.7K15R3RES_DLSRES_DLS16R4RES200017R5RES210

17、0K18R6, R7, R8RES21K19R9, R10, R11, R12RES25.1K20S1SW-SPSTSW-SPST21S2SW-PBSW-PB22S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18BUTTONBUTTON23U1VOLVOL24U2DS18B20DS18B2025Y1CRYSTALCrystal8M26Y2CRYSTALCrystal32.768K说明本系统采用的是MSP430F149单片机,软件用的是IRA Embedded Workbench4.20.1版本。并附开发

18、板原理图此系统程序包含键盘扫描程序,温度获取程序(ds18b20),lcd1602显示程序,pid算法程序,以及控制程序。目录main.c2keypad.h4Lcd1602.h7Ds18b20.h13Control.h21pid算法程序24main.c#include <MSP430x14x.h>#include "keypad.h"#include "lcd1602.h"#include "ds18b20.h"#include "control.h"typedef unsigned char ucha

19、r;typedef unsigned int uint;void InitSys(); /函数声明int main(void) WDTCTL=WDTPW+WDTHOLD; /关闭看门狗 /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= BIT2;P6OUT |= BIT

20、2; /关闭电平转换 InitSys(); /系统初始化 Init_Keypad(); /键盘初始化 LcdReset(); /lcd初始化 start: disp_18b20(); goto start; /*系统初始化*/void InitSys() unsigned int iq0; BCSCTL1 &= XT2OFF; /打开XT2振荡器 do IFG1 &= OFIFG; /清除振荡器失效标志 for(iq0=0xFF;iq0>0;iq0-);/延时,等待XT2起振 while(IFG1 & OFIFG)!=0); /判断XT2是否起振 BCSCTL2=

21、SELM_2+SELS; /选择MCLK,SMCLK为XT2 TACTL |= TASSEL_2 + ID_3; /计数时钟选择SMLK=8MHz,1/8分频后为1MHz P5DIR |= BIT5; /加热器控制端口 P5OUT &= BIT5; P5DIR |= BIT7; /风扇控制端口 P5OUT &= BIT7; _EINT(); /打开全局中断控制,若不需要打开,可以屏蔽本句/*端口1(键盘)中断函数*/#pragma vector=PORT1_VECTOR_interrupt void Port1() Key_Event(); /判断按键并获取键值 if(key_

22、val>16) /输入为数字键 temp_disp(); else if(key_val=12) /输入为确定键 sure=1; temp_set_2=ten2two(); else if(key_val=13) /输入为清除键 temp_clr(); Init_Keypad(); /键盘初始化keypad.hvoid Init_Keypad(void);void Check_Key(void);void delay(unsigned int tmp);void Key_Event(void);/引用外部变量的声明extern unsigned char key_Pressed; ext

23、ern unsigned char key_val; extern unsigned char key_Flag;keypad.c#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;/*全局变量*/uchar key_Pressed; /按键是否被按下:1-是,0-否uchar key_val; /存放键值uchar key_Flag; /按键是否已放开:1-是,0-否/设置键盘逻辑键值与程序计算键值的映射uchar key_Map = '1','2'

24、;,'3','4','5','6','7','8', '9','0',11,12,13,14,15,16;/k12,清除键。k13,确定键/*Init_Keypad:初始化扫描键盘的IO端口 */void Init_Keypad(void) P1DIR = 0xf0; /P1.0P1.3设置为列输入, P1.4P1.7设置为行输出 P1OUT=0x0f; / P1.4P1.7输出低电平 P1IFG=0X00; P1SEL=0; /P1口设置为一般I/O端口 P1IES

25、=0x0f; P1IE=0x0f; /P1低四位中断开启 key_Flag = 0; key_Pressed = 0; key_val = 0;/*延时约15ms,完成消抖功能*/void delay(uint tmp) for(;tmp > 0;tmp-);/*扫描键盘的IO端口,获得键值*/void Check_Key(void) uchar row ,col,tmp1,tmp2; tmp1 = 0x80; for(row = 0;row < 4;row+) /行扫描 P1OUT = 0xf0; /P1.4P1.7输出全1 P1OUT -= tmp1; /P1.4p1.7输出四

26、位中有一个为0 tmp1 >>=1; if (P1IN & 0x0f) < 0x0f) /是否P1IN的P1.0P1.3中有一位为0 tmp2 = 0x01; / tmp2用于检测出那一位为0 for(col = 0;col < 4;col+) / 列检测 if(P1IN & tmp2) = 0x00) / 是否是该列,等于0为是 key_val = key_Maprow * 4 + col; / 获取键值 return; / 退出循环 tmp2 <<= 1; / tmp2右移1位 /*检测按键,并获取键值*/void Key_Event(v

27、oid) uchar tmp; P1OUT &= 0x00; / 设置P1OUT全为0,等待按键输入 tmp = P1IN; / 获取 p1IN if (key_Pressed = 0x00)&&(tmp & 0x0f) < 0x0f) /如果有键按下 key_Pressed = 1; / 如果有按键按下,设置key_Pressed标识 delay(1200); /消除抖动 Check_Key(); / 调用check_Key(),获取键值 else if (key_Pressed = 1)&&(tmp & 0x0f) = 0x0f

28、) /如果按键已经释放 key_Pressed = 0; / 清除key_Pressed标识 key_Flag = 1; / 设置key_Flag标识 else _NOP(); Lcd1602.hvoid DispStr(unsigned char x,unsigned char y,unsigned char *ptr);void DispNChar(unsigned char x,unsigned char y, unsigned char n,unsigned char *ptr);void LocateXY(unsigned char x,unsigned char y);void D

29、isp1Char(unsigned char x,unsigned char y,unsigned char data);void LcdReset(void);void LcdWriteCommand(unsigned char cmd,unsigned char chk);void LcdWriteData( unsigned char data );void WaitForEnable(void);void Delay5ms(void);void Delay400ms(void);extern unsigned char temp_set;lcd1602.c#include <ms

30、p430x14x.h>#include "lcd1602.h"#include "keypad.h"typedef unsigned char uchar;typedef unsigned int uint;uchar temp_set="temp set:_._"uchar temp_now="temp now:"/*宏定义*/#define DataDir P4DIR#define DataPort P4OUT#define Busy 0x80#define CtrlDir P3DIR#define CL

31、R_RS P3OUT&=BIT0; /RS = P3.0#define SET_RS P3OUT|=BIT0;#define CLR_RW P3OUT&=BIT1;/RW = P3.1#define SET_RW P3OUT|=BIT1;#define CLR_EN P3OUT&=BIT2;/EN = P3.2#define SET_EN P3OUT|=BIT2;/*让液晶从某个位置起连续显示一个字符串x-位置的列坐标y-位置的行坐标ptr-指向字符串存放位置的指针*/void DispStr(uchar x,uchar y,uchar *ptr) uchar *tem

32、p; uchar i,n = 0; temp = ptr; while(*ptr+ != '0') n+; /计算字符串有效字符的个数 for (i=0;i<n;i+) Disp1Char(x+,y,tempi); if (x = 0x0f) x = 0; y = 1; /*让液晶从某个位置起连续显示N个字符x-位置的列坐标y-位置的行坐标n-字符个数ptr-指向字符存放位置的指针*/void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) uchar i; for (i=0;i<n;i+) Disp1Char(x+,y

33、,ptri); if (x = 0x0f) x = 0; y = 1; /*功 能:向液晶输入显示字符位置的坐标信息参 数:x-位置的列坐标 y-位置的行坐标*/void LocateXY(uchar x,uchar y) uchar temp; temp = x&0x0f; y &= 0x01; if(y) temp |= 0x40; /如果在第2行 temp |= 0x80; LcdWriteCommand(temp,1);/*功 能:在某个位置显示一个字符参 数:x-位置的列坐标 y-位置的行坐标 data-显示的字符数据*/void Disp1Char(uchar x,

34、uchar y,uchar data) LocateXY( x, y ); LcdWriteData( data );/*LcdReset:对1602液晶模块进行复位操作*/void LcdReset(void) CtrlDir |= 0x07; /控制线端口设为输出状态 DataDir = 0xFF; /数据端口设为输出状态 LcdWriteCommand(0x38, 0); /规定的复位操作 Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteComm

35、and(0x38, 1);/显示模式设置 LcdWriteCommand(0x08, 1);/显示关闭 LcdWriteCommand(0x01, 1); /显示清屏 LcdWriteCommand(0x06, 1);/写字符时整体不移动 LcdWriteCommand(0x0c, 1);/显示开,不开游标,不闪烁 DispNChar(0,0,14,temp_set); /显示预设温度提示 DispNChar(0,1,9,temp_now); /显示实时温度提示/*函数名称:LcdWriteCommand功 能:向液晶模块写入命令参 数:cmd-命令, chk-是否判忙的标志,1:判忙,0:不

36、判*/void LcdWriteCommand(uchar cmd,uchar chk) if (chk) WaitForEnable(); / 检测忙信号? CLR_RS; CLR_RW; _NOP(); DataPort = cmd; /将命令字写入数据端口 _NOP(); SET_EN; /产生使能脉冲信号 _NOP(); _NOP(); CLR_EN;/*函数名称:LcdWriteData功 能:向液晶显示的当前地址写入显示数据参 数:data-显示字符数据返回值 :无*/void LcdWriteData( uchar data ) WaitForEnable(); /等待液晶不忙

37、SET_RS; CLR_RW; _NOP(); DataPort = data; /将显示数据写入数据端口 _NOP(); SET_EN; /产生使能脉冲信号 _NOP(); _NOP(); CLR_EN;/*函数名称:WaitForEnable功 能:等待1602液晶完成内部操作*/void WaitForEnable(void) P4DIR &= 0x00; /将P4口切换为输入状态 CLR_RS; SET_RW; _NOP(); SET_EN; _NOP(); _NOP(); while(P4IN & Busy)!=0); /检测忙标志 CLR_EN; P4DIR |=

38、0xFF; /将P4口切换为输出状态 /*Delay5ms:延时约5ms*/void Delay5ms(void) uint i=40000; while (i != 0) i-; /*Delay400ms:延时约400ms*/void Delay400ms(void) uchar i=50; uint j; while(i-) j=7269; while(j-); Ds18b20.hvoid DelayNus(unsigned int n);unsigned char Init_18B20(void);void Write_18B20(unsigned char wdata);unsigne

39、d char Read_18B20(void);void Skip(void);void Convert(void);void Read_SP(void);unsigned int ReadTemp(void);unsigned int Do1Convert(void);void Disp_Numb(unsigned int temper);void disp_18b20(void);extern unsigned char dN6; /要显示的6位温度数字extern unsigned int temp_now_2; /温度值的十六进制存储ds18b20.c#include <msp4

40、30x14x.h>#include "ds18b20.h"#include "lcd1602.h"#include "control.h"typedef unsigned char uchar;typedef unsigned int uint;#define DQ1 P5OUT |= BIT6#define DQ0 P5OUT &= BIT6#define DQ_in P5DIR &= BIT6#define DQ_out P5DIR |= BIT6#define DQ_val (P5IN & BIT6)unsigne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论