Es ist an der Zeit, der Verstärkerschaltung mit Push-Pull-Stufe den letzten Schliff zu geben. Lass uns ihren Wirkungsgrad verbessern.
Im letzten Teil dieses Projekts haben wir die Ausgangsleistung unserer Wechselstromquelle durch Hinzufügen einer externen Push-Pull-Stufe deutlich erhöht. Obwohl die Lösung bereits recht gut funktioniert hat, gibt es immer noch Raum für Verbesserungen, insbesondere hinsichtlich des Wirkungsgrades der Schaltung. Die Verbesserung des Wirkungsgrades wird heute unser Hauptziel sein.
Wo fangen wir an? Momentan wird eine Menge Energie durch den Spannungsteiler verschwendet, mit dem wir die künstliche Massereferenz für den Wechselstromkreis erzeugen. Wir verwenden dafür immer noch zwei 220 Ω-Widerstände und infolgedessen fließt ständig ein Strom von 23 mA durch beide Widerstände, egal wie klein die Last ist. Der einzige Grund für solch niedrige Widerstandswerte war, dass wir in einem frühen Teil dieses Projekts den Wechselstromteil der Schaltung direkt über den Spannungsteiler versorgt haben. Da wir jetzt eine Verstärkerschaltung verwenden, können wir diese Widerstände bedenkenlos wie unten gezeigt durch 10 kΩ Widerstände ersetzen.
Ist das alles, was wir tun können? Nein, wir können sogar noch weiter gehen und die künstliche 5 V Massereferenz endgültig entfernen. Im letzten Teil dieses Projekts haben wir gesehen, dass eine Menge Energie verschwendet wird, nur um diese künstliche Massereferenz bei konstant 5 V zu halten. Mit einem einfachen Trick können wir den Wirkungsgrad deutlich erhöhen: Wir ersetzen die feste Spannung durch eine invertiertes Sinussignal. Damit können wir sowohl die Amplitude als auch den Wirkungsgrad verdoppeln.
Das untenstehende Bild zeigt das Konzept. Die Last ist zwischen den beiden Verstärkerausgängen angeschlossen. Daher ist das resultierende Wechselspannungssignal durch die Spannungsdifferenz zwischen den Verstärkerausgängen definiert. In unserem Fall beträgt die Amplitude der einzelnen Sinussignale 3,5 V. Da beide Signale zueinander invers sind, beträgt die Spannungsdifferenz zwischen beiden Signalen 7 V.
Natürlich erfordert diese neue Lösung einige Änderungen an unserer Schaltung. Wie im Bild unten gezeigt, muss einer der Eingänge unserer Verstärkerschaltung mit dem normalen Sinussignal und der andere mit dem invertiertem Sinussignal versorgt werden.
Wie erzeugen wir die invertierte Sinussignal? Nun, die einfachste Lösung ist, unsere Schaltung zur Signalerzeugung zu duplizieren. Für den PWM-DAC ist das recht einfach. Wir ersetzen einfach den Spannungsteiler durch einen zweiten RC-Filter und verwenden einen zweiten PWM-Ausgang, um das invertierte Sinussignal zu erzeugen. Für die Lösung mit dem MCP4725 DAC-Modul bräuchten wir ein weiteres DAC-Modul. Der Einfachheit halber werde ich mich hier jedoch auf die Lösung mit dem PWM-DAC beschränken.
Die angepasste Schaltung mit der zweiten Signalerzeugungsschaltung sieht nun wie folgt aus:
Jetzt muss nur noch der Code angepasst werden, um das invertierte Sinussignal zu erzeugen. Ich habe Pin 10
als zweiten PWM-Pin gewählt. Dieser PWM-Ausgang wird vom gleichen Timer angesteuert wie Pin 9
und aus diesem Grund sind unsere Anpassungen zur Erhöhung der PWM-Frequenz auch für diesen Pin wirksam. Das einzige, was noch zu tun ist, ist es, die Ausgangsspannung für unseren zweiten PWM-DAC zu setzen. Da unser Sinussignal symmetrisch ist, kann dies durch Hinzufügen einer einzigen Codezeile erreicht werden:
analogWrite(10, 255-voltages[current_step]);
Und so sieht das vollständige Programm nach dieser Änderung aus:
#include <EEPROM.h>
// PWM frequency is 62.5 kHz so we can update every 16 us
const int usPerCommand = 100;
// Precalculated Voltage Buffer
const int BUFFER_SIZE = 256;
unsigned int voltages[BUFFER_SIZE];
unsigned int steps;
unsigned int usPerStep;
unsigned int current_step = 0;
unsigned long start_time;
// Setup frequency
void setup() {
// Read desired frequency
Serial.begin(9600);
Serial.print("Enter Frequency (Hz): ");
// Wait 10s for input otherwise take stored value
Serial.setTimeout(10000);
float frequency = Serial.parseFloat();
if(frequency == 0) EEPROM.get(0, frequency);
else EEPROM.put(0, frequency);
Serial.println(frequency);
// Calculate number of possible steps
int possible_steps = 1000000/usPerCommand/frequency;
// Steps need to be a multiple of 4 to keep the sine form
steps = (possible_steps / 4) * 4;
if(steps > BUFFER_SIZE) steps = BUFFER_SIZE;
if(steps < 4) steps = 4;
// Time per Step
usPerStep = 1000000 / (frequency * steps);
if(usPerStep < usPerCommand) usPerStep = usPerCommand;
// Precalculate Sine Values 0.75 V - 4.25 V (38.25 - 216.75)
for(int i = 0; i < steps; i++) {
voltages[i] = sin(i*3.14*2/steps) * 89.25 + 127.5;
}
Serial.print("Number of output steps: ");
Serial.println(steps);
Serial.print("Microseconds per step: ");
Serial.println(usPerStep);
Serial.print("Archieved Frequency (Hz): ");
Serial.println(1000000.0/float(steps)/float(usPerStep));
// Enable the fastest possible frequency for timer 1
TCCR1B = (1<<WGM12) | (1<<CS10);
// Initially set start time
start_time = micros();
}
// Output values
void loop() {
analogWrite(9, voltages[current_step]);
analogWrite(10, 255-voltages[current_step]);
current_step++;
if(current_step >= steps) current_step = 0;
while(micros()-start_time < usPerStep);
start_time += usPerStep;
}
Schauen wir uns das Ergebnis an. Die Amplitude unseres Sinussignals beträgt jetzt 7 V und die neue Effektivspannung liegt bei fast 5 V. Aber wie sieht es mit der maximalen Ausgangsleistung und dem Wirkungsgrad aus?
Um diese Frage zu beantworten, habe ich das Tool, aus dem letzten Teil dieses Projektes, aktualisiert. Da wir in der Lage sind, ein Sinussignal mit einer doppelt so hohen Amplitude wie in unserer vorherigen Lösung zu erzeugen, und zwar aus denselben 12 V, ist die Verlustleistung in unserer neuen Schaltung viel geringer. Der Wirkungsgrad hat sich verdoppelt. Durch den höheren Wirkungsgrad und damit geringeren Spannungsabfall über den Transistoren geht weniger Energie verloren und, was noch wichtiger ist, die Transistoren überhitzen nicht mehr so schnell. Aus diesem Grund ist auch die maximale Ausgangsleistung deutlich gestiegen.
Die neue Schaltung ist in der Lage, eine 18 Ω Last bei einer Effektivspannung von etwa 5 V zu versorgen. Wenn wir nur den Widerstandswert vergleichen, mag das seltsam erscheinen, da wir mit unserer vorherigen Schaltung 14 Ω versorgen konnten. Wir müssen aber auch die höhere Spannung berücksichtigen. Bei einem festen Lastwiderstand bedeutet die doppelte Ausgangsspannung die vierfache Ausgangsleistung. Wenn die größtmögliche Last für unsere neue Schaltung 18 Ω beträgt, bedeutet dies, dass wir die Ausgangsleistung zwar nicht um den Faktor 4 steigern konnten, aber immerhin von 0,4 W auf jetzt fast 1,4 W. Falls du die Schaltung also selbst baust, achte bitte darauf, dass du einen Lastwiderstand verwendest, der für die entsprechende Leistung ausgelegt ist. Je nach Widerstandswert könnte ein kleiner 1/4-W-Widerstand ansonsten nämlich überhitzen und Feuer fangen.
Sind wir jetzt am Ziel usnere Projektreihe? Ja und nein. Wir haben einen Punkt erreicht, an dem wir eine einigermaßen leistungsfähige Niederspannungswechselstromquelle haben. Ich werde diese Schaltung nicht weiter verbessern. Ich möchte jedoch noch eine alternative Verstärkerlösung zeigen, die zwar nur mit dem digitalen PWM-DAC funktioniert, aber dafür auch deutlich einfacher ist. Dies wird das Thema für die nächsten Teile dieser Projektserie sein.