绿茶山人 发表于 2023-2-13 09:38:01

STM32输入捕获16路信号的思路和疑问

现在有16路PWM信号需要测量,频率10~60Khz,占空比10%~90%。

需要比较准确的测量出每一路PWM信号的频率和占空比。

初步思路是用stm32的1个定时器同时测量4路输入捕获,用4个定时器,这样测量16路信号。这样做能实现功能没问题吧?

如果一个定时器的4路捕获信号上升沿和下降沿同时出现(假设就是4个输入捕获通道都接到同一个信号上了),这时候对每一路的测量有什么影响?会不会出现检测丢失,或者测量不准确?

陆小凤之北京 发表于 2023-2-13 10:55:32

这么多路用FPGA测量最省事吧,精度有保证。

绿茶山人 发表于 2023-2-13 11:10:26

陆小凤之北京 发表于 2023-2-13 10:55
这么多路用FPGA测量最省事吧,精度有保证。
(引用自2楼)

精度不需要很高,频率和占空比误差小于5%就行了,因为信号是阶梯变化的,不是连续渐变。
功能实现就行,主要是用STM32按照这个思路做,会不会存在丢信号,漏掉一个上升沿或者下降沿

wye11083 发表于 2023-2-13 13:22:40

绿茶山人 发表于 2023-2-13 11:10
精度不需要很高,频率和占空比误差小于5%就行了,因为信号是阶梯变化的,不是连续渐变。
功能实现就行, ...
(引用自3楼)

要保证检测到,你必须得20倍采样,所以要120khz的检测频率,然后要做16个读io操作,然后再计算累计长度,电平变化之后输出h/l时间,在外面计算占空比。所以理论上够用。48mhz主频,160khz中断频率,直接读io,精度5%理论上问题不大。

lb0857 发表于 2023-2-13 13:31:25

采样率高于采样目标频率      *   15-20

foxpro2005 发表于 2023-2-13 14:34:59

STM32用4个定时器(4*4)输入捕获肯定是没问题的!
你是10K~60K,还是10Hz~60KHz啊,低频范围的时候程序上加一个定时器溢出次数记录计算就可以啦。

绿茶山人 发表于 2023-2-13 14:56:10

foxpro2005 发表于 2023-2-13 14:34
STM32用4个定时器(4*4)输入捕获肯定是没问题的!
你是10K~60K,还是10Hz~60KHz啊,低频范围的时候程序上 ...
(引用自6楼)

10K~60K频率

qtechzdh 发表于 2023-2-13 17:03:35

用树莓派公司的那个pico单片机,他那个有一个协助的状态机pio,可以编程,简易版的fpga,不过用他的状态机语言编程。

绿茶山人 发表于 2023-2-13 21:53:13

wye11083 发表于 2023-2-13 13:22
要保证检测到,你必须得20倍采样,所以要120khz的检测频率,然后要做16个读io操作,然后再计算累计长度, ...
(引用自4楼)

你这个直接硬读IO口状态,简单粗暴啊

foxpro2005 发表于 2023-2-14 11:23:38

你这个如果使用STM32,可以Timers 4X4,但不能直接去使用PWM输入模式: 这个模式是使用了TIMx_CH1/CH2信号,一个周期一个占空比;
只能使用捕获模式,要自己根据上下沿的定时器计捕获值,计算频率和占空比。
它们都是有捕获影子寄存器的,不用担心同时输入时由于响应读取时间上造成的误差。

绿茶山人 发表于 2023-2-14 11:36:10

foxpro2005 发表于 2023-2-14 11:23
你这个如果使用STM32,可以Timers 4X4,但不能直接去使用PWM输入模式: 这个模式是使用了TIMx_CH1/CH2信号 ...
(引用自10楼)

明白了,谢谢!

AUDIO_TANXIAOLI 发表于 2023-6-29 12:05:32

这需要你对STM32的定时器输入捕获的了解程度,STM32的定时器通道中可以通过控制寄存器去调整和修改,CH0是可以实现同时上下边沿捕获,需要切换详细需要看STM32的内部定时器框图,里面有详细的说明,其它通道只能上升沿或者下降沿只允许一种触发,可以通过打开中断,在中断中去切换,这样的效率会低一些,当然测试的频率不高是不明显的,这个要看芯片的主频和定时器的时钟源输入的频率有关,时钟源输入越高精度也高,使用DMA处理也会比中断处理好。
页: [1]
查看完整版本: STM32输入捕获16路信号的思路和疑问