您的位置 首页 分销

STM32的PWM输入形式

这个程序用的是PWM输入模式,该模式是输入捕获模式的一个特例,除了下列区别外,工作过程序与输入捕获模式一样的。2个ICx信号映射到同一下T

这个程序用的是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;

再扼要解释一下:不管是用一个通道仍是2个通道,都是要运用输入捕获来完成丈量脉宽。

输入捕获的意思是,当计数器不断地计数时,在指定的边缘到来时间,把计数器的内容拷贝到这个通道对应的CCR寄存器,一起计数器还会持续不断地计数。

当运用一个通道丈量脉宽时,你需求先指定上升沿触发捕获,当发生捕获中止时,读出CCR寄存器的内容,再改动这个通道为下降沿捕获,当再次发生捕获中止时,再读出CCR寄存器的内容并与前次的捕获数值相减,成果便是脉宽。

当运用2个通道丈量脉宽时,你只需求指定一个通道为上升沿触发捕获,另一个通道为下降沿捕获,核算方法与运用一个通道时相同,即把下降沿捕获的数值减去上升沿捕获的数值,成果便是脉宽。运用2个通道的优点是,在发生捕获中止时不用改动触发捕获的边缘。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/256928.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部