如何利用timer对一个频率变化范围比较广的中低频脉冲信号进行精确脉冲长度/周期/频率测定
各位好,
如题,一个变周期脉冲信号A,周期从数秒(甚至数十秒)到不到1ms变化(几十k),希望能测量该信号的精确脉冲长度/周期/频率
我原来想法是通过timer对sysclk进行计数,然后A来触发计数值保存(呃,不知道这个叫哪个模式),后来发现不行,16bit的计数,计数频率低了吧,信号周期短的时候不行,误差太大,计数频率高了吧,周期数秒就溢出了。。。
想来想去都没有办法做的结果值的绝对误差相同
有点头疼不知道怎么做才好,请教大家指点,先谢谢 您可以使用STM32的定时器(Timer)来测量中低频脉冲信号的精确脉冲长度、周期和频率。 选择一个合适的定时器,比如TIM2、TIM3等,这些定时器通常具有较高的分辨率和灵活的配置选项。 配置定时器为输入捕获模式(Input Capture Mode),以便捕获脉冲信号的上升沿和下降沿。您可以使用定时器的通道来捕获脉冲信号的边沿。 配置定时器的时钟源和预分频器,以确保定时器的计数频率足够高,以便精确测量中低频脉冲信号。 当脉冲信号到来时,定时器将捕获脉冲信号的上升沿和下降沿的计数值。您可以通过读取捕获寄存器的值来获取脉冲信号的脉冲长度和周期。 通过测量脉冲信号的周期,您可以计算出脉冲信号的频率。频率等于1/周期。 精确测量:由于定时器通常具有较高的分辨率,您可以通过对捕获值进行精确的计算和处理,来实现对中低频脉冲信号的精确测量。 您可以利用STM32的定时器来实现对中低频脉冲信号的精确脉冲长度、周期和频率的测量。在实际应用中,您可能需要根据具体的脉冲信号特性和测量要求进行定时器的配置和数据处理。 感觉就是逻辑的事儿吧,你说的这种应该能实现 你试试外部中断获取脉冲信号呢? 这个用输入捕获就可以吧 通过timer对sysclk进行计数不太行 可以使用定时器的通道来捕获脉冲信号的边沿。 你可以试试使用两个定时器,一个负责高频短周期信号的测量,另一个以较低频率测量长周期信号。 STM32的高级定时器支持32位模式,你选的16位定时器可能限制了测量范围,换成32位看看效果? 如果信号频率变化范围特别大,可以考虑动态调整定时器的预分频系数来适应不同频率。 直接用捕获比较模式(Input Capture),这样每次脉冲到来时直接捕获计数器值,避免了溢出问题。 我觉得你可以用中断模式,遇到长周期信号时降低时钟频率,短周期时再调高。 有没有考虑用DMA来自动记录捕获的计数值,这样可以减少CPU干预?
页:
[1]
2