STM32 PWM捕获

这个程序用的是PWM输入模式,该模式是输入捕获模式的一个特例 ,除了下列区别外,工作过程序与输入捕获模式一样的。
2个ICx信号映射到同一下TIxl输入(这里是CH1及CH2)。
这两个ICx信号都为边沿有效,但极性相反。

    TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    TIM_ICInitStructure.TIM_ICFilter = 0x0;

由上面程序可知,TIM2的TIM_Channel_2被配置为上升沿触发,则TIM2的TIM_Channel_1被配为下降沿触发。

利用此模式能够测量输入到TI1上的PWM信号的长度(TIMx_CCR2寄存器)和占空比(TIMx_CCR1)数值;

在测量时,当上升沿信号触发后,TIMx_CCR2寄存器开始计数,当下降沿出现时,TIMx_CCR1寄存器也开始计数。

直到下一个上升沿信号出现时,在中断里记下TIM2_CCR1(TIM_GetCapture1(TIM2))及TIM2_CCR2(TIM_GetCapture1(TIM2))的值,然后根据这两个值算出点空比TIM_GetCapture1(TIM2)/2C1Value ,频率=系统时钟/2C1Value 。

中断程序如下所示:
void TIM2_IRQHandler(void)
{
   
    TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);

   
    IC2Value = TIM_GetCapture2(TIM2);

    if (IC2Value != 0)
    {
    
      DutyCycle = (TIM_GetCapture1(TIM2) * 100) / IC2Value;

    
      Frequency = 72000000 / IC2Value;
    }
    else
    {
      DutyCycle = 0;
      Frequency = 0;
    }
}

在输入信号的每一次上升沿都会触发中断,在中断对IC2Value及IC1Value的值进行计算

在这个程序中,TIM2的通道2设置为上升沿触发中断,TIM2的预分频为0,因此可以得到:
输入信号的频率     Frequency = 72000000 / IC2Value;
输入信号的点空比 DutyCycle = (TIM_GetCapture1(TIM2) * 100) / IC2Value;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值