1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > [STM8L15x]输入捕获获取PWM占空比

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

时间:2022-11-25 17:14:11

相关推荐

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

STM8L输入捕获获取PWM占空比

STM8定时器1做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的输入捕获管脚可以配置。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。