当前位置: 首页 > ai >正文

【STM32的通用定时器CR1的CKD[1:0]: 时钟分频因子 (Clock division)】

在 STM32 的通用定时器(如 TIM2, TIM3, TIM4, TIM5 等)中,CR1 (Control Register 1) 寄存器中的 CKD[1:0] (Clock division) 位域是一个与抗干扰和数字滤波相关的设置,它并不直接影响定时器计数器 (CNT) 的计数频率(计数频率由预分频器 PSC 决定)。它的主要作用是控制定时器内部时钟 (CK_INT) 相对于外部时钟 (ETR) 或外部触发输入 (TIx) 的数字滤波器采样频率,以及死区时间生成的时钟基准

核心概念:

  1. 定时器时钟源 (CK_PSC) 这是驱动定时器预分频器 (PSC) 和计数器 (CNT) 的最终时钟源。它可以来自内部时钟 (CK_INT)、外部时钟模式 1 (ETR)、外部时钟模式 2 (TIx) 或内部触发输入 (ITRx)

  2. 数字滤波器: 定时器对外部输入信号(如 ETR, TI1, TI2)有内置的数字滤波器,用于抑制高频噪声(毛刺)。滤波器通过采样输入信号来工作。

  3. 死区时间生成: 在高级定时器 (TIM1, TIM8) 中用于互补 PWM 输出时,需要插入死区时间以防止上下管同时导通。死区时间的分辨率也需要一个时钟基准。

CKD[1:0] 的作用: 它定义了用于数字滤波采样死区时间分辨率的时钟 (t_DTS) 相对于定时器内部时钟 (CK_INT) 的分频关系。

CKD[1:0] 的取值与含义:

CKD[1:0]分频因子数字滤波/死区时间基准时钟 (t_DTS)说明抗干扰能力延迟/分辨率
0001t_DTS = t_CK_INT不分频。采样频率最高。最低最小
0112t_DTS = 2 * t_CK_INT2 分频。采样频率为 CK_INT 的一半。中等中等
1024t_DTS = 4 * t_CK_INT4 分频。采样频率为 CK_INT 的四分之一。最高最大
113ReservedReserved保留。勿使用此设置。--

详细解释:

  1. 对数字滤波器的影响:

    • 数字滤波器通过检测 N 个连续的 t_DTS 周期内输入信号是否稳定为高或低电平来判断有效边沿。N 是可配置的(通过 TIMx_CCMRx 寄存器的 ICxF[3:0] 位)。

    • CKD 决定了 t_DTS 的周期长度:

      • CKD=00 (t_DTS = t_CK_INT):滤波器采样频率最高。能过滤掉更窄的毛刺(即更高频的噪声),但对信号真实边沿的延迟最小

      • CKD=01 (t_DTS = 2*t_CK_INT):采样频率中等。能过滤中等宽度的毛刺,延迟中等。

      • CKD=10 (t_DTS = 4*t_CK_INT):采样频率最低。能过滤更宽的毛刺(即较低频的噪声),但对信号真实边沿的延迟最大

    • 选择原则: 如果外部输入信号环境噪声大(毛刺多且宽),选择更高的分频因子(如 10 - 4分频)可以更好地抑制噪声,但会增加信号延迟。如果环境比较干净或者需要低延迟,选择低的分频因子(如 00 - 不分频或 01 - 2分频)。

    • 影响的功能模块:

      • 输入捕获通道: 用于测量脉冲宽度、频率等。CKD[1:0] 影响捕获到信号边沿的准确性和抗噪性。

      • 外部时钟模式: 当使用外部信号作为计数器时钟源时(ETRTIx)。

      • 外部触发输入 (ETR): 用于复位、启动、停止计数器或触发从模式操作(如门控模式)。

      • 触发输出 (TRGO): 在某些从模式(如复位模式)下,CKD[1:0] 也会影响 TRGO 信号对外部触发输入的响应。

  2. 对死区时间生成的影响 (仅高级定时器 TIM1/TIM8):

    • 死区时间 (DTG) 的值是以 t_DTS 的倍数来配置的。

    • CKD 决定了 t_DTS 的周期长度,从而决定了死区时间的最小步进(分辨率):

      • CKD=00t_DTS 最小,死区时间分辨率最高(能配置更精细的死区时间)。

      • CKD=10t_DTS 最大,死区时间分辨率最低(配置步进变大)。

    • 选择原则: 如果需要非常精细地控制死区时间,选择低的分频因子(如 00)。如果对死区时间精度要求不高,或者 CK_INT 频率很高导致 t_DTS 已经足够小,可以选择更高的分频因子以换取更好的抗噪能力(如果同时使用了外部触发输入)。

  3. 对定时器基本在代码中配置: 通过设置 TIMx->CR1 寄存器的 CKD[1:0] 位。

    // 示例:设置 CKD[1:0] = 01 (2分频)
    TIMx->CR1 &= ~TIM_CR1_CKD; // 先清零 CKD 位
    TIMx->CR1 |= TIM_CR1_CKD_1; // CKD[1:0] = 01 (TIM_CR1_CKD_1 宏通常对应 0x0200)
  4. 计数 (CNT) 频率的影响:

    • CKD 设置对定时器计数器 CNT 的计数频率 (CK_CNT) 完全没有影响!

     5. 与输入滤波器 (ICxF[3:0], ETF[3:0]) 的关系:CKD[1:0] 设置的tDTS 是输入滤波器工作的基础时钟。

       输入滤波器配置位(如 IC1F[3:0] 用于输入通道 1)决定了需要连续采样到多少次稳定电平才确认有效边沿(N=2, 4, 6, 8 等)。实际能滤除的噪声最小宽度是 N * tDTS。因此,CKD[1:0] 和输入滤波器位 共同决定了滤波器的性能

 

总结与使用建议:

  • CKD[1:0] 的核心作用是设置 t_DTS 时钟,用于数字滤波采样和死区时间分辨率。

  • 它不改变定时器计数器 (CNT) 的计数频率,计数频率由预分频器 (PSC) 控制。

  • 选择 CKD 值是一个在抗干扰能力 (噪声抑制) 和响应速度/分辨率 (延迟) 之间的权衡:

    • 高噪声环境: 选择 CKD=10 (4分频) 获得最强的抗噪能力(过滤更宽的毛刺),但信号延迟最大,死区时间分辨率最低。

    • 低噪声环境或需要低延迟/高分辨率: 选择 CKD=00 (不分频) 获得最小的信号延迟和最高的死区时间分辨率,但抗噪能力最弱(只能过滤很窄的毛刺)。

    • 折中方案: CKD=01 (2分频) 提供中等性能。

  • 如果不使用外部触发输入 (ETR, TIx) 或者使用但环境非常干净,并且不使用高级定时器的死区时间(或者对死区分辨率要求不高),通常保持默认值 CKD=00 即可。

  • 如果遇到外部信号误触发问题(噪声引起),尝试增大 CKD 值(并配合配置滤波器的采样数 ICxF)是首要的解决方案之一。

简单记忆:

  • CKD“清洁度/延迟 开关”

  • 00“快快净净” (响应快,环境干净时用)。

  • 10“慢慢抗脏” (抗干扰强,响应慢,环境脏时用)。

  • 01“折中之道”

http://www.xdnf.cn/news/13873.html

相关文章:

  • 【PDF】常见纸张字体大小设置指南 / Common Paper Size Font Guidelines
  • 音视频之H.264的句法和语义
  • 基于 Java 的大数据分布式存储在视频会议系统海量数据存储与回放中的应用
  • Flutter Android打包和发布Build APK
  • PROFINET主站S7-1500通过协议网关集成欧姆龙NJ系列TCP/IP主站
  • HarmonyOS 5对React Native有哪些新特性?
  • 50种3D效果演示(OpenGL)
  • Elasticsearch索引wildcard查询
  • C++面试(10)---合并两个排序的链表
  • 历史交易数据涨跌分级
  • 《信号与系统》第 9 章 拉普拉斯变换
  • Chainlink VRF 深度解析与实战
  • 进阶四 带记忆功能的000-255 计数器
  • 基于Python的热门微博数据可视化分析-Flask+Vue
  • 蚂蚁集团法人变更:韩歆毅接任,公司治理的正常安排
  • 第17篇:数据库中间件的弹性伸缩与容量规划实战
  • MySQL库操作
  • 升级openssl后无法使用cmake和curl的解决方法
  • Logic Error: 如何识别和修复逻辑错误
  • C++题解 P4933 2.间谍原题:
  • 斗式提升机的负载特性对变频驱动的要求
  • 三星MZQL2960HCJR-00BAL高性能固态硬盘控制器SSD云计算和高端存储专用 电子元器件解析
  • 深刻理解深度学习的注意力机制Attention
  • Python 轻量化环境管理利器 UV 入门与 Windows 下安装实战
  • liquibase 集成 pt-online-schema-change
  • 穿越时空的刀剑之旅:走进VR刀剑博物馆​
  • python打卡day53
  • java中LinkedList和ArrayList的区别和联系?
  • python第51天
  • React Native【实战范例】网格导航 FlatList