一 ICxPSC以及高级定时器的采样时钟分频CKD区别是什么
IC1Filter(输入捕获滤波器)和高级定时器的采样时钟分频(通常指 TIM_ClockDivision,即 CKD 位)虽然都涉及"分频"和"采样",但它们在定时器内部所处的阶段 、具体作用 以及影响范围上有本质的区别。
简单来说:采样时钟分频决定了整个数字滤波器的"工作时钟有多快",而 IC1Filter 决定了在这个工作时钟下进行"多少次采样来确认一个有效电平"。
以下是详细的对比分析:
1. 采样时钟分频(CKD:Clock Division)
-
通常的宏定义 :
TIM_CLOCKDIVISION_DIV1,TIM_CLOCKDIVISION_DIV2,TIM_CLOCKDIVISION_DIV4 -
作用范围 :全局性(针对整个定时器模块)。
-
它在哪 :它位于时基单元(Basic/General/Timer)的配置中,影响的是数字滤波器(包括所有输入通道的滤波器)所使用的采样时钟(tDTS)。
-
具体作用 :
定时器的核心时钟(CK_INT,即内部时钟)通常很快(如 72MHz 或 168MHz)。
CKD位会对这个核心时钟进行分频,产生 tDTS(Digital Time base System) 时钟。这个 tDTS 就是后续所有输入滤波器进行采样的基础时钟源。 -
例子:
-
如果 CK_INT = 72MHz,设置 CKD = DIV1,则 tDTS = 72MHz (周期约 13.89ns)。
-
如果设置 CKD = DIV4,则 tDTS = 18MHz (周期约 55.56ns)。
-
2. ICxFilter(输入捕获滤波器参数)
-
通常的宏定义 :
ICFILTER_x(x 从 0 到 15) -
作用范围 :局部性(仅针对特定的输入捕获通道,如 IC1)。
-
它在哪 :它位于输入捕获通道的配置中,决定了具体对输入信号进行怎样的处理。
-
具体作用 :
它定义了对输入信号进行采样的频率 (以 tDTS 为基准的进一步分频)以及进行电平确认所需的采样次数。
-
例子(结合上面的 CKD 例子):
-
频率:比如设置 IC1Filter = 0x0F(二进制1111),数据手册规定这意味着"采样频率 = tDTS / 32",即每隔 32 个 tDTS 时钟周期采样一次输入信号。
-
次数:同样,0x0F 也意味着需要连续采样 8 次相同的电平,才认为信号稳定。
-
核心区别总结
| 对比维度 | 采样时钟分频 (CKD) | IC1Filter |
|---|---|---|
| 角色定位 | 时钟源提供者 | 信号处理逻辑 |
| 控制对象 | 控制整个定时器数字部分的基础采样时钟频率 (tDTS)。 | 控制输入信号在 tDTS 基础上的采样频率和采样次数。 |
| 影响范围 | 所有依赖 tDTS 的功能(如所有输入捕获通道的滤波器、编码器模式抗噪等)。 | 仅限它所配置的那一个输入捕获通道。 |
| 参数含义 | 设置分频系数 (1, 2, 4)。 | 设置采样频率分频比和采样次数 (由4位二进制数组合定义)。 |
| 最终效果 | 决定了一个 tDTS 周期有多长,这是滤波器的时间分辨率。 | 决定了在多少个 tDTS 周期 内进行多少次采样判定,这是滤波器的抗噪强度。 |
一个直观的类比
想象一下小区门口的安检系统:
-
采样时钟分频 (CKD) 相当于安检设备的"扫描速度"。
-
DIV1 = 机器每秒扫描 1000 次。
-
DIV4 = 机器每秒扫描 250 次。
-
这个速度决定了设备能捕捉到的最细微的时间差异。
-
-
IC1Filter 相当于安检的"验证规则"。
-
规则 1 (ICFilter=0):扫一次看到是好人,就直接放行(速度快,但可能看错)。
-
规则 15 (ICFilter=15):必须连续扫到 8 次都是好人,才放行(抗干扰强,但反应慢)。
-
结论:
如果你想滤除的是非常窄的毛刺,你需要先通过 CKD 提供足够快的扫描速度(tDTS) ,然后通过 IC1Filter 设定严格的验证次数,两者配合才能达到最佳的滤波效果。如果 CKD 设得太慢(DIV4),导致扫描精度下降,那么即使 IC1Filter 设得再高,也可能无法分辨短毛刺,因为扫描间隔已经太长了。
二 ICxFilter与ICxPSC区别是什么
为了帮你清晰地理解,我们可以把输入捕获的信号流想象成一条产品质检流水线。信号(产品)需要经过两道独立的关卡才能最终被捕获(入库)。
核心区别一句话总结:
-
ICxFilter(滤波器):负责质量检测,剔除有瑕疵的坏产品(噪声),确保只有合格品才能进入下一环节。 -
ICxPSC(捕获分频器) :负责数量统计,决定每遇到几个合格品,才向老板(CPU)汇报一次。
详细对比解析
1. IC1Filter:质量检测员
-
位置:位于信号处理链路的最前端,紧挨着输入引脚。
-
作用 :抗干扰。它检查从引脚进来的每一个信号边沿,判断它是真实的电平变化还是外界的噪声毛刺。
-
工作方式 :**通过对信号进行多次采样(由
CKD提供采样时钟)并比较结果来工作。**只有连续N次采样值都相同的边沿,才被认为是"有效的",允许通过。否则,视为噪声并丢弃。 -
类比:就像质检员用放大镜检查每一个产品,有划痕或变形的(噪声)直接扔进废品筐,只有完好无损的产品(有效边沿)才能放行到传送带上。
-
参数效果 :
IC1Filter的值越大(0-15),需要连续采样的次数就越多,滤波能力越强,但也会引入越大的信号延迟(因为判断需要时间)。
2. ICxPSC:数量统计员
-
位置:位于滤波器之后、捕获寄存器之前。
-
作用 :降频 。它对已经通过滤波器检验的"有效边沿"进行计数。
-
工作方式 :它是一个简单的计数器。你可以设置它的分频系数(1, 2, 4, 8)。
-
如果设置为 1分频(
TIM_ICPSC_DIV1):每来一个有效边沿,就立即触发一次捕获。这是最常用的模式。 -
如果设置为 4分频(
TIM_ICPSC_DIV4):需要每来4个有效边沿,才触发一次捕获(即捕获第4个边沿时的计数器值)。
-
-
类比:传送带上的产品经过质检员后,来到打包员这里。打包员不关心产品本身的质量,他只负责数数。如果他的规则是"每满10个产品打包一箱"(相当于10分频),那么只有数到第10个产品时,他才会触发"打包"(捕获)动作。
-
参数效果 :
ICxPSC越大,触发捕获的频率就越低。这在处理极高频率信号时非常有用,可以减轻CPU的负担(因为中断次数变少了)。
对比总结表
| 维度 | ICxFilter (输入捕获滤波器) | ICxPSC (输入捕获预分频器) |
|---|---|---|
| 核心使命 | 保证信号质量 | 控制捕获频率 |
| 处理对象 | 每一个原始的、可能有毛刺的信号边沿 | 已经确认过的、干净的有效边沿 |
| 工作逻辑 | 通过过采样和连续判定来过滤噪声 | 通过计数来跳过部分有效边沿 |
| 对中断的影响 | 不影响中断次数。如果噪声被滤掉,原本可能触发的中断就不会发生;如果信号干净,中断次数不变。 | 直接减少中断次数。无论信号多干净,如果设置了4分频,中断次数就会减少为原来的1/4。 |
| 典型应用场景 | 电机编码器信号、PWM输入测量、任何信号线较长或有干扰的场合。 | 测量极高频率信号(如MHz级别),防止CPU频繁进中断导致丢数或无法处理其他任务。 |
配置示例(逻辑关系)
在代码中,它们通常是先后配置的关系:
c
TIM_ICInitTypeDef TIM_ICInitStructure;
// 1. 先配置滤波器:确保进来的信号是干净的
TIM_ICInitStructure.TIM_ICFilter = 0x0F; // 开启强滤波
// 2. 再配置预分频器:决定多久捕获一次
TIM_ICInitStructure.TIM_ICPSC = TIM_ICPSC_DIV1; // 通常是每个边沿都捕获,即不分频
// 如果是极高频率信号,可能会配成 TIM_ICPSC_DIV4 或 DIV8
// 应用配置到定时器的通道1
TIM_ICInit(TIM5, &TIM_ICInitStructure);