在电机控制应用领域,常用的DSP芯片,会有影子寄存器,一般设置为映射模式,即常规的TI的那一套,每次写入PWM寄存器的比较值,会延时一个开关周期周期生效。
在ARM中,这个功能叫做预装载preload,代码如下:
领芯微预装载使能代码
按照底层的配置,假设在三角波计算器的底点触发ADC采样,即 CTR = ZERO 的时刻,然后每次三角波计数器的底点更新PWM比较值。
那么说明FOC计算完毕后,从采样触发计算到占空比更新后的生效,延时了一个开关周期Ts。
如果在 CTR = ZERO 的时刻触发采样,半个开关周期完成了FOC计算,并且更新了PWM占空比比较值,设置在三角波计数器的顶点生效,那么占空比生效延时了Ts/2,即半个开关周期。
生效延时和配置,计算时间相关
如果在 CTR = ZERO 的时刻触发采样,超过半个周期完成了FOC计算,那么要等到下次 CTR = PRD 的时刻更新后的占空比才会生效。这个延时是1.5Ts。
延时周期数
所以说,一般常规的应用,是一个开关周期内完成FOC计算,并且延时1个开关周期让更新的比较值生效。
因为离散造成的延时,导致了估算存在较大误差。因为估算的角度是根据采样时刻的电流,电压计算的,对应是采样时刻的角度。
根据这个角度计算的电压,延时了整整 Ts 才生效,在这个延时的过程中,实际电机已经走过了一定的角度,这个角度增量导致了电压最后生效的时候,和生效时刻电机的真实角度不对应的。
这个角度并不是算法或者参数不准导致,完全是因为离散导致的。并且这个误差对整体影响的影响较大,尤其是低载波比,高速下的时候。
实际的补偿措施,也比较容易,就是对于 Ud 和 Uq 的反变换,考虑到根据当前角度计算的电压要延时一个 Ts 才起作用。那么就对这个角度补偿 Ts 过程中的角度增量,假设速度不变,用速度 We*Ts 得到 Δθ ,补偿到估算角度就行了。
有的厂家补偿就复杂了,会直接通过编码器和估算结果对比,直接把误差写入flash,实际运行的时候查表去解决问题。
某川的代码是有对角度作离散补偿的。
当然,如果是 FPGA 的硬件电流环,占空比算完即时生效,这个补偿就没有必要了。
相关文章