fixed point parameter scaling

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

fixed point parameter scaling

1,075 Views
liyuyi5
Contributor II

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,

pastedImage_1.png

then, we discrete it,

pastedImage_2.png

The discrete time domain representation of the recurrent PI algorithm scaled into
the fractional range as

pastedImage_3.png

next,

pastedImage_4.png

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?

5 Replies

941 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, Yuyi,

很抱歉, 我们只提供电机控制的库函数,不提供源码。

为了不损失计算精度,我认为PID代码先算底数相乘,然后再做移位运算,然后再将PID各分量相加。PID输出有限位参数: f16UpperLimit

,f16LowerLimit,可以确保PID输出在这个范围内。

你可以下载一个电机控制的实例来研究PID函数

https://www.nxp.com/products/processors-and-microcontrollers/additional-architectures/digital-signal... 

BR

XiangJun Rong

pastedImage_129.png

0 Kudos

941 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, YuYi,

Regarding your question for parameter scaling, from the formula:

pastedImage_2.png

如果多项式的每一项都除以Umax, 我们就可以得到下边这个式子:

pastedImage_3.png

其中f16UK 就是u(k)/Umax.

定标的原则是整个公式两边永远是相等的。

BR

XiangJun Rong

941 Views
liyuyi5
Contributor II

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)?

941 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi, YuYi

PID控制有好几个版本, 你能把介绍这个函数的文档贴过来吗?我记得比列和积分的每个参数有两部分组成, 一部分是参数,一部分是scale即移位,这个移位可以是正数也可以是负数,即可以左移也可以右移。

BR

XiangJunRong

941 Views
liyuyi5
Contributor II

不好意思,xiangjun,图片太多好像上传不成功,具体的是56800Ex_FSLESL_r3.0中的56800Ex_GFLIB文件

确实要通过移位,我现在的疑惑点是移位后,飞思卡尔是怎么完成这个计算过程的。例如4*0.3移位后,飞思卡尔怎么处理接下来的运算,可以提供给我部分参考代码吗?不胜感激