STM32
直播中

李春梅

8年用户 1981经验值
私信 关注
[问答]

STM32H725VGH3时钟通过tim3采集频率,在不同的压强下会与正确的频率相差几十到200hz左右,为什么?

STM32H725VGH3芯片内部时钟通过tim3采集频率,在不同的压强下,会与正确的频率相差几十到200hz左右,同时输出的频率非常的不稳定,会有几赫兹到几百赫兹的波动,而通过机器采集到的频率是很稳定的,只有个位数的波动,这是什么原因,通过滤波会导致响应时间慢,同时变化压强会导致频率的误差越来越大。

回帖(1)

久醉不醒

2025-8-4 17:34:11

针对STM32H725VGH3使用TIM3采集频率时,在不同压强下出现几十到200Hz偏差以及几Hz到几百Hz不稳定的问题,结合您描述的机器采集稳定(仅个位数波动),问题很可能出在STM32的信号链、时钟系统或测量方法上,而非信号源本身。


以下是可能的原因和相应的解决方案思路:




  1. 信号调理电路问题 (最大嫌疑):



    • 问题: 传感器输出信号(频率随压力变化)在进入TIM3之前通常需要信号调理(放大、整形、电平转换)。电路中的元件(电阻、电容、运放)参数会随温度漂移。

    • 压力与温度关联: 压力变化往往伴随着环境温度变化或传感器自身发热。温度变化导致调理电路中元件的温漂。

    • 影响:

      • 电平漂移: 比较器的阈值电压漂移或施密特触发器的迟滞电压变化,会导致方波信号的边沿(上升沿/下降沿)时刻发生偏移。即使输入频率稳定,边沿位置的抖动也会被TIM3捕获为周期/频率的变化。这是导致几Hz到几百Hz波动的主要原因之一。

      • 增益漂移/RC常数漂移: 影响信号的幅度或滤波特性,间接影响边沿质量。


    • 解决方案:

      • 选用低温漂元件: 检查并更换关键位置的电阻、电容为低温漂系数(如 ±25ppm/°C 或更低)的型号。

      • 优化比较器电路: 如果使用电压比较器,确保其参考电压(阈值)非常稳定(例如使用高精度基准源如REF3033或LM4040,而非电阻分压)。选择输入失调电压温漂低的比较器。

      • 优化施密特触发器: 如果使用施密特触发器整形,确保其电源电压稳定,选择迟滞特性受温度影响小的型号。

      • 电源稳定性: 确保信号调理电路的电源电压(AVDD, VDD)极其稳定且纹波极小(加强滤波)。

      • 电路板布局: 避免调理电路靠近热源(如MCU、功率器件)。





  2. STM32 内部时钟源 (HSI) 的温度漂移:



    • 问题: STM32H725VGH3的内部高速时钟HSI虽然出厂校准过(典型精度±1%),但其频率会随温度和工作电压变化而漂移。

    • 压力与温度关联: 压力变化导致的环境温度变化或设备内部温度变化会影响HSI频率。

    • 影响: TIM3的计数时钟来自系统时钟(通常由HSI或PLL提供)。HSI频率漂移意味着TIM3的“时间基准”在漂移。用它测量外部稳定频率时,测量结果就会相应漂移。这是导致几十到200Hz系统性偏差的主要原因之一。

    • 解决方案:

      • 使用外部时钟源: 最佳方案! 使用外部晶体振荡器(通常为8MHz或更高精度晶体)配合HSE。晶体的频率温度稳定性远优于HSI(典型值±10ppm到±50ppm vs ±1%)。这将极大提高TIM3计数时钟的稳定性。

      • 时钟校准: 如果必须使用HSI,且系统有稳定可靠的参考时钟源(如RTC的LSE或外部GPS信号),可以定期通过TIM输入捕获或HRTIM等特性来测量HSI的实际频率,并通过RCC的HSICAL或HSITRIM寄存器动态校准HSI。但这增加了软件复杂度。

      • 温度补偿: 在MCU附近放置温度传感器,测量温度,根据HSI的温度漂移曲线(需预先标定或参考手册典型曲线)在软件中进行补偿计算。效果不如外部晶体。





  3. 电源噪声和稳定性:



    • 问题:

      • 压力变化可能伴随着传感器或相关驱动电路功耗的变化,引起电源轨(VDDA, VDD)上的噪声和波动。

      • MCU内核电源(Vcore)的波动会影响内部PLL(如果使用)的稳定性。

      • VDDA的波动直接影响ADC参考电压(如果与TIM测量相关)和模拟比较器(如果有用到)。


    • 影响: 电源噪声会导致:

      • TIM计数时钟(HSI/PLL)的抖动增加。

      • 模拟比较器阈值漂移或输出信号抖动。

      • TIM输入捕获电路对边沿检测的灵敏度变化。

      • 综合表现为测量结果的波动(几Hz到几百Hz)和可能的系统性偏移。


    • 解决方案:

      • 加强电源滤波: 在靠近STM32的每个电源引脚(VDD, VDDA, VREF+)增加足够容量的去耦电容组合(例如:10uF钽电容 + 100nF陶瓷电容 + 1uF陶瓷电容),确保覆盖宽频带。

      • 电源隔离: 考虑使用单独的LDO为模拟部分(VDDA, VREF+)和传感器供电,与数字部分(VDD)隔离。

      • 优化PCB布局: 确保电源走线足够宽,减小环路面积。地平面完整,避免数字噪声串扰到模拟部分。

      • 检查功耗: 确保电源设计能满足压力变化时传感器电路的最大功耗需求。





  4. TIM3 输入捕获配置与噪声:



    • 问题: 即使输入信号是方波,也可能存在边沿上的微小抖动(噪声)。TIM的输入捕获单元提供了数字滤波器(Input Filter)来抑制这些高频噪声。

    • 您的困境: 增加滤波器深度(ICxF位数)确实可以显著平滑信号,减少测量抖动,但会牺牲响应速度(需要多个时钟边沿确认才判定有效沿)。

    • 影响: 在您的应用中,滤波不足导致测量结果对噪声敏感,波动大(几Hz到几百Hz);过度滤波导致响应慢,跟不上压力变化速度。

    • 解决方案:

      • 优化滤波器设置: 不要完全关闭滤波器。使用示波器观察TIM3通道输入引脚上的实际信号波形,评估噪声水平。选择一个能有效抑制大部分可见噪声的最小滤波器值(例如IC1F = 0x010x02)。需要在稳定性和响应速度间找到最佳平衡点。

      • 改善信号质量: 参考第1点,优化信号调理电路,从源头减少进入TIM引脚的信号噪声和抖动。良好的硬件设计是基础。

      • 软件滤波: 在获取TIM捕获值后,在软件中进行额外的滤波处理(如滑动平均、卡尔曼滤波)。这可以在一定程度上平滑结果,但核心问题是硬件信号质量或时钟基准不稳。





  5. PCB布局与电磁干扰:



    • 问题: 传感器信号线(尤其是模拟信号或长距离传输的频率信号)如果靠近高速数字信号线(如时钟线、数据总线)或电源线,会受到电磁干扰(EMI)。

    • 压力关联: 压力变化可能引起设备内部气流、机械应力微小变化,改变导线间的耦合电容,影响EMI耦合程度。

    • 影响: 引入额外噪声,导致信号边沿抖动,进而引起TIM捕获值波动。

    • 解决方案:

      • 优化走线: 将传感器信号线(特别是TIM3的输入通道线)视为敏感模拟信号。尽可能短、远离数字噪声源。使用差分走线(如果适用)。

      • 屏蔽: 对长距离或噪声环境中的信号线考虑使用屏蔽线。

      • 接地: 确保良好的单点接地或分区接地策略。





诊断和解决步骤建议:



  1. 隔离问题:

    • 信号源替换: 使用一台高品质的函数发生器,产生一个频率已知且非常稳定的方波信号(频率范围覆盖您的应用范围),直接接入STM32的TIM3通道(跳过您的传感器和调理电路)。用STM32测量这个信号。

      • 结果稳定准确?问题出在您的传感器或信号调理电路(重点1)。

      • 结果仍然波动/漂移?问题出在STM32的时钟、电源或配置本身(重点2, 3, 4)。



  2. 示波器是关键:

    • 用示波器同时观察

      • 传感器原始输出 (如果有)。

      • 信号调理电路后的输出 (输入到TIM3引脚之前的信号)。

      • TIM3通道输入引脚上的实际信号

      • 关键的电源轨 (VDDA, VDD, VREF+),注意纹波和噪声。


    • 观察内容:

      • 信号幅度、边沿陡峭度、有无过冲/振铃。

      • 信号边沿的抖动情况(稳定性)。这是波动的主要原因。

      • 电源轨的噪声水平(峰峰值)。

      • 当压力变化时,上述信号(特别是边沿位置、电源噪声)是否有明显变化?



  3. 检查时钟源:

    • 测量并记录不同温度和压力下STM32的系统时钟频率(可使用MCO输出或测量TIM中断频率)。确认是否是HSI漂移导致基准不稳。


  4. 检查TIM配置:

    • 仔细核对TIM3的配置代码:

      • 时钟源是否预期(通常是内部时钟CK_INT)?

      • 预分频器设置是否正确?

      • 输入捕获通道配置(边沿触发、滤波器、分频器)是否正确?

      • 是否使用了正确的捕获模式(PWM输入模式?直接捕获?)



  5. 优化硬件:

    • 首要优化: 加强电源滤波(去耦电容数量、容量、位置)。

    • 强烈建议: 添加外部晶体振荡器(HSE)。 这是提高基准时钟稳定性的最有效方法。

    • 复查信号调理电路,使用低温漂元件,优化比较器/施密特触发器设计。

    • 检查PCB布局。


  6. 软件调整:

    • 尝试调整TIM输入捕获滤波器的设置,找到稳定性和响应速度的平衡点。

    • 在软件读数后,实现滑动平均等简单滤波算法。

    • (如果确认HSI漂移是主因且无法用HSE)考虑温度补偿算法(需要测温传感器和校准数据)。



总结:


您遇到的问题现象(压力相关漂移 + 大范围波动 + 与传感器测量结果对比差异)高度指向信号调理电路的温度漂移(导致信号边沿时刻变化)和/或STM32内部HSI时钟的温度漂移(导致测量基准变化)。电源噪声和TIM输入噪声也会显著加剧波动。


最优先、最有效的解决方案通常是:



  1. 为STM32添加一个高稳定性的外部晶体振荡器(HSE)。 彻底解决时钟基准漂移问题。

  2. 彻底检查和优化信号调理电路:

    • 使用低温漂电阻、电容。

    • 确保比较器参考电压或施密特触发器电源极其稳定(用基准源)。

    • 优化电路设计以减少温漂影响。


  3. 大幅加强电源滤波: 在VDDA、VDD、VREF+引脚近端添加足够容量和类型的去耦电容。


通过这三项措施,您应该能显著改善频率测量的稳定性和准确性。示波器观察各个关键点的波形对于锁定具体问题和验证改进效果至关重要。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分