本帖最后由 MissFortune 于 2019-4-26 16:35 编辑
1.谢谢您的回复;
2.我对您所述的滤波器不敢苟同
3.C语言代码如下:
PID.result += PID.p * (PID.err_current - PID.err_last)////PID.p = 45
+ PID.i * PID.err_current////PID.i = 0.35
+ PID.d * (PID.err_current - 2*PID.err_last + PID.err_previous)// Pid.d = 0;
;
上述代码中"+="左边的运算结果如下,不放假设为PID_Increment = KP + KI + KD ;
计算的PID_Increment ,就是当前计算出来PWM占空比增量(参考图中红色方框中的公式),这一步时没有问题的吧
当前的PWM占空比增量PID_Increment 加上上一次输出的PWM占空比的值PID.result(k-1),就可以得到当前计算出的PWM占空比 PID.result(k): PID.result(k) = PID.result(k-1) + PID_Increment ;
这部分,您参考第二张图,来自《先进PID控制MATLAB仿真》-刘金琨版,以及下面的链接也可以参考;
https://www.cnblogs.com/CYP01/p/3575288.html
4. 如果计算出来的PWM占空比,就是您说的PID.out,也就是我这里的PID_Increment ,那我可以明确的说,这个根本不行,我以前在电机转速控制时也这样用过,根本不能控制。我在各类教材上、博客上,论文上、都没有见过把增量当作记过直接输出的。
不知是否是我们讨论问题的理解有偏差,欢迎讨论,谢谢指正。
|
@MissFortune :没看出哪里限制了。图上看到100%占空比。 你的PWM硬件是多少位的?变量result是多少位?你的所以增量式滤波器,累加几次后溢出怎么处理? 根本就没处理?
@xch 没有溢出,占空比就是在-100%到+100%之间,只是在输出的时候,将占空比赋值给一个变量,对这个输出变量做了±92%的限制。 谢谢指正!
计算溢出了?实际占空比并非你画的。