如何修复 mbed AnalogIn.read_voltage() 返回 nan 或 0.000 (PlatformIO)

问题:

你正在尝试像这样在 mbed / PlatformIO 中读取 ADC 电压:

example.cpp
AnalogIn myADC(PA_5);
// 读取并打印电压,然后返回
float v = myADC.read_voltage();
printf("%f\n", v);

但这只打印 nan0.000

解决方案

mbed 不知道你平台的参考电压。最简单的方法是在 AnalogIn 的构造函数中提供参考电压:

analogin_fix.cpp
AnalogIn myADC(PA_5, 3.3);

这指定了 3.3V 的参考电压。虽然这适用于大多数应用程序的默认配置,但注意参考电压可能因微控制器的配置而异。

根据我的经验,如果参考电压不是立即显而易见的,几乎总是最好通过实验验证参考电压而不是试图理论化。

完整示例:

main.cpp
#include <mbed.h>

BufferedSerial pc(USBTX, USBRX, 115200); // tx, rx

AnalogIn   myADC(PA_5, 3.3);

FileHandle *mbed::mbed_override_console(int fd) {
    return &pc;
}

int main() {
  while(1) {
    float v = myADC.read_voltage();
    printf("%f\n", v);
    ThisThread::sleep_for(100ms);
  }
}
mbed_app.json
{
    "target_overrides": {
      "*": {
        "target.printf_lib": "std"
      }
    }
}

Check out similar posts by category: C/C++, Mbed, PlatformIO