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
    +关注

    关注

    116

    文章

    5847

    浏览量

    223866
  • 定时器
    +关注

    关注

    23

    文章

    3361

    浏览量

    121765
  • 双通道
    +关注

    关注

    5

    文章

    1206

    浏览量

    35088
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ‌TLC59116 16通道恒流LED驱动芯片技术文档总结

    TLC59116是 I^2^C 总线控制 16 通道 LED 驱动器 针对红/绿/蓝/琥珀 (RGBA) 混色和背光应用进行了优化。每个 LED 输出有自己的 8 位分辨率(256 步)固定
    的头像 发表于 09-04 09:34 607次阅读
    ‌TLC59116 16<b class='flag-5'>通道</b>恒流LED驱动芯片技术文档总结

    如何捕获PWM信号?

    我们现在有需求,DSP在正常工作时会输出1khz的PWM信号,异常时PWM信号会停止。 芯片需要捕获DSP输出的PWM信号,来检测DSP的
    发表于 08-08 06:47

    异步升压结合PWM调节占空比对DC无刷电机调速的电路问题

    如图片中,通过异步升压IC将电压升到9V,通过PWM调节占空比实现对电机的调速,在此电路中,PWM频率20K,占空比10~50%,R25
    发表于 08-07 09:28

    请问怎么用HRTIM输出可变占空比PWM?

    现在可以输出单路PWM,但可变占空比PWM不知道怎么配置。请大佬帮助!
    发表于 07-25 08:16

    是德示波器如何用数字通道快速定位PWM故障

    的触发机制,可高效识别PWM信号的占空比频率、噪声等问题。本文将结合是德示波器的操作技巧,介绍如何利用数字通道快速定位PWM故障。  
    的头像 发表于 07-08 17:04 439次阅读
    是德示波器如何用数字<b class='flag-5'>通道</b>快速定位<b class='flag-5'>PWM</b>故障

    XL4016是180 KHz的固定频率 PWM降压(降压)DC/DC转换器

    频率振荡器。PWM控制电路能够调节占空比线性从0到100%。在内置电流保护功能。当短路保护功能发生时操作
    发表于 07-01 15:18 0次下载

    泰克MSO6B示波器如何用数字通道快速定位PWM故障

    PWM故障诊断的重要性与挑战 PWM信号通过调整脉冲宽度来传递信息,其频率占空比、边沿特性等参数直接影响系统性能。常见故障包括
    的头像 发表于 06-10 12:08 548次阅读
    泰克MSO6B示波器如何用数字<b class='flag-5'>通道</b>快速定位<b class='flag-5'>PWM</b>故障

    使用STM32捕获PWM时同时捕获2通道时会出现捕获频率值不准确,是什么原因导致的?

    在使用STM32F103芯片的2定时器捕获2路PWM波时,当2路信号同时输入时,会出现捕获频率不准确,但是分开
    发表于 05-14 06:24

    使用STM32捕获PWM时同时捕获2通道时会出现捕获频率值不准确是什么原因导致的?

    在使用STM32F103芯片的2定时器捕获2路PWM波时,当2路信号同时输入时,会出现捕获频率不准确,但是分开
    发表于 04-27 08:39

    使用STM32捕获PWM时同时捕获2通道时会出现捕获频率值不准确的问题,是什么原因导致的?

    在使用STM32F103芯片的2定时器捕获2路PWM波时,当2路信号同时输入时,会出现捕获频率不准确,但是分开
    发表于 04-25 08:29

    使用STM32捕获PWM时同时捕获2通道时会出现捕获频率值不准,为什么?

    在使用STM32F103芯片的2定时器捕获2路PWM波时,当2路信号同时输入时,会出现捕获频率不准确,但是分开
    发表于 04-22 10:43

    stm32同一个定时器不同的通道,可以不同时的输出pwm波形吗?

    请问,stm32的同一个定时器,不同的通道,可以不同时的输出pwm波形吗?比如tim1的ch1输出,延时几毫秒后tim1的ch2输出。 现在是要输出两相位不同的
    发表于 03-07 08:20

    DLPC7540EVM是怎么控制RGB驱动板调整电流幅值、频率周期和占空比的?

    根据TIDM564的参考原理图,REB_EN使能开关激光,PWM_RGB调节输出电流的幅值大小,SDIM_IN_RGB是调节方波占空比大小。 DLPC7540EVM只输出了REB_EN和PWM_RGB,那么DLPC7540EV
    发表于 02-21 07:07

    【RA-Eco-RA2L1-48PIN-V1.0开发板试用】——PWM

    中。 在瑞萨RA系列MCU中有两种定时器,种是通用PWM定时器GPT,另外种是异步通用定时器AGT。 1.GPT的特点 1、32位定时器,共有4
    发表于 01-26 15:40

    BUCK电路占空比与开关频率的关系

    BUCK电路占空比与开关频率是两紧密相关的参数,它们在电路的性能和效率方面起着至关重要的作用。以下是对这两者关系的分析: 、定义与基本原理 占空
    的头像 发表于 12-12 17:01 4790次阅读