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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版