STM32F407的Timer数字滤波器是用于定时器输入捕获模式的硬件数字滤波模块,主要作用是滤除外部输入信号(如按键、编码器、脉冲信号)的抖动和噪声,避免错误触发捕获。
核心工作原理
滤波器通过多次采样确认信号电平来过滤干扰:定时器对输入信号按设定频率连续采样,只有当连续N次采样电平一致时,才会认为信号有效并触发捕获,从而过滤掉宽度不足的毛刺和抖动。
关键参数配置
在STM32F407中,通过两个层级配置滤波器参数:
定时器分频CKD
CKD是定时器总时钟与滤波器采样时钟的分频比,在TIMx_CR1寄存器中配置,可选值:
例如定时器时钟为84MHz,选择CKD_DIV2时,滤波器采样频率为42MHz。
通道滤波器ICFilter
每个输入捕获通道可单独设置滤波参数,范围是0x0 ~ 0xF(0~15),实际意义是:采样次数 = ICFilter值,只有连续ICFilter次采样一致才认为信号有效,值越大滤波效果越强,但响应延迟也越大。
0x0:关闭滤波器,任意边沿直接触发
常见配置:按键消抖推荐0x5~0x8,编码器信号推荐0x3~0x5。
标准配置步骤(HAL库示例)
// 1. 定时器基础配置,设置CKD分频
TIM_HandleTypeDef htim3;
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV2; // CKD二分频
HAL_TIM_IC_Init(&htim3);
// 2. 输入捕获通道配置,设置滤波器参数
TIM_IC_InitTypeDef sConfigIC = {0};
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0x6; // 6次采样确认,适合按键消抖
HAL_TIM_IC_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1);典型应用场景
按键消抖:设置ICFilter为5~8,配合合适的CKD分频,可以完全滤除机械按键的抖动,无需软件二次滤波
编码器测速:设置ICFilter为3~5,滤除电机电刷产生的干扰脉冲,保证计数准确
脉冲信号测量:针对带干扰的工业脉冲信号,加大滤波参数可避免误触发捕获中断。
我要赚赏金
