你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f334更新PWM频率时的问题

[复制链接]
时间的灰 提问时间:2018-5-21 15:53 /
本帖最后由 时间的灰 于 2018-5-21 16:23 编辑

利用stm32f334产生3路互补的PWM信号,频率为1MHz,现在需要切换到400kHz,但是在切换的过程中,出现一段约为5us的高电平,如图所示,请问如何消除。

521--00000.jpg

评分

参与人数 1 ST金币 -1 收起 理由
zero99 -1 标题写的太随意了,改下

查看全部评分

收藏 评论16 发布时间:2018-5-21 15:53

举报

16个回答
budaoweng 回答时间:2018-5-22 13:21:40
时间的灰 发表于 2018-5-22 09:37
能具体针对这个问题分析一下吗?

这个问题就是在更改寄存器值的时候,没有完全同步更新。因为单片机是串行运行代码的,寄存器的值也是一个一个更新的。所以,在寄存器的值变化非常大的时候就会出现断续的问题。比如,你的频率从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就恢复正常了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

budaoweng 回答时间:2018-5-23 08:56:48
时间的灰 发表于 2018-5-22 15:09
谢谢这么详细的回答,有一点我还不明白,因为我使能了预装载功能,按理说应该是同时刻更新的呀。 ...

更新触发源没设置好。比如TIMC和TIMD的更新触发源都设置为主定时器更新(MSTU: Master Timer update)。然后主定时器的更新可以设置成软件更新(MSWU: Master Timer Software update)也可以设置成主定时器周期完成时更新(MREPU: Master Timer Repetition update)。我劝你多看看手册,不要着急。我当时也是整了10来天才搞明白的。
时间的灰 回答时间:2018-5-22 15:09:30
budaoweng 发表于 2018-5-22 13:21
这个问题就是在更改寄存器值的时候,没有完全同步更新。因为单片机是串行运行代码的,寄存器的值也是一个 ...

谢谢这么详细的回答,有一点我还不明白,因为我使能了预装载功能,按理说应该是同时刻更新的呀。
疯de_恒 回答时间:2018-5-21 16:03:24
切换完之后立即给一个更新事件,重新开始计数应该可以解决。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

时间的灰 回答时间:2018-5-21 16:07:53
す疯Ⅱ恒す 发表于 2018-5-21 16:03
切换完之后立即给一个更新事件,重新开始计数应该可以解决。

切换过程是在更新事件中做的,请问能够详细说一下吗
疯de_恒 回答时间:2018-5-21 16:25:26
时间的灰 发表于 2018-5-21 16:07
切换过程是在更新事件中做的,请问能够详细说一下吗

应该可以任意点切换频率,设置好新的重装载值与比较值,设置UG位,直接触发更新,用新的参数工作。
wenyangzeng 回答时间:2018-5-21 16:51:38
使用TIMx_ARR自动重装载寄存器来更新数据。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2018-5-21 17:55:12
的确是两个TImer事件中断的问题。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2018-5-21 17:55:16
的确是两个TImer事件中断的问题。
时间的灰 回答时间:2018-5-21 17:56:01
す疯Ⅱ恒す 发表于 2018-5-21 16:25
应该可以任意点切换频率,设置好新的重装载值与比较值,设置UG位,直接触发更新,用新的参数工作。 ...

你的意思是disable掉预装载功能吗?
时间的灰 回答时间:2018-5-21 18:00:37
wolfgang2015 发表于 2018-5-21 17:55
的确是两个TImer事件中断的问题。

什么意思呢,能详细说明吗?
feixiang20 回答时间:2018-5-22 00:38:07
以前似乎看到有人说端口产生高电平时间长短决定于你写的程序,你看看能不能修改

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

budaoweng 回答时间:2018-5-22 08:53:11
以TIMC为例子,控制寄存器TIMCCR=0X0904000A;主定时器MCR=0X2005000A;剩下的对照手册慢慢体会去吧,想弄懂HRTIME就别着急。反复看手册。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

时间的灰 回答时间:2018-5-22 09:37:02
budaoweng 发表于 2018-5-22 08:53
以TIMC为例子,控制寄存器TIMCCR=0X0904000A;主定时器MCR=0X2005000A;剩下的对照手册慢慢体会去吧,想弄懂H ...

能具体针对这个问题分析一下吗?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版