使用 stm32 DMA 计算脉冲宽度(占空比)。可能吗?
Posted
技术标签:
【中文标题】使用 stm32 DMA 计算脉冲宽度(占空比)。可能吗?【英文标题】:Calculating pulse width (duty cycle) using stm32 DMA. Is it possible? 【发布时间】:2021-10-22 15:18:42 【问题描述】:我正在开展一个必须测量一系列占空比的项目。相关波形示例如下所示:
从信号中可以看出,频率太高了,用位函数计算是不可能的。在控制器的技术网站here,他们使用定时器的输入捕捉模式和上升下降沿中断来计算定时器两次捕捉之间的差异。但是这种方法太慢了,不能满足我们对高频信号的需求。 另一种解决方案是使用 DMA 将捕获数据快速传输到内存。但在 STM32cubemx 中,无法为定时器的两个捕获器分配两个 DMA,如下所示:
有人可以就这个问题给我一个建议吗?
【问题讨论】:
如果这部分不起作用,那么您是否看过 st 和其他公司的其他产品? 我正在寻找一位敏锐的电气工程师来为我编写 FPGA 代码。 您要求占空比的精度是多少?从那里开始。如果您的部件不能以足够快的速度中断来实现它,那么您需要选择一个不同的、更快的部件,或者按照@andymango 的建议,考虑一个硬件解决方案。 【参考方案1】:使用 DMA 通道不太可能为快速信号提供良好的解决方案,因为内存总线在 DMA 控制器和 CPU 之间共享,因此无法保证捕获事件时间内的可预测时序。此外,DMA 传输和外部信号之间的时序关系也很难解决。所以我会对你的问题说“不”。
STM32 特色定时器具有运行频率高达 120 MHz 的 16 位定时器,是您的最佳选择。对于这些小动物来说,800kHz 的信号不算太快!诀窍是如何使用计时器。您想使用输入捕获模式。捕获几个逻辑高信号时间的样本,然后对这些数字进行平均,对逻辑低信号时间做同样的事情,然后将总计时器滴答声相加,然后将其乘以外部信号周期的计时器滴答周期。
【讨论】:
以上是关于使用 stm32 DMA 计算脉冲宽度(占空比)。可能吗?的主要内容,如果未能解决你的问题,请参考以下文章