前段时间提到中频电除尘器控制器,我仔细分析了单相和三相SPWM驱动时间,完成了STM32F103处理器上SPWM代码的编写,并用示波器测试了信号和波形,逻辑分析仪。
STM32F103的TIMER1和TIMER2支持互补的PWM输出,我选择TIMER1的CH1、CH2、CH3用于A、B、C三相驱动;
处理器的时钟频率为72MHz,通过以下代码将互补PWM输出的死区时间设置为4us;
SPWM_PWM_TIMER->BDTR = 0x80C4。
生成半周期正弦数据表,根据正弦信号的频率和PWM频率的值,计算出正弦信号周期需要划分的区间,即计算每个正弦信号数据的平均值,并根据最大正弦数据和PWM信号的最大占空比值计算每个区间的占空比值;
当SPWM的频率为10kHz,正弦信号的频率为50Hz时,输出的SPWM信号将经过两级1kΩ电阻+0.1uF电容的低通滤波电阻,可以看到完美的正弦信号。
一开始我想通过DMA自动将SPWM计算出的占空比值设置到TIMER的CCR寄存器中,实现半完成中断和完成中断时DMA缓存的更新,但是因为在半完成中断和完成中断中频率也可能发生变化操作,会导致DMA中数据数量的动态变化,使得SPWM输出的正弦信号不连贯,产生高频成分。
最后,通过TIMER的更新中断,在PWM信号的每个周期更新三相CCR寄存器的值。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3