1、计算机控制技术课程结业论文专 业: 电气工程及自动化 年 级: 2009 级 班 级: 电气 5 班 姓 名: 余刚 学 号: 20094073525 2012 年 06 月 21 日摘要I摘要采用 AT89S51单片机作为控制核心,将增量式 PID算法和 PWM脉宽调制技术相结合,通过光耦控制双向晶闸管导通角的大小实现热水器的恒温控制。解决了传统的电热水器用冷热水闸门调节温度出现的温度不稳定,不易调节的缺点。关键词:PID 算法 单片机 脉宽调制 电热水器目录II目录摘要 I1引言 12 系统的硬件组成与设计 22.1系统的硬件组成 22.2系统硬件设计 23 系统软件设计 43.1增量式
2、PID控制算法 43.2软件设计 4结论 5参考文献 6致谢 7附录 8计算机控制技术课程结业论文-1-1 引言在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称 PID控制,又称 PID调节。PID 控制器问世至今已有近 70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用 PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用 P
3、ID控制技术。PID 控制,实际中也有 PI和 PD控制。PID 控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的。针对传统的电热水器用冷热水闸门调节温度出现的温度不稳定,不易调节的缺点,本文设计了以 AT89S51单片机作为控制核心,将 PID算法和 PWM脉宽调制技术相结合,通过光耦来控制双向可控硅导通角的大小来实现热水器的恒温控制的控制系统。计算机控制技术课程结业论文-2-2 系统的硬件组成与设计2.1 系统的硬件组成本系统由单片机控制系统、前向通道、后向通道、人机对话通道 4个主要的功能模块组成,总体框图如图 1所示。2.2 系统硬件设计2.2.1 前向通道设计前向
4、通道是信息采集的通道,主要包括温度传感器、信号放大、A/D 转换电路组成的信号采集电路和以单片机为核心的信号处理电路。水温经温度传感器和信号放大电路产生 05V 的模拟电压信号送入 A/D转换器,将模拟量转换为数字量通过系统总线送入单片机进行运算处理,电路原理图分别如图 2、图3所示。图 2 信号采集原理图图 1 本系统的总体功能结构图1 2 3JP1AD581+15VR35KR430K12JP2AD590-15V23 647185OP07R530KR281KR15KR61K+15-15VR6R6OUTPUT温度传感器 信号放大器 A/D 转换器单片机控制系统功率放大电路光电耦合电路双向晶闸管
5、电加热装置 键盘显示计算机控制技术课程结业论文-3-图中温度传感器采用 AD590将温度变换为电流,与运算放大器 OP07和电阻R1、VRl、R2、VR2 组成信号转换与放大电路,将温度转换为电压信号。采用ADC0804把电压信号转换为数字信号输送到单片机。2.2.2 后向通道设计后向通道是控制信号的输出通道,主要由功率放大电路、光电耦合电路、双向晶闸管、电热装置等组成,原理图如图 4所示。单片机输出的控制信号经光偶 MOC3041控制双向可控硅 BTA12的导通时间,从而实温度控制图 4 后项通道原理图U1OptoTRIAC27059/w.uF6VJPQBWMP1.01 P1.12 P1.2
6、3 P1.34 P1.45 P1.56 P1.67 P1.78 RST/VPD9 RXD/P3.010 TXD/P3.111 INT0/P3.212 INT1/P3.313 T0/P3.414 T1/P3.515 WR/P3.616 RD/P3.717 XTAL218 XTAL119 VSS20 P2.0 21P2.1 22P2.2 23P2.3 24P2.4 25P2.5 26P2.6 27P2.7 28PSEN 29ALE/PROG 30EA/VPP 31P0.7 32P0.6 33P0.5 34P0.4 35P0.3 36P0.2 37P0.1 38P0.0 39VCC 40AT89S5
7、2 GND10VCC20 Vin(-) 7LSB D018 D117 Vin(+) 6D216 D315 D414 A-GND 8D513 D612 MSB D711 Vref/2 9INTR5 CLK-R 19CS1 RD2 CLK-IN 4WR3 ADC0804D0D1D2D3D4D5D6D7 D0D1D2D3D4D5D6D7WRRD RDWRCSCS12 Y1C3300pFC4300pF VCCVCCC110UFS1 R71K RESETRESET VCC C2150pFR810K INPUTD21N4148D11N4148 VCC12JP3 PWM 图 3 信号处理电路计算机控制技术课
8、程结业论文-4-3 系统软件设计3.1 增量式 PID 控制算法增量式 PID控制算式为:u(k) u(k) u(k1) KCe(k) e(k1) K1e(k) KDe(k) 2e(k1) e(k2) KCe(k) K1e(k) KD2e(k)3.2 软件设计系统软件由主程序、PID 子程序、中断服务子程序、PWM 波子程序组成。主程序主要完成初始化、温度采集、处理和发送、PID 子程序的调用。PID 算法子程序的作用为根据设定温度、实测温度和调节器系数 KP、KI、KD 计算变换量Ui,并将变换量按比例转换为 PWM波的时间来控制可控硅导通时间。当键盘显示模块发送过来设定温度时,本模块能够进
9、入串行口中断子程序,从而把设定温度保存起来。PWM 波输出子程序按 PID运算结果,软件编写完成控制双向晶闸管的导通时间。结论-5-结论本文利用 PID算法实现对电热水器的自动控制,温度分辨力可达 0.1,具有自动化、智能化、易于操作、控制精度高、性价比高等特点。参考文献-6-参考文献1 吴麒.自动控制原理M.北京:清华大学出版社,19972 张毅刚.51 单片机应用设计 I-M-t.哈尔滨:哈工大出版社,19903 何小艇.电子系统设计M.杭州:浙江大学出版社,20044 韩志军.单片机应用系统设计M.北京:机械工业出版社,2005致谢-7-致谢论文的设计过程中,我查阅了许多有关温度控制系统
10、设计方面的文献资料,使我对温度控制的设计和使用有了更深的认识。从论文选题到完成论文,老师付出了大量的时间和心血,在设计过程中,老师从多方面进行指导,不断对论文提出修改意见。在此,我要由衷地感谢同时,我也要感谢给予我帮助的同学,在不懂的环节为我努力探讨。论文的完成,不仅是我计算机控制知识积累的体现,而且也是信息技术学院所有老师悉心教导的结果,感谢他们让我掌握了一定的专业知识,专业技能和一些为人处世的道理。最要感激父母,是他们给我学习的机会,并且在学业期间给我大力支持和为我付出。附录-8-附录PID 部分程序:#include #include typedef unsigned char uint
11、8; typedef unsigned int uint16; typedef unsigned long int uint32; /*函数声明*/void PIDOutput();void PIDOperation(); /*/typedef struct PIDValueuint32 Ek_Uint323; /差值保存,给定和反馈的差值uint8 EkFlag_Uint83; /符号,1负数,0正数 uint8 KP_Uint8;uint8 KI_Uint8;uint8 KD_Uint8;uint16 Uk_Uint16; /上一时刻的控制电压uint16 RK_Uint16; /设定值u
12、int16 CK_Uint16; /实际值 附录-9-PIDValueStr;PIDValueStr PID;uint8 out ; / 加热输出uint8 count; / 输出时间单位计数器/*PID = Uk + KP*E(k)-E(k-1)+KI*E(k)+KD*E(k)-2E(k-1)+E(k-2);(增量型PID算式)函数入口: RK(设定值),CK(实际值),KP,KI,KD函数出口: U(K)/PID运算函数*/void PIDOperation(void) uint32 Temp3; /中间临时变量uint32 PostSum; /正数和uint32 NegSum; /负数和
13、Temp0 = 0;Temp1 = 0;Temp2 = 0;PostSum = 0;NegSum = 0;附录-10-if (PID.RK_Uint16 PID.RK_Uint16) /设定值大于实际值否?if (PID.RK_Uint16 - PID.RK_Uint16 10) /偏差大于10否?PID.Uk_Uint16 = 100; /偏差大于10为上限幅值输出 elseTemp0 = PID.RK_Uint16 - PID.CK_Uint16; /偏差 PID.Ek_Uint321) /E(k)E(k-1)否?Temp0 = PID.Ek_Uint320 - PID.Ek_Uint32
14、1; /E(k)E(k-1)PID.EkFlag_Uint80 = 0; /E(k)-E(k-1)为正数 elseTemp0 = PID.Ek_Uint320 - PID.Ek_Uint321; 附录-11-/E(k)2E(k-1)否?if (PID.Ek_Uint320 + PID.Ek_Uint322) Temp2) Temp2 = (PID.Ek_Uint320 + PID.Ek_Uint322) - Temp2; /E(k-2)+E(k)2E(k-1)PID.EkFlag_Uint82 = 0; /E(k-2)+E(k)-2E(k-1)为正数 elseTemp2 = Temp2 - (
15、PID.Ek_Uint320 + PID.Ek_Uint322); /E(k-2)+E(k)0/*KD*E(k-2)+E(k)-2E(k-1)*/ if (PID.EkFlag_Uint82 = 0)PostSum += Temp2; /正数和elseNegSum += Temp2; /负数和/*U(K)*/ PostSum += (uint32)PID.Uk_Uint16; if (PostSum NegSum) / 是否控制量为正数 Temp0 = PostSum - NegSum;if (Temp0 100)PID.Uk_Uint16 = (uint16)Temp0;/小于上限幅值则为计
16、算值输出 elsePID.Uk_Uint16 = 100; 附录-14-/否则为上限幅值输出elsePID.Uk_Uint16 = 0; /控制量输出为负数,则输出0(下限幅值输出) else PID.Uk_Uint16 = 0; /*函数入口: U(K)函数出口: out(加热输出)/PID运算植输出函数*/void PIDOutput(void) static int i;i = PID.Uk_Uint16;附录-15-if (i = 0)out = 1;else out = 0;if (count+) = 5)/如定时中断为40MS,40MS*5=0.2S(输出时间单位),周期20S(100等份) /每20S PID运算一次count = 0;i-;