I do the motor control In the Fixed-Point MCU MC56F84766, I have some questions about parameter scaling:
for example,when we do PID control,
then, we discrete it,
The discrete time domain representation of the recurrent PI algorithm scaled into
the fractional range as
next,
where f16 is a fractional number which must be within the fractional range
<-1, 0.9999> ,if f16CC1, f16CC2, and f16CC3 is too small or more than 1, we must by scaling shift , and my question is that after we scaled , how the final result do?
for example 0.5 = 0.2+2*0.3-0.3,and we scaled,
0.5 = 0.2 + 0.5*0.3*2^2 -0.3, we use the math libaray, how do we get the final result? I guess if by Q format transform?
could you give me some reference doc or source code?
Hi, Yuyi,
很抱歉, 我们只提供电机控制的库函数,不提供源码。
为了不损失计算精度,我认为PID代码先算底数相乘,然后再做移位运算,然后再将PID各分量相加。PID输出有限位参数: f16UpperLimit
,f16LowerLimit,可以确保PID输出在这个范围内。
你可以下载一个电机控制的实例来研究PID函数
BR
XiangJun Rong
Hi, YuYi,
Regarding your question for parameter scaling, from the formula:
如果多项式的每一项都除以Umax, 我们就可以得到下边这个式子:
其中f16UK 就是u(k)/Umax.
定标的原则是整个公式两边永远是相等的。
BR
XiangJun Rong
Dear xiangjun
是的,f16UK就是u(k)/Umax,但是等式的另一边,f16CC1,f16CC2,f16CC3这些系数,在实际中很有可能大于1(ps,我们在实际项目中也遇到了大于1),譬如说f16CC1*F16Error假设为 4*0.3,因为4大于1了,需要变成0.5*0.3*2^2,而0.5*0.3我们可以通过函数库,mult(FRAC16(0.3),FRAC16(0.5)),由于飞思卡尔封装了相关代码,接下来的处理是通过移位吗?假如是通过移位,譬如说MLIB_ShL16(输入是0-1,输出也是0-1),不会产生溢出吗(最终结果是1.2)?
Hi, YuYi
PID控制有好几个版本, 你能把介绍这个函数的文档贴过来吗?我记得比列和积分的每个参数有两部分组成, 一部分是参数,一部分是scale即移位,这个移位可以是正数也可以是负数,即可以左移也可以右移。
BR
XiangJunRong
不好意思,xiangjun,图片太多好像上传不成功,具体的是56800Ex_FSLESL_r3.0中的56800Ex_GFLIB文件
确实要通过移位,我现在的疑惑点是移位后,飞思卡尔是怎么完成这个计算过程的。例如4*0.3移位后,飞思卡尔怎么处理接下来的运算,可以提供给我部分参考代码吗?不胜感激