×
单片机 > 单片机程序设计 > 详情

用STM32F407玩控制—不完全微分PID控制

发布时间:2020-05-29 发布时间:
|

常规pid算法有缺陷,主要有:1是当偏差发生突变时,微分作用仅在一个周期内起作用,这个也不合理,2是当输入PV值有噪声时,调节器输出波动大,这在前面的图中可以看到,这对机械执行机构不理,使执行机构容易坏,执行机构故障多,自然生产也就不稳定,所以工程上通常用不完全微分PID调节器,文献中有两种类型的不完全微分PID算法,一种是在常规PID算法后串一个一阶延滞环节(比如参见金以慧《过程控制》,即

Gc(s)=Kc*(1+1/(Ti*s)+Td*s)/(Tf*s+1),这种不完全微分PID算法,与前面讲的常规pid算法加过程值(PV)滤波有点相近,仅在设定(SP)有变化的情况下,调节器输出不同,其余情况下是一样的;另一种是在微分环节上串一个一阶延滞环节,这又分为2种,

第1种算法是:

Gc(s)=Kc*(1+1/(Ti*s)+Td*s/(Tf*s+1))

第2种算法是:

Gc(s)=Kc*(1+1/(Ti*s)+Td*s/(Td*s/KD+1))

第1种算法见诸西门子S7-300/400PLC的FB41功能块实现的PID算法中。

第2种算法见诸西门子DR系列调节器实现的PID算法中,如图1所示,图中Tv就是Td,vv就是KD,KD一般称为微分增益,工程上KD通常在5-10范围内取值,我们也采用这种不完全微分PID算法,且取KD=8。

滤波常数Tf可以在2-5sec范围内取值。

我们在《用单片机玩PID控制—从理想PID控制至先进PID控制_8》一文中,已经介绍过用离散相似法计算滤波环节,这里介绍用差分变换计算滤波环节:

1.将拉氏变换传递函数变换为微分方程,这里是滤波环节。

2.将微分方程变换为差分方程。

3.进行数值计算。

具体计算式:

y(k)=α*y(k-1)+(1-α)*x(k)

其中   α=Tf/(Tf+Ts)    Ts:采样时间,进一步

4.将数值滤波计算串在微分环节(或PID环节)后面。

5.转换为pid增量计算式。

6.c语言实现。

我们也可以将Td*s/(Tf*s+1)作为一个整体进行差分变换,再作数值计算,或者将Td*s/(Tf*s+1)转换为

(Td/Tf)*(1-1/(Tf*s+1)),再用离散相似法进行计算,这里略过。

采样时间,我们定为1sec,这可以满足过程控制的要求,在STM32F407中用定时器来实现周期循环,具体是用TIM_GetITStatus函数实现定时中断,pid控制算法就放在这个函数条件下,TIM_GetITStatus的用法如下(参见《F407固件库手册》):

ITStatus TIM_GetITStatus  ( TIM_TypeDef *  TIMx, 
  uint16_t  TIM_IT 
 )  

Checks whether the TIM interrupt has occurred or not.

Parameters:
TIMx,: where x can be 1 to 14 to select the TIM peripheral. 
TIM_IT,: specifies the TIM interrupt source to check. This parameter can be one of the following values:
TIM_IT_Update: TIM update Interrupt source
TIM_IT_CC1: TIM Capture Compare 1 Interrupt source
TIM_IT_CC2: TIM Capture Compare 2 Interrupt source
TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
TIM_IT_CC4: TIM Capture Compare 4 Interrupt source
TIM_IT_COM: TIM Commutation Interrupt source
TIM_IT_Trigger: TIM Trigger Interrupt source
TIM_IT_Break: TIM Break Interrupt source
 

Note:
TIM6 and TIM7 can generate only an update interrupt.
TIM_IT_COM and TIM_IT_Break are used only with TIM1 and TIM8.
Return values:
The new state of the TIM_IT(SET or RESET). 

 

不完全微分PID控制的效果如图2所示,从图中可以看出,输出波动还是比较大,如对PV值作滤波,效果会好很多。






『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计