Ich musste mein AmpVolt Power Meter an seine Grenzen bringen, aber mir fehlte eine Gleichstromlast über 2 A. Also beschloss ich, innovativ zu sein! Ich habe eine digitale Last auf MOSFET-Basis entwickelt, mit der ich etwa 8 A und mehr erreichen kann.

Eine Lösung für kleine digitale Lasten

In jedem technischen Arbeitsbereich ist die Bedeutung von Prüf- und Messgeräten von enormer Wichtigkeit. Sie stellen oft den Unterschied zwischen „gut genug“ und Perfektion dar. Qualitativ hochwertige Prüfgeräte gewährleisten, dass die entwickelte Hardware den Erwartungen entspricht, unter verschiedenen Bedingungen funktioniert und die hohen Standards erfüllt, die in der modernen Elektronikbranche erwartet werden. Jedoch kann es vorkommen, dass man kein passendes Testgerät zur Hand hat, die Zeit drängt oder man einfach ohne Verzögerung testen möchte. In solchen Fällen muss man vielleicht eine eigene Lösung finden. Genau vor dieser Herausforderung stand ich, als ich die Grenzen des Energiemessgeräts mit ESP32 testen musste und keine Last zur Verfügung hatte, die mehr als 2 A bewältigen konnte.

Im Elektronikbereich denkt man bei dem Begriff „Last“ meist und zuvorderst an einen Widerstand. Doch das Konzept der digitalen Last bietet bedeutende Vorteile im Vergleich zu herkömmlichen Festwiderständen, insbesondere in modernen Testumgebungen. Digitale Lasten nutzen Leistungshalbleiter wie MOSFETs, IGBTs und BJTs, um sich dynamisch an wechselnde elektrische Bedingungen anzupassen, was eine präzise Simulation des elektrischen Verhaltens ohne manuelle Anpassungen ermöglicht. Diese Anpassungsfähigkeit rationalisiert die Prüfprozesse und steigert die Genauigkeit. Zudem können digitale Lasten Mess- und Datenprotokollierungsfunktionen integrieren, die mit effizientem Wärmemanagement und integrierten Sicherheitsfunktionen einhergehen.

Bild 1. Schaltung des Projekts.

Die Schaltung

Der Schaltplan in Bild 1 zeigt die bewusste Wahl des MOSFETs IRF3205. Mit einer spezifizierten Drain-Source-Spannung von 55 V und einem Nennstrom von 110 A ist er in der Lage, harte Tests ohne Zögern zu bewältigen. Durch einen passend dimensionierten Kühlkörper kann er trotz der hohen Anforderungen an die kontinuierliche Verlustleistung effektiv Wärme ableiten.

Das Herzstück der Schaltung ist allerdings das kompakte Mikrocontroller-Breakout-Board XIAO ESP32S3 von Seeed Studio . Um das Prototyping einfach zu halten, wurde eine sehr kompakte Erweiterungsplatine für dieses XIAO-Modul verwendet. Inzwischen haben wir bei Elektor unsere eigene Elektor-XIAO-Erweiterungsplatine entwickelt (siehe ), die die GPIOs an den Stiftleisten der XIAO-Platine zu Grove-Steckverbinder führt, die jeweils einen Pin für GND, einen Pin für 3,3 V und zwei Input/Output/Bus-Pins bereitstellen. Im Schaltplan sind diese Anschlüsse als K2, K1, J1 und J2 gekennzeichnet, wobei die letzten beiden für I2C-Kommunikation vorgesehen sind.

K2/K4 sind miteinander verbunden, um LED1 und LED2 anzusteuern, die den Betriebsstatus anzeigen und visuelles Feedback zum Zustand der Last geben. K1/K3 weisen einen PWM-Ausgangspin auf, der den MOSFET schaltet, und einen analogen Eingangspin, der den Wert des Potentiometers misst. Über die Potistellung bestimmt die Firmware das gewünschte PWM-Tastverhältnis, was eine präzise Modulation der Last ermöglicht.

Abonnieren
Tag-Benachrichtigung zu Circuits & Circuit Design jetzt abonnieren!

R1 ist ein Pull-Down-Widerstand zwischen Gate und Source des MOSFETs, der dafür sorgt, dass das Gate ordnungsgemäß entladen wird, wenn das PWM-Signal ausgeschaltet ist, um unbeabsichtigtes Schalten zu verhindern.

Der Schaltplan für die digitale Last bietet Optionen für zukünftige Erweiterungen, zum Beispiel für ein OLED-Display und für einen Stromsensor. Um aber die Einfachheit des ursprünglichen Entwurfs beizubehalten, wird vorerst ein einfaches Potentiometer für die unkomplizierte manuelle Lasteinstellung verwendet. Dieser Ansatz ermöglicht einen einfachen Betrieb und eröffnet gleichzeitig die Möglichkeit zur späteren Integration komplexerer Funktionen.

Testaufbau

Für den Test wurde nur der rechte Teil der Schaltung verwendet, wobei ein PWM-Signal von einem Funktionsgenerator an Pin 4 von K3 eingespeist wurde. Eine digitale Stromversorgung wurde mit dem Anschluss K5 verbunden, wobei Source von T1 mit dem Minuspol und Drain von T1 mit dem Pluspol der Stromquelle verbunden wurde. Anschließend wurde ein PWM-Signal mit einer Periode von 20 µs, einer Amplitude von 3,3 Vss und einem Tastverhältnis von 3...50 % an das Gate angelegt. Der durch den MOSFET fließende Strom wurde dabei mit der digitalen Stromversorgung und einem Multimeter gemessen.

Bild 2. Der Versuchsaufbau wird mit einem Funktionsgenerator getestet, der die Schaltung über PWM steuert.

Bei einem Tastverhältnis von etwa 21,3 % zog die elektronische Last fast 4,9 A (Bild 2). Eine weitere Erhöhung des Tastverhältnisses könnte den Strom steigern, jedoch würde dies zu einer hohen Chiptemperatur führen, die ohne aktive Kühlung 70 °C erreichen würde. Alternativ zur aktiven Kühlung könnte man zwei oder mehr MOSFETs parallel schalteten, so dass sich die hohe Verlustleistung auf mehrere Transistoren verteilen würde.

Software

Die Firmware, um ein PWM-Signal mit einem ESP32 zu steuern, wurde in der Arduino-IDE entwickelt. Das Tastverhältnis wird an einem Potentiometer eingestellt, der Zustand des Systems von LEDs angezeigt (Listing 1). Die erforderlichen Pins für das Poti, der PWM-Ausgang, die Pins für die LEDs werden zu Beginn des Sketches definiert. Es folgt die Einstellung der PWM-Parameter, einschließlich einer Frequenz von 50 kHz, einer 8-Bit-Auflösung und eines maximalen PWM-Werts von 255. In der Setup-Funktion wird auch die serielle Schnittstelle für das Debugging initialisiert, und die LED-Pins werden als Ausgänge konfiguriert. Die PWM wird auf dem angegebenen Pin mit der definierten Frequenz und Auflösung eingerichtet. Zunächst liest der Code die Position des Potentiometers aus und prüft, ob sie die Mindestspannungsschwelle überschreitet. Ist dies der Fall, leuchtet die rote LED auf, und das System wartet darauf, dass der Benutzer das Poti auf seinen Mindestwert einstellt.

Der Code liest dann kontinuierlich die Position des Potentiometers aus, wandelt sie in eine Spannung um und ordnet diese einem PWM-Tastverhältnis von 0...50 % des maximalen PWM-Werts zu. Dieses Tastverhältnis wird dann am PWM-Pin ausgeführt. Die grüne LED signalisiert den normalen Betrieb. Zusätzlich werden Debug-Informationen, zum Beispiel das prozentuale Tastverhältnis und die Potentiometerspannung im seriellen Monitor ausgegeben. In Bild 3 ist das Projekt in Aktion zu sehen, wie es die Last in Abhängigkeit von der Potieinstellung anpasst.

Bild 3. Die digitale ESP32-Last ist an eine Stromversorgung angeschlossen und misst und steuert den Strom.

Der vollständige Code und die Schaltpläne sind auf GitHub verfügbar, um das Projekt nachzubauen oder anzupassen. Mit einem ESP32 ist es sogar möglich, die digitale Last drahtlos zu steuern, indem ein Webserver auf dem ESP32 betrieben wird, um die Last über ein Webinterface per WLAN oder sogar über das Internet fernzusteuern. Die Möglichkeiten sind grenzenlos!


Anmerkung der Redaktion: Dieser Artikel (240203-02) erscheint im Elektor Circuit Special 2024.


Listing 1: Basis-Firmware.
 

#include <Arduino.h>

 

// Pin definitions

#define POT_PIN 3

#define PWM_PIN 2

#define RED_LED_PIN 9

#define GREEN_LED_PIN 8

 

// PWM parameters

const long pwmFrequency = 50000; // 50 kHz to achieve a 20 us period

const uint8_t pwmResolution = 8; // 8-bit resolution for PWM

const uint8_t maxPwmValue = 255; // Maximum value for 8-bit resolution PWM

 

// ADC and Voltage settings

const float referenceVoltage = 3.3; // ADC reference voltage in volts

const int adcMaxValue = 4095;       // Maximum ADC value for 12-bit resolution

const float minimumVoltage = 0.1;   // Minimum voltage threshold to start PWM

 

void setup() {

  // Initialize Serial for debug output

  Serial.begin(9600);

 

  // Set up LED pins

  pinMode(RED_LED_PIN, OUTPUT);

  pinMode(GREEN_LED_PIN, OUTPUT);

 

  // Initialize PWM on pin

  ledcSetup(0, pwmFrequency, pwmResolution);

  ledcAttachPin(PWM_PIN, 0);

 

  // Check initial position of the potentiometer

  float initialVoltage = (analogRead(POT_PIN) * referenceVoltage) / adcMaxValue;

  if (initialVoltage > minimumVoltage) {

    digitalWrite(RED_LED_PIN, HIGH); // Turn on red LED

    digitalWrite(GREEN_LED_PIN, LOW); // Make sure green LED is off

    while ((analogRead(POT_PIN) * referenceVoltage / adcMaxValue) > minimumVoltage) {

      // Wait for the user to adjust the potentiometer to minimum

      delay(100); // Delay to avoid excessive reading

      Serial.println("Adjust potentiometer to minimum to start.");

      Serial.println((analogRead(POT_PIN) * referenceVoltage / adcMaxValue));

 

    }

  }

  // Potentiometer is at minimum value, proceed with normal operation

  digitalWrite(RED_LED_PIN, LOW);

  digitalWrite(GREEN_LED_PIN, HIGH);

}

 

void loop() {

  // Read the potentiometer value and convert to voltage

  float potVoltage = (analogRead(POT_PIN) * referenceVoltage) / adcMaxValue;

 

  // Calculate the PWM duty cycle (0 - 50% of maximum PWM value)

  int pwmDutyCycle = map(potVoltage * 1000, 0, referenceVoltage * 1000, 0, 128);

 

  // Set the PWM duty cycle

  ledcWrite(0, pwmDutyCycle);

  digitalWrite(GREEN_LED_PIN, HIGH);

  // Debug output to Serial Monitor

  Serial.print("Duty Cycle: ");

  Serial.print((float)pwmDutyCycle / maxPwmValue * 100);

  Serial.println("%");

  Serial.print("Potentiometer Voltage: ");

  Serial.print(potVoltage);

  Serial.println(" V");

}

 
Abonnieren
Tag-Benachrichtigung zu Test & Messung jetzt abonnieren!