找回密码
 立即注册
查看: 186|回复: 6

请教布丁橘长,PWM测方波频率

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:738
  • 最近打卡:2026-07-03 10:10:54

26

主题

216

回帖

1536

积分

金牌会员

积分
1536
发表于 2026-4-1 21:31:54 | 显示全部楼层 |阅读模式
布丁橘长老师,按照你的STC32G的0-100集视频教程配套程序"第092-高级PWM定时器-输入捕获-触发模式-捕获一个周期-上升沿到上升沿-方波频率测量-MAX7219数码管",下载到屠龙刀板,程序运行正常,但是将频率降低到约350HZ以下,频率显示结果就不正常了,难道这个程序不能测低频率,还是我哪里没搞明白?特此请教布丁橘长老师,请解惑!谢谢!


原程序的设定:#define PWMB_PSC (12 - 1)                        // 12分频,时钟周期1us
                      #define PWMB_PERIOD_500        2000        // 周期2毫秒,500Hz
                     程序运行数码管显示500hz正常。                  
如果同样主频和分频情况下,作如下修改:

                     #define PWMB_PSC (12 - 1)                        // 12分频,时钟周期1us
                     #define PWMB_PERIOD_500         4000        // 周期4毫秒,250Hz

                   数码管显示为0001hz,不正常。经试验,只要PWMB_PERIOD_500的值超过2800就不正常了。不知我哪里没搞对,请老师及其它大佬解惑,谢谢!

视频配套例程20230509.zip

792.83 KB, 下载次数: 7

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-4-2 10:57:10 | 显示全部楼层
捕获脉宽时间=捕捉的时钟数/PWM时钟源, 比如 捕捉的时钟数 = 500, PWM时钟源 = 24MHz(1T), 脉宽 = 500/24MHz = 20.83us.
捕捉的时钟数范围:0~65535
如果需要捕获的脉宽超出时钟数计数范围,就会导致时钟数计数溢出,这种情况可通过PWMA_PSCRH/PWMA_PSCRL寄存器对PWM时钟进行分频
截图202604021056346861.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:738
  • 最近打卡:2026-07-03 10:10:54

26

主题

216

回帖

1536

积分

金牌会员

积分
1536
发表于 2026-4-2 13:54:18 | 显示全部楼层
乘风*** 发表于 2026-4-2 10:57
捕获脉宽时间=捕捉的时钟数/PWM时钟源, 比如 捕捉的时钟数 = 500, PWM时钟源 = 24MHz(1T), 脉宽 = 500/24MH ...

#define PWMB_PSC (12 - 1)                        // 12分频,时钟周期1us
#define PWMB_PERIOD_500         4000        // 周期4毫秒,250Hz

这个周期数也没有超过65536啊,是低频哟,是250HZ。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-4-3 18:03:57 | 显示全部楼层
用附件例子试试,PWMB_PERIOD改成4000也能捕获到正确的数值
捕获脉宽时间=捕捉的时钟数/PWM时钟源, 比如 捕捉的时钟数 = 24012, PWM时钟源 = 12MHz, 脉宽 = 24012/12MHz = 2.001ms.

截图202604031802308715.jpg
截图202604031803395276.jpg

高级PWMA-捕获模式测量脉冲周期.zip

17.31 KB, 下载次数: 9

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:738
  • 最近打卡:2026-07-03 10:10:54

26

主题

216

回帖

1536

积分

金牌会员

积分
1536
发表于 2026-4-5 10:42:07 | 显示全部楼层
乘风*** 发表于 2026-4-3 18:03
用附件例子试试,PWMB_PERIOD改成4000也能捕获到正确的数值
捕获脉宽时间=捕捉的时钟数/PWM时钟源, 比如 捕 ...

乘风**老师,你的程序确实拓展了修改分频和周期的数字范围(布丁老师的程序周期限定得更小,当然肯定是我没有理解程序的意义)。我的理解是:分频值不能超过65536,周期值不能超过65536,对吧?因此,理论上我可以:#define PWMB_PSC        (12 - 1)                        // 12分频,时钟周期1us
                                                     #define PWMB_PERIOD     65000                        // 周期65毫秒,15.38Hz
可是打印出来的值不对。经试验,分频系数和周期值是关联的,它们两个的乘积不能超过65536!即PSC*PERIOD<65536,这个非常好理解了。但是布丁老师的程序在同样12分频的情况下,周期值只能小于2800,而乘风老师的在12分频的情况下,周期值可以扩大到5400(5400*12<65536)。还有同样的这个程序无论你这么改分频系数和周期值,在示波器上都能正确读取频率值,可以准确显示1hz。也就是说,同样的程序示波器可以正确显示1hz的频率和周期值,万用表频率档也能测出,而用数码管和printf输出就不行呢?下图是用乘风老师程序周期值在5500下的printf输出。是不是程序哪个地方能优化一下,让数码管和printf输出也能显示低到1HZ的频率检测。(难道这种数码管和printf的PWM测频率是因为计数限制只能测到200HZ以上的?200赫兹以下的该程序无法测量?如果是我的问题请两位老师和其他大佬指出!)

截图202604051625538206.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:712
  • 最近打卡:2026-07-03 09:07:06
已绑定手机

50

主题

2691

回帖

9338

积分

论坛元老

积分
9338
发表于 2026-4-7 10:16:02 | 显示全部楼层
Tui*** 发表于 2026-4-5 10:42
乘风**老师,你的程序确实拓展了修改分频和周期的数字范围(布丁老师的程序周期限定得更小,当然肯定是我没 ...

前面有提过,如果需要捕获的脉宽超出时钟数计数范围,就会导致时钟数计数溢出,这种情况可通过PWMA_PSCRH/PWMA_PSCRL寄存器对PWM时钟进行分频
例子只对产生信号的PWMB进行分频,没有对捕获信号的PWMA进行分频,这样的话,PWMB产生信号频率降低时,PWMA捕获时钟数就可能超过65535而产生溢出。只要将PWMA时钟也进行分频即可。

高级PWMA-捕获模式测量脉冲周期-1Hz.zip

17.3 KB, 下载次数: 8

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:738
  • 最近打卡:2026-07-03 10:10:54

26

主题

216

回帖

1536

积分

金牌会员

积分
1536
发表于 2026-4-7 10:46:52 | 显示全部楼层
乘风*** 发表于 2026-4-7 10:16
前面有提过,如果需要捕获的脉宽超出时钟数计数范围,就会导致时钟数计数溢出,这种情况可通过PWMA_PSCRH/ ...

谢谢乘风老师,继续加强学习
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 12:30 , Processed in 0.083379 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表