基于单片机温度控制课程设计报告.docx
- 文档编号:10901892
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:27
- 大小:372.06KB
基于单片机温度控制课程设计报告.docx
《基于单片机温度控制课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机温度控制课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
基于单片机温度控制课程设计报告
电气控制系统设计
温度控制系统的设计
学院轮机工程学院
班级电气1111班
姓名吴栋甫卢劲知
学号20111250322011125037
指导老师江小霞陈学梅
成绩
2014年12月26日
一.温度控制系统发展概述
温度控制与人们的生产、生活有着极其密切的关系。
温度控制广泛应用于农业,工业,科研和日常生活中。
随着信息技术的不断的更新与发展,温度控制系统也在不断地改进,控制方法趋于多样化和智能化,控制效果也更加精确和稳定。
近几年国内外的温度控制系统控制方法主要有以下几种:
神经网络控制,即基于神经网络控制或简称神经控制,是指在控制系统中采用神经网络这一工具对难以精确描述的复杂的非线性对象进行建模,或充当控制器,或优化计算,或进行推理,或故障诊断等,亦即同时兼有上述某些功能的适应组合,将这样的系统统称为神经网络的控制系统,将这种控制方式称为神经网络控制。
在文献【1】中提到,针对温室温度控制系统存在的大滞后、大惯性等问题,考虑到常规PID控制器自适应能力差、鲁棒性不强等缺陷,提出采用将具有较强的自组织、自学习和自适应能力的径向基神经网络与常规PID相结合构成RBF-PID控制策略,自适应调整PID控制器的参数。
在该控制策略中,采用RBF神经网络辨识器实现温度控制系统的Jacobian矩阵信息在线辨识,对RBF-PID控制器控制参数在线自整定。
研究结果表明:
RBF-PID控制器可使温室温度控制系统动态响应快、鲁棒性强、稳态精度高、超调量小、抗扰动能力强,具有良好的控制效果。
模糊控制,在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键,系统动态的信息越详细,则越能达到精确控制的目的。
然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的,但却不尽理想。
换言之,传统的控制理论对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统,则显得无能为力了。
因此便尝试着以模糊数学来处理这些控制问题。
比如【3】中基于ARM的温度控制也属于是一种模糊控制的运用。
而在文献【2】中提到,针对工业生产中温度控制系统具有非线性、时变性和滞后性的特点,采用模糊控制与PID相结合的方法,设计了一个基于模糊PID的工业锅炉温度控制系统,采用AT91RM9200为主控制芯片,并用模糊PID控制算法对温度进行控制。
最后以工业锅炉蒸汽温度为被控对象,建立仿真模型对常规PID控制和模糊PID控制进行了仿真对比,结果表明采用模糊PID控制方法,有效的提高了系统对非线性、时变性和不确定性的处理能力,控制效果更好。
遗传算法,遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
随着应用领域的扩展,遗传算法的研究出现了几个引人注目的新动向:
一是基于遗传算法的机器学习,这一新的研究课题把遗传算法从历来离散的搜索空间的优化搜索算法扩展到具有独特的规则生成功能的崭新的机器学习算法。
这一新的学习机制对于解决人工智能中知识获取和知识优化精炼的瓶颈难题带来了希望。
二是遗传算法正日益和神经网络、模糊推理以及混沌理论等其它智能计算方法相互渗透和结合,这对开拓21世纪中新的智能计算技术将具有重要的意义【4】【5】
除了以上的几种控制算法,还有一些尚未成熟的控制算法但应用并不广泛。
而以上几种控制算法往往并不是单独的去控制一个系统,而是几种控制算法结合使用。
比如pid和神经网络控制的结合使用,可以得到较好的控制效果。
二.系统设计任务要求与说明
2.1设计目的
1.培养综合运用所学知识的基本理论和专业知识,独立进行控制系统的设计。
2.学会搜集,阅读,和分析相关参考资料,以及通过设计提高计算和绘图能力。
3.掌握一般控制系统的系统分析和设计方法,得到初步的工程训练。
2.2设计内容
完成温度控制系统设计。
采用单片机、温度传感器和功率模块构成温度控制系统,对该控制系统进行理论分析、设计控制算法,并编写程序。
2.3设备条件
1、电热水壶
控制对象采用电热水壶。
2、温度传感器
采用数字温度传感器DS18B20。
3、功率调控模块
功率可调模块选用EUV-10A-X。
4、采用单片机作为主控器,C51作为软件平台
2.4设计要求
1、采用Protues和Keil联合仿真的方式调试温度的读取;
2、使用Proteus完成温度控制系统仿真;(系统应扩展DAC0832、显示器、温度变送器、开关等);
3、组成控制系统,设计PID控制器,对PID参数进行整定,并绘制时域响应图,给出时域特性指标;
4、在完成1~3的基础上,依情况完成下列A~D项内容中的1项或多项内容;
A、各种变型PID(如Bang—BangPID等);
B、对该对象进行建模,Matlab进行控制算法的仿真;
C、采用施密斯预估算法;
D、用自行设计的其它控制算法进行控制并与PID算法进行比较
2.5系统设计进度与任务分配
任务分配:
卢劲知的任务:
1.控制系统方框图2.资料收集与处理3.温度传感器调试4.合作功率模块调试
吴栋甫的任务:
1.系统流程图2.功率模块调试3.数模转化模块部分4.串口通信
设计进度记录:
十六周:
周一:
阅读理解设计任务书和查阅相关资料,归纳资料,试编写温度传感器部分程序
周二:
对ds18b20部分的程序理解并用keil编译调试。
周三~周四:
采用protuse和keil联合仿真的方式调试温度的读取,其中为了方便显示,扩展了8255接口并用led灯显示分析。
周五:
温度信号的读取和D/A,功率模块的调试。
数据记录,找到零点(零点调整)
周末:
查阅资料和对本周完成的部分模块进行分析理解,复习计算机控制技术,了解pid的编程流程图。
十七周:
周一:
写入pid子程序,并进行实物的调试运行。
周二:
串口通信子程序先调试(要求输出锯齿波)。
周三~周五:
将串口通信子程序嵌入之前的程序中构成完整的温度控制系统程序,连接实物系统,对整个系统进行运行调试,pid整定。
运用matlab画出时域相应图。
三.控制系统模块设计
3.1、控制系统方框图与流程图
给定温度D/A控制电压
根据老师的要求和指导明白了,系统设计一般用模块化设计,而模块化设计中又从反馈环节开始设计。
在该控制系统中温度传感器是首要测试的部分。
即将相关程序写入单片机中,通过单片机读取温度传感器中存储的数值。
其次,是对功率模块的调试,这部分很关键的一点是要找到零点;而且在对功率模块的调试前必须要有一个D/A转化,即dac0832。
再者,将pid子程序嵌入,进行初步的烧水操作。
所以,相应的程序设计流程图为
Yk
3.2、温度传感器DS18B20
由于ds18b20是初次接触,需要了解和学习。
通过老师提供的资料和网上查阅的资料,下面对ds18b20作详细介绍。
由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器。
与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
其可以分别在93.75ms和750ms内完成9位和12位的数字量,最大分辨率为0.0625℃,而且从DS18B20读出或写入DS18B20的信息仅需要一根口线(单线接口)读写。
DS18B20的主要特性
(1)适应电压范围宽,范围:
3.0~5.5V,在寄生电源方式下可由数据线供电。
(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。
(4)使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。
(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。
(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。
(7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字。
(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
(9)负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
2.2.2DS18B20的外形(如图2)
图2DS18B20封装
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
2.2.3DS18B20的内部结构
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
如图3所示。
图3DS18B20内部结构
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表1DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FE6FH,-55℃的数字输出为FC90H。
(3)DS18B20温度传感器的存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
(4)配置寄存器该字节各位的意义如表3所示。
表3配置寄存器结构
TM
R1
R0
1
1
1
1
1
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如表4所示:
(DS18B20出厂时被设置为12位)
表4温度分辨率设置表
R1
R0
分辨率
温度最大转换时间
0
0
9位
93.75ms
0
1
10位
187.5ms
1
0
11位
375ms
1
1
12位
750ms
Ds18b20温度显示(实验设计中扩展了8255,并将其高8位和低8位接到led灯显示。
编写子程序参考步骤:
Ds18b20开始转换:
1.ds18b20复位。
2.写入跳过ROM的字节命令,0xcc。
3.写入开始转换的功能指令,0x44。
4.延迟大约750~900ms
Ds18b20读暂存数据:
1.ds18b20复位。
2.写入跳过ROM的字节命令,0xcc。
3.写入开始转换的功能指令,0xbe。
4.读入第0字节LSbyte,转换结果的低八位。
5.读入第一个字节MSByte,转换结果的高八位。
6.ds18b20复位,表示读取暂存结束。
数据求出十进制
1.整合LSByte和MSByte的数据
2.判断正负数(由于该设计温度控制中,温度不出现负值,故程序中不存在这一步)。
3.求出十进制。
正数乘以0.0625,(在做设计中,本组成员只做到正数部分,并没有将小数点求出)。
具体的c语言程序参照温度控制完整程序。
在这部分的调试中,将程序写入keil和protuse进行联合仿真。
设置ds18b20中的温度为
85度,led从高到低依次显示为0000011111010000.
25度,led从高到低依次显示为0000000110010000.
设计中遇到的问题及其解决
1.连接温度传感器,打开实验箱电源,并未开始检测被测物体。
结果却发现测温端竟然温度很高。
经检查和查阅资料知道:
ds18b20左正右负,一旦接反就会立即发烫,甚至有可能烧毁。
(幸好发现及时)。
2.把温度通过8255口传到led灯显示时,显示的数据经验证一直错误。
最后在老师的指导下,才发现8255和led灯的接线端口高低位插反了,导致数据显示不对应。
3.3、数模转换器DAC0832和功率模块
该部分原理即,希望通过把实时温度与给定温度偏差的数字量送入控制器控制,输出的数字量经DAC0832转换成电压,送至功率放大,以达到控制流过控制对象的电流大小,进而达到水温控制。
这部分把之前的8255,ds18b20,单片机,功率模块,DAC0832等实物连接在一起。
设计:
选择DACo832的端口地址为A000H,CS6。
将ds18b20检测的数据通过单片机输出到DAC0832中。
改变DA数字输入量,用万用表测得DA输出量电压大小,和经过功率放大器输出的电压大小。
a(数字量)
D/A转换输出量(V)
功率模块输出(V)
10
0.31
142
20
0.62
143
30
0.83
142
40
0.95
143
50
1.07
143
60
1.27
33
70
2.18
48
80
2.50
62
90
2.81
79
110
3.12
94
130
3.43
109
150
3.65
123
170
4.06
165
190
4.38
151
220
4.68
166
255
4.93
181
(错误测量数据)
测试中遇到的困惑与解决
1.无法找到零点,即无论输入数字量为0时,功率模块输出不会为0。
这将在完成串口通信后,在matlab的画图中可以明显看出。
解决:
在matlab图形中发现无法找到零点,找不到零点意味着系统无法进行控制。
在后面的串口通信调试过程中发现同学之间也存在相似的问题。
经过讨论和询问老师,最终发现在测试过程中并没有将负载(热水壶)接入系统,从而没有零点出现。
将热水壶接入,重新测量。
a(数字量)
D/A转换输出量(V)
功率模块输出(V)
10
0.31
0
20
0.62
0
30
0.83
0
40
0.95
0
55
1.06
0
60
1.27
33
70
2.18
48
80
2.50
62
90
2.81
79
110
3.12
94
130
3.43
109
150
3.65
123
170
4.06
165
190
4.38
151
220
4.68
181
255
4.93
216
零点调整,输入数字量加上55才是系统实际的数字量输入。
3.4.PID控制子程序
根据偏差的比例(P)、积分(I)、微分(D)进行控制(简称PID控制),是控制系统中应用最为广泛的一种控制规律。
实际运行的经验和理论的分析都表明,这种控制规律对许多工业过程进行控制时,都能得到满意的效果。
其中,比例控制能迅速反应误差,从而减小误差,但比例控制不能消除稳态误差,Kp的加大,会引起系统的不稳定;积分控制的作用是:
只要系统存在误差,积分控制作用就不断地积累,输出控制量以消除误差,因而,只要有足够时间,积分控制将能完全消除误差,积分作用太强会使系统超调加大,甚至使系统出现振荡;微分控制可以减小超调量,克服振荡,使系统稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。
本设计中用pid的位置型算法,u(k)=Kp*e(k)+Ki*+Kd*[e(k)-e(k-1)]
3.5、串口通信
该部分主要是为了把实验设备和计算机通信,将温度传入计算机,以实现温度的实时监控。
并联合matlab绘制时域响应图。
串口子程序(注释)设计步骤
一.串口初始化设置。
1.选择方式二定时器,串口控制寄存器,方式1禁止接受数据。
2.设置时钟频率和波特率12MHZ,Band=9600。
3.Smod=1,波特率加倍。
中断允许标志
2.串口发送,标志位设置。
等待中断
3.发送数据,将实时温度送入计算机。
4.查询发送结束标志位,发送完结束,否则继续。
将串口子程序嵌入之前调试运行成功的程序中。
并用串口通信线将实验箱和pc机连接起来。
在此过程中遇到的问题及其解决
1.在运行了两次通信后,matlab命令窗口中显示数据输入全为零即通信未能成功,能出现绘图界面但不能绘图。
检查线路和重启电脑,重新运行程序均无法正常进行。
甚至连换一根通信线都没用。
结果在下次实验时间上来重新运行,一切正常。
分析可能是上次对试验箱通电运行时间过长造成试验箱出现故障。
2.程序出现错误,无法正常运行。
经过检查发现一些变量没有在开头先定义。
3.命令串口显示数据传送正常,但绘图窗口无法绘图。
经过调整延迟时间,发现可以正常绘图。
4.遗漏了RXD和TXD管脚的连接。
使得通信无法正常运行。
四.系统仿真图与时域响应图
4.1、protuse仿真图
4.2、PID控制参数整定时域响应图
图1Kp=30ki=0kd=0max=75wen=72图2Kp=50ki=0kd=0max=77wen=74
图3Kp=20ki=0kd=0max=72wen=70图4Kp=40ki=0kd=0max=76wen=73
图5Kp=30ki=0.01kd=0max=82wen=76图6kp=30ki=0.005kd=0max=79wen=77
图7Kp=30ki=0.005kd=0.01max=79wen=76图8Kp=30ki=0.005kd=0.005max=76wen=73
经过以上的整定调试可知,适当增大kp可以加快上升速度,减少调节时间。
但是kp过大会出现一定的超调。
而调节ki参数则能够消除静差,这点在理论上可以用稳态终值误差来分析。
比例控制是基于偏差来计算的,这样必然会产生静差。
而比例积分控制则是基于偏差的积分控制,即使偏差输入为0,控制器输出依然是最大值,而不是0。
在PID整定调试中的问题:
1.在达到给定附近时出现较大的扰动,出现不平滑阶梯状的曲线。
解决:
首先减少了延迟时间,让系统采集数据快些,结果使得曲线较之前更平滑些。
由老师指导,通过加入滤波语句(不仅只有平均值滤波)进行程序修改,如if(abs(yk-tt)>30.0)yk=tt把温度传感器的输出值和时域曲线的上一点进行比较,如果大于30,就将上一点的温度值给这个点。
程序和其他硬件都正常,但是偶尔出现一两次的响应曲线不如之前的平稳。
原因在于负载不一样,即热水壶盛的水量不同。
经调试整定,最终的响应时序图的参数指标为上升时间为210us,系统超调量为36.6%,稳态误差为1.4%。
五.控制系统设计综述
5.1、温度控制系统结论
通过该温度控制系统设计,可以很清楚的了解到PID算法对系统动态跟随性能和抗干扰性能的改善作用。
单纯的比例控制不能消除系统的静差,如果在此基础上加上积分控制,则系统的超调将会降低很多。
而PID的整定方法也有很多,比如试凑法,临界阻尼调试法,现场经验整定发等等。
虽然PID能够改善系统的性能,但是由于温度的非线性性,和不稳定性,仅凭简单的PID并不能得到非常满意的控制效果。
所以,在PID的基础上还可以加入滤波作用。
滤波方式常用的有:
平均值滤波,限幅滤波,中值滤波方法等。
或者尝试用bang-bang控制能够得到准时间最优的控制。
5.2、温度控制系统系统设计心得
从第一天上实验室听老师讲任务要求和设计内容到最后的质疑答辩,两个星期的课程设计即将结束。
一个完整的课程设计下来,自己受益匪浅。
无论是实际的操作方面上,还是理论的认识方面上都有了很大的提高。
这是一次理论运用于实践的过程,实践印证理论的过程。
整个设计内容贯穿着大学四年所学的专业知识,较清晰的认知到所学课程之间的联系和实际应用。
从基础的c语言编写到计算机技术控制技术以及单片机运用。
环环相扣,缺一不可。
从课本到实践,使得很多原本不理解的理论知识得到了形象直观的解答。
当然,在设计中难免遇到各种各样的困难,需要一步步去解决。
首先是程序的运行调试问题,由于理论基础相对薄弱,加上对学过的知识稍有遗忘,使得各个模块的程序设计调试中遇到了很大困难。
有时候出现30几个错误,查看后却发现只是一个子程序的先后位置问题。
有的时候一直查找都没办法找出是哪句程序有问题,直到同学帮忙检查才恍然大悟是少了几个分号。
这些问题虽小,却影响着整个系统的设计。
所以在实际的操作设计中需要我们的耐心和细心,否则后果不堪设想,进程也将大大推迟。
除此以外,在调试中自己也更熟悉了对keil和protuse软件的操作以及程序的编写。
弥补了之前学习中不熟悉不熟练的地方。
比如串口通信子程序部分,PID部分。
其次是硬件的连接问题。
这相比较于软件的调试更令人抓狂。
因为程序出现错误,调试软件还会提示出现了几个错误,出现在哪些地方。
而硬件问题则无从知晓,即使是程序提示无错误,无警告。
只能一次次的尝试或和同学讨论分析。
再去查找是不是程序的问题,那些软件系统不会显示出来的错误。
再结合硬件一次次调整。
往往是,一次次的程序排查,最终运行成功。
但是硬件连接后却不能启动整个系统。
在我的设计中,经常出现的问题是8255接的led灯无法显示。
怀疑是led灯的问题,可是换了试验箱依然不行,最终发现是程序中高低位未能取反的问题。
其中,还出现了功率放大器的三条连接线断开的情况,必须重新焊接。
还有万用表不能长久的放在插座中测量电压,很可能造成万用表失灵。
最后就是经过课程设计,从老师那里学到了很多东西,不仅仅只是专业知识上的问题,还有为人处世方面的一个准则。
在整个设计中,感觉老师就像万能钥匙,哪里不懂,哪里出错误,老师都能够马上解决,并且提供详细的理论依据和实际的工程经验。
最开始,老师就要求我们要从温度传感器开始调试。
控制系统一般从反馈环节开始,只有反馈环节没问题,整个系统才能正常运行。
接着一个个模块设计调试,这样才能保证每一个环节都不出错误。
这个经验是很重要的。
此外,老师教导我们要做生活的有心人,凡事多注意点,就会走在别人的前面,不怕出错误,遇到问题要想着怎么解决。
要形成查阅资料和分析资料的习惯,遗忘的不懂得问题得去找答案。
在这过程中,老师的认真敬职也是值得我学习的。
当老师被我们问到她之前没有遇到的问题或者没有注意到的问题时,她会马上记录下来。
经验就是这样一点点积累的。
还
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 控制 课程设计 报告