基于PID 控制算法的电阻加热炉温度控制系统设计摘要:温度控制是人们日常生活中经常遇到的问题,传统的控制方法都存在控制慢,精度低等问题,而计算机控制系统能够利用微型处理器加上科学的控制算法使温度控制实现控制快而且精度高。
在本设计中,控制对象为电阻加热炉,通过控制加在电阻丝两端电压的工作时间,从而可控制输入电阻加热炉的功率,继而达到控制其温度的目的。
此系统以单片机为核心,采用固态继电器为执行电路,实现对电炉的自动控制。
算法采用增量型PID 控制。
另外本文还阐述了PID 控制器的设计,硬件结构和软件设计,实现了一套温度采集和控制的方案。
该系统具有硬件成本低,控温精度较高,可靠性好,抗干扰能力强等特点。
关键词:电加热炉;单片机;温度控制;PID 算法1、单片机温度控制系统方案简介单片机温度控制系统是数控系统的一个简单应用。
在冶金、化工、建材、机械、食品、石油等各类工业中,广泛使用着加热炉、热处理炉、反应炉等,因此,温度是工业对象中一个主要的被控参数。
由于炉子的种类不同,因而所使用的燃料和加热方法也不同,例如煤气、天然气、油、电等;由于工业不同,所需要的温度高低不同,因而所采用的测温原件和测温方法也不同;产品工业不同,控制温度的精度也不同,因而对数据采集的精度和所采用的控制算法也不同。
本系统所使用的加热炉为电加热路,炉丝功率为2kw ,系统要求测试水杯恒温,误差为C 1o,超调量尽可能小,温度上升较快且有良好的稳定性。
单片机温度控制系统是以STC89C52RC 单片机为控制核心,辅以采样反馈电路,驱动芯片,固态继电器对电炉进行控制的微机控制系统。
其系统结构框图可表示为:系统采用单闭环形式,其基本控制原理为:将温度设定值(即输入控制量)和温度反馈值同时送入控制电路部分,然后经过单片机运算得到输出控制量,输出控制量控制I/O 得到一定占空比的PWM 波控制固态继电器,固态继电器接通220V 市电给电炉,调节PWM 占空比使电炉达到一定的温度。
其控制系统框图如图1-1所示。
51单片机DS18B20温度传感器数码管显示电源固态继电器电加热炉4*4矩阵键盘220V 电源蜂鸣器水杯图1-1 系统框图2、单片机简介STC89C52是STC公司生产的一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,有512字节RAM,32位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52还可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
其直插式芯片引脚图及内部结构如图2-1图所示。
图 2-1STC89C52单片机具体信息如下:1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051;2. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机);3.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节;5. 片上集成512 字节RAM;6. 通用I/O口(32个),复位后为:P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片;8. 具有EEPROM 功能;9. 共3个16位定时器/计数器,即定时器T0、T1、T2;10.外部中断4路,下降沿中断或低电平触发电路,Power Down 模式可由外部中断低电平触发中断方式唤醒;11. 通用异步串行口(UART),还可用定时器软件实现多个UART;12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级);13. PDIP封装。
STC89C52芯片实物图如下图所示:3 硬件电路设计3.1测温电路采用DS18B20数字式温度传感器。
DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,它具有微型化,低功耗,高性能,抗干扰能力强,易配微处理器等优点,可直接将温度转化成数字信号处理器处理。
测量的温度范围是—55~125℃,测温误差0.5℃。
可编程分辨率9~12位,对应的可分辨温度分别为0.5℃,0.25℃,0.125℃和0.0625℃。
相较热电偶传感器而言可实现高精度测温3.2矩阵键盘采用的按键是独立的立式4引脚按键。
3.3显示电路采用的是共阴极7段数码管。
由于一般的数码管每一段亮至少需要10个毫安的电流,而单片机的I/O口送不出如此大的电流,所以我们需要加数码管的驱动电路,可以用上拉电阻的方法,也可以使用专门的驱动芯片。
由于我们使用的开发板使用的是74HC573,其输出电流较大,足够点亮数码管。
3.4执行电路SSR-40 DA固态继电器4系统软件设计4.1软件程序设计整个温度控制系统的软件程序由主程序、中断服务程序和子程序三部分组成。
其中主程序主要是对系统的运行进行初始化,包括实现各种参数的初始化,使显示,键盘,报警装置等部分开始工作,最后是控制电加热炉的正常运行。
而系统初始化包括设置控制量的初始值、采样周期、中断方式和状态、定时器的工作状态,中断的开关等。
主程序中也要实现数据采集的任务,通过调用数据采集的子函数,检测出电加热炉的炉温信号,讲采集到的温度值显示到数码管上,同时调用键盘设置的子函数,获取设置的温度,显示在数码管的另外三位,最后根据采集到的温度,与设定温度值,调用PID算法子函数,进行PID计算,输出的结果进入到中断函数中,以影响、产生的PWM波的占空比,从而就可利用PWM波对炉温进行控制。
主程序流程图如下图所示。
显示子程序:PWM波子程序:4.2算法设计电阻加热炉是一个非线性、时变系统,所以在本控制系统中采用的是智能控制算法,即PID控制算法,通过对于设定温度与实际温度的差值的比例,微分,积分三者结合得到的算法结果来控制执行机构的执行状态,从而可以让控制系统中的控制时间,超调量,滞后反应以及最后的稳定程度都能有较明显的改善。
4.2.1 PID算法参数整定在PID算法中,最重要的就是对于三个控制参数即KP,KI,KP的整定,以下是PID的整定过程。
整定方法:临界比例度法1.构建闭环回路,确定稳定极限。
2.根据公式计算控制器参数。
稳定极限是由P原件决定的。
当出现稳态振荡时就达到这个极限。
产生临界振荡增益K 和临界振荡周期T。
确定两个参数之后通过下表来确定其他参数。
首先建立闭环系统,采用阶跃输入,不加PID控制器及其仿真输出,如下图所示:先使积分和微分系数为0,即只有比例控制,调节P 参数,使系统出现稳态振荡,当39.2K P =时,等到下图所示曲线:由上图可知,临界振荡增益:K=1.5;临界振荡周期T=750.35-447.25=303.1,计算PID 参数如下:73.329.0*1.303*12.0**12.0*00594.01.303*5.09.0*5.09.05.1*6.0==========P P D D P I P I P K T K T K T K T K K K输入相应PID 参数得到如下输出:由上面输出结果可知,还有一定的超调量,所以将积分系数适当减小,比例和微分系数进行微调,最后当33005.09.0===D I P K K K ;;时曲线如下图所示。
5、控制系统测试过程5.1开环测试5.1.1 开环测试1设定温度T :60℃进入±2℃时间t :860 S最大超调量:%8.18100%6006-3.17100%T T -T M Max P =⨯=⨯=∞∞)()( 测试曲线图如下图所示:5.1.2 开环测试2设定温度T :60℃进入±2℃时间t :840 S最大超调量:%5.15100%6006-3.96100%T T -T M Max P =⨯=⨯=∞∞)()( 测试曲线图如下图所示:5.2 PID 参数调节5.2.1最终PID 参数及测试曲线设定温度T :60℃进入±2℃时间t :600 SPID 参数:P=0.9,I=0.005,D=33 最大超调量:%8.9100%6006-9.56100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:设定温度T :60℃进入±2℃时间t :640 SPID 参数:P=0.9,I=0.005,D=33 最大超调量:%2.10100%6006-.166100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:5.2.2最终PID 参数测试其他温度设定温度T :80℃进入±2℃时间t :320 SPID 参数:P=0.9,I=0.005,D=33 最大超调量:%3.2100%8008-8.81100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:5.2.3 进入PID 温度调节的测试55℃时进入PID 调节设定温度T :60℃进入±2℃时间t :860 SPID 参数:P=0.9,I=0.005,D=33 最大超调量:%8.9100%6006-9.56100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:50℃时进入PID 调节设定温度T :60℃进入±2℃时间t :680 SPID 参数:P=0.9,I=0.005,D=33最大超调量:%2.10100%60100%T M Max P =⨯=⨯=∞∞测试曲线图如下图所示:57℃时进入PID 调节 设定温度T :60℃进入±2℃时间t :700 SPID 参数:P=0.9,I=0.005,D=33 最大超调量:%5.11100%6006-.966100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:5.2.4 其他PID 温度调节的测试设定温度T :60℃进入±2℃时间t :940 SPID 参数:P=1.2,I=0.005,D=33最大超调量:%3.16100%60100%T M Max P =⨯=⨯=∞∞测试曲线图如下图所示:设定温度T :60℃进入±2℃时间t :820 SPID 参数:P=1.7,I=0.015,D=650 最大超调量:%0.14100%6006-.486100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:设定温度T :60℃进入±2℃时间t :980 SPID 参数:P=2.2,I=0.015,D=650 最大超调量:%5.11100%6006-66.9100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:设定温度T :60℃进入±2℃时间t :400 SPID 参数:P=2.5,I=0.015,D=650 最大超调量:%5.5100%6006-63.3100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:设定温度T :60℃进入±2℃时间t :620 SPID 参数:P=2.5,I=0.015,D=650 最大超调量:%5.8100%6006-65.1100%T T -T M Max P =⨯=⨯=∞∞)()(测试曲线图如下图所示:6、单片机程序清单:#include<reg52.h>#include <intrins.h>#include<math.h>#include<string.h>#define uchar unsigned char#define uint unsigned intsbit PWM=P2^1; //控制产生PWM波sbit DS=P2^2; //连接DS18B20传感器sbit beep=P2^3; //控制蜂鸣器接口sbit dula=P2^6; //段选控制接口sbit wela=P2^7; //位选控制接口unsigned int temp,shangxian,xiaxian,max_temp=1000,min_temp=0;unsigned char adval; // sign of the result positive or negativeunsigned int i=100;unsigned int j,k,temp,key1,key2,key3,key11,set_temper,timer1,num1; double PID;unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-f 不带小数点编码unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 带小数点编码。