Leistungsmessung im HF-Bereich ist eine Sache für sich. Einerseits gibt es die Ausgangsleistung eines Transceivers - meist 100 Watt; dafür lässt sich auf ein SWR/PWR-Meter zurückgreifen, allerdings mit dem Nachteil einer erheblichen Messungenauigkeit. Andererseits gibt es kleine Leistungen im Bereich einiger Milliwatt - da zeigt ein SWR/PWR-Meter schon mal gar nichts an - in der Not richtet man das Signal gleich, misst die Gleichspannung und beginnt zu rechnen. Für beide Situationen fehlt also oftmals ein passendes Messgerät.
Bisher habe meistens den Computer angeworfen und mit dem FA-NWT gemessen, was auch gut funktioniert. Allerdings liebe ich Standalone-Geräte; nicht weil ich den Computer nicht benutzen würde, sondern weil ich meist zum Werkeln irgendeine alte Serie auf demselben laufen lasse und nicht ständig zwischen VLC und linnwt hin- und herschalten will. Also musste auch hier ein passendes Gerät her.
Nun gibt es im Netz einige Ansätze für einen HF-Leistungsmesser, häufig auf Basis des AD8307. Da ich noch so einen rumliegen hatte, machte ich mich damit ans Werk. Wie gehabt kommt auch hier wieder ein ATmega16 zum Einsatz - der hat zwar für das Projekt zuviele Pins, aber vielleicht kommen ja noch Funktionen dazu; zudem ist der ATmega16 in China kaum teurer als der ATmega8.
Der AD8307 funktioniert als logarithmischer Detektor und liefert am Ausgang eine lineare Gleichspannung. Zum Einsatz kommt der AVR-interne A/D-Converter, als Spannungsreferenz wird ein MCP1541 benutzt; um die Bitgenauigkeit zu erhöhen, wende ich ein 8-faches Oversampling an. Pro Sekunde erfolgt eine Messung mit anschliessender Konvertierung der ADC-Werte in dBm, Watt und Spannung an 50Ω. Berechnungsgrundlage sind zwei Referenzwerte, die nacheinander dem Messkopf angelegt und im EEPROM abgespeichert werden; als Signalquelle verwende ich den TG meines Spektrumanalyzers - zuerst mit 0dBm Signalleistung für den Referenzwert 1, danach mit -30dB Attenuator für den Referenzwert 2. Dieses Vorgehen wiederhole ich für 8 verschiedene Frequenzen, da der AD8307 über den verfügbaren Frequenzbereich natürlich nicht vollkommen linear arbeitet.
Da der AD8307 nur bis ins 70cm-Band verwendbar ist, habe ich einen Messkopf für den AD8362 nach DL4JAL aufgebaut - dieser lässt sich selbst noch auf dem 13cm-Band verwenden. Seine Funktionsweise ist dieselbe wie beim AD8307, er hat lediglich einen höheren Noisefloor von etwa -48dBm, gegenüber -78dBm beim AD8307. Natürlich maximale Eingangsleistung darf 10dBm nicht überschreiten; für höhere Leistungen ist ein Attenuator zu verwenden - die gewählte Abschwächung kann am Leistungsmesser eingestellt werden, damit die richtige Leistung angezeigt wird.
Die Steuerung des Leistungsmessers erfolgt mit einem Rotary Encoder und der ausgewählte Messkopf wird mit einer LED angezeigt. Das Display ist wie gehabt ein gewöhnliches 16x2-LCD von der Stange. Die Genauigkeit hängt verständlicherweise von den zum Kalibrieren verwendeten Referenzsignalen ab; in meinem Fall verlasse ich mich da auf die Genauigkeit des teuersten Messgerätes in meinem Gerätepark - genauer geht es natürlich immer.
Update 01.2016 Da mir die Software schon von Beginn an etwas wackelig vorkam - was mich damals dazu bewegt hat, den Watchdog gegen evt. Hänger zu aktivieren, habe ich die Software einer totalen Überarbeitung unterzogen. Zunächst habe ich alle string-Funktionen ersetzt und die Umwandlung von Zahlen in characters mit einer einfach gestrickten itoa-Funktion realisiert. Danach habe ich die Arithmetik auf Festkomma umgestellt; damit kommen keine doubles mehr zum Einsatz, was im Zusammenhang mit der Eliminierung von string-Funktionen die wuchtigen AVR-Floatlibraries überflüssig gemacht hat. Zudem wurde die LCD-Funktion auf die minimal notwendigen Features zusammengekürzt. In der Summe wurde der Code um fast 4kByte kleiner und eine Portierung auf den von der Grösse her angemessereren Atmega8 ist nun auch möglich. Weitere Messungen an den Messköpfen ergeben, dass der Kopf auf Basis des AD8307 für 70cm nicht wirklich im vertretbaren Rahmen zu verwenden ist; der AD8362 ist in jedem Fall die bessere Wahl. Mein AD8307-Messkopf hat aber den Vorteil, dass er bis +30dBm Eingangsleistung verträgt, was bei gewissen Szenarien einen externen Attenuator und damit einer weitere Ungenauigkeitsquelle in der Messung überflüssig macht.
Update 04.2019 Als ich wieder mal am Messen war, fiel mir auf, dass die externe 0dBm-Referenz eigentlich eine ganz unhandliche Angelegenheit ist. Selbige habe ich vor längerer Zeit nach der Vorlage von DL7AV gebaut - mit einem UART-Quarz von 3.68MHz. Das liegt zwar in einem Afu-Band, aber so ganz glücklich war das nicht; immerhin verwenden kommerzielle Geräte 50MHz als Kalibrierfrequenz.
So kam es, dass ich von einem AD9835-Board den 50MHz-Oszillator entfernte und wieder eine Schaltung gemäss DL7AV baute. Natürlich kam dabei kein IRF510 zum Einsatz, sondern ein BS170. Um die Streuung der Dioden, die zur Gewinnung des Referenz-DCs für den OPamp aus der Amplitude der HF notwendig ist, zu minimieren, hatte ich schon vor längerem die Doppeldiode BAS28 eingelagert; auf dem gleichen Die sind sowohl die elektrischen Parameter ähnlich wie auch die gleiche thermische Drift gewährleistet. In Ermangelung eines anderen 5V-Reglers habe ich wiederum einen LM317 verbaut und mit einem Trimmer in einem kleinen Fenster regelbar gemacht.
Des weiteren habe ich mich endlich durchgerungen, den MCU auch auf Ausgabe via UART zu stellen; ein FT232RL übernimmt dabei die Übergabe an USB; auslesbar sind dabei die Kalibrierparameter für oberen und unteren dBm-Wert sowie die dabei gemessenen ADC-Werte; natürlich ist auch der aktuell anliegende Pegel am ADC auslesbar, so dass damit alle verfügbaren Daten für eine Berechnung auf dem PC gegeben sind. Bei Gelegenheit werde ich wohl ein kleines Frontend in Python dazu schreiben.
Die wohl entscheidenste Weiterentwicklung ist der Ersatz des MCP3202 durch einen MCP3204 und das Anbinden eines der ADC-Pins an eine DIN-Buchse zum Anschluss externer Detektoren. Somit sind nun Messungen z.B. mit einem externen AD8307 ohne Pad oder mit einem AD8317 möglich. Weiterhin hab ich eine Zero-Funktion eingebaut, womit man den Zähler für S11-Parameter Messungen einsetzen kann, indem man mit einem Coupler im Leerlauf oder Kurzschluss nullt und dann die Reflexionsdämpfung am DUT misst. Die logische Schlussfolgerung dazu wäre natürlich, die Displayausgabe auf gängige standing wave ratio Werte umzustellen, was ich allerdings noch nicht gemacht habe.