projekte:swr-meter_kurzwelle
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
projekte:swr-meter_kurzwelle [2016-12-21 17:58] – angelegt danielwf | projekte:swr-meter_kurzwelle [2021-01-31 12:39] – [Messbrücke] snoopy | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== SWR-Meter Kurzwelle ====== | ====== SWR-Meter Kurzwelle ====== | ||
- | Für den Funkbetrieb auf Kurzwelle und dem Selbstbau von Antennen ist ein Stehwellen-Messgerät erforderlich. | + | (siehe auch https:// |
- | Viele Kurzwellen-Transceiver haben dieses zwar eingebaut, aber die Anzeige-Elemente werden oft auch für andere Messwerte benötigt. Spätestens jedoch bei der Verwendung eines Selbstbaugerätes, | + | |
+ | Für den Funkbetrieb auf Kurzwelle und dem Selbstbau von Antennen ist ein Stehwellen-Messgerät erforderlich. Viele Kurzwellen-Transceiver haben dieses zwar eingebaut, aber die Anzeige-Elemente werden oft auch für andere Messwerte benötigt. Spätestens jedoch bei der Verwendung eines Selbstbaugerätes, | ||
Billige, fertige Analog-Geräte sind für ca. 50€ zu haben. Ein hochwertigerer Selbstbau auf Basis eines Mikrocontrollers ist jedoch nicht nur weit günstiger, sondern ließe sich um viele weitere Funktionen und Komponenten erweitern, wie z.B. eine serielle Ausgabe von Sendeleistung und SWR-Wert oder das Autotuning einer MagLoop-Antenne. | Billige, fertige Analog-Geräte sind für ca. 50€ zu haben. Ein hochwertigerer Selbstbau auf Basis eines Mikrocontrollers ist jedoch nicht nur weit günstiger, sondern ließe sich um viele weitere Funktionen und Komponenten erweitern, wie z.B. eine serielle Ausgabe von Sendeleistung und SWR-Wert oder das Autotuning einer MagLoop-Antenne. | ||
Zeile 8: | Zeile 9: | ||
Das hier vorgestellte SWR-Meter besteht aus zwei Komponenten: | Das hier vorgestellte SWR-Meter besteht aus zwei Komponenten: | ||
+ | |||
* **SWR-Messbrücke: | * **SWR-Messbrücke: | ||
* **Arduino Nano mit I²C-Textdisplay: | * **Arduino Nano mit I²C-Textdisplay: | ||
- | Beide Komponenten sind beliebig austauschbar, | + | Beide Komponenten sind beliebig austauschbar, |
- | Ein Zip-Archiv mit Arduino-Code, | + | ===== Dateien ===== |
+ | |||
+ | Das Zip-Archiv mit Arduino-Code, | ||
- | Der Schaltplan, die Platine und die Bestückung sind hier zusammengefasst: | ||
Für die Teile der SWR-Messbrücke gibt es einen [[https:// | Für die Teile der SWR-Messbrücke gibt es einen [[https:// | ||
- | Dazu wird nur noch ein beliebiger " | + | Dazu wird nur noch ein beliebiger " |
Die gesamten Materialkosten liegen bei ca. 25€ | Die gesamten Materialkosten liegen bei ca. 25€ | ||
- | Der Aufbau dieses SWR-Meters basiert auf der [[http://dl6gl.de/ | + | ===== Messbrücke ===== |
+ | |||
+ | **Der Aufbau dieses SWR-Meters basiert auf der [https:// | ||
* Der OpAmp TLC272 wird nur mit 5V betrieben (3.8V Arbeitsbereich an den Eingängen) | * Der OpAmp TLC272 wird nur mit 5V betrieben (3.8V Arbeitsbereich an den Eingängen) | ||
* Die 10k-Ohm-Widerstände an den invertierenden Eingängen haben wir entfernt. \\ Der Ausgang der beiden OpAmps wird direkt auf den invertierenden Eingang gelegt (=Impedanzwandler). Durch die Impedanzwandlung wird der Messkreis weniger gedämoft, es sind längere Verbindungsleitungen verwendbar und der Arduino-ADC-Eingang bleibt durch Überspannungen geschützt. | * Die 10k-Ohm-Widerstände an den invertierenden Eingängen haben wir entfernt. \\ Der Ausgang der beiden OpAmps wird direkt auf den invertierenden Eingang gelegt (=Impedanzwandler). Durch die Impedanzwandlung wird der Messkreis weniger gedämoft, es sind längere Verbindungsleitungen verwendbar und der Arduino-ADC-Eingang bleibt durch Überspannungen geschützt. | ||
Zeile 25: | Zeile 31: | ||
* Entfernen des 4, | * Entfernen des 4, | ||
+ | Der Schaltplan, die Platine und die Bestückung sind hier zusammengefasst: | ||
+ | Die bebilderte Anleitung zum Aufbau des Messkopplers ist hier: [[https:// | ||
+ | |||
+ | ===== Arduino ===== | ||
+ | |||
+ | Am Arduino sind der SWR-Koppler und das I2C-Textdisplay wie folgt anzuschließen: | ||
+ | |||
+ | ^Modul^ | ||
+ | |I2C-Textdisplay | ||
+ | | | ||
+ | | | ||
+ | | | ||
+ | |SWR-Messbrücke|F|A0| | ||
+ | | |R|A1| | ||
+ | | | ||
+ | | |-|GND| | ||
+ | |||
+ | Der Arduino-Code ist auch im oben verlinkten Zip-Archiv enthalten. \\ Implentiert wurde ebenfalls die von Georg Latzel, DL6GL beschriebene und für die BAT43 ermittelte [[http:// | ||
+ | Wie immer eine kurze Warnung vorab: ich bin kein Programmierer und es gibt die ein oder andere Stelle, die man noch verbessern könnte. Auch wenn der Code gut funktioniert, | ||
+ | Folgende Parameter sind von jedem selbst noch anzupassen: | ||
+ | |||
+ | * Die I²C-Adresse (und ggf. abweichende Pinbelegung) bei " | ||
+ | * Maximale Leistung (je nach Windungszahl) bei " int maxPower = … " | ||
+ | * Die Korrektur der Diodenkennlinie bei " bool diodeCorr = … " * | ||
+ | |||
+ | Alle anderen Konfigurationsmöglichkeiten sind im Code auch dokumentiert. \\ \\ Die Ausgabe erfolgt über die FLOAT-Variablen ' | ||
+ | |||
+ | * Die Korrektur der Diodenkennlinie lässt sich mit "bool diodeCorr = 0;" ausschalten. Damit ist der angezeigte Wert vergleichbar mit konventionellen analogen SWR-Metern, die diese Korrektur auch nicht vornehmen. Der Wert stimmt dadurch mit den Werten überein, die z.B. auch mein "Yaesu FT-990" | ||
+ | |||
+ | **Arduino-Sketch** | ||
+ | |||
+ | <code c> | ||
+ | // | ||
+ | // .----------------------------------------------------------------------------------------------------------------------------------------------------------------. | ||
+ | // | SWR-Meter Example | ||
+ | // ' | ||
+ | // by Daniel Wendt-Fröhlich, | ||
+ | // " | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // Use SWR-circuit from here http:// | ||
+ | // For 5V-Operation some changes are needed: | ||
+ | // - Remove 10k-Resistors at OpAmps and connect outputs to inverted inputs directly | ||
+ | // - Add 100k to noninverted-inputs of OpAmps | ||
+ | // - remove inline 4.7k at output, we need only the Pulldown 4, | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // Display SDA: A4 (check/ | ||
+ | // Display SCL: A5 | ||
+ | // SWR-Bridge F: A0 | ||
+ | // SWR-Bridge R: A1 | ||
+ | // | ||
+ | // | ||
+ | // .----------------------------------------------------------------------------------------------------------------------------------------------------------------. | ||
+ | // | Libraries and Settings | ||
+ | // ' | ||
+ | // | ||
+ | #include < | ||
+ | #include < | ||
+ | LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); | ||
+ | bool DisplayRefresh = 1; | ||
+ | unsigned long printMillis = 0; | ||
+ | unsigned long serialMillis = 0; | ||
+ | |||
+ | |||
+ | // | ||
+ | |||
+ | // Configuration | ||
+ | int maxPower = 90; // maximum Power in Watt (incl. corrections) , maxPower = (5*N/ | ||
+ | int swrFpin = 0; // SWR-Coupler Connections | ||
+ | int swrRpin = 1; | ||
+ | bool diodeCorr = 0; // 1 = correction of diode characteristic | ||
+ | // 0 = no correction, comparable to analog SWR-Meters. only used for SWR, power will be always corrected. | ||
+ | |||
+ | // Parameters for used Diode, see http:// | ||
+ | float a = 0.25161; | ||
+ | float b = -0.85798; | ||
+ | float c = 1; | ||
+ | |||
+ | // Values for Calculation | ||
+ | float areadF; | ||
+ | float areadR; | ||
+ | float voltageF; | ||
+ | float voltageR; | ||
+ | float calcF; | ||
+ | float calcR; | ||
+ | float powerF; | ||
+ | float powerPeak; | ||
+ | float swr; // calculated swr | ||
+ | |||
+ | void readMeter(){ | ||
+ | areadF = analogRead(swrFpin); | ||
+ | areadR = analogRead(swrRpin); | ||
+ | voltageF = areadF * 0.0048828125; | ||
+ | voltageR = areadR * 0.0048828125; | ||
+ | |||
+ | calcF = pow(voltageF, | ||
+ | calcF = calcF * a; // CorrectionFactor = a * ( voltage ^ b) + c | ||
+ | calcF = calcF + c; | ||
+ | calcF = calcF * voltageF; | ||
+ | |||
+ | calcR = pow(voltageR, | ||
+ | calcR = calcR * a; | ||
+ | calcR = calcR + c; | ||
+ | calcR = calcR * voltageR; | ||
+ | |||
+ | powerF = (maxPower * 8) * ( sq(calcF) / 50 ); // with maxPower=ADC=2.5V -> Padc = (2.5V)² / 50 = 0,125 ==> maxPower / 0,125 = maxPower * 8 | ||
+ | // than (maxPower * 8 ) * Padc ==> (maxPower * 8 ) * (voltageF² / 50ohm) | ||
+ | |||
+ | |||
+ | if (diodeCorr == 1) swr = (calcF + calcR) / (calcF - calcR); | ||
+ | if (diodeCorr == 0) swr = (areadF + areadR) / (areadF - areadR); | ||
+ | } | ||
+ | |||
+ | |||
+ | // .----------------------------------------------------------------------------------------------------------------------------------------------------------------. | ||
+ | // | SETUP | | ||
+ | // ' | ||
+ | void setup() { | ||
- | //**TODO:** Fotos vom mechanischen Aufbau des Messkopplers// | + | Serial.begin(9600); |
- | Der Messkoppler wird in unserem Aufbau vom AD-Wandler eines " | + | lcd.begin(16, |
+ | lcd.backlight(); | ||
+ | lcd.setCursor(4, | ||
+ | lcd.setCursor(4, | ||
+ | delay(2000); | ||
+ | lcd.clear(); | ||
+ | } | ||
- | ===== Fett/Kursiv/Unterstrichen ===== | + | // |
+ | // | LOOP | | ||
+ | // ' | ||
- | DokuWiki unterstützt **fetten**, // | ||
- | Dies ist ein Beispieltext mit einigen Zeilenumbrüchen.\\ Beachte: Die zwei umgekehrten Schrägstriche | + | void loop() { |
- | werden nur erkannt, wenn sie am Zeilenende stehen\\ | + | |
- | oder wenn ihnen ein\\ Leerzeichen folgt.\\ So\\sieht es ohne Leerzeichen aus. | + | |
- | ===== Links ===== | + | readMeter(); |
- | Externe Links werden automatisch erkannt: http://www.hackerspace-bremen.de oder einfach www.hackerspace-bremen.de. | + | if (powerF > powerPeak) powerPeak = powerF; |
- | Verweise können auch hinter eigenen Begriffen versteckt werden: | + | if (printMillis < millis() ) { |
- | E-Mail Adressen werden in spitze Klammern gesetzt: < | + | lcd.setCursor(0, |
+ | lcd.print(" | ||
+ | if (powerPeak< | ||
+ | if (powerPeak< | ||
+ | lcd.print(powerPeak, | ||
+ | lcd.print(" | ||
+ | | ||
+ | char wattMeter[7] = " | ||
+ | for (byte i=1; i<=6; i++) { | ||
+ | if (powerPeak > (i * maxPower/7) ) wattMeter[i-1] = (char)0xFF; | ||
+ | } | ||
+ | if (powerPeak > maxPower) wattMeter[6] = ' | ||
+ | lcd.setCursor(9, | ||
+ | | ||
- | Interne Links werden in doppelten eckigen Klammern gesetzt: | + | lcd.setCursor(0, |
- | [[pagename]] | + | if (swr < 0.1 ) swr = 0; // needed for disconnected SWR-bridge |
+ | if (swr > 9.99) {lcd.setCursor(4, | ||
+ | if (swr <= 9.99) {lcd.setCursor(4, | ||
- | Ein Link kann auch hinter einem Begriff oder einer Beschreibung versteckt werden: | + | char swrMeter[7] = " |
- | [[pagename|Beschreibung für einen Link]]. | + | if (swr > 1,2 ) swrMeter[0]=(char)0xFF; |
+ | for (byte i=1; | ||
+ | if (swr > ((i*0.5)+1)){ | ||
+ | swrMeter[i] = (char)0xFF; | ||
+ | if (3 <= ((i*0.5)+1)) swrMeter[i] = ' | ||
+ | } | ||
- | ===== Listen ===== | + | } |
+ | lcd.setCursor(9, | ||
- | * Dies ist ein Eintrag einer unsortierten Liste | + | printMillis = millis() + 200; |
- | * Ein zweiter Eintrag | + | |
- | | + | |
- | * Noch ein Eintrag | + | |
- | - Dies ist ein Eintrag einer nummerierte Liste | + | if (powerF > 0){ |
- | - Ein zweiter Eintrag | + | |
- | | + | Serial.print(" |
- | | + | Serial.println(swr, |
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | } | ||
- | ===== Tabellen ===== | + | </ |
- | ^ hervorgehoben | + | \\ |
- | | Zeile 1 Spalte 1 | Zeile 1 Spalte 2| Zeile 1 Spalte 3 | | + | |
- | | Zeile 2 Spalte 1 | doppelte Spaltenbreite (beachte den doppelten senkrechten Strich) || | + | |
- | | Zeile 3 Spalte 1 | Zeile 2 Spalte 2 | Zeile 2 Spalte 3 | | + | |
- | | Zeile 4 Spalte 1 | Zeile 3 Spalte 2 | Zeile 4 Spalte 3 | | + | |
- | ^ Tabelle mit Ausrichtung | ||
- | | Rechts| | ||
- | |Links | ||
- | | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx | | ||
projekte/swr-meter_kurzwelle.txt · Zuletzt geändert: 2022-11-17 22:34 von 127.0.0.1