《2022年温度控制的PID算法及C程序实现.docx》由会员分享,可在线阅读,更多相关《2022年温度控制的PID算法及C程序实现.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选学习资料 - - - - - - - - - 温度掌握与 PID 算法温度掌握与 PID 算法 j 较为复杂, 下面结合实际浅显易懂的阐述一下 PID 掌握理论, 将温度掌握及 PID 算法作一个简洁的描述;1温度掌握的框图这是一个典型的闭环掌握系统,用于掌握加热温区的温度(PV)保持在恒定的温度设定值 SV;系统通过温度采集单元反馈回来的实时温度信号(PV)猎取偏差值(EV ),偏差值经过 PID 调剂器运算输出,掌握发热管的发热功率,以克服偏差,促使偏差趋近于零;例如,当某一时刻炉内过PCB 板较多,带走的热量较多时,即导致温区温度下降,这时,通过反馈的调剂作用,将使温度快速回升;其调
2、剂过程如下:温度掌握的功率输出采纳脉宽调制的方法;固态继电器SSR 的输出端为脉宽可调的电压 UOUT ; 当 SSR 的触发角触发时, 电源电压 UAN 通过 SSR 的输出端加到发热管的两端;当 SSR 的触发角没有触发信号时,Udt/T* UAN=K* U AN SSR 关断;因此,发热管两端的平均电压为名师归纳总结 其中 K= t/T ,为一个周期T 中, SSR 触发导通的比率,称为负载电压系数或是占空比,K第 1 页,共 6 页的变化率在01 之间;一般是周期T 固定不便,调剂t, 当 t 在 0T 的范畴内变化时,发热管的电压即在0 UAN 之间变化,这种调剂方法称为定频调宽法;
3、下面将要描述的PID调剂器的算式在这里的实质即是运算求出一个实时变化的,能够保证加热温区在外界干扰的情形下仍能保持温度在一个较小的范畴内变化的合理的负载电压系数K;- - - - - - -精选学习资料 - - - - - - - - - 2.温度掌握的两个阶段温度掌握系统是一个惯性较大的系统,也就是说, 当给温区开头加热之后,并不能立即观看得到温区温度的明显上升;同样的, 当关闭加热之后,温区的温度仍旧有肯定程度的上升; 另外,热电偶对温度的检测,与实际的温区温度相比较,也存在肯定的滞后效应;这给温度的掌握带来了困难;因此,假如在温度检测值(PV)到达设定值时才关断输出,可能因温度的滞后效应
4、而长时间超出设定值,需要较长时间才能回到设定值;假如在温度检测值( PV)未到设定值时即关断输出,就可能因关断较早而导致温度难以达到设定值;为了合理地处理系统响应速度(即加热速度) 与系统稳固性之间地冲突,我们把温度掌握分为两个阶段;(1)PID 调剂前阶段名师归纳总结 - - - - - - -第 2 页,共 6 页精选学习资料 - - - - - - - - - 在这个阶段,由于温区的温度距离设定值仍很远,为了加快加热速度,SSR 与发热管处于满负荷输出状态,只有当温度上升速度超过掌握参数“ 加速速率”,SSR才关闭输出;“ 加速速率”描述的是温度在单位时间的跨度,反映的是温度升降的快慢,
5、如上图所示;用“ 加速速率” 限制温升过快,是为了降低温度进入 PID 调剂区的惯性,防止首次到达温度设定值(SV)时超调过大;在这个阶段, 要么占空比 K=0, SSR 关闭;要么占空比 K=100 , SSR 全速输出;PID 调剂器不起作用,仅由“ 加速速率” 掌握温升快慢;(2)PID 调剂阶段0100),保证在这个阶段, PID 调剂器调剂输出,依据偏差值运算占空比(偏差 EV 趋近于零 ,即使系统受到外部干扰时,也能使系统回到平稳状态;3 PID 算法PID 掌握的原理是基于下面的算式:其中:输出 Mt 是比例项, 积分项和微分项的函数;Mt PID 回路的输出,是时间的函数Kc
6、PID 回路的比例增益e PID 回路的偏差(设定值(SV)与过程变量 PV 之差)Minitial PID 回路的静态输出值为了能让数字运算机处理这个算式,连续算式必需离散化为周期采样偏差算式,才能用来运算输出值;数字运算机处理的算式如下:从这个公式可以看出,积分项是从第一个采样周期到当前采样周期全部误差项的函数,微分项是当前采样和前一次采样的函数,比例项仅是当前采样的函数;在数字运算机中,不储存全部的误差项,其实也不必要;由于运算机从第一次采样开头,每有一个过程采样值必需运算一次输出值,只需要储存前一次过程值 PVn-1和积分项前值;利用运算机处理的重复性,可以将以上算式变换为:名师归纳总
7、结 - - - - - - -第 3 页,共 6 页精选学习资料 - - - - - - - - - 其中:Mn 在第 n 采样时刻, PID 回路的输出运算值SV PID 回路设定值PVn 在第 n 采样时刻的过程变量值PVn-1 在第 n1 采样时刻的过程变量值MX 积分前项值Mintial PID 回路的静态输出值Kc PID 回路的比例增益KI 积分项的比例常数 KI=Kc * Ts / Ti Ts 是离散化时的采样时间间隔 Ti 是积分时间参数;KD 微分项的比例常数 KD=Kc * Td / Ts Ts 是离散化时的采样时间间隔 Td 是微分时间参数;从上面 PID 的算式,可以分
8、析三个基本参数 Kc, KI, KD 在实际掌握中的作用:(1)比例调剂作用: 比例项按比例反应系统的偏差,系统一旦显现了偏差,比例调节立刻产生调剂作用用以削减偏差;比例作用大,可以加快调剂,削减偏差;但是过大的比例调剂,使系统的稳固性下降,甚至造成系统的不稳固;(2)积分调剂作用:积分项排除系统的稳态误差,提高无差度;只要有偏差,积分就进行,直到无偏差时,积分运算才停止,积分调剂项输出一常数值;积分作用的强弱取决于积分时间常数Ti,Ti 越小,积分作用越强;积分掌握可提高系统的无差度,但积分项输出响应缓慢,使得系统调剂时间增长;(3)微分调剂作用:微分项反映系统过程变量的变化率(PVn-1-
9、PVn)/ Ts),具有预见性,能预见变化的趋势,因此,能产生超前的调剂作用,在偏差仍没有 形成之前,已被微分调剂作用排除;因此,可以改善系统的动态性能;在微分时间参数 Td 挑选合适的情形下,可以削减超调,削减调剂时间;微分调剂对 干扰有放大成效,过强的微分调剂,对系统抗干扰不利;此外,微分项反映的 是过程变量的变化率,而当过程变量没有变化时,微分调剂输出为零;微分调节不能单独使用,需要与另外两种调剂规律相结合,组成 PD 或 PID 调剂器;以上面的推导,C 程序如下/* pid 算法 C 源程序,仍有实现pid 自动调整; 51 用于掌握温度26-100 摄氏度;TIME:2022-07
10、-29 20:15:07 */ #include #include global_varible.h /* * 模块名 : PID 名师归纳总结 - - - - - - -第 4 页,共 6 页精选学习资料 - - - - - - - - - * 描述 : PID 调剂子程序* 采纳 PID-PD 算法;在偏差肯定值大于e 时,用 PD 算法,以改善动态品质;* 当偏差肯定值小于e 时,用 PID 算法,提高稳固精度;* PIDout=kp*et+ki*et+et-1+.+e1+kd*et-et-1 *= * 入口 : 无* 出口 : 无* 转变 : PID_T_Run= 加热时间掌握*/ v
11、oid PID_Mathvoid signed long ee1; /偏差一阶/signed long ee2; /偏差二阶signed long d_out; / 积分输出if.Flag_PID_T_OK return; Flag_PID_T_OK = 0; Temp_Set = 3700; /温度掌握设定值 37.00 度PID_e0 = Temp_Set - Temp_Now; / 本次偏差ee1 = PID_e0 - PID_e1; /运算一阶偏差/ee2 = PID_e0-2*PID_e1+PID_e2; /运算二阶偏差/一阶偏差的限制范畴ifee1 500 ee1 = 500; i
12、fee1 200 PID_e_SUM = 200; ifPID_e_SUM -200 PID_e_SUM = -200; PID_Out = PID_kp * PID_e0 + PID_kd * ee1; /运算 PID 比例和微分输出ifabsPID_e0 100 /假如温度相差大于1 度时积分累计限制ifPID_e_SUM 100 PID_e_SUM = 100; ifPID_e_SUM -100 PID_e_SUM = -100; d_out = PID_ki * PID_e_SUM; /积分输出0.5 度时积分累ifPID_e0 150 PID_e_SUM = 150; 第 5 页,共
13、 6 页- - - - - - -精选学习资料 - - - - - - - - - ifPID_e_SUM 0 d_out = 1; /当前温度高于设定温度0.5 度时减弱积分正输出 PID_Out += d_out; /PID 比例 ,积分和微分输出 else PID_e_SUM=0; PID_Out /= 100; PID_Out=200; /复原被 PID_Out 系数放大的倍数ifPID_Out 200 ifPID_Out 300 PID_Out=200; ifPID_e0 -20 PID_Out=0; /当前温度高于设定温度0.2 度就关闭加热/ Hot_T_Run = PID_Out; /加热时间掌握输出PID_e2 = PID_e1; /储存上次偏差PID_e1 = PID_e0; /储存当前偏差 名师归纳总结 - - - - - - -第 6 页,共 6 页