本帖最后由 时间的灰 于 2018-5-21 16:23 编辑 利用stm32f334产生3路互补的PWM信号,频率为1MHz,现在需要切换到400kHz,但是在切换的过程中,出现一段约为5us的高电平,如图所示,请问如何消除。
这个问题就是在更改寄存器值的时候,没有完全同步更新。因为单片机是串行运行代码的,寄存器的值也是一个一个更新的。所以,在寄存器的值变化非常大的时候就会出现断续的问题。比如,你的频率从400k变到1M,那么周期寄存器,各个比较器都会有一个大幅度变化。比方说,TIMC的CLOCK为1.052Ghz,频率是25000,那么说周期寄存器为42080,占空比为50%的话比较器的值为21040。这时就是输出占空比为50%,频率为25K的PWM,如果此时你更新频率,必须把周期寄存器和比较器同时更新。但实际的情况是,这两个寄存器并不能同时更新,如果你想把PWM变为频率100K占空比为50%,那么周期寄存器的值1052000000/100000=10520,比较寄存器为10520/2=5260;注意,关键问题来了。如果你此时先对周期寄存器更新,在更新完成的一瞬间,周期寄存器的值为10520,比较寄存器为21040。比较寄存器比周期寄存器都大,所以就出现了你看到的问题。此时如果你把比较寄存器更新为5260,PWM就恢复正常了。
评分
查看全部评分
更新触发源没设置好。比如TIMC和TIMD的更新触发源都设置为主定时器更新(MSTU: Master Timer update)。然后主定时器的更新可以设置成软件更新(MSWU: Master Timer Software update)也可以设置成主定时器周期完成时更新(MREPU: Master Timer Repetition update)。我劝你多看看手册,不要着急。我当时也是整了10来天才搞明白的。
谢谢这么详细的回答,有一点我还不明白,因为我使能了预装载功能,按理说应该是同时刻更新的呀。
评分
查看全部评分
切换过程是在更新事件中做的,请问能够详细说一下吗
应该可以任意点切换频率,设置好新的重装载值与比较值,设置UG位,直接触发更新,用新的参数工作。
评分
查看全部评分
评分
查看全部评分
你的意思是disable掉预装载功能吗?
什么意思呢,能详细说明吗?
评分
查看全部评分
评分
查看全部评分