projekte:swr-meter_kurzwelle
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
projekte:swr-meter_kurzwelle [2016-12-21 21:07] – danielwf | projekte:swr-meter_kurzwelle [2021-01-31 12:38] – [Messbrücke] snoopy | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== SWR-Meter Kurzwelle ====== | ====== SWR-Meter Kurzwelle ====== | ||
- | **DIESER TEXT IST NOCH NICHT FERTIGGESTELLT!** | + | (siehe auch https:// |
- | Für den Funkbetrieb auf Kurzwelle und dem Selbstbau von Antennen ist ein Stehwellen-Messgerät erforderlich. | + | 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, |
- | 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 10: | 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, |
===== Dateien ===== | ===== Dateien ===== | ||
- | Das Zip-Archiv mit Arduino-Code, | + | Das Zip-Archiv mit Arduino-Code, |
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€ | ||
===== Messbrücke ===== | ===== Messbrücke ===== | ||
- | **Der Aufbau dieses SWR-Meters basiert auf der [[http://dl6gl.de/ | + | **Der Aufbau dieses SWR-Meters basiert auf der [hhttps:// |
* 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. | ||
* Ergänzen von 100kOhm-" | * Ergänzen von 100kOhm-" | ||
- | * Entfernen des 4, | + | * Entfernen des 4, |
- | + | ||
- | Der Schaltplan, die Platine und die Bestückung sind hier zusammengefasst: | + | |
- | //**TODO:** Fotos vom mechanischen | + | Der Schaltplan, die Platine und die Bestückung sind hier zusammengefasst: |
+ | Die bebilderte Anleitung zum Aufbau des Messkopplers | ||
===== Arduino ===== | ===== Arduino ===== | ||
Zeile 38: | Zeile 38: | ||
Am Arduino sind der SWR-Koppler und das I2C-Textdisplay wie folgt anzuschließen: | Am Arduino sind der SWR-Koppler und das I2C-Textdisplay wie folgt anzuschließen: | ||
- | ^ Modul ^ Pin Name ^ Arduino Pin ^ | + | ^Modul^ |
- | | I2C-Textdisplay | + | |I2C-Textdisplay |
- | | | SCL | A5 | | + | | |
- | | | VCC | 5V | | + | | |
- | | | GND | GND | | + | | |
- | | SWR-Messbrücke | F | A0 | | + | |SWR-Messbrücke|F|A0| |
- | | | R | A1 | | + | | |R|A1| |
- | | | + | 5V | | + | | |
- | | | -| GND | | + | | |-|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, | + | |
+ | 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: | 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 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" | + | * Die I²C-Adresse (und ggf. abweichende Pinbelegung) bei " |
- | Wie bei allen anderen SWR-Metern ist hier dann aber der Nachteil, dass der SWR-Wert bei unterschiedlichen Leistungen leicht abweichend ist (z.B. -0.15 bei 15W statt 50W), da die Diodenkennlinie sich bemerkbar macht. \\ Wer diese Korrektur wünscht, kann sie mit "bool diodeCorr = 1;" vornehmen, verzichtet damit aber auch auf die Vergleichbarkeit mit konventionellen SWR-Metern. \\ Für die Leistungsmessung wird immer der genauere Kennlinien-korrigierte Wert genommen. | + | * 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** SWR-Example.ino (Arduino 1.6.9, Stand 21.12.2016) | + | **Arduino-Sketch** |
<code c> | <code c> | ||
Zeile 70: | Zeile 69: | ||
// by Daniel Wendt-Fröhlich, | // by Daniel Wendt-Fröhlich, | ||
// " | // " | ||
- | // | + | // |
// | // | ||
// | // | ||
Zeile 98: | Zeile 97: | ||
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); | LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); | ||
bool DisplayRefresh = 1; | bool DisplayRefresh = 1; | ||
+ | unsigned long printMillis = 0; | ||
+ | unsigned long serialMillis = 0; | ||
+ | |||
// | // | ||
// Configuration | // Configuration | ||
- | int maxPower = 50; // maximum Power in Watt (incl. corrections) , maxPower = (5*N/ | + | int maxPower = 90; // maximum Power in Watt (incl. corrections) , maxPower = (5*N/ |
int swrFpin = 0; // SWR-Coupler Connections | int swrFpin = 0; // SWR-Coupler Connections | ||
int swrRpin = 1; | int swrRpin = 1; | ||
Zeile 163: | Zeile 165: | ||
delay(2000); | delay(2000); | ||
lcd.clear(); | lcd.clear(); | ||
+ | |||
} | } | ||
Zeile 174: | Zeile 177: | ||
readMeter(); | readMeter(); | ||
- | Serial.print(powerF, | + | |
- | | + | |
- | | + | |
- | + | lcd.setCursor(0, | |
- | | + | lcd.print(" |
- | lcd.print(" | + | if (powerPeak< |
- | if (powerF< | + | if (powerPeak< |
- | if (powerF< | + | lcd.print(powerPeak,0); // print power |
- | lcd.print(powerF,0); // print power | + | lcd.print(" |
- | 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, | ||
| | ||
- | char wattMeter[7] = " | ||
- | for (byte i=1; i<=6; i++) { | ||
- | if (powerF > (i * maxPower/7) ) wattMeter[i-1] = (char)0xFF; | ||
- | } | ||
- | if (powerF > maxPower) wattMeter[6] = ' | ||
- | lcd.setCursor(9, | ||
- | | + | |
- | if (swr < 0.1 ) swr = 0; // needed for disconnected SWR-bridge | + | 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, |
- | if (swr <= 9.99) {lcd.setCursor(4, | + | if (swr <= 9.99) {lcd.setCursor(4, |
+ | |||
+ | char swrMeter[7] = " | ||
+ | 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] = ' | ||
+ | } | ||
- | char swrMeter[7] = " | ||
- | 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] = ' | ||
} | } | ||
+ | lcd.setCursor(9, | ||
+ | printMillis = millis() + 200; | ||
+ | powerPeak = 0; | ||
+ | |||
+ | if (powerF > 0){ | ||
+ | Serial.print(powerF, | ||
+ | Serial.print(" | ||
+ | Serial.println(swr, | ||
+ | } | ||
} | } | ||
- | | + | |
- | delay(200); | + | |
| | ||
} | } | ||
- | |||
- | |||
</ | </ | ||
+ | |||
+ | \\ | ||
projekte/swr-meter_kurzwelle.txt · Zuletzt geändert: 2022-11-17 22:34 von 127.0.0.1