本帖最后由 guiyan 于 2023-7-31 09:06 编辑
前言
本文旨在分析APM32F4系列芯片定时器的输入捕获模式的工作原理,以TMR5为例进行分析。
详细代码可参考APM32F4xx_SDK_v1.3例程TMR_InputCapture.
一、输入捕获模式简介
1.1 TMR5 有4个输入通道,和4个捕获通道。它们存在一定的映射关系,可由CCM寄存器配置。
输入通道是输入信号的,经过滤波边沿检测器后,分成2个输入信号,可同时进入2个捕获通道。
1.2 输入滤波器和边沿检测器
输入滤波器,是对输入信号进行滤波。
边沿检测器,是决定捕获哪种边沿的信号,就是输入信号的极性。
1.3 预分频器
预分频器,是针对输入信号而言的。即发生多少次事件才进行一次捕获。
1.4 捕获寄存器
当发生捕获时,会把计数器的值锁存在捕获寄存器CCn中。若使能了中断,则会发生中断请求。
二、主要寄存器分析
2.1 TMRx_CCM1[CCnSEL], 设置捕获通道的输入通道选择(即选择输入信号)
2.2 TMRx_CCM1[ICnPSC], 配置捕获通道的预分频
2.3 TMRx_CCM1[ICnF], 配置捕获通道的滤波器
2.4 TMRx_CCEN[CCnPOL], 配置捕获信号的极性
2.5 TMRx_CCEN[CCnEN], 使能捕获
三、编程思路
3.1. 把定制器配置为输入捕获模式,并选择输入通道(配置TMRx_CCM1[CCnSEL]])
3.2. 配置滤波器(配置TMRx_CCM1[ICnF])
3.3. 配置捕获通道的预分频(配置TMRx_CCM1[ICnPSC])
3.4. 配置捕获信号的极性(配置TMRx_CCEN[CCnPOL])
3.5. 使能开启捕获(配置TMRx_CCEN[CCnEN])
四、例程演示
利用输入捕获模式功能,计算出输入信号的频率。
4.1 主要实现代码/** TMR5 PWM Input mode */
ICConfig.channel = TMR_CHANNEL_2; /* TMR5_CH2作为捕获通道 */
ICConfig.polarity = TMR_IC_POLARITY_RISING; /* 设置输入信号的极性 */
ICConfig.selection = TMR_IC_SELECTION_DIRECT_TI; /* 选择输入通道 */
ICConfig.prescaler = TMR_IC_PSC_1; /* 设置预分频 */
ICConfig.filter = 0x00;
TMR_ConfigPWM(TMR5, &ICConfig);
/** Get the Input Capture value */
IC2Value[irqFlag] = TMR_ReadCaputer2(TMR5);
if(irqFlag != 0)
{
irqFlag = 0;
/** Capture computation */
if(IC2Value[1] > IC2Value[0])
{
tempValue = IC2Value[1] - IC2Value[0];
}
else if(IC2Value[1] < IC2Value[0])
{
tempValue = 0xFFFFFFFF - IC2Value[0] + IC2Value[1];
}
else
{
tempValue = 0;
}
/** Frequency computation */
Frequency = (RCM_ReadHCLKFreq()/2) / tempValue;
}
else
{
irqFlag++;
}
4.2 效果
能正确计算出输入信号的频率。
|