1. 可以把定时器想象成一个接收外部信号的“哨兵”:

  • Prescaler (预分频器)控制哨兵的“心跳”或“反应速度”。它决定了计数器每秒钟数多少个数的基准频率。它直接决定了定时器溢出的快慢,也就是定时时间或PWM的频率

  • ClockDivision (时钟分频因子)不影响哨兵的“心跳”它影响的是哨兵用来“审视”外部信号的“采样时钟”频率。这个“采样时钟”专门用于给输入信号(比如编码器的AB相、霍尔传感器的信号)进行滤波,以确认信号的真伪。

功能 Prescaler (预分频器) ClockDivision (时钟分频因子)
作用对象 定时器内部的计数时钟CK_CNT 用于采样外部信号的采样时钟tDTS / fDTS
是否影响计数速度 (直接决定定时器快慢) (不影响PWM频率或定时中断周期)
主要用途 设定定时时间、PWM频率 为输入信号提供数字滤波,设定死区时间的基准时钟
HAL库配置选项 TIM_Prescaler (通常是 u32 类型,可配置较大分频系数) TIM_ClockDivision (可选 TIM_CLOCKDIVISION_DIV1DIV2DIV4

2. ClockDivision 的具体作用

ClockDivision 通过对定时器内部时钟 CK_INT 进行分频,生成了一个专门的采样时钟 fDTS(或时间基准 tDTS)。这个 fDTS 主要服务于两个关键功能:

  • 为输入信号提供数字滤波
    这是你最可能用到的功能。当你使用定时器的输入捕获编码器模式时,外部信号(如电机编码器的脉冲)可能带有毛刺。数字滤波器会利用 fDTS 对输入信号进行采样。

    • 滤波原理:只有当连续N次(可配置)采样到的电平都一致时,才认为信号有效。ClockDivision 设置的 DIV2 或 DIV4 会降低 fDTS 的频率,相当于延长了每次采样的间隔。这样,对于同样宽度的毛刺,更低频的采样更容易将其忽略,从而达到滤波效果。

  • 为高级定时器设定死区时间
    这是你之前提到的电机驱动中很重要的一个应用。对于高级定时器(TIM1和TIM8),当用于驱动MOSFET的互补PWM输出时,必须插入“死区时间”(即上下桥臂同时关断的时间),以防止短路。
    死区时间的计时基准,正是由 ClockDivision 分频后得到的 tDTS 提供的。不同的分频设置,决定了死区时间计数器的精度和最大长度。

3. 总结:到底该怎么用?

结合你之前关心的电机编码器场景,可以这样理解 ClockDivision

  • 如果你只是想产生PWMClockDivision 的设置没有任何影响。你只需要关心 Prescaler 和 Period

  • 如果你在用编码器功能读取电机转速ClockDivision 会影响编码器信号的数字滤波如果编码器线数很高,或者你需要极高的实时性,通常设为 TIM_CLOCKDIVISION_DIV1 以获得最高的采样频率,避免漏掉脉冲。如果信号干扰大,可以尝试 DIV2 或 DIV4 来滤除噪声,但这会略微增加信号延迟并可能降低最高能响应的编码器频率。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐