STM32(在线使用Mbed)显示较高模拟输入频率下的延迟

时间:2019-05-28 04:42:33

标签: c++ stm32 mbed

我是控制器使用的新手。 我正在设置一个STM32F769控制器(使用Mbed在线编译器),我的目标是获得一个PWM输出,该PWM输出根据模拟输入改变其频率。我做了一些基本的编码,但是有一个问题。当我以1Hz的模拟输入频率检查示波器的输出时,其工作正常,但是当我以100Hz的模拟输入检查示波器时,输出存在延迟,并且输入错误的值。我不明白为什么,因为这块板更快(216 MHZ),我不应该面对这样的问题。 (如果有人也可以解释一下,是否可以在216MHz或其他最大频率下使用该板?如何?)

第一次用户

{
 meas_r=0;
 for(int i=1;i<=1024;i++)
 {             
    meas_r = meas_r+analog_value.read(); 
 }
 meas_r=meas_r/1024;
 meas_v = meas_r * 3300;
 out_freq=50000+(meas_v*50);   
 pulse.period( 1.0 / out_freq);  
 }
}

它应该在100Hz模拟输入上工作,因为它在1Hz上工作。

1 个答案:

答案 0 :(得分:0)

216MHz可能是处理器可以运行的最大时钟频率,但这并不意味着它可以从其端口输入/输出那么多频率。

  • 延迟是由读取模拟值和计算所需的数学运算所花费的时间造成的。您正在使用多次乘法和除法,这比几乎对任何硬件设备进行加法和减法都要复杂。显然,您也在使用库/库(pulse.period(),analog_value.read()),在这些乘法和除法的基础上还有一些隐藏的计算。最后,您的设备也可能与其他东西一起工作(只有您知道这一点)。所有这些计算都需要时间。在较低的频率下,您可能无法注意到延迟,但是当频率足够高时,可以注意到延迟。 还要考虑多次读取模拟值所需的时间
  • 错误的信号和周期是由于延迟和其他一些不确定因素造成的。如果处理器也正在处理其他任务,那么很难预测完成所有任务所需的时间。当处理器逐行执行指令并在新的运算开始之前等待先前的计算完成时,这会导致时序不确定。 外围设备的数据路径和频率(从外围设备获取输入)在时序不确定性和延迟中起着至关重要的作用。

如果时序和准确性对于解决您遇到的问题真的很重要,并且如果您不能通过DSP,MPU,MCU,CPU,GPU等解决问题,那么我建议您使用FPGA解决问题。