将4kHz的浮点计算代码优化成了12kHz的定点计算代码,运行周期在80us以内,能够稳定运行。定点化的基本思路是将浮点数先放大一定的倍乘系数,并转换成32位整型的定点数,进行定点乘除法,再将结果还原回去,从而大大节省计算时间。倍乘系数一般取2的次方数,这样在还原的时候只需使用右移位即可代替除法操作进行倍除,从而节省一定的时间。定点化的难点在于,你不知道哪个变量该放大多少倍,太小会损失计算精度,太大会导致数据溢出,一般需要进行事先合理的评估以及实际上电试验。函数的定点化最好按先后顺序来,每转换完一步就验证一遍,确保万无一失。一般程序无法正常运行基本都是数据溢出导致的,这时需将倍乘系数调小一点。一些常量的计算不必放在循环里浪费计算资源,可以在初始化过程就先计算出来。另外,一些系数可以结合在一起,如ADC采样的电压需要乘以一个电流系数,这个电流系数就可以和PID参数合并(相乘),同样在初始化时就可以计算确定下来,省去多次乘法运算的步骤。定点化后,PID的控制量的目标输入量也需要根据你的设计进行调整,扩大相应的倍数。SVPWM的输出也可以直接设计成PWM比较值的范围,而不是占空比的形式。
2023-08-22 21:23:22
16.55MB
stm32
1