Antennenmessung mit dem SDR-Shield
Messegeräte auf der Basis des SDR-Shields wurden ausführlich
im
SDR-Buch beschrieben. Ein automatisch durchstimmbarer Empfänger und
zwei unabhängig steuerbare VFO-Ausgänge eröffnen unzählige
Möglichkeiten. Man muss nicht bei jeder Gelegenheit ein teures
Messgerät kaufen, sondern man programmiert sich das, was gerade
gebraucht wird. Aktuelle brauchte ich eine Impedanzmessung direkt am Fußpunkt der Antenne,
die auch die hohe Impedanz eines endgespeisten Dipols messen kann. Auf
die Weise konnte ich den Resonanzpunkt und die Verstimmung der Antenne
durch kapazitive Einflüsse untersuchen. Anders als im Buch beschrieben
wollte ich nicht den ganzen Bereich automatisch durchfahren sondern mit
dem Poti auf dem LCD-Shield manuell anstimmen.
Mit der
Zweipolmessung wird der Frequenzgang einer Impedanz gemessen. Die
einfache Anschlussschaltung verwendet einen hochohmigen
Spannungsteiler mit 1 k und dem Messobjekt. Ein zweiter Spannungsteiler
führt zum Empfänger-Eingang. Die Schaltung wurde mit SMD-Widerständen
möglichst induktivitätsarm aufgebaut. Mit dieser einfachen
Schaltung kann nicht zwischen Real- und Blindwiderstand unterschieden
werden. Gemessen wird die Impedanz in Ohm. Ein gemessener Widerstand
von 100 Ω könnte also reell (ein ohmscher Widerstand) oder z.B. ein
kapazitiver Blindwiderstand sein. Im Resonanzpunkt hat man reelle
Widerstände.
Das
NF-Signal am Anschluss D wird auf ein mittleres GND-Potential gebracht
und direkt vom AD-Wandler am Kanal ADC2 ausgewertet. Weil der
AD-Wandler nur positive Spannungen misst, findet hier praktisch eine
Gleichrichtung statt. Der Mittelwert aus 200 Einzelmessungen ist ein
zuverlässiges Maß für die Signalspannung.
Damit
kann auch eine einfache Stehwellenmessbrücke gebaut werden. Wenn das
Messobjekt genau 50 Ohm hat, gibt es keine Brückenspannung. Der
kleine Breitband-Trafo in der Brücke überträgt eine Differenz zwischen
den Brückenzweigen, die bei jeder Abweichung von der reellen Impedanz
von 50 Ohm auftritt. Bei einem Kurzschluss oder einem offenen Anschluss
sollte dieselbe hohe Spannung gemessen werden, die für ein unendlich
hohes Stehwellenverhältnis steht. Allerdings sorgt der Innenwiderstand
des Generators für ein Ungleichgewicht, das durch kleinere Widerstände
im oberen Teil der Spannungsteiler teilweise kompensiert werden kann.
Der verwendete Ringkernübertrager war übrigens ein Zufallsfund in der
Bastelkiste und ursprünglich nicht für diesen Frequenzbereich
vorgesehen, funktionierte aber trotzdem sehr gut.
Eine
Messung an einem 50-Ω-Widerstand sollte durchgehend Null zeigen, was
einem Stehwellenverhältnis von 1.0 entspricht. Mit 100 Ω oder 25 Ω
sollte man entsprechend ein Stehwellenverhältnis von 2 finden.
Messungen an reellen Widerständen mit kurzen Leitungslängen können
zeigen, wie genau die Messbrücke ist. Kleine Fehler können durch den
verwendeten Übertrager und durch Leitungslängen in der Brücke
entstehen. Aber damit kann man leben, weil meist nur interessant ist,
bei welcher Frequenz das beste Stehwellenverhältnis auf die Resonanz
der Antenne hinweist, und wie breitbandig die Antenne ist. Im Prinzip
kann auch eine einfache Impedanzmessung diese Fragen beantworten,
allerdings erkennt die Stehwellenmessbrücke besser die unerwünschten
Blindwiderstände.
Im vorliegenden Fall wollte ich die
Impedanzmessung und die Stehwellenmessung in dieselbe Software packen.
Im Display erscheint dann die Frequenz, die Impedanz und das
Stehwellenverhältnis. Die beiden Messergebnisse setzten allerdings die
jeweilige Hardware voraus. Ich kann also vor Ort entweder die Schaltung
für die Zweipolmessung oder für die SWR-Messung anstecken, muss aber
kein neues Programm laden.
Download: RFStandaloneSWR.zip
//SI5351_vfo + LCD + TX output Clk2
//RX/TX offset = -800 Hz
//RX/TX offset -20...+20 kHz
//S1 Band, WSPR 600m ...10m
#include "si5351.h"
#include "Wire.h"
#include <LiquidCrystal.h>
Si5351 si5351;
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
unsigned long f = 10100;
//nsigned long freqHz;
int pot;
long fstep;
int snr;
int r;
void setup(void)
{
Serial.begin(9600);
Serial.println("Si5351 Clockgen"); Serial.println("");
// Start serial and initialize the Si5351
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);
si5351.set_correction(162100, SI5351_PLL_INPUT_XO);
si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
si5351.set_freq(1010100000ULL, SI5351_CLK0);
si5351.set_freq(4040000000ULL, SI5351_CLK1);
si5351.set_freq(10000ULL, SI5351_CLK2);
si5351.output_enable(SI5351_CLK0, 1);
si5351.output_enable(SI5351_CLK1, 1);
si5351.output_enable(SI5351_CLK2, 0);
lcd.begin(16, 2);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
}
void uac(void)
{
long uac;
analogReference(INTERNAL);
uac =analogRead(A2);
uac=0;
for (int i=0; i <= 200; i++){
uac = uac+ analogRead(A2);
}
snr = uac/50;
if (snr > 400) snr = 400;
Serial.println (snr);
snr= snr + 100;
if (uac > 13700) uac=13700;
r = uac*600/(14000-uac);
}
void loop(void)
{
lcd.setCursor(0, 0);
lcd.print (f);
lcd.print (" ");
analogReference(DEFAULT);
pot = analogRead(A3);
pot = analogRead(A3);
fstep = 0;
if (pot < 200) fstep = 500;
if (pot > 200) fstep = 100;
if (pot > 300) fstep = 10;
if (pot > 400) fstep = 1;
if (pot > 500) fstep = 0;
if (pot > 600) fstep = -1;
if (pot > 700) fstep = -20;
if (pot > 800) fstep = -100;
if (pot > 900) fstep = -500;
f = f + fstep;
if (f < 1000) f=1000;
if (f > 30000) f = 30000;
si5351.set_freq(f*100000ULL, SI5351_CLK0);
delay(100);
si5351.set_freq((f+5ULL)*400000ULL, SI5351_CLK1);
delay(200);
uac();
lcd.setCursor(0, 1);
lcd.print (snr);
lcd.print (" ");
lcd.print (r);
lcd.print (" ");
}