0 bis 127dB-Stufenabschwächer
Erstellt: DL6GL, 13.09.2017, letzte Änderung 28.03.2024
Update 28.03.2024: Nun war die Zeit wohl reif für einen Ersatz meiner Verlegenheitslösung mit dem umgekehrten Horner-Schema. Uwe, DK4UG, hat sie beigetragen. Der schlichten Eleganz wegen soll sie weiter unten erläutert werden.
Um bei Hochfrequenzmessungen wohlproportionierte Pegel einzustellen, ist ein Stufenabschwächer unentbehrlich. Selbstbau wie hier ist machbar, stößt aber spätestens jenseits des 2m-Bandes an seine Grenzen. Da hilft nur noch Klotzen mit einem Profi-Gerät wie dem Weinschel 3200-1 Attenuator [1].
Das mit [1] zu apitech.com neu verlinkte Datenblatt beschreibt eine neuere Generation mit Index E (3200-1E). Hier wurde der Vorläufer eingesetzt. Als Gebrauchtgerät ist dieser Abschwächer mit etwas Glück für unter 100 US$ zu bekommen. Fehlt nur noch eine Steuerung mit einem Atmel-Controller.
1 Weinschel 3200-1 Attenuator
Hier die wichtigsten Daten:
- Impedanz 50Ω
- Einstellbereich 0 bis 127dB in 1dB-Schritten
- Frequenzbereich DC bis 2GHz
- Belastbarkeit 1W
- Maximales SWR 1,35
- Genauigkeit der Abstufungen < 0,3dB
- Relaissteuerung 12V/14mA je Stufe
2 Schaltung
Abb. 1: Gesamtschaltung.
Steuerung und Anzeige besorgt ein ATmega48. Ohne zeitkritische Aufgaben reicht der interne 8MHz RC-Generatortakt des Controllers.
Der 8 Bit breite Port D steuert die Relais im Attenuator. Die Gates der P-Channel MOSFETs BSS84 sind im Ruhezustand über R2 bis R9 mit +12V vorgespannt, so dass die Relais im Attenuator stromlos sind. Jedes an den Ports PD0 bis PD7 gesetzte Bit steuert einen Darlington-Treiber im ULN2803 auf. Die nunmehr negative Gate-Source-Spannung macht den MOSFET leitend und lässt das zugehörige Relais im Attenuator anziehen.
Die Dämpfungsstufen werden entsprechend der binären Wertigkeit (1 = 20 dB, Pin 2, bis 32 = 25 dB, Pin 1) von 1 bis 63dB eingestellt. Ab 64dB beginnt diese Stufung neu nach Setzen der Pins 4 und 8 (64dB), siehe Abb. 1 rechts unten. Die Einstellung wird mit dem Drehencoder wahlweise in 1 oder in 10dB-Schritten vorgenommen.
Die Stromversorgung ≥15V DC erfolgt über eine Hohlbuchse extern. Für den Schutz der Relais sorgt ein 12V-Regler.
3 Realisierung
Bei der Auslegung von Gehäuse und Platine waren die Maße des Attenuators einschließlich SMA-Buchsen bestimmend. Anders als im vergleichbaren Projekt von Hans-Peter, DL2KHP [2], waren möglichst kleine Abmessungen das Ziel. In einem Gehäuse TEKO B4 (143x72x43mm) war schließlich alles unterzubringen. Die beiden SMA-Buchsen wurden mit Male-Female-Adaptern verlängert.
Abb. 2: Platine.
R2 bis R9 sind in einem neunpoligen Widerstandsnetzwerk kombiniert (Abb. 2, Mitte). Links daneben werden mit einer neunpoligen Stiftleiste, oben mit einem Draht verlötet, die Sourcen von T1 bis T8 mit +12V verbunden.
Abb. 3: Innenansicht.
Die Adern im Flachkabel zählen vom Dreieckskennzeichen für Pin 1 von rechts nach links aufsteigend, in Abb. 3 also 1 = weiß (rechts) bis 10 = grau (links).
Zur Befestigung des Attenuators sind Schrauben 4-40 UNC-2B x 0.24 notwendig.
Vor dem Aussägen des Durchbruchs für das Display sollte dessen Positionierung unbedingt ausgemessen werden. Je nach Typ und Hersteller gibt es hier merkbare Unterschiede. Auf die zugehörigen Maßzeichungen ist auch nicht immer Verlass.
4 Software
Die Software wurde mit BASCOM-AVR erstellt. Quelle, .hex, Kurzbeschreibung und Excel-Rechenschema im Download. Es gibt zwei Versionen, eine für Drehencoder ohne Zwischenschaltstufen und eine mit ("Step1").
Mit der Version 1.03 wurde die zugegeben umständliche Ansteuerung des Abschwächers durch eine elegante Berechnungsmethode von Uwe, DK4UG, ersetzt.
Der Weinschel 3200-1 Abschwächer ist über einen 8 Bit breiten AVR-Port in den Stufen 0 bis 127dB anzusteuern. Port-Bit (0 … 7) = 1: Entsprechendes dB-Relais an Pin 1 bis 8 wird aktiviert. Der neue DK4UG-Algorithmus wurde vorab mit Excel getestet und optimiert.
Abb. 4: Berechnung der Bitmuster mit Excel.
Der Abschwächer in Abb. 3 ist mit Pin 1 (32dB) nach links und Pin 9 (GND) nach rechts eingebaut. In Abb. 4 wird er in Übereinstimmung mit der Bit-Reihenfolge seitenverkehrt gezeigt.
Mit den verfügbaren dB-Stufen sind einstellbar:
- drei Mal 32dB ergeben 32, 64 und 96dB,
- 1, 2, 4, 8, 16dB ergeben alle Zwischenstufen von 1 bis 31dB,
- maximal also bis 96 + 31 = 127dB.
Das heißt, jede Abschwächung von 1 bis 127dB ist in die verfügbaren Stufen zu zerlegen. Stufen, die zur Gesamtdämpfung beitragen, werden mit Bit = 1 am entsprechenden Port aktiviert, alle anderen mit Bit = 0 deaktiviert. Abschwächung 0dB: alle 8 Bits = 0.
Das nehmen 8 Variablen mit den passenden Bitmustern vor, vgl. Abb. 4. Mit BASCOM "Alias" kann man nicht nur AVR-Ports mit sprechenden Namen versehen wie im BASCOM Help beschrieben, sondern auch Werte zuweisen:
Index | Variable | Bitmuster | dB-Wert |
0 | ATT96 Alias &H89 | 1000_1001 | 32+32+32=96 |
1 | ATT64 Alias &H88 | 1000_1000 | 32+32=64 |
2 | ATT32 Alias &H01 | 0000_0001 | 32 |
3 | ATT16 Alias &H40 | 0100_0000 | 16 |
4 | ATT8 Alias &H20 | 0010_0000 | 8 |
5 | ATT4 Alias &H10 | 0001_0000 | 4 |
6 | ATT2 Alias &H04 | 0000_0100 | 2 |
7 | ATT1 Alias &H02 | 0000_0010 | 1 |
Die unteren Bitmuster für 1 bis 8dB sind in Abb. 4 nachzuvollziehen.
Die ATTXX-Variablen 0 … 7 werden mit den identisch indizierten dB-Werten "ATTs" in Lookup-Tabellen abgelegt, Zugriff und Identifizierung über den Index 0 …7.
'Attenuator Lookup Tables -----------------------------------------------------
'Main step attenuator port bit patterns
attsPort:
Data Att96 , Att64 , Att32 , Att16 , Att8 , Att4 , Att2 , Att1
'Main step attenuations (dB)
Atts:
Data 96 , 64 , 32 , 16 , 8 , 4 , 2 , 1
Eine Anpassung für andere Abschwächer mit 8 Bit-Ansteuerung und anderen dB-Stufen oder anderen Pin-Belegungen sollte nach diesem Muster einfach vorzunehmen sein. Die nachfolgende neue Funktion zum Setzen der Bitmuster wertet die jeweiligen Zuordnungen in den Lookup-Tabellen aus.
Function SetBitPattern(byVal bytAtten As Byte) As Byte
'Calculate attenuator bit pattern at ports 1...8
'Smart method submitted by Uwe, DK4UG
'Input: bytAtten Attenuation (dB) 0...127
'Output: SetBitPattern Bit pattern to set attenuator ports 1...8
Dim bytAttPort As Byte 'Attenuator port bit pattern
Dim bytAtt As Byte 'Attenuation dB
Dim i As Byte
bytAttPort = 0
If bytAtten <> 0 Then
For i = 0 To 7
bytAtt = bytAtten \ Lookup(i , Atts)
If bytAtt <> 0 Then
bytAttPort = bytAttPort Or Lookup(i , attsPort)
bytAtten = bytAtten - Lookup(i , Atts)
If bytAtten = 0 Then Exit For
End If
Next i
End If
SetBitPattern = bytAttPort
End Function
Wenn bytAtten= 0 ist, bleibt das anfängliche Bitmuster bytAttPort = 0000_0000 und fertig. Sonst werden alle Abschwächerstufen Atts durchprobiert. Sobald die Division bytAtten \ Atts(i) größer 0 ist, also bytAtten ≥ Atts(i) ist, erfolgt die Feinsuche. Dann sind noch kleinere Zwischenstufen zu finden.
In diesem Fall wird mit dem bitweisen Or das Bitmuster bytattPort um dort noch nicht, aber in attsPort(i) vorhandene Bits = 1 ergänzt (X Or Y = 1, wenn X oder Y oder beide = 1, sonst = 0).
Anschließend wird die obige Division bytAtten \ Atts(i) untersucht: Ist die Differenz bytAtten - Atts(i), also der Rest > 0, müssen noch weitere Zwischenstufen aus dem Rest zerlegt werden. Sonst, für Rest = 0, gibt es nichts mehr zu zerlegen. Der Dämpfungswert wurde gefunden, das komplette Bitmuster ist gesetzt.
Schon smart im Vergleich mit meinem vorherigen Versuch. Herzlichen Dank, Uwe.
Die Bedienung erfolgt nur mit dem Drehencoder, der drei Funktionen bereitstellt:
- Drehen zur Einstellung des Dämpfungswertes 0 bis 127dB,
- kurzer Druck zum Wechsel zwischen den Schrittweiten 1 und 10dB,
- langer Druck zur Darstellung des Relativpegels in Bezug auf die aktuelle Dämpfung als Offset.
Die dritte Funktion erleichtert z.B. Abgleicharbeiten, indem eine beliebig einstellbare Dämpfung als Bezugspunkt dient, um den Relativpegel in dBm bezogen auf diesen Offset in der ersten Displayzeile anzuzeigen. Wenn z.B. der HF-Generator 10dBm Pegel liefert und der Offset ebenfalls auf 10dB eingestellt wird, zeigt das Display in der Funktion 3 folgerichtig 0dBm an.
Abb. 5: Offset-Einstellung.
Mit jeder Änderung der Dämpfung wird damit der Ausgangspegel hinter dem Attenuator unmittelbar in dBm angezeigt.
Referenzen
[1] https://www.apitech.com/globalassets/documents/products/rf-microwave-mi…
[2] http://www.dl2khp.de/projekte/attenuator.html
Die Seite von DL2KHP (sk) wurde abgeschaltet.
Downloads
Hier sind die Downloads mit Schaltbildern, Platinenlayouts, Firmware und weiteren Beschreibungen.
Wie immer: Das beschriebene Mustergerät wurde eingehend getestet, es gibt aber weder Gewährleistung noch Garantie.
Auch wie immer, die Downloads sind frei für den privaten Gebrauch entsprechend der GNU-Lizenz. Eine kommerzielle Nutzung ist nicht gestattet.
Update 21.02.2019:
Bei Nachbauern arbeiten nicht alle eingesetzten Encoder zufriedenstellend. Es stehen nun zwei Versionen zur Verfügung:
(1) Ohne Auswertung von Zwischenschaltstufen,
(2) mit Auswertung von Zwischenschaltstufen, Dateiname "...Step1".
Siehe auch hier.
Update V1.01, 14.06.2019
Die 10dB-Schritte stoppen nun, wenn der nächste Schritt die untere oder obere Grenze (0/127dB) überschreiten würde. Damit bleibt das Raster erhalten.
Update V1.02, 07.07.2019
Reine Kosmetik: Die umständliche Programmierung der Schrittweitensteuerung 1/10dB bereinigt.
Update V1.03, 28.03.2024
Die umständliche Erstellung des Ansteuer-Bitmusters mit dem umgekehrten Horner-Schema wurde durch eine elegante Berechnung von Uwe, DK4UG, wie oben beschrieben ersetzt.
Download
attenuator_mega48_firmware_v103.zip