stm32直流电机控制—PID算法篇
- 一、常用的控制算法
-
- 1.控制系统的基本结构:
- 2.常用控制算法:位式控制
-
- ①二位式控制算法
- ②.具有回差的二位式控制算法
- ③三位式控制算法
- ④小结
- 二、PID控制算法
-
- 1.PID控制算法的基本思想
- 2.PID算法分析
- 3.PID算法数学模型
- 4.小结
- 三、STM32代码控制说明
-
- 1.硬件电路搭建
- 2.软件实现
一、常用的控制算法
1.控制系统的基本结构:
控制系统的基本结构如图:
b. 执行机构使控制对象要不全额工作,要不就停止工作。当PV低于SV时全额工作,PV大于或等于SV时就彻底停止工作。如果控制对象是一个1000W的加热器,温度不到时就1000W全功率运行,温度达到时就停止工作。
c. 由于环境因素或控制系统传输延时或者控制对象本身的惯性等因素,控制效果往往是PV在SV的上下有一个较大的波动。
d. 在PV接近SV的临界点时,控制输出信 OUT往往在H和L之间频繁转换,导致执行部件的触点频繁开关动作,易产生干扰及缩短执行部件的寿命。
②.具有回差的二位式控制算法
具有回差的二位式控制算法具体控制逻辑如图所示:
a.在二位式控制的基础上对控制对象的功率分成0功率(停止工作)、半功率、全功率三种情况(即三位)。
b.当前值低于设定值一定比例(一般10%)时OUT1和OUT2同时起控制作用,控制对象全功率运行;
c.当前值在设定值的正负10%范围时,OUT1单独作用,工作于半功率状态;
d.当前值达到或超过设定值时OUT1和OUT2都停止输出,控制对象停止工作。
e.相对一般二位式控制算法,三位式算法对控制对象的当前状态值做了简单的分析,并根据不同的当前状态值输出不同的控制信 。能够较好的对输出产生控制效果。
④小结
位式控制的主要特征:
a.控制算法只关注控制当前的状态值(PV)与设定值之间的差值—二者当前有差值就输出控制信 ,二者当前无差值就不输出控制信 。
b…位式控制算法的输出信 状态单一,只输出了高低两种状态,这两种状态对应着控制对象的工作与不工作—-如果是温度控制系统,就是加热器加热与不加热。
c.由于控制系统自身的延时或者控制对象自身的惯性,位式控制算法只能使控制对象当前的状态值在设定值附件波动,不能很好的跟踪在设定值的附近甚至相等。
二、PID控制算法
1.PID控制算法的基本思想
PID控制控制算法具体控制逻辑如图所示:
结论:
1. Dk能够说明从上次采样到当前采样的这段时间被控制对象的状态变化趋势,这种变化的趋势很可能会在一定程度上延续到下一个采样时间点,所以可以根据这个变化趋势(Dk的值)对输出信 OUT进行调整,达到提前控制的目的。
2. Dk形如数学上的微分运算,反应了控制对象在一段时间内的变化趋势及变化量,所以利用Dk对控制器输出信 进行调节的算法称为微分(differential)算法。可以用数学模型表达为:
DOUT=Kp*(Td(de/dt))+Out0
Kp:为一常数,可理解为硬件上的放大器或衰减器,用于对输出信 OUT的增益进行调整;
Out0:为一常数,为了在Dk为0时确保OUT都有一个稳定的控制值,避免失控。
Td:叫微分时间常数,(犹如硬件上电感器的自感系数)Td越大导致OUT增大,对输出信 产生强烈的影响。
3>PID算法的形成
1.比例、积分、微分三种算法的优缺点分析:
POUT=(KpEk)+ Out0 –比例算法
IOUT=kp ( (1/Ti) Exdt)+Out0 –积分算法
DOUT=Kp*(Td(de/dt))+Out0 –微分算法
比例算法: 只考虑控制对象当前误差,当前有误差才输出控制信 ,当前没有误差就不输出控制信 ,也就是说只要偏差已经产生了比例算法才采取措施进行调整,所以单独的比例算法不可能将控制对象的状态值控制在设定值上,始终在设定值上下波动;但是比例控制反应灵敏,有误差马上就反应到输出。
积分算法:考虑了被控制对象的历史误差情况,过去的误差状况参与了当前的输出控制,但是在系统还没有达到目标期间,往往会因为这些历史的误差对当前的控制产生了干扰(即拖后腿),使用不当反而搅乱当前的输出。但是在系统进入稳定状态后,特别是当前值与设定值没有偏差时,积分算法可以根据过去的偏差值输出一个相对稳定的控制信 ,以防止产生偏离目标,起到打预防针的效果。
微分算法:单纯的考虑了近期的变化率,当系统的偏差趋近于某一个固定值时(变化率为0),微分算法不输出信 对其偏差进行调整,所以微分算法不能单独使用,它只关心偏差的变化速度,不考虑是否有偏差(偏差变化率为0时偏差不一定是0).但是微分算法能获得控制对象近期的变化趋势,它可以协助输出信 尽早的抑制控制对象的变化。可以理解为将要有剧烈变化时就大幅度调整输出信 进行抑制,避免了控制对象的大幅度变化。
以上三种算法综合起来产生一个当前的控制量对控制对象进行控制,它们的优缺点互补,即形成经典的PID算法。
3.PID算法数学模型
OUT=POUT+IOUT+DOUT
即:
OUT=((KpEk)+ Out0)+(kp ( (1/Ti) Exdt)+Out0)+ (Kp*(Td(de/dt))+Out0)
整理该式子得到:将各项的Out0归并为OUT0。
OUT=kp(Ek+((1/Ti)Exdt))+(Td(de/dt)))+OUT0
3.PID算法在单片机中的应用
1)PID算法在单片机中应用时,对积分和微分项可以作近似变换:
对于积分项可改写成:
n
I =1/Ti∑EkT
k=0
即用过去一段时间的采样点的偏差值的代数和的代替积分。
T是采样周期,也叫控制周期,每隔T时间段进行一次PID计算。
对于微分项可改写成:
D=TD((Ek-Ek-1)/T)
Ek:本次偏差,Ek-1上次的偏差值
2)位置式PID算法数学模型
由此可得到单片机中PID算法的表达式:
OUT=kp(Ek+((1/Ti)Exdt))+(Td(de/dt)))+OUT0
=>
OUT=
n
Kp(En+(1/Ti∑EkT)+(TD((Ek-Ek-1)/T)))+out0
k=0
进一步展开得:
n
OUT=(KpEk) + (Kp(T/Ti)∑Ek) +(Kp*(TD/T)(EK-Ek-1)) +OUT0
k=0
令 Ki= Kp*(T/Ti);
KD=(Kp*(TD/T)
故:
n
OUT=(Kp*Ek) + (Ki∑Ek) +(KD(EK-Ek-1)) +OUT0
k=0
程序设计时利用C语言或汇编语言可以方便实现这个计算公式。OUT即为本次运算的结果,利用OUT可以去驱动执行机构输出对应的控制信 ,例如温度控制就可以控制PWM的宽度,电磁阀就可以改变电磁线圈电流以改变阀门开度,或者是可控硅的导通角度等;
这种PID算法计算出的结果(OUT值)表示当前控制器应该输出的控制量,所以称为位置式(直接输出了执行机构应该达到的状态值)。
3)增量式PID算法
位置式PID算法计算量较大,比较消耗处理器的资源。在有些控制系统中,执行机构本身没有记忆功能,比如MOS管是否导通完全取决于控制极电压,可控硅是否导通取决于触发信 ,继电器是否接通取决于线圈电流等,只要控制信 丢失,执行机构就停止,在这些应用中应该采用位置式PID。
也有一些执行机构本身具有记忆功能,比如步进电机,即使控制信 丢失,由于其自身的机械结构会保持在原来的位置等,在这些控制系统中,PID算法没有必要输出本次应该到达的真实位置,只需要说明应该在上次的基础上对输出信 做多大的修正(可正可负)即可,这就是增量式PID算法。
增量式PID计算出的是应该在当前控制信 上的调整值,如果计算出为正,则增强输出信 ;如果计算出为负则减弱输出信 。
增量式PID算法数学模型:
如果用OUTK-1表示上次的输出控制信 值,那么当前的输出值应该为OUTk,这两者之间的关系为:
OUTK=OUTk-1+ △OUT
△OUT即为应该输出的增量值;
上式变形得:
△OUT= OUTK- OUTk-1
本次的位置式算法输出:
n
OUTk=(KpEk) + (Ki∑Ek) +(KD(EK-Ek-1)) +OUT0 –1式
k=0
上次的位置式算法输出:
n-1
OUTk-1=(KpEk-1) +(Ki∑Ek) +(KD(EK-1-Ek-2)) +OUT0–2式
k=0
上述1式减2式即得到相邻两次的增量:
如前所述:
Ki= Kp*(T/Ti);
KD=(Kp*(TD/T)
△OUT= OUTK- OUTk-1=
kp(EK-EK-1)+((KpT)/Ti)Ek+(((KpTD)/T)*(Ek-2Ek-1+Ek-2))
EK:本次的偏差;
Ek-1:上次的偏差
Ek-2:上上次的偏差
Kp:算法增益调节
Ti :积分时间
TD: 微分时间常数
结论:
增量式PID的计算只需要最近3次的偏差(本次偏差,上次偏差,上上次偏差),不需要处理器存储大量的历史偏差值,计算量也相对较少,容易实现。
4)关于Ti和TD的理解:
在PID控制算法中,当前的输出信 由比例项,积分项,微分项共同作用形成,当比例项输出不为0时,如果积分项对运算输出的贡献作用与比例项对运算对输出的贡献一样时(即同为正或同为负时),积分项相当于重复了一次比例项产生作用的时间,这个
时间就可以理解为积分时间。
当比例项不为0时,如果微分项在一段时间里计算的结果与比例项对输出的贡献相同(即同为正或同为负)时,微分项相当于在一段时间里重复了比例项的作用,这段时间可理解为就是微分时间。
实际应用中应该合理选择Kp,Ti,Td以确保三者对输出的贡献平衡,从而使控制对象在设定值的附近。
4.小结
图2中的c (∞)为被控量c (t)的稳态值或被控量的期望值,误差e(t) = c (∞) – c (t)。在图2中启动过程的上升阶段,当 时,被控量尚未超过其稳态值。但是因为误差e(t)不断减小,误差的微分和控制器输出的微分部分为负值,减小了控制器的输出量,相当于提前给出了制动作用,以阻碍被控量的上升,所以可以减少超调量。因此微分控制具有超前和预测的特性,在超调尚未出现之前,就能提前给出控制作用。
闭环控制系统的振荡甚至不稳定的根本原因在于有较大的滞后因素。因为微分项能预测误差变化的趋势,这种“超前”的作用可以抵消滞后因素的影响。适当的微分控制作用可以使超调量减小,增加系统的稳定性。
对于有较大的滞后特性的被控对象,如果PI控制的效果不理想,可以考虑增加微分控制,以改善系统在调节过程中的动态特性。如果将微分时间设置为0,微分部分将不起作用。
微分时间与微分作用的强弱成正比,微分时间越大,微分作用越强。如果微分时间太大,在误差快速变化时,响应曲线上可能会出现“毛刺”。
微分控制的缺点是对干扰噪声敏感,使系统抑制干扰的能力降低。为此可在微分部分增加惯性滤波环节。
5.采样周期
PID控制程序是周期性执行的,执行的周期称为采样周期。采样周期越小,采样值越能反映模拟量的变化情况。但是太小会增加CPU的运算工作量,相邻两次采样的差值几乎没有什么变化,将使PID控制器输出的微分部分接近为零,所以也不宜将采样周期取得过小。
应保证在被控量迅速变化时(例如启动过程中的上升阶段),能有足够多的采样点数,不致因为采样点数过少而丢失被采集的模拟量中的重要信息。
6.PID参数的调整方法
在整定PID控制器参数时,可以根据控制器的参数与系统动态性能和稳态性能之间的定性关系,用实验的方法来调节控制器的参数。有经验的调试人员一般可以较快地得到较为满意的调试结果。在调试中最重要的问题是在系统性能不能令人满意时,知道应该调节哪一个参数,该参数应该增大还是减小。
为了减少需要整定的参数,首先可以采用PI控制器。为了保证系统的安全,在调试开始时应设置比较保守的参数,例如比例系数不要太大,积分时间不要太小,以避免出现系统不稳定或超调量过大的异常情况。给出一个阶跃给定信 ,根据被控量的输出波形可以获得系统性能的信息,例如超调量和调节时间。应根据PID参数与系统性能的关系,反复调节PID的参数。
如果阶跃响应的超调量太大,经过多次振荡才能稳定或者根本不稳定,应减小比例系数、增大积分时间。如果阶跃响应没有超调量,但是被控量上升过于缓慢,过渡过程时间太长,应按相反的方向调整参数。
如果消除误差的速度较慢,可以适当减小积分时间,增强积分作用。
反复调节比例系数和积分时间,如果超调量仍然较大,可以加入微分控制,微分时间从0逐渐增大,反复调节控制器的比例、积分和微分部分的参数。
总之,PID参数的调试是一个综合的、各参数互相影响的过程,实际调试过程中的多次尝试是非常重要的,也是必须的。
三、STM32代码控制说明
1.硬件电路搭建
本实验使用司南电气控制STM32单片机开发板 来实现使用PID算法对啊直流电机的速度控制。
实验材料:
①司南电气控制STM32单片机开发板
②带编码器的直流电机
③OLED显示屏
接线如图:

非常感谢大家的观看,希望对大家有所帮助。小编常接外包设计定单哦!非常乐意为大家提供毕设技术指导以及产品设计等服务。
如需要可直接联系小编(添加请备注博客添加哈):
QQ : 3778615131
微信 : a13428153731
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!