水温控制系统(有程序).doc

上传人:小** 文档编号:4528876 上传时间:2021-09-27 格式:DOC 页数:70 大小:463.47KB
返回 下载 相关 举报
水温控制系统(有程序).doc_第1页
第1页 / 共70页
水温控制系统(有程序).doc_第2页
第2页 / 共70页
点击查看更多>>
资源描述

《水温控制系统(有程序).doc》由会员分享,可在线阅读,更多相关《水温控制系统(有程序).doc(70页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

2、perature 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 signal to the m

3、icrocontroller, 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 temperature 0.12 C, then th

4、e 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 加热器的比较与选择41.4 显示器的比较与选择52

5、 系统设计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 结压降的不饱和值 VBE 与热力学温 度 T 和通过发射极电流 I

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

7、制器的选择方案一、采用最简单的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),在总线闲置时为高电平。信息通过单总线接口将数字温度值送入单片机进行处理和显示。DS18B20的特性:(1) 电压范围

10、为3.05.5V,在寄生电源方式下可由数据线供电。(2) 温度使用范围为-55C +125C,在-10C +85C时精度为0.5C。(3) 可编程的分辨率为912位,对应的课分辩温度为0.5C、0.25C、0.125C和0.0625C,可实现高精度测量。(4) 具有负电压特性。2.2.2 键盘电路设计图3键盘的行列线接入单片机的P1口,当有键按下时就会产生中断信号(P1口的每一个位都可以产生中断信号),然后进入中断程度,对键盘进行扫描,确定按键的值。 表一 键盘功能键表行列一二三四I1234II5678III90确定IV清除2.2.3 电热杯加热电路设计图4当单片机P5.5脚输出高电平时,三极

11、管8050导通,从而固态继电器打到NO端,电热杯与220V交流电形成通路,对水进行加热。二级管IN4148固态继电器起着保护作用。2.2.4 风扇冷却电路设计图5当实时温度比设定的温度高出0.12C时,P5.7输出高电平,导通8050,从而使固态继电器打到NO端是风扇工作,对水降温。风扇由5V直流电源驱动。2.2.4 液晶显示电路设计图6P3.0、P3.1、P3.2接LCD1602的三个控制引脚,P4口作为LCD1602的数据接口。通过对控制引脚的控制,从而实现温度显示的功能。3 软件设计3.1总体设计总程序一共包含五个c文件,程序结构框图如图7所示:图7 总程序结构框图 3.2 主函数主函数

12、流程图如图8所示3.3 温度获取函数温度获取函数流程图如图9所示图9 温度获取函数流程图3.4 端口1中断函数端口1(键盘)中断函数如图10所示图10 端口1中断函数3.5键盘扫描函数键盘扫描函数流程图如图11所示图11 键盘扫描函数流程图 3.6 液晶显示函数液晶显示函数流程图如图12所示3.7信号控制函数信号控制函数流程图如图13所示图13 信号控制函数流程图4 系统测量经过系统对温控系统加热的过程录像,然后加热时间段每5秒记一次数,到达60度是每2秒记一个数据,最后将获得的数据在MATLAB中画出相应图。图14 温控响应图 图 15 局部放大图 表2 峰值时间稳定时间超调量6.93min

13、7.30min2.8%5 结束语 由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。参考文献1 曹磊MSP430单片机C程序设计与实践北京航空航天出版社,2007.52 张德丰MATLAB控制系统设计与仿真电子工业出版社,2009.63 杨邦文新型继电器实用手册人民邮电出版社,2004.64 岂兴明 唐杰51单片机编程基础与开发实例详解人民邮电出版社,2008.115 杨素行模拟电子技术基础简明教程高等教育出版社,2008.46 阎石数字电子技术基础高等教育出版社,2009.12 附录附录1 系统总电路图附录2 元件清单#DesignatorLibRe

14、fDescriptionComment1C1, C3CAPACITOR POLCapacitor10uf2C2, C4, C7CAPCapacitor1043C5, C6CAPCapacitor33pF4D1LEDLED5D2, D3DIODEDiodeIN41486F1FENGSHANFENGSHAN7J1CON4ConnectorUSB8JP1HEADER 7X2JTAG9K1, K2RELAY-SPDTRELAY-SPDT10L1LCD1602LCD160211MSP430F149IPM1MSP430F149IPMMSP430F149IPMMSP430F149IPM12Q1, Q2NPN

15、1NPN Transistor805013R1RES2RES214R2RES24.7K15R3RES_DLSRES_DLS16R4RES200017R5RES2100K18R6, R7, R8RES21K19R9, R10, R11, R12RES25.1K20S1SW-SPSTSW-SPST21S2SW-PBSW-PB22S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18BUTTONBUTTON23U1VOLVOL24U2DS18B20DS18B2025Y1CRYSTALCrystal8M26Y2CR

16、YSTALCrystal32.768K说明本系统采用的是MSP430F149单片机,软件用的是IRA Embedded Workbench4.20.1版本。并附开发板原理图此系统程序包含键盘扫描程序,温度获取程序(ds18b20),lcd1602显示程序,pid算法程序,以及控制程序。目录main.c2keypad.h4Lcd1602.h7Ds18b20.h13Control.h21pid算法程序24main.c#include #include keypad.h#include lcd1602.h#include ds18b20.h#include control.htypedef unsi

17、gned char uchar;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 |= BIT

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

19、LM_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_val16) /输入

20、为数字键 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; extern unsigned c

21、har key_val; extern unsigned char key_Flag;keypad.c#include 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,3,4,5,6,7,8, 9,0,11,12,13,14,15,16;/k12,清除键。k13,确定键/

22、*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=0x0f; P1IE=0x0f; /P1低四位中断开启 key_Flag = 0; key_Pressed = 0; key_val = 0;/*延时约15ms,完成消抖功能*/void delay(uint tmp) for(;tmp 0;tmp-);/*扫描键盘

23、的IO端口,获得键值*/void Check_Key(void) uchar row ,col,tmp1,tmp2; tmp1 = 0x80; for(row = 0;row =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;

24、/ tmp2右移1位 /*检测按键,并获取键值*/void Key_Event(void) 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)

25、= 0x0f) /如果按键已经释放 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);

26、void Disp1Char(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

27、#include lcd1602.h#include keypad.htypedef 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 CLR_RS P3OUT&=BIT0; /RS = P3.0#define SET_RS P3OUT|=BIT0;#defi

28、ne 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 *temp; uchar i,n = 0; temp = ptr; while(*ptr+ != 0) n+; /计算字符串有效字符的个数 for (i

29、=0;in;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;in;i+) Disp1Char(x+,y,ptri); if (x = 0x0f) x = 0; y = 1; /*功 能:向液晶输入显示字符位置的坐标信息参 数:x-位置的列坐标 y-位置的行坐标*/void Loca

30、teXY(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,uchar y,uchar data) LocateXY( x, y ); LcdWriteData( data );/*LcdReset:对1602液晶模块进行复位操作*/void LcdRes

31、et(void) CtrlDir |= 0x07; /控制线端口设为输出状态 DataDir = 0xFF; /数据端口设为输出状态 LcdWriteCommand(0x38, 0); /规定的复位操作 Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteCommand(0x38, 0); Delay5ms(); LcdWriteCommand(0x38, 1);/显示模式设置 LcdWriteCommand(0x08, 1);/显示关闭 LcdWriteCommand(0x01, 1); /显示清屏 LcdWriteComman

32、d(0x06, 1);/写字符时整体不移动 LcdWriteCommand(0x0c, 1);/显示开,不开游标,不闪烁 DispNChar(0,0,14,temp_set); /显示预设温度提示 DispNChar(0,1,9,temp_now); /显示实时温度提示/*函数名称:LcdWriteCommand功 能:向液晶模块写入命令参 数:cmd-命令, chk-是否判忙的标志,1:判忙,0:不判*/void LcdWriteCommand(uchar cmd,uchar chk) if (chk) WaitForEnable(); / 检测忙信号? CLR_RS; CLR_RW; _NOP(); DataPort = cmd; /将命令字写入数据端口 _NOP(); SET_EN; /产生使能脉冲信号 _NOP(); _NOP(); CLR_EN;/*函数名称:L

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com