完整版基于51单片机的WIFI无线温度测控系统毕业设计.docx
《完整版基于51单片机的WIFI无线温度测控系统毕业设计.docx》由会员分享,可在线阅读,更多相关《完整版基于51单片机的WIFI无线温度测控系统毕业设计.docx(36页珍藏版)》请在冰豆网上搜索。
完整版基于51单片机的WIFI无线温度测控系统毕业设计
计算机技术与科学学院
课程设计报告
(2014—2015学年第二学期)
课程名称:
______project3_________
班级:
电子1201
姓名:
李栋李凌锋
指导教师:
胡方强武晓光袁建华
包亚萍毛钱萍
2015年7月
基于单片机的WIFI无线温度测控系统
摘要:
温度是一个非常重要的物理量,因为它直接影响燃烧、化学反应、发酵、蒸馏、浓度、结晶以及空气流动等物理和化学过程。
温度控制失误可能引起生产安全、产品质量、产品产量等一系列问题。
本文介绍的是一个以单片机为核心的无线温度控制系统,主要通过WIFI模块完成远程温度控制功能。
在一定的区间内,在自动控制系统的控制下,温度始终在人们要求的范围之内。
它利用单片机STC89C52、温度传感器DS18B20及LCD等器件实现。
基本工作原理是单片机利用DS18B20对温度进行采集,通过串口传递给WIFI模块,再利用无线信号将数据传递给上位机(笔记本电脑或手机)进行温度显示。
同时,上位机可以利用无线信号和通信串口发送目标温度给单片机,单片机利用内置的PID算法进行控温。
关键词:
单片机;WIFI发送接收;PID;温度控制;LCD显示
第一部分总体设计与选型分析
系统的总体设计方案应在满足系统整体性能指标的前提下,充分考虑系统使用的环境,所选的结构要尽量简单实用、易于实现,器件的选用要着眼与合适的参数、稳定的性能、较低的功耗、低廉的成本以及较好的互换性能。
1.1总体设计
以下为本设计的总体框图
1.1.1受控模块
受控对象为水泥电阻和12v供电的风扇,水泥电阻使用12v电源进行加热,风扇用来对水泥电阻进行降温,使其达到目标温度,从而实现温度控制。
1.1.2测温模块
测温电路核心器件是温度传感器DS18B20。
DS18B20测得水泥电阻的温度传输给单片机进行相应的处理。
1.1.3单片机系统
本设计的单片机使用51单片机。
单片机系统连接受控模块、显示模块、控制模块、wifi模块四个部分。
1.1.4显示模块
显示模块使用LCD1602进行显示,由单片机驱动,显示测温对象的当前温度以及目标温度。
1.1.5控制模块
控制部分使用MOS管作为开关器件来控制对受控对象的加热以及降温从而达到温度控制的效果。
单片机根据内置的PID程序输出不同占空比的PWM波,控制MOS管的通断,从而达到控温的目的。
1.1.6wifi模块
wifi模块为有人的USR-WIFI232-T。
wifi模块通过串口与单片机系统之间进行双向的数据传输,具体数据由与wifi模块连接的上位机决定。
1.1.7上位机
上位机软件使用wifi模块配套的软件,而不去重新编写以加快进度。
上位机通过wifi模块向下位机发送两种指令。
一种是查询指令,要求下位机返回受控对象当前的温度;另一种是控制指令,修改测温对象的目标温度。
1.2选型分析
1.2.1受控模块方案
方案一:
将水泥电阻和风扇均直接置于外界环境中。
该方案利于风扇对水泥电阻的降温,但外界环境的空气流动以及温度变化将会对水泥电阻的加热产生较大影响。
方案二:
将水泥电阻和风扇均至于密闭的容器内。
该方案可以减小外界环境变化对水泥电阻加热的影响,但由于空气难以流动使得风扇的降温效果较差。
方案三:
将水泥电阻置于容器内,将风扇固定在容器外,并在容器上风扇扇叶位置钻孔。
钻孔的容器仍有较好的隔热效果,且风扇工作时容器内外的空气能较好的进行热交换。
综合考虑,本设计采用方案三。
1.2.2测温模块方案
方案一:
使用数字型DS18B20温度传感器。
DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
它是单线接口方式,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;
组网功能,多个DS18B20可以并联在唯一的三线上;且在使用中不需要任何外围元件。
方案二:
使用pt100通过电桥将温度变化转换为电压变化供单片机识别。
铂电阻温度传感器是利用其电阻和温度成一定函数关系而制成的温度传感器,由于其测量准确度高、测量范围大、复现性和稳定性好等,被广泛用于中温(-200℃~650℃)范围的温度测量中。
PT100是一种广泛应用的测温元件,在-50~600℃℃范围内具有其他任何温度传感器无可比拟的优势,包括高精度、稳定性好、抗干扰能力强等。
由于铂电阻的电阻值与温度成非线性关系,所以需要进行非线性校正。
方案二用的是温敏电阻传感器,它是将温度变化转化为电阻变化,再通过外围电路转换为电压信号,虽然测量范围较大,但操作复杂,且对外界的环境要求很高,不宜实现。
方案一利用的是DS18B20传感器,可以用单片机驱动,简单易于实施,所以基于以上的分析和题目的要求,我们选择方案一。
1.2.3控制模块方案
方案一:
使用MOS管作为开关控制。
MOS管为压控流型器件,通过单片机IO口电平的不同可以控制电源通断,反应迅速,但由于单片机IO口的电压限制难以直接驱动MOS管,因此需要在单片机IO口外接一个三极管以增加驱动电压,然后接MOS管控制电源通断。
方案二:
使用继电器作为开关控制。
选用继电器可以将加热电路与控制电路分离,以避免相互之间的干扰,但继电器的开关会有机械振动,影响系统的稳定性切会产生较大噪声,而且继电器的开关寿命短,反应速度要比MOS管慢得多,不适用于需要频繁开关的电路。
本设计控制方法为单片机IO口输出不同占空比的PWM波以调节水泥电阻的加热功率,以及风扇的降温功率,因此采用方案一比较合适。
1.2.4显示模块方案
方案一:
采用通用的LED数码管。
该方案成本较低,电路设计简单,程序的编写也相对来说较方便。
但数码管只能显示数字,且显示位数越多所需的驱动电流就越大,需要另外设计驱动电路。
方案二:
采用LCD1602液晶。
LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。
这样在显示温度数据的时候就比较直观,同时在一定程度上也增加了字符的丰富感。
但成本较高,编程较为复杂。
方案三:
采用LCD12864液晶。
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,
和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。
可以显示8×4行16×16点阵的汉字.也可完成图形显示.低电压低功耗是其又一显著特点。
但成本高,编程复杂。
为了更加方便的满足设计要求,并节约成本,我们采用了方案二,采用LCD1602进行显示。
第二部分电路硬件设计
设计由受控模块,测温模块,单片机系统等部分构成,具体框图请参照第一页的总体框图。
该设计的核心为单片机系统。
测温模块测得温度之后传递给单片机,单片机根据当前温度与目标温度调用不同的程序去驱动控制模块对受控模块进行控制。
单片机作为下位机,与上位机进行双向的数据传输。
下位机接受上位机的指令并给出一定的反馈。
2.1受控模块
受控模块的受控对象为水泥电阻和12v供电的风扇,因为水泥电阻和风扇无法仿真,在仿真电路中以LED串联10K电阻来模拟,LED的亮灭指示加热电路通断以及风扇是否工作。
本设计将四个3欧姆的水泥电阻串联焊接在电路板上并将其悬挂于用亚克力板制成的密封容器内。
由于容器内相对静止的空气有较好的隔热效果,可以减小外界环境对水泥电阻温度的影响。
两个水泥电阻缝隙间的温度较为稳定,利于温度传感器读取稳定的温度值。
风扇固定在容器外部,并在容器上风扇扇叶的位置以及容器上该面的相对面上的相应位置钻孔。
当风扇工作时容器内外的空气通过容器两个相对面上的小孔流通,从而打到降温的效果。
另外,我们在小孔位置悬挂了一片塑料膜,当风扇工作时塑料膜被吹起,可以指示风力的大小,当风扇不工作时塑料膜覆盖在小孔上,从而减小外界环境通过小孔对容器内部的影响。
2.2测温模块
测温模块使用DS18B20。
DS18B20是美国Dallas半导体公司的新一代数字式温度传感器,它具有独特的单总线接口方式,即允许在一条信号线上挂接数十甚至上百个数字式传感器,从而使测温装置与各传感器的接口变得十分简单,克服了模拟式传感器与微机接口时需要的A/D转换器及其他复杂外围电路的缺点,而且,可以通过总线供电,由它组成的温度测控系统非常方便,而且成本低、体积小、可靠性高。
DS18B20的测温范围-55~+125℃最高分辨率可达0.0625℃,由于每一个DS18B20出厂时都刻有唯一的一个序列号并存入其ROM中,因此CPU可用简单的通信协议就可以识别,从而节省了大量的引线和逻辑电路。
Dallas公司的单总线技术具有较高的性价比,适用于低速测控场合,测控对象越多越显示出其优越性;硬件施工、维修方便,抗干扰性好;具有CRC校验功能,可靠性高;软件设计规范,系统简明直观,易于掌握。
DS18B20的温度传感器是通过温度对振荡器的频率影响来测量温度的,如下图所示。
DS18B20内部有两个不同温度系数的振荡器。
低温系数振荡器输出的时钟脉冲信号通过由高温系数振荡器产生的门开通周期而被计数,通过该计数值来测量温度。
计数器被预置为与-55℃对应的一个基数值,如果计数器在高温系数振荡器输出的门周期结束前计数到零,表示测量的温度高于-55℃,被预置在-55℃的温度寄存器的值就增加一个增量,同时为了补偿和修正温度振荡器的非线性,计数器被斜率累加器所决定的值进行预置,时钟再次使计数器计数直至零,如果开门通时间仍未结束,那么重复此过程,直到高温系数振荡器的门周期结束为止。
这时温度寄存器中的值就是被测的温度值。
这个值以16位二进制补码的形式存放在便笺式存储器中。
温度值由主机通过读存储器命令读出,经过取补和十进制转换,得到实测的温度值。
2.3单片机系统
本设计采用的单片机是STC89C52(仿真图中是AT89C52)。
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的
改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
下图为proteus仿真图中的最小系统部分,包括了STC89C52以及周围的复位电路和晶振电路。
晶振电路中使用的电容为22pf,晶振为11.0592HZ。
复位电路中的电阻为10K,电容为22uf。
2.4显示模块
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,它显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
设计采用LCD1602液晶,它与单片机P0和P3口相连接,单片机根据所测得的温度数据和内部存储的目标温度通过编程实现在LCD1602上显示。
在proteus中1602的VSS/VDD/VEE都默认接上相应电压,无须再接,背光源省略。
值得一提的是本设计中8位数据位接的是单片机的P0口,由于P0口的驱动能力较弱,此处使用10k的排阻进行上拉。
RS接单片机P3^4口,来选择传输的是命令还是数据。
使能端E接单片机P3^5口来控制液晶的开启与关闭。
读写控制端RW接P3^6,控制液晶操作是读还是写。
2.5控制模块
控制模块的电路图如下所示(受控对象由LED与电阻串联模拟)。
控制电路共两个,分别控制水泥电阻的加热和风扇的工作,因为两个电路相同,此处只列出一个。
控制模块工作原理:
当单片机控制端加低电平时,三极管Q1导通,这时Q1的上端,也就是C极被系统拉到0V左右,这时MOS管Q3的G极为0V,所以此时MOS管的DS端不会导通。
当单片机控制端加高电平时,三极管Q1不导通,这是Q1的上端,也就是C极电位为Vcc(15V)-R4两端的压降,电流穿过R3后被稳压管D3稳压在12V,则此时MOS管的G极电压为12V,所以MOS管导通,负载工作。
2.6wifi模块
wifi模块为采用实验室提供的有人USR-WIFI232-T。
下图分别为USR-WIFI232-T外观图和管脚定义。
本设计只用到该模块的1至6号管脚。
USR-WIFI232-T管脚功能定义
单片机采用5v供电,而wifi模块采用3.3.v供电,因此需要转换电路,否则下位机无法正确返回数据。
2.7上位机
本设计中使用笔记本电脑作为上位机,通过wifi模块配套的串口助手发送指令。
当发送查询指令(十六进制00)时,下位机返回当前温度,并显示"TURNONTHE18B20!
"。
当发送控制指令(十六进制29至3D,对应的十进制数为目标温度,例如发送2D,即将目标温度修改为45℃)时,目标温度被修改,返回提示信息TARGEThasbeenchanged!
TheTARGETis**,并立刻在下位机控制的LCD上显示。
当发送其他指令时,下位机关闭温度返回,显示"TURNOFFTHE18B20!
"。
第三部分系统软件设计
温度测量系统的功能是在程序控制下实现的。
该系统的软件设计方法与硬件设计相对应,同样采用模块化的设计思想,按整体功能分成多个不同的程序模块,分别进行设计、编程和调试,最后通过主程序和中断处理程序将各程序模块连接起来。
这样有利于程序修改和调试,增强了程序的可移植性。
温度测量系统的软件主要分为:
温度采集、温度控制、温度显示和数据无线传输。
3.1主程序设计
系统的主程序设计主要完成系统初始化以及判断调用各模块程序,即主要实现各程序模块的连接。
具体有定时器0和定时器1的工作方式设置及初始化,LCD的初始化,PID程序的初始化,串口通信参数的设置,各变量的初始化。
下图为主程序流程图。
3.2子程序设计
3.2.1LCD1602子程序
该子程序包含若干子函数,用于驱动LCD1602的显示。
因为本设计中单片机对LCD的操作速度较慢,因此不必等待,不必读取LCD的状态。
写指令流程图写数据流程图
LCD初始化流程图
3.2.2DS18B20子程序
该子程序包含若干子函数,用于驱动DS18B20获取当前温度。
DS18B20数据线定义为DQ。
初始化函数流程图读字节函数流程图写字节函数流程图
读取温度函数流程图
3.2.3串口中断程序
当上位机发送数据给下位机时进入串口中断,调用串口中断程序。
该程序主要是设置标志位供主程序查询。
3.2.4定时器中断程序
定时器中断用来设置PID调用周期以及生成PWM波。
3.2.5PID子程序
PID程序是控温的核心程序,当当前温度与目标温度不同时PID程序便会一直调节加热和降温的功率,使当前温度靠近目标温度。
第四部分PID调试
4.1PID调节器控制原理
在控制系统中,控制器最常用的控制规律是PID控制。
PID控制系统原理框图如图3.1所示。
系统由PID控制器和被控对象组成。
图3.1PID控制系统原理框图
PID控制器是一种线性控制器,一种它根据给定值rin(t)与实际输出值yout(t)构成控制偏差:
Error(t)=rin(t)-yout(t)
PID控制就是对偏差信号进行比例、积分、微分运算后,形成一种控制规律。
即,控制器的输出为:
(3.1)
或写成传递函数的形式:
(3.2)
左中,kp——比例系数;Ti——积分时间常数;Td——微分时间常数。
简单说来,PID控制器各校正环节的作用如下:
(1)比例环节:
成比例地反映控制系统的偏差信号error(t),偏差一旦产生,控制器立即产生控制作用,以减小偏差。
比例控制:
Gc(s)=Kp
(2)积分环节:
主要用于消除静差,提高系统的无差度。
积分作用的强尽弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强。
积分控制:
Gc(s)=Kp/Tis
(3)微分环节:
反偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
微分控制:
Gc(s)=KpTds
4.2位置式PID算法
基本PID控制器的理想算式为
(3.3)
式中
u(t)——控制器(也称调节器)的输出;
e(t)——控制器的输入(常常是设定值与被控量之差,即e(t)=r(t)-c(t));
Kp——控制器的比例放大系数;
Ti——控制器的积分时间;
Td——控制器的微分时间。
设u(k)为第k次采样时刻控制器的输出值,可得离散的PID算式
(3.4)
式中,。
由于计算机的输出u(k)直接控制执行机构(如阀门),u(k)的值与执行机构的位置(如阀门开度)一一对应,所以通常称式
(2)为位置式PID控制算法。
位置式PID控制算法的缺点:
当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)进行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。
4.3PID参数整定
4.3.1整定比例带
先把系统设置为纯比例作用。
也就是说积分时间无穷大,微分增益为0。
逐渐加大比例作用,一直到系统发生等幅震荡。
当我们把kp加大到20时,达到了上述效果。
根据经验公式,把比例增益乘以0.8,kp定为16。
此时观察被调量曲线,发现衰减率大概为0.75,符合要求。
4.3.2整定积分时间
为了消除静态误差,要添加积分作用。
从0.01开始逐步增加ki。
过程中发现被调量会剧烈变化。
经检验发现是积分量sum_i没有设阈值导致其变量溢动小。
系统稳定时间也比较短。
于是设ki为0.08。
4.3.3优化参数
为了进一步加快稳定时间,给PID函数设置了一个执行范围,当目标温度比实际温度多于三度时,使加热占空比为100%,当实际温度比目标温度多于一度时,使散热占空比为100%。
此时曲线波动小但是震荡频繁,于是减小比例系数至14。
然后观察被调量曲线发现其在第一个起伏使恢复至设定值所需时间较长,于是减小积分系数,当减至0.06时,曲线波动小而平缓。
调试结果较为满意。
故选定积分参数为0.06,比例参数为14。
4.3.4关于微分
微分有超前调节的功能,但是微分作用在测量值存在不间断的微小波动时,反而会造成调节干扰,不如不要。
考虑到温度会有小波动,我们最终决定只做PI调节。
Kd为0。
4.3.5死区设置
为了减少执行器动作次数,可以对PID调节器设置死区。
但是死区过大会降低调节精度,也会降低稳定性,因为它造成了调节滞后。
权衡利弊之后,我们决定不设置死区以换取高精度。
第五部分系统性能优化
我们的初步设计没有降温措施,只是加热。
在初步完成设计之后我们发现虽然温度可以稳定在非常接近目标温度的范围内,但从系统开始工作到温度稳定时间很长,因此,我们对系统进行了硬件设计优化以及参数优化。
5.1反应速度优化
上图为未经优化的系统控制水泥电阻温度稳定在40度的温度变化曲线(横坐标为采样个数,每两个点之间的时间间隔约为0.8s)。
从下位机返回的数据
可以看出温度误差已经控制在低于目标温度0.1度和目标温度直接的范围内,但从图像可以看出温度变化很慢,从开始加热到完全稳定需要将近十分钟。
因此,我们加上风扇进行降温。
我们在加上风扇并微调参数后得到上图所示的温度变化曲线。
从下位机返回的数据可以看出温度误差有所增大,为±0.1℃。
从图像可以看出此时的温度出现轻微的波动。
5.2稳定性优化
由上图可以看出,当温度第一次上升至目标温度并下降后需要较长时间才能再次达到目标温度并稳定,我们在多次调节参数没有效果之后稍微改进了一下算法。
使当前温度低于目标温度时控制加热的PWM波有一个基础的占空比,这样就能在当前温度低于目标温度后尽快的上升至目标温度。
下图为改进后的温度曲线。
由上图可以看出,虽然温度还是有一些波动,但较之前而言能更快的接近目标温度。
5.3优化前后系统性能对比
本设计的功能除了将水泥电阻稳定在一个温度之外还可以更改目标温度并再次稳定。
我们测试了从室温上升至40度,再上升至45度的情况。
以下三幅图像分别为优化前,第一次优化后以及第二次优化后的图像。
由以下图像对比可知优化后虽然误差有了稍微的增大,但稳定所需时间大大缩短了。
第六部分问题总结
6.1硬件问题
6.1.1MOS管开关无法正常工作
在制作控制电路时我没有考虑MOS管的型号,直接在网上找了一幅MOS管管脚分布图作为参考,然而那幅图的漏极和源级的分部与我所用的MOS管刚好相反。
MOS管的管脚分布要参考官方资料,源级和漏极接反会导致Vgs一直为高,从而使MOS管一直导通,达不到控制的效果。
6.1.2电脑无法连接WIFI模块
在实验室时电脑无法连接WIFI模块,但在宿舍可以,应该是实验室相同型号的WIFI模块较多,相互干扰导致无法连接,此问题暂未解决。
6.1.3下位机返回数据乱码
用上位机通过WIFI模块给下位机发送数据,下位机能够正常接收,并且能做出相应的正确反应,但下位机本应返回给上位机的数据丢失或者返回的是乱码。
经过查阅资料知道是电平不匹配的问题。
单片机使用5V供电,WIFI模块使用3.3V供电,需要增加电平转换电路才能正常工作。
6.1.4液晶无法显示
开始以为是程序问题或者是接线问题,经检查发现是液晶损坏。
6.2软件问题
6.2.1上位机与下位机无法正常通信
单片机使用11.0592HZ的晶振,波特率设置为9600,但WIFI模块的波特率默认为115200,未修改时WIFI模块与单片机之间无法正常进行串口通信。
6.2.2PID程序无法调用
PID设计为每100ms调用一次,调用方法是由定时器中断处理函数置标志位,PID调用结束后标志位复位。
但由于主函数中有较多延时函数,导致中断处理函数置位后PID程序未来得及执行标志位又复位了。
解决办法是将PID的调用放置在中断处理函数中判断。
6.2.3DS18B20测温不稳定
定时器中断开启使得18b20读数不稳定。
因为定时器中断是强制性的,一旦计时溢出,无论程序执行到何处都会被暂停,优先去执行中断服务程序。
DS18B20这种对时序有严格要求的单总线通讯,在发送和接收数据时被定时器中断扰乱了时序,所以无法通讯。
解决办法是直接在读取温度时就把中断关闭,不让PWM的中断打扰,读取温度的时间应该很短,影响不大。
第七部分总结
本次课程设计由我们两人共同完成,一人负责硬件电路的设计制作以及部分辅助程序的编写,另一人负责核心PID算法的设计以及整体程序的调试。
与独自制作相比分工合作效率更高。
但由于都是第一次与他人合作去完成课设,我们各自写的程序移植性又不够好,导致两人写的程序不能完全兼容,花了一定的时间来调试。
PID参数整定时意识到:
比例,积分,微分三个参数的大小都不是绝对的。
切不可以为我发现一个参数比较合适,就把其固定死,不管别的参数怎么变化,永远不变前面固