HC32F334如何用单次缓存解决LLC变频丢波连波问题?
HC32F334如何用单次缓存解决LLC变频丢波连波问题?控制器输出频率先缓存
假设你每次环路计算出一个新的目标频率 f_target,不要直接设置到 PWM,而是:
c
复制
编辑
static uint32_t f_current; // 当前PWM频率
static uint32_t f_target;// 控制器输出的新目标频率
static uint32_t f_step; // 每次调整的步进量
static uint8_tupdating;// 是否正在逐步更新
比如:
c
复制
编辑
void LLC_UpdateFrequency(uint32_t new_target)
{
f_target = new_target;
f_step = abs(f_target - f_current) / N_DIVISION; // N_DIVISION可设4~10,分成几步走
updating = 1; // 开启平滑更新
}
Step 2. 定时在 PWM 更新中间插值过渡
在你的 PWM 更新(比如同步到中断回调,或者每次换向前):
c
复制
编辑
void LLC_PWM_Update()
{
if (updating)
{
if (abs(f_current - f_target) <= f_step)
{
f_current = f_target;
updating = 0; // 更新完成
}
else
{
if (f_current < f_target)
f_current += f_step;
else
f_current -= f_step;
}
PWM_SetFrequency(f_current);
}
}
这样频率变化被“缓冲”了,避免了突然跳变。
f_step的计算最好保证至少为1,否则当频率差小于N_DIVISION时,可能步进为0,导致不更新。
HC32F334通过自研高精度PWM发波模块的单次缓存功能、硬件自动置位全局缓存完成标志位,可有效解决LLC变频应用中的丢波和连波问题 在三角波模式下,对单元1单次缓存触发位(OSTBTRU1位)写1后,在其后遇到的第一个零点缓存传送点发生一次缓存;或在锯齿波模式下,对OSTBTRU1位写1后,在其后遇到的第一个周期缓存传送点发生一次缓存。 缓存完成标志,单次缓存完成以后,硬件会自动将全局缓存完成标志位(GBSFLR)置1。完成缓存以后,不会再发生缓存,除非软件重新触发单次缓存。 寄存器更新,在更新影子寄存器之前,先判断全局缓存完成标志。如果为1,则表示前面的比较值和周期值得到有效更新,便可以更新新的比较值和周期值,更新完相关影子寄存器后再触发单次缓存。如果全局缓存完成标志不为1,则表示前续比较值和周期值未得到有效更新,需等下一控制周期再判断执行,以免覆盖。 HC32F334的单次缓存和硬件自动置位全局缓存完成标志位功能确保了相关寄存器得到同步更新与避免覆盖,从而有效解决了丢波问题。这一机制保证了在控制频率和开关频率不同步的情况下,寄存器能够正确更新,避免了波形异常。 HC32F334还设计了强制关断功能(PHSFOCA/B强制低使能功能)。 在锯齿波模式下或三角波模式下,当强制低使能有效(即PHSFORCA/B位为1),计数器在单元1单次缓存传送点检测到当前计数值大于等于比较值寄存器(HRGCMCR/HRGCMDR)设定的值时,将输出PWMA/PWMB强制设置为低。 当强制低使能无效时(即PHSFORCA/B位为0),对输出无影响。这一功能有效解决了在变频移相过程中可能出现的连波问题。 丢波?你用DMA试试呢? 这个没研究过LLC,一般来说是可以做缓存的吧
通过缓存目标频率并分步进调整确实能有效减少丢波连波现象。 增强型频率平滑过渡算法 HC32F334 的高级定时器具有影子寄存器和同步更新功能,可利用这些特性实现无干扰的频率切换 测试频率变化的极限情况,如从最低到最高频率切换,观察是否有丢波现象
页:
[1]