【发布时间】:2016-02-20 16:41:27
【问题描述】:
我正在为电机速度控制实施 PID 控制。在规范中,我被告知使用以下 D 部分等式来实现过滤技术。我完成了实施 PI 控制,它对我来说非常好。
到目前为止,我所理解的是,s 代表"dx/dt",通常对应于错误的变化率,但在这里我可以将它与反馈的变化率联系起来。 Td/N 用于限制全增益输出(希望我做对了)。现在用 C 代码表示这一点,我尝试了以下方式。
s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
s = s*1000/sampleTime; //1000 is multiplied because sampleTime is in milliseconds
D = (Td*s)/(1+(s*Td/N));
D = D*KP; //Kp is multiplied as per the standard pid equation.
Old_Feedback = CurrentFeedback();
PID = P+I-D;
加上 D 的结果不是我所预测的。我只想知道..我是否正确实现了 D 部分方程?我在理解微分的基本数学方面是否犯了错误?
注意:我不能随意更改重新计算 kp、ti、td,因为它直接来自 VFD。非常感谢提前。抱歉英语不好。
【问题讨论】:
-
变化百分比不应该是
(current-old)/old吗?为什么分母中有max? -
好吧,我放了最大值,因为反馈的最大可能变化是它自己的 mx 反馈......
-
我怀疑整数除法。
N与s*Td相比有多大?如果它更大,你的下限被四舍五入为 1。如果N小于Td,整个公式被截断为 0。 -
N 通常为 5,但在系统中有一个限制,它不会超过 10
-
@AShelly 我怀疑整数值被缩放 x100 以获得 2 个小数点的精度?像这样的缩放通常用于整数计算,例如在控制回路中。
标签: c pid derivative