您的位置 首页 编程

STM32单片机PID算法的准则及使用办法

STM32单片机PID算法的原则及应用方法-一、总体原则

PID调试一般原则

a.在输出不振荡时,增大比例增益P。

b.在输出不振荡时,减小积分时间常数Ti。

c.在输出不振荡时,增大微分时间常数Td。

一、整体准则

PID调试一般准则

a.在输出不振动时,增大份额增益P。

b.在输出不振动时,减小积分时刻常数TI

c.在输出不振动时,增大微分时刻常数Td。

二、各环节效果

[P]份额调理效果:是按份额反响体系的差错,体系一旦呈现了差错,份额调理当即发生调理效果用以削减差错。份额效果大,能够加速调理,削减差错,可是过大的份额,使体系的稳定性下降,乃至构成体系的不稳定。反之,过小,更不上体系需求。

STM32单片机PID算法的准则及运用办法

[I]积分调理效果:是使体系消除稳态差错,进步无差度。由于有差错,积分调理就进行,直至无差,积分调理中止,积分调理输出一常值。积分效果的强弱取决与积分时刻常数TI,TI越小,积分效果就越强。反之TI大则积分效果弱,参加积分调理可使体系稳定性下降,动态呼应变慢。一般状况是将时刻常数设置很小。积分效果常与另两种调理规则结合,组成PI调理器或PID调理器。

[D]微分调理效果:微分效果反映体系差错信号的改变率,具有预见性,能预见差错改变的趋势,因而能发生超前的操控效果,在差错还没有构成之前,已被微分调理效果消除。因而,能够改进体系的动态功能。在微分时刻挑选适宜状况下,能够削减超调,削减调理时刻。微分效果对噪声搅扰有扩大效果,因而过强 的加微分调理,对体系抗搅扰晦气。此外,微分反响的是改变率,而当输入没有改变时,微分效果输出为 零。微分效果不能独自运用,需求与别的两种调理规则相结合,组成PD或PID操控器。

三、细说[分为PID、PI、PD]

1、确认份额增益P

确认份额增益P 时,首要去掉PID的积分项和微分项,一般是令Ti=0、Td=0(详细见PID的参数设定阐明),使PID为纯份额调理。输入设定为体系答应的最大值的60%~70%,由0逐步加大份额增益P,直至体系呈现振动;再反过来,从此刻的份额增益P逐步减小,直至体系振动消失,记载此刻的份额增益P,设定PID的份额增益P为当时值的60%~70%。份额增益P调试完结。

【说明】咱们知道P是调理与预设值(即输入值)的差错的效果的,因而P很大时,当反应值很小时也会构成很大的动摇,最终是震动状况,这个能够试出来的,这时的P是Pmax。反之P太小时,底子不可能接近预设值,当刚好能接近预设值时,这时的P便是Pmin。一般取P = Pmax(*60~70%)。

2、确认积分时刻常数Ti

份额增益P确认后,设定一个较大的积分时刻常数Ti的初值,然后逐步减小Ti,直至体系呈现振动,之后在反过来,逐步加大Ti,直至体系振动消失。记载

此刻的Ti,设定PID的积分时刻常数Ti为当时值的150%~180%。积分时刻常数Ti调试完结。

【说明】

3、确认积分时刻常数Td积分时刻常数Td一般不必设定,为0即可。若要设定,与确认 P和Ti 的办法相同,取不振动时的30%。

【说明】

【PID算法演示小软件(绿色版)】

四、详细实践

01/*2014年7月17日*/02unsignedlonglastTime;03doubleInput, Output, Setpoint;04doubleetSum, lastErr;05doublekp, ki, kd;06//output = kp*et + ki*etSum + kd*det;07voidPidFunction()08{09/*How long since we last calculated*/10unsignedlongnow = millis();//得到当时时刻11doubletimeChange = (double)(now – lastTime);//得到当时时刻与前次时刻之间的距离12/*Compute all the working error variables*///13doubleet = Setpoint – Input;//反应值与输入值的差值 e(t) = 份额14etSum += (et* timeChange);//差值*时刻距离乘积累加 = 积分 理论是零15doubledEt = (et – lastErr) / timeChange;//差值-上一次差值 = 微分16/*Compute PID Output*///17Output = kp * et + ki * etSum + kd * dEt;//输出 = 份额 + 积分 + 微分18/*Remember some variables for next time*/19lastErr = et;//下次循环: 当时份额成为曩昔份额20lastTime = now;//下次循环: 当时时刻成为曩昔时刻21}22voidParaSet(doubleKp,doubleKi,doubleKd)//设置份额、积分、微分的系数23{24kp = Kp;25ki = Ki;26kd = Kd;27}

上面的程序代码是整个PID操控的模板。详细的看你的体系需求。下面我讲讲倒竖摆(还不知道倒竖摆是什么的能够去网上了解下)的PID操控:

【单个传感器完成倒竖摆】

视点传感器(精细电位器):咱们知道一般的精细电位器就能够当作传感器来运用,电位器三个脚,其间一端接GND,一端接VCC,那么中心端作为电压输出,经过AD采样既能够获取摆转过的视点方位。天然在摆的最高点就有一个视点值。为了取得较好的操控周期,咱们选用定时器中止的方法,即在定时器中止中进行采样和数据处理,并进行电机操控(定心,STM32运转速度足够了)。这儿取定时器三毫米中止一次,留意,AD采样的时刻一定要小于定时器中止时刻,不然会呈现时序紊乱,能够在AD初始化中设定采样周期,或许在中止函数里边进行恰当的处理,比方分三次采样取平均值(这个需求设定更小的中止时刻,如一毫秒中止一次,我便是这样的做的)。定时器初始化和一些变量的界说我就没贴代码了,详细的代码如下:

01voidTIM3_IRQHandler(void)02{03staticinttimercount;04

05if(TIM3-》SR&0X0001){//溢出中止06LED1 = ~LED1;07timercount++;08}09TIM3-》SR &= ~(1《《0);//铲除中止标志位10

11if(timercount == 1){12ang[0] = Get_Adc(ADC_CH1);13}14if(timercount == 2){15ang[1] = Get_Adc(ADC_CH1);16}17if(timercount == 3){18////////////angle PID///////////19ang[2] = Get_Adc(ADC_CH1);//收集AD值20angleLast = angle;//保存上一次的采样视点值21angle = (ang[0]+ang[1]+ang[2])/3;//取三次收集的平均值22degreeLast = degree;//保存上一次的核算视点值23degree = calcAngle(angle);//获取新的核算视点值24

25velocity = (angle – angleLast);//得到采样角速度差值(微分值)26if(abs(angle-setPoint)《=4)//输入值与反应值差的绝对值 《 427error_p = 0;//p = 0

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/346301.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部