0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个通道如何捕获PWM的频率和占空比?

撞上电子 2023-12-30 08:00 次阅读

一,前言

正常情况是双通道捕获PWM波,这种方法简单且准确,但是它占用的资源太多了,因为它使用定时器的两个通道,且这两个通道映射在一个通道上,同时配置一路捕获为触发定时器复位,所以只能使用2个通道来捕获。虽然也实现了捕获 PWM 的功能,但是代价也太大了,且很难同时捕获多个 PWM ,那有没有更好的方法呢?本文介绍了另一种捕获 PWM 的方法,只使用任何一路定时器的输入捕获,就可以测 PWM 的频率和占空比。


二、捕获PWM原理

8045ae62-a6a6-11ee-9ee2-92fbcf53809c.png

双通道就是上图的原理,利用两路输入捕获上升沿和下降沿,就能很简单的测出 PWM 频率和占空比。

8049acec-a6a6-11ee-9ee2-92fbcf53809c.png

分析上图,最开始捕获上升沿,在上升沿到来后开始捕获,然后转为捕获下降沿,捕获接下来的两个下降沿,依据两个下降沿之间计数的差值即可计算出PWM的总脉宽,从而计算出PWM频率,然后由第一个下降沿的计数值可以计算得出PWM高电平的脉宽,即可计算出PWM的占空比。有的人可能会问,那我为什么不可以以上升沿开始捕获,然后连续捕获下降沿和下一个上升沿呢?理论上这样是绝对没问题的,但是你想过没有,既然可以这样,那么 《STM32参考手册》上为什么要用两路输入捕获来测PWM?问题就在于 PWM的占空比以及频率。当PWM频率很快的时候,上升沿和下降沿切换的速度很快,而用一路输入捕获在很短的时间内切换捕获上升沿以及下降沿,很可能导致上升沿或者下降沿没捕捉到的情况。就比如PWM高电平的时间很短,你刚捕获到上升沿,然后切换捕捉下降沿,结果PWM的下降沿已经过去了。使用我的方法测PWM波的时候,从图中可以看到,至少两个下降沿的捕获是不会有问题的,也就是说,PWM频率的测量是不会出错的。而在从捕获上升沿到切换捕获下降沿的时候,上述捕获不到的问题依然会发生,那为什么我的方法就可以而其他方法就不行呢。原因就在于,上面已经提到过,我的方法PWM脉宽测量是没问题的,那么我就可以比较第一个下降沿时的计数值CNT1和CNT2(PWM脉宽的计数值),如果CNT1大,那表示遗漏了一个下降沿,那么高电平的计数值为CNT1-CNT2,反之高电平的计数值为CNT1。

805262ce-a6a6-11ee-9ee2-92fbcf53809c.png

一路输入捕获的配置比两路的配置简单,就是普通的输入捕获。具体的代码这里就不贴出来了,可以去参考我上一篇文章。这里把关键的捕获中断服务函数贴出来:代码如下:

u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态static u16 TIM5CH1_CNTTIME=0;u32 TIM5CH1_CAPTURE_VAL=0; //输入捕获值u32 TIM5CH1_CAPTURE_HIGHVAL=0; //定时器5中断服务程序 void TIM5_IRQHandler(void){ if(!(TIM5CH1_CAPTURE_STA&0X80))//还未成功捕获{if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET){if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了{TIM5CH1_CAPTURE_VAL+=65536;}TIM_ClearITPendingBit(TIM5, TIM_IT_Update); //清除中断标志位}if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕获1发生捕获事件{if(TIM5CH1_CAPTURE_STA&0x20) //捕获到第二个下降沿{TIM5CH1_CAPTURE_STA|=0X80;TIM5CH1_CAPTURE_VAL+=TIM5->CCR1-TIM5CH1_CNTTIME-TIM5CH1_CAPTURE_HIGHVAL;if(TIM5CH1_CAPTURE_HIGHVAL>TIM5CH1_CAPTURE_VAL)TIM5CH1_CAPTURE_HIGHVAL-=TIM5CH1_CAPTURE_VAL;else if(TIM5CH1_CAPTURE_HIGHVAL==TIM5CH1_CAPTURE_VAL)TIM5CH1_CAPTURE_HIGHVAL=0;TIM5->CCER &= ~(1<<1); //CC1P=0 设置为上升沿捕获}else if(TIM5CH1_CAPTURE_STA&0X40) //捕获到第一个下降沿{TIM5CH1_CAPTURE_STA|=0X20; //标记成功捕获到一次下降沿TIM5CH1_CAPTURE_HIGHVAL=TIM5CH1_CAPTURE_VAL+TIM5->CCR1-TIM5CH1_CNTTIME;}else //还未开始,第一次捕获上升沿{TIM5CH1_CNTTIME=TIM5->CCR1;TIM5CH1_CAPTURE_VAL=0;TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿TIM5->CCER |= (1<<1); //CC1P=1 设置为下降沿捕获}TIM5->SR&=0xfffd;// TIM_ClearITPendingBit(TIM5, TIM_IT_CC1); //清除中断标志位} }elseTIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209910
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112040
  • 双通道
    +关注

    关注

    5

    文章

    946

    浏览量

    33547
收藏 人收藏

    评论

    相关推荐

    使用同一个定时器但是使用的通道不同功能是否可行?

    请教下使用同一个定时器但是使用的通道不同功能是否可行 如使用定时器3,通道作为pwm输出,
    发表于 04-22 08:20

    文带你了解PWM原理、频率占空比

    :T=1/f周期=1/频率50Hz = 20ms 周期如果频率为50Hz ,也就是说周期
    发表于 03-27 14:12

    在使用定时器捕获两路PWM频率时,中断函数应该如何配置呢?

    在使用定时器捕获两路PWM频率时,中断函数应该如何配置呢?? 我采用如下的方式去获取,但得到的PW
    发表于 03-22 06:39

    tc377调试pwm输入捕获,输入频率小于10hz时输入占空比就会跳变的原因?

    我在调试pwm输入捕获遇到问题,我用的是tc377的板件,当输入频率小于10hz时输入占空比
    发表于 03-05 06:39

    pwm占空比和电压的关系 pid输出和pwm占空比怎么联系

    PWM(脉宽调制)指的是通过改变周期内的高电平时长来调整信号的占空比占空比是指高电平时长与周期时长的比值,常用百分比来表示。PWM的主要应用是在调速控制、电源控制以及通信传输等领域。
    的头像 发表于 02-02 17:17 1639次阅读

    TLE9854单片机的MON引脚,可以捕获PWM,获取周期和占空比吗?

    我现在想捕获12V的PWM,MON引脚可以捕获PWM
    发表于 02-02 13:02

    pwm如何控制占空比和周期

    如果使用可编程PWM控制器,可以通过软件来控制占空比和周期。软件可以直接修改占空比寄存器的值,以控制高电平的持续时间,从而改变占空比。还可以修改周期寄存器的值,以改变整个
    的头像 发表于 01-17 15:00 1259次阅读

    M483的PWM互补模式,为什么修改频率时不是两通道同步修改?

    新唐M483的PWM互补模式,为什么修改频率时不是两通道同步修改 M480的PWM,很奇怪,理论上互补模式,只操作
    发表于 01-16 06:33

    pwm频率占空比的计算公式

    PWM(脉宽调制)是一种常用的控制技术,在电子系统中广泛应用。PWM频率占空比是其重要参数之一,对于设计和优化PWM控制系统非常重要。本
    的头像 发表于 12-28 11:40 5596次阅读

    如何使用AT32的TMR和DMA动态更新PWM占空比

    本示例代码基于 AT32F403A,展示了如何使用 AT32 的 TMR 和 DMA 动态更新 PWM 占空比。该示例使用 TMR4 的更新事件触发 DMA1 搬运数据至 TMR4 的通道 2 数据
    发表于 10-27 06:28

    输入捕获如何测量满占空比和零占空比

    输入捕获如何测量满占空比和零占空比
    发表于 09-26 08:11

    M483的PWM互补模式,为什么修改频率时刻不是两通道同步修改?

    新唐M483的PWM互补模式,为什么修改频率时刻不是两通道同步修改 M480的PWM,很奇怪,理论上互补模式,只操作
    发表于 08-25 08:17

    N76E003 PWM如何捕获占空比

    我在使用 n76e003做占空比捕获的时候,发现频率5K 占空比0.1%的时候 捕获会出错误。有没有大佬有成熟的
    发表于 06-26 06:25

    互联管理器配置pwm捕捉测量占空比频率,在配置IO时GPTMR_IN 和PWM_IN是否都可以作为pwm捕捉,测量占空比频率

    互联管理器配置pwm捕捉测量占空比频率,在配置IO时,GPTMR_IN 和PWM_IN是否都可以作为pwm捕捉,测量
    发表于 05-26 06:29

    一文了解PWM原理、频率占空比

    脉冲宽度调制(PWM),简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 **PWM频率:**是指1秒钟内信号从高电平到低电平再回到高电
    的头像 发表于 05-10 14:35 4635次阅读
    一文了解<b class='flag-5'>PWM</b>原理、<b class='flag-5'>频率</b>与<b class='flag-5'>占空比</b>