MAX31855: Wie man ungültige Werte überspringt

Die Verwendung des MAX31855 als Thermoelement-Verstärker & Digitalisierer führt manchmal zu ungültigen Werten, sei es durch Rauschen auf der analogen (Thermoelement-)Seite oder durch digitale Signalintegritätsprobleme wie GND-Rauschen.

Dieser Code, modifiziert aus unserem Post ESP32 MAX31855 Thermoelement LCD minimales Beispiel mit PlatformIO, bietet ein Beispiel, wie man diese Werte überspringt & ignoriert, aber einen Fehler meldet, wenn mehr als 10 (konfigurierbar) aufeinanderfolgende Werte ungültig sind.

Abhängig von Ihrer Anwendung müssen Sie möglicherweise einen geeigneteren Temperaturbereich in IsValidReading() wählen. Die Wahl eines möglichst engen gültigen Bereichs verhindert, dass mehr schlechte Werte an nachgeschalteten Code gesendet werden.

max31855_skip_invalid.cpp
SPIClass vspi(VSPI);
Adafruit_MAX31855 thermocouple1(Pin_MAX31855_A_CS, &vspi);

bool IsValidReading(double reading) {
  return !isnan(reading) && reading > -40.0 && reading < 1000.0;
}

void ReadTemperature() {
  double celsius = thermocouple1.readCelsius();
  if(!IsValidReading(celsius)) {
    consecutiveNaNReads++;
    if(consecutiveNaNReads >= maxConsecutiveNaNReads) {
      // Thermocouple is disconnected
      Serial.println("Thermocouple error");
    }
  } else {
    consecutiveNaNReads = 0;
    Serial.println(celsius);
  }
}

Check out similar posts by category: C/C++, Electronics