Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:swr-meter_kurzwelle

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
projekte:swr-meter_kurzwelle [2016-12-27 01:57] – [Arduino] danielwfprojekte:swr-meter_kurzwelle [2022-11-17 22:34] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== SWR-Meter Kurzwelle ====== ====== SWR-Meter Kurzwelle ======
 +
 +(siehe auch https://wiki.funkfreun.de/projekte/swr-meter_kurzwelle )
  
 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, Senderverstärkers oder eines externen Tuners ist oft ein externes SWR-Meter notwendig.\\ 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, Senderverstärkers oder eines externen Tuners ist oft ein externes SWR-Meter notwendig.\\
Zeile 14: Zeile 16:
 ===== Dateien ===== ===== Dateien =====
  
-Das Zip-Archiv mit Arduino-Code, Bestückungsanleitung, Fritzing-Projekt und Ätzvorlagen ist hier zu finden: [[https://wiki.hackerspace-bremen.de/_media/projekte/hshb-swr-meter.zip|hshb-swr-meter.zip]]+Das Zip-Archiv mit Arduino-Code, Bestückungsanleitung, Fritzing-ProjektÄtzvorlagen und bebilderter Aufbauanleitung ist hier zu finden: [[https://wiki.hackerspace-bremen.de/_media/projekte/hshb-swr-meter.zip|hshb-swr-meter.zip]] (letzte Aktualisierung 03-Jan-2017)
  
 Für die Teile der SWR-Messbrücke gibt es einen [[https://www.reichelt.de/my/1292009|Reichelt-Warenkorb]]. \\ Für die Teile der SWR-Messbrücke gibt es einen [[https://www.reichelt.de/my/1292009|Reichelt-Warenkorb]]. \\
Zeile 22: Zeile 24:
 ===== Messbrücke ===== ===== Messbrücke =====
  
-**Der Aufbau dieses SWR-Meters basiert auf der [[http://dl6gl.de/amateurfunk/swr-messbruecke-mit-software-korrektur-der-diodenkennlinie|"SWR-Messbrücke mit Software-Korrektur der Diodenkennlinie" von Georg Latzel, DL6GL]].** \\ Da unser SWR-Meter jedoch auch mit 5V betrieben werden soll (=Arduino-VCC, USB-Spannung), haben wir ein paar Schaltungsänderungen gemacht:+**Der Aufbau dieses SWR-Meters basiert auf der [[https://dl6gl.de/swr-messbruecke-mit-software-korrektur-der-diodenkennlinie.html|"SWR-Messbrücke mit Software-Korrektur der Diodenkennlinie" von Georg Latzel, DL6GL]].** \\ Da unser SWR-Meter jedoch auch mit 5V betrieben werden soll (=Arduino-VCC, USB-Spannung), haben wir ein paar Schaltungsänderungen gemacht:
  
   * 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)
Zeile 47: Zeile 49:
  
 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://dl6gl.de/amateurfunk/swr-messbruecke-mit-software-korrektur-der-diodenkennlinie|Korrektur der Diodenkennlinie]] (Leseempfehlung!). \\ 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://dl6gl.de/amateurfunk/swr-messbruecke-mit-software-korrektur-der-diodenkennlinie|Korrektur der Diodenkennlinie]] (Leseempfehlung!). \\
-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, bin ich für jeden Tip per Mail an danielwf@hackerspace-bremen.de dankbar - man lernt ja schließlich nie aus ;) \\+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, bin ich für jeden Tip per Mail an dl2ab@darc.de dankbar - man lernt ja schließlich nie aus ;) \\
 Folgende Parameter sind von jedem selbst noch anzupassen: Folgende Parameter sind von jedem selbst noch anzupassen:
  
Zeile 58: Zeile 60:
 * 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" anzeigt. \\ 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. * 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" anzeigt. \\ 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.
  
-**Arduino-Sketch**  SWR-Example.ino (Arduino 1.6.9, Stand 21.12.2016, ist auch im oben verlinkten Zip-Archiv enthalten)+**Arduino-Sketch**  SWR-Example.ino (Arduino 1.6.9, Stand 03.01.2017, ist auch im oben verlinkten Zip-Archiv enthalten)
  
 <code c> <code c>
Zeile 67: Zeile 69:
 //     by Daniel Wendt-Fröhlich, DL2AB (BugReports/Changes to danielwf@hackerspace-bremen.de, dl2ab@darc.de) for //     by Daniel Wendt-Fröhlich, DL2AB (BugReports/Changes to danielwf@hackerspace-bremen.de, dl2ab@darc.de) for
 //          "Hackerspace Bremen e.V." https://hackerspace-bremen.de / HSHB Amateur Radio Group http://hshb.de/afu //          "Hackerspace Bremen e.V." https://hackerspace-bremen.de / HSHB Amateur Radio Group http://hshb.de/afu
-//     License CC-by-SA 3.0 - Nov-Dec 2016 - Bremen(GER) -- http://creativecommons.org/licenses/by-sa/3.0/de/+//     License CC-by-SA 3.0 - 11/2016-01/2017 - Bremen(GER) -- http://creativecommons.org/licenses/by-sa/3.0/de/ 
 // //
 // //
Zeile 94: Zeile 96:
 #include <LiquidCrystal_I2C.h>                                       // I2C-LCD-Library, included in Arduino-IDE #include <LiquidCrystal_I2C.h>                                       // I2C-LCD-Library, included in Arduino-IDE
 LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);       // Set the LCD I2C address, SainSmartLCD2004 0x3F, maybe try 0x38 or 0x20 or 0x27 LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);       // Set the LCD I2C address, SainSmartLCD2004 0x3F, maybe try 0x38 or 0x20 or 0x27
-bool DisplayRefresh = 1;+bool DisplayRefresh = 1;                           
 +unsigned long printMillis = 0; 
 +unsigned long serialMillis = 0; 
  
 //     ---------------------------------------------SWR-Meter-Parameters------------------------------------------------------- //     ---------------------------------------------SWR-Meter-Parameters-------------------------------------------------------
  
 // Configuration // Configuration
-int maxPower = 50;                                 // maximum Power in Watt (incl. corrections) , maxPower = (5*N/1.414)² * 50ohm | [N=7 windings on coupler => 10W] [N=9=>20W] [N=14=>50W] [N=20=>100W] [N=28=>200W]+int maxPower = 90;                                 // maximum Power in Watt (incl. corrections) , maxPower = (5*N/1.414)² * 50ohm | [N=7 windings on coupler => 10W] [N=9=>20W] [N=14=>50W] [N=20=>100W] [N=28=>200W]  
 int swrFpin = 0;                                   // SWR-Coupler Connections int swrFpin = 0;                                   // SWR-Coupler Connections
 int swrRpin = 1; int swrRpin = 1;
Zeile 140: Zeile 145:
                                                    // than (maxPower * 8 ) * Padc ==> (maxPower * 8 ) * (voltageF² / 50ohm)                                                    // than (maxPower * 8 ) * Padc ==> (maxPower * 8 ) * (voltageF² / 50ohm)
  
 +                                                   
   if (diodeCorr == 1) swr = (calcF + calcR) / (calcF - calcR);         // calculation of SWR   if (diodeCorr == 1) swr = (calcF + calcR) / (calcF - calcR);         // calculation of SWR
   if (diodeCorr == 0) swr = (areadF + areadR) / (areadF - areadR);   if (diodeCorr == 0) swr = (areadF + areadR) / (areadF - areadR);
 } }
 +
  
 //    .----------------------------------------------------------------------------------------------------------------------------------------------------------------. //    .----------------------------------------------------------------------------------------------------------------------------------------------------------------.
Zeile 155: Zeile 162:
   lcd.backlight();                                 // switch backlight on   lcd.backlight();                                 // switch backlight on
   lcd.setCursor(4,0); lcd.print("Arduino-");       // set display-cursor x,y and print text   lcd.setCursor(4,0); lcd.print("Arduino-");       // set display-cursor x,y and print text
-  lcd.setCursor(4,1); lcd.print("SWR-Meter"); +  lcd.setCursor(4,1); lcd.print("SWR-Meter");       
-  delay(2000); +  delay(2000);  
-  lcd.clear();+  lcd.clear();    
  
 } }
Zeile 164: Zeile 172:
 //    |                                                          LOOP                                                                                                  | //    |                                                          LOOP                                                                                                  |
 //    '----------------------------------------------------------------------------------------------------------------------------------------------------------------' //    '----------------------------------------------------------------------------------------------------------------------------------------------------------------'
 +
  
 void loop() { void loop() {
  
   readMeter();   readMeter();
-  Serial.print(powerF,0); 
-  Serial.print(" Watt; SWR "); 
-  Serial.println(swr,2); 
  
-  lcd.setCursor(0,0);                              // LCD Output 1st line for Power +  if (powerF > powerPeak) powerPeak = powerF; 
-  lcd.print("PWR ");                               // +  if (printMillis < millis() ) { 
-  if (powerF<100)lcd.print(" ");                   // clears empty spaces for smaller values and +    lcd.setCursor(0,0);                              // LCD Output 1st line for Power 
-  if (powerF<10)lcd.print(" ");                    //  moves value for fixed position +    lcd.print("PWR ");                               //  
-  lcd.print(powerF,0);                             // print power +    if (powerPeak<100)lcd.print(" ");                   // clears empty spaces for smaller values and   
-  lcd.print("W ");+    if (powerPeak<10)lcd.print(" ");                    //  moves value for fixed position 
 +    lcd.print(powerPeak,0);                             // print power  
 +    lcd.print("W "); 
 +     
 +    char wattMeter[7] = "       ";                   // meter for power, cleared array 
 +    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,0); lcd.print(wattMeter); 
 +  
  
-  char wattMeter[7] =       ";                   // meter for power, cleared array +    lcd.setCursor(0,1); lcd.print("SWR ")           // LCD Output 2nd line for SWR 
-  for (byte i=1; i<=6i++) { +    if (swr 0.1 ) swr 0                         // needed for disconnected SWR-bridge 
-    if (powerF (i * maxPower/7) wattMeter[i-1] = (char)0xFF; +    if (swr 9.99{lcd.setCursor(4,1); lcd.print(">10!");}            // if SWR > 10 - usually if SWR-bridge is disconnected 
-  +    if (swr <9.99) {lcd.setCursor(4,1); lcd.print((float)swr,2);}     // print SWR-value
-  if (powerF > maxPower) wattMeter[6] '!'; +
-  lcd.setCursor(9,0); lcd.print(wattMeter);+
  
-  lcd.setCursor(0,1); lcd.print("SWR ")           // LCD Output 2nd line for SWR +    char swrMeter[7] =       ";                     // meter for swr, cleared array 
-  if (swr < 0.1 ) swr = 0;                          // needed for disconnected SWR-bridge +    if (swr 1,2 swrMeter[0]=(char)0xFF; 
-  if (swr > 9.99{lcd.setCursor(4,1); lcd.print(">10!");}            // if SWR> 10 - usually if SWR-bridge is disconnected +    for (byte i=1;i<=6; i++) { 
-  if (swr <= 9.99{lcd.setCursor(4,1); lcd.print((float)swr,2);}     // print SWR-value+      if (swr > ((i*0.5)+1)){ 
 +        swrMeter[i] = (char)0xFF
 +        if (<= ((i*0.5)+1)) swrMeter[i] = '!'; 
 +      }
  
-  char swrMeter[7] = "       ";                     // meter for swr, cleared array 
-  if (swr > 1,2 ) swrMeter[0]=(char)0xFF; 
-  for (byte i=1;i<=6; i++) { 
-    if (swr > ((i*0.5)+1)){ 
-      swrMeter[i] = (char)0xFF; 
-      if (3 <= ((i*0.5)+1)) swrMeter[i] = '!'; 
     }     }
 +    lcd.setCursor(9,1); lcd.print(swrMeter);
  
-  } +    printMillis = millis() + 200
-  lcd.setCursor(9,1); lcd.print(swrMeter); +    powerPeak = 0;
-  delay(200);+
  
 +    if (powerF > 0){
 +      Serial.print(powerF,0);
 +      Serial.print(" Watt; SWR ");
 +      Serial.println(swr,2);
 +    }
 +  }
 +  
 +  
 } }
  
projekte/swr-meter_kurzwelle.1482800236.txt.gz · Zuletzt geändert: 2022-11-17 22:34 (Externe Bearbeitung)