Beheben: mbed AnalogIn.read_voltage() gibt nan oder 0.000 zurück (PlatformIO)

English Deutsch

Problem:

Sie versuchen, eine ADC-Spannung in mbed / PlatformIO so zu lesen:

example.cpp
AnalogIn myADC(PA_5);
// Spannung lesen und ausgeben, dann zurückkehren
float v = myADC.read_voltage();
printf("%f\n", v);

aber dies gibt nur nan oder 0.000 aus.

Lösung

mbed kennt die Referenzspannung für Ihre Plattform nicht. Die einfachste Methode ist, die Referenzspannung im Konstruktor von AnalogIn anzugeben:

analogin_fix.cpp
AnalogIn myADC(PA_5, 3.3);

Dies gibt eine Referenzspannung von 3.3V an. Dies gilt für die meisten Anwendungen in ihrer Standardkonfiguration, beachten Sie jedoch, dass die Referenzspannung je nach Konfiguration Ihres Mikrocontrollers unterschiedlich sein kann.

Meiner Erfahrung nach ist es fast immer besser, die Referenzspannung experimentell zu überprüfen, anstatt zu versuchen, sie theoretisch abzuleiten, wenn sie nicht sofort offensichtlich ist.

Vollständiges Beispiel:

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