历史上的今天
今天是:2024年10月20日(星期日)
2018年10月20日 | 用STM32F407玩控制—不完全微分PID控制
2018-10-20 来源:eefocus
常规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值作滤波,效果会好很多。

史海拾趣
|
编译,连接,都通过了,也生成了EXE;(,我是移植的代码,作了修改:wince开发系列问题——1有详细描述如何解决问题的,可能问题出现自我解决问题的方法) 但是悲剧的是: 在模拟器里跑不成,问题如下 void CbmpView::OnDraw(CDC* ...… 查看全部问答> |
|
由于七月外地的比赛,拖了好多天,一直到7月底才开始动工,这个初步情况如下: 1.EEWORLD购买ADI所有的芯片已经到位 2.所有芯片资料都已经阅读和理解完毕 3.所有原理图和PCB已经设计完成并已经制板,开始进入了焊接 ...… 查看全部问答> |
|
我想向大家请教一下,51单片机的数据传输方式是由输入设备先经过存储器再到数据处理器,还是反过来呢? 如果是前一种的话,数据处理之后就直接存储还是先到地主找数据再返回到存储器,由存储器向输出设备?请各位大虾多多打救啊。… 查看全部问答> |
|
昨天申请的样片到了,今天淘宝的最小系统也到了,一个人在实验室焊贴片 这是我第一次焊贴片,焊了4块,有两块焊的很完美,还有两块修修补补也成功了 两个块MSP430F149,两块MSP430F168,引脚是兼容的,用的一种板子 实验室有热风台,开始以为 ...… 查看全部问答> |
|
fatutil.dll 这个看有些人实现多fat 分区会用到这个dll ,在SLC nandflash 上,我现在要做这个功能,但是行不通,这个fatutil.dll 什么用的?… 查看全部问答> |
|
移动电源电路设计: 输入1:3.3到4.2V,输出5V,这个是电池逆变电路 输入2:4.5V到5.5V,输出3.7V,这个是电池充电电路 设计步骤: 第一步,选择两个输入和两个输出,添加电源和负载 第二步,编辑优化设计参数 第三步,检视和编辑项目设计 ...… 查看全部问答> |




