4735|11

137

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32的PWM频率达到500KHZ后,能否做到1KHZ的增减? [复制链接]

 

 



STM32的PWM频率达到500KHZ后,能否做到1KHZ的增减?


1、当我设置为500KHZ的频率时,用示波器可以捕捉到500KHZ的波形。当我想生产501KHZ时,示波器没有变化,502KHZ,没有变化,503KHZ,示波器任然显示500KHZ。
     当增加到504KHZ时,示波器可以捕捉,显示 504KHZ。 一直往上面加,基本是过4KHZ时才跳动一次。  我用3个示波器都测试过,结果都一样。
     也用了硬汉、原子的PWM产生的BSP文件里面的函数,结果也一样。

     各位大侠,能知道这是怎么一回事吗?

    芯片用外部晶振8MHZ,倍频到72MHZ的系统时钟。

2、 如果用STM32F407VE系列,系统时钟168MHZ,能否做到在500KHZ到600KHZ,1KHZ的调整了?
    目前手上没有板子,不好验证。

求各位指点。

                      目的就是想PWM频率达到500KHZ后,能够做到1KHZ的增减。
此帖出自stm32/stm8论坛

最新回复

你私了我吧   详情 回复 发表于 2020-9-15 10:39
点赞 关注
 

回复
举报

1366

帖子

6

TA的资源

版主

沙发
 
使用输出比较翻转模式即可改变频率,通过改变ccr寄存器即可。改变频率可以通过dma传输
此帖出自stm32/stm8论坛
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 

你可以算一下,f4定时器1和8时钟最大168M,500K的话周期回0值为168*2=336,168M/336=500K,168M/335=501.429K,168M/334=502.994...

好像不行.

此帖出自stm32/stm8论坛
 
 

回复

4005

帖子

0

TA的资源

版主

4
 

额,72M的103更没戏了

此帖出自stm32/stm8论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

5
 

不过还有个办法就是用系统时钟往上凑,pwm会抖动效果肯定不好

此帖出自stm32/stm8论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

6
 
楼主你输出500K的PWM有指定脉冲个数的么?
此帖出自stm32/stm8论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

7
 
huo_hu 发表于 2019-12-6 18:54 你可以算一下,f4定时器1和8时钟最大168M,500K的话周期回0值为168*2=336,168M/336=500K,168M/335=501.429K,1 ...

请教版主,我用STM32F103VCT6的TIM+DMA方式发PWM,DMA改变TIM->CCRx来改变计数周期,DMA长度减少到0进中断清空TIM->CCRx,停止TIM发送脉冲。我因为要在1ms内去输出脉冲,打个比方,发10个脉冲的话,我需要将PSC设置为100-1,arr是72-1,也就是输出的频率是10KHz。这个我在发PWM前会调用自带的函数修改。然后当我需要发送500个脉冲的时候,就需要500KHz,但我接收的脉冲数却是501个,往后的脉冲数越高,多出来的脉冲数也就越多。想问问是怎么回事?我换成407VET6之后,500个脉冲正常了,发1000个就会多1个。我怀疑是性能引起的问题,导致DMA进中断里来不及关TIM导致多产生了脉冲。但因为用DMA的原因,我没法知道,如何验证这个可能?如果不是这个可能,那么,该是怎样的问题?

此帖出自stm32/stm8论坛

点评

你说到的问题我感觉是中断响应的滞后性造成的,高频率时中断还没来得及进服务程序,dma已经把下一个数据装完了. 建议你这样做,开一个数组存放占空比通道值,启动脉冲发送时先设置好arr周期;然后设置好需要发送的脉冲  详情 回复 发表于 2020-9-14 13:07
 
 
 

回复

4005

帖子

0

TA的资源

版主

8
 
本帖最后由 huo_hu 于 2020-9-14 13:17 编辑
ckjjjj 发表于 2020-9-14 09:46 请教版主,我用STM32F103VCT6的TIM+DMA方式发PWM,DMA改变TIM->CCRx来改变计数周期,DMA长度减少到0进 ...

你说到的问题我感觉是中断响应的滞后性造成的,高频率时中断还没来得及进服务程序,dma已经把下一个数据装完了.

建议你这样做,开一个数组存放占空比通道值,启动脉冲发送时先设置好arr周期;然后设置好需要发送的脉冲量为dma传送的数据量,最后一个数据作为收尾通道占空比值和你的末态状态一致,比如通道装入0值为常态低电平末尾再放一个0,实际dma传送数据量=脉冲数+1;然后启动一轮dma就行了.

这样不需要定时器溢出中断,只要在启动时先判断dma是否已经完成就可以开始下一轮脉冲发送了,dma完成中断也可以不开.

几个注意的地方,如果设置频繁有波形抖动,最好开启arr和通道的预装载,开启预装载后会有一个周期滞后输出.

如果需要发送的脉冲数过多,消耗内存太大,可以考虑dma的循环方式配合dma完成中断.

如果占空比精度能满足要求的话103肯定能做的来,尽量使用比较大范围的arr值比较好。

 

此帖出自stm32/stm8论坛

赞赏

1

查看全部赞赏

 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

9
 

STM32F103通过TIM+DMA发送指定个数脉冲,数量会多

版主,方便看看我早上发的一个帖子里面,有程序在那边。你说的提前开一个数组存通道值的方法,我在网上也看到过。因为我是控制电机运动不是按照指定脉冲数来的,而是随机的。所以考虑到这点,就不合适这样子用了。

此帖出自stm32/stm8论坛

点评

那就是每溢出中断处理  详情 回复 发表于 2020-9-14 14:27
 
 
 

回复

4005

帖子

0

TA的资源

版主

10
 
本帖最后由 huo_hu 于 2020-9-14 14:34 编辑
ckjjjj 发表于 2020-9-14 13:37 STM32F103通过TIM+DMA发送指定个数脉冲,数量会多 版主,方便看看我早上发的一个帖子里面,有程序在那边 ...

那就是每溢出中断处理,用不着dma

此帖出自stm32/stm8论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

11
 
huo_hu 发表于 2020-9-14 14:27 ckjjjj 发表于 2020-9-14 13:37 STM32F103通过TIM+DMA发送指定个数脉冲,数量会多 版主,方便看看我早上 ...

你是说我那个?没理解你这话的意思

此帖出自stm32/stm8论坛

点评

你私了我吧  详情 回复 发表于 2020-9-15 10:39
 
 
 

回复

4005

帖子

0

TA的资源

版主

12
 
ckjjjj 发表于 2020-9-14 14:44 你是说我那个?没理解你这话的意思

你私了我吧

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表