[STM8L15x]输入捕获获取PWM占空比

STM8定时器1做PWM输入捕获的要求

前几天,因为工作的需求,需要根据外部的PWM占控比大小来做相应的操作,使用的是STM8L系列的单片机。在实现过程中也踩了不少坑,由于是临时需要做这样一个功能,硬件上接PWM的管脚是随意的,接在了PC6管脚上.老实讲在做之前我都怀疑是否能够根据PC6这个管脚实现。因此翻阅了相应的数据手册。接下来我将介绍下,使用定时器1,管脚为PC6实现获取PWM的占控比。

首先STM8定时器1有三个通道,如下图:
在这里插入图片描述
但是内部是有四个IC,但IC4是没有通道的,我的理解是它可以做一些辅助的功能,这个不管。我们使用的是PC6,这个管脚在那个通道上呢,这个也是能找到的,如下图:
在这里插入图片描述
从图中可以知,PC6是在IC2上面。

PWM占空比测试需要两路IC,从下面的图可以看到,IC1和IC2有交叉的线路,当我们选用了通道2作为输入,那IC1也可以捕获到从IC2过来的信号。
在这里插入图片描述

接下来需要明白一个模式: 复位触发模式
我们将IC2上的信号源(如TI2FP2)设为复位触发模式,并设置上升源触发后,当IC2检测到有效的上升沿后,TIM1会将原来的计数清零。如此可以简化我们对PWM的计算(具体原因可以百度)。

输入捕获功能踩坑说明

1.一开始硬件连接的是PC7管脚,使用的是通道3,配置程序后,IC3和IC4可以采集定时计数值,但是没有对应的信号触发源来实现计数清零。具体如下寄存器说明和第一幅图比较,没有TI3FP3或者TI3FP4,因此改为PC6管脚:
在这里插入图片描述
2.由于我采集的PWM的频率为130KHZ,相对较快,导致中断过于频繁,而没有机会运行正常代码,后面进行了8分频。
3.中断优先的问题,由于程序有多个类型的中断,不能将定时器1的中断优先级设置的太高也不能设置的太低,如果太高,则其他的中断会受到干扰,如果太低,则可能受其他中断的干扰,采集不到数据。

相关程序

初始化程序:

void Time1_Init(void)
{
    uint8_t ICFilter = 0;

    CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,ENABLE);//开启TIM1时钟
    TIM1_DeInit();
    GPIO_Init(GPIOC, GPIO_Pin_6, GPIO_Mode_In_FL_No_IT);

    /* configure TIM1 channel 3 to capture a PWM signal */
    TIM1_PWMIConfig(TIM1_Channel_2, TIM1_ICPolarity_Rising, TIM1_ICSelection_DirectTI,
                  TIM1_ICPSC_DIV8, ICFilter);

    SYSCFG_RITIMInputCaptureConfig(RI_InputCapture_IC2, RI_InputCaptureRouting_14);

    /* Select the TIM1 Input Trigger: TI1FP1 */
    TIM1_SelectInputTrigger(TIM1_TRGSelection_TI2FP2);
    TIM1_SelectSlaveMode(TIM1_SlaveMode_Reset);


    ITC_SetSoftwarePriority(TIM1_CC_IRQn, ITC_PriorityLevel_1);

    /* Enable CC1 interrupt request */
    TIM1_ITConfig(TIM1_IT_CC2, ENABLE);

    /* Enable TIM1 */
    TIM1_Cmd(ENABLE); 
}

中断程序:

  if (TIM1_GetITStatus(TIM1_IT_CC2) != RESET) 
  {
    IC1Value = TIM1_GetCapture2();
    
    if (IC1Value != 0)
    {
      IC2Value = TIM1_GetCapture1();

      SignalDutyCycle = ((uint32_t) IC2Value * 100) / IC1Value;
    }
    else
    {
      SignalDutyCycle = 0;
    }

    /* Clear TIM1 Capture compare interrupt pending bit */
    TIM1_ClearITPendingBit(TIM1_IT_CC2);
  }

总结

1.通道3不能检测PWM占空比。
2.通道2和通道1可以反向设置,用于获取占空比。
3.定时器1的通道2和通道3的输入捕获管脚可以配置。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值