GD32F103C系列单片机的PWM捕获功能

控制/MCU

1815人已加入

描述

在使用单片机对脉冲信号进行捕获时,经常会使用到单片机的捕获功能。 今天,我们讲解一下关于GD32F103C系列单片机的PWM捕获功能。 使用定时器2的通道2-PA6(TIMER2_CH0)作为PWM脉冲捕获口,进行脉冲捕获。

捕获

引脚定义

1、定时器配置

timer_init.prescaler         = 107;//分频系数,最终分频Fre=108M/(108M-1)+1=1M
    timer_init.alignedmode       = TIMER_COUNTER_EDGE;//选择边缘对其模式
    timer_init.counterdirection  = TIMER_COUNTER_UP;//向上计数
    timer_init.period            = 65535;//定时器装载值,计数值超出后会产生溢出中断
    timer_init.clockdivision     = TIMER_CKDIV_DIV1;//不分割
    timer_init.repetitioncounter = 0;//重复计数,重复溢出多少次才会溢出中断,此处配置为0,不重复
    timer_init(TIMER2,&timer_init);//使能定时器
timer_init.icpolarity  = TIMER_IC_POLARITY_RISING;//上升沿触发模式
    timer_init.icselection = TIMER_IC_SELECTION_DIRECTTI;//通道直连
    timer_init.icprescaler = TIMER_IC_PSC_DIV1;//无预分频器,捕获输入口检测到的每一个边沿都会触发一次捕获
    timer_init.icfilter    = 0x0;//无滤波器
    timer_input_config(TIMER2,TIMER_CH_0,&timer_init);//使能捕获配置

2、原理讲解

PWM信号频率捕获时需要考虑两种情况,一种是周期在设定的period内,不会触发溢出中断; 另外一种是频率较低,会远远超出一个定时器周期,并触发溢出中断。

捕获不会触发溢出中断的情况

TH就是我们设定的period值65535,主频时108M,分频后为1M,所以定时器溢出中断时间为:T=1/1M*65535=0.065535s。 假设第一种情况,捕获到第一次高电平时,T0=count_value1,捕获到第2次高电平时T1=count_value2,那么count=count_value2-count_value1;

count_value1 = TIMER2_CH0CV(TIMER2);
 count_value2 = TIMER2_CH0CV(TIMER2);
count=count_value2-count_value1;

捕获触发溢出中断的情况

第2种情况,由于频率较低,所以当捕获到第2次高电平时,已触发了定时器溢出中断,所以需要加上溢出中断部分。 溢出中断次数计为OverVal,从图中看两次高电平之间OverVal次数为2,那么总的计数count=(OverVal*TH-count_value1)+count_value2。

uint16_t OverVal = 0;//溢出次数
uint16_t	Freq	=	0;//频率
count	=	(OverVal*TH-count_value1)+count_value2Freq	=1/T=	1/(1/1M*count)=1M/count;
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分