Tiny Framework scheint um jedes Image einen Schatten zuzufügen. QuickLaTeX stellt mathematische Formeln als Images dar. Ohne weiteres Zutun werden daher alle QuickLaTeX-Formeln mit einem Schatten umrandet - sowohl im Fließtext als auch bei abgesetzten Formeln - was im allgemeinen unerwünscht ist.
Eine entsprechende Anfrage führte zur Antwort, im CSS des Tiny Frameworks die Schattierung zu unterbinden. Das würde jedoch für alle Images gelten; nicht nur für die QuickLaTex-Formeln. Auch das ist unerwünscht! Ich habe abweichend vom gegebenen Ratschlag im file ../app/wp-content/plugins/wp-quicklatex/css/quicklatex-format.css eine Änderung durchgeführt:
/*
Inline formulas format:
<img class="$1" src="imageURL"/>
$1 - default class ql-img-inline-formula */
/* Style for <img> tag of in-text formula */
.ql-img-inline-formula{
background:none !important;
border:none !important;
padding:0px !important;
margin:0px !important;
box-shadow:none !important;
}
/* Style for the <img> tag of displayed equation */
.ql-img-displayed-equation{
background:none !important;
border:none !important;
padding:0px !important;
margin:0px !important;
vertical-align:middle !important;
display:inline-block !important;
box-shadow:none !important;
}
Die Zeilen 13 und 24 wurde dem Original-CSS zugefügt. Sie unterdrückt die Schattierung von Formeln im Fließtext und von abgesetzten Formeln.
Weitere Modifikationen sind möglich; ich habe sie aber bei mir noch nicht benötigt.
Auf dieser Seite möchte ich mein erste Röhrenprojekt vorstellen. Ein Bekannter hat vor einiger Zeit angefangen einen historischen Equalizer nachzubauen, so wie er bei Radiosendern oder in Tonstudios in den Sechziger Jahren zu finden war. Ich habe ihn bei der Auswahl der zu beschaffenden Bauteile ein wenig unterstützt und werde ihm beim Zusammenbau auch ein wenig helfen. Das ganze hat mich dann dazu animiert, selber ein kleines Röhrenprojekt zu starten. Wenn es von dem Equalizer-Projekt etwas zu berichten gibt, werde ich versuchen, es hier zu präsentieren. Aber bis es so weit ist, möchte ich hier meine ersten Ergebnisse des PCL86-Eintaktverstärkers als kleine Photosammlung darstellen. Die Röhre ist eine Verbundröhre mit einem Triodensystem und einem Pentodensystem, die entsprechend als Vorverstärker und Endstufe arbeiten. Endstufe mag etwas übertrieben klingen, wenn man von einer Ausgansleistung vom etwa 4 Watt spricht …
2. Der Prototyp
Meine Schaltung basiert vollständig auf der von Hans Borngräber \cite{2}. Im Grunde sind die Verstärker mit PCL86, die man im Internet findet alle sehr ähnlich. Wenn man von denen absieht, die für niedrigere Betriebsspannung ausgelegt sind, denn sie verlangen zumindest geänderte Bauteilewerte oder gar ein abgeändertes Design.
Dies ist der Anfang meiner Berichte über das Röhrenprojekt - wenn es die Zeit erlaubt, werde ich in den nächsten Wochen diese Seite immer wieder ergänzen. Bis dahin zeige ich im folgenden ein paar Bilder des Prototyps.
Das erste Bild zeigt den gesamten Aufbau. In der Mitte befindet sich der prototypische Verstärker auf einer Art Platine mit der Röhre PCL86 im Zentrum und einigen Anschlussbuchsen um sie herum angeordnet. Gleich rechts neben der Röhre - noch auf dem Platinchen - befindet sich das Trimmpoti zur Einstellung des Ruhestroms. Die grünen Kabel führen zum Ausgangstrafo, der in meinem Fall ein einfacher 100 Volt Übertrager ist. Das ist zwar nur eine Behelfslösung, aber sie funktioniert ganz brauchbar. Die 8 Ohm-Wicklung des Übertragers ist über die blauen Kabel mit der kleinen Lautsprecherbox (oben rechts) verbunden. Am oberen Bildrand steht die Stromversorgung, ein 12 Volt Blei-Gel-Akku. Die Heizung der PCL86 ist direkt an diese Batterie angeschlossenen (dicke gelbe Kabel). Auf dem Steckboard direkt vor dem Akku befindet sich ein kleiner Sperrwandler, der aus einem NE555, einem IRF510, einem alten Wandlertrafo aus einem defekten PC-Netzteil, und einer Gleichrichterdiode mit ein paar Kondensatoren, letztere angeschlossen an der Sekundärwickung, besteht. Der Wandler erzeugt ziemlich genau die benötigte Spannung von 250 V für den Verstärker. Wenn also mal nur 12 V zur Verfügung stehen, man aber den Röhrensound nicht missen will … das wäre eine Lösung. Am linken Bildrand liegt noch der kleine MP3-Player (der Würfel), dessen Ausgang mit dem Eingang des Verstärkers verbunden ist. Und im Vordergrund zwischen Platine und Übertrager liegt schließlich das Poti, das zur Einstellung der Gegenkopplung im Verstärker verwendet wird.
Im folgenden eine kleine Sammlung von Bildern diesen Prototyp betreffend:
Prototyp eines PCL86-Verstärkers
Prototyp eines PCL86-Verstärkers
Prototyp eines PCL86-Verstärkers
Prototyp eines PCL86-Verstärkers
Prototyp eines PCL86-Verstärkers - Oberseite der Platine
Prototyp eines PCL86-Verstärkers - Unterseite der Platine
Und zum Abschluß der vorläufige Schaltplan der, wie eingangs bereis erwähnt, praktisch vollständig auf \cite{2} beruht.
2. Der fast endgültige Entwurf
Der Prototyp hat sich als so vielversprechend herausgestellt, daß ich mich dazu entschlossen habe, den Schaltplan zu überarbeiten und ein Platinenlayout zu erstellen \cite{1}. Mir liegen nun die Platinen vor und ich habe eine davon auch sofort bestückt. Die folgende Photoserie zeigt das Resultat. Es sei hervorgehoben, daß die Röhre auf der der Bestückungsseite gegenüberliegenden Seite montiert wird - also auf der Lötseite. Das hat den Vorteil - wenn das Projekt denn jemand nachbauen möchte - daß die Röhre in ihrer vollen Größe aus dem Gehäuse herausragen kann. Aber selbst wenn man alles in einem Gehäuse unterbringt, so ist doch die Röhre als beachtliche Wärmequelle weit weg von den anderen Bauteilen der Platine entfernt, was sicher auch kein Nachteil ist.
Diese Seite enthält die ein oder andere Antwort auf eine Mailanfrage zum LC-Meter. Vielleicht trägt sie dadurch dazu bei, verbliebene Fragen zu beantworten. Allerdings habe ich mir hier nicht so viel Mühe gegeben, das ganze auch redaktionell schön darzustellen. Trotzdem … viel Spaß beim lesen!
1. Herleitung der ein oder anderen Formel aus Kapitel 5.1
ich habe die Herleitung hier nochmal ein wenig weiter ausgeführt.
Wenn Sie's von Hand machen wollen, dann lösen Sie BEIDE Gleichungen nach auf. Setzten Sie dann diese beiden Gleichungen gleich und lösen Sie dann nach auf. Trickreiche Umformungen sind nicht dabei. Das einzige ist, daß man an einer Stelle auf den gemeinsamen Nenner bringen muß, um dann zu erhalten.
Die Messung funktionier nun tatsächlich so, daß sie aus zwei Messungen besteht. Zuerst ohne C15 und dann mit C15. Man hört übrigens die Reed-Relais dann immer schalten. Natürlich sehr leise.
2. Wie wird die Frequenz gemessen und die Induktivität berechnet?
Die Frequenzmessungen führe ich mit dem Timer/Counter-Modul im Controller aus. Salopp gesprochen: eine Sekunde lang die Impulse fom Schwingkreis zählen. Dann habe ich die Frequenz in Hz. Das rechnen ist in sofern kein Problem, weil ich in C programmiert hatte und dort Fließkommazahlberechnungen unsterstützt werden. Hier reichen ja die Grundrechenarten: Summe, Differenz, Produkt, Quotient. Die kommen auch alle vor. In reinem Assembler ist das natürlich eine mühsame Aufgabe - das macht normalerweise niemand.
Im Quellcode ist das ab Zeile 563. L3 wird gebrückt (kurzgeschlossen); der Kurzschluß über Lx wird geöffnet, und zur ersten Messung wird C15, 330pF abgeschaltet. Die Messung liefert . Dann wird der 330 pF Kondensator zugeschaltet, es wird etwas gewartet (ca. 100 ms) und es wird die Frequenz gemessen. Wenn dann die Frequenzen nicht völlig unsinnig sind (etwa weil der Oszillator wegen zu kleinem L garnicht anschwingt), dann wird und genau gemäß der Formeln gerechnet (Zeile 578 und 579). Die Ausgabe erfolgt dann normalerweise in H und pF; daher die Faktoren 1e6 und 1e12 in der Zeile 585. Die Ausgabe in H ist eher experimentell (Zeile 582).
3. Wozu der LM311 und der NE555?
Der LM311 ist der aktive Teil des LC-Oszillators. Ich habe mich da weiter nicht drüber ausgelassen, weil ich den von dort übernommen hatte. Normalerweise findet man dort einen Transistor - vielleicht eien BF199 … aber der Vortei des LM311 ist, daß ich direkt Rechtecksignale erhalte, die ich dann unmittelbar auf den Zähleingang des Timers/Counters legen kann. Zugegebenermaßen habe ich mich um die weiteren Details seiner Funktion nicht gekümmert.
Der NE555 ist eigentlich ein zweites Experiment auf der selben Platine. Ziel ist es hier nur Kapazitäten zu messen. Der NE555 ist bekanntermaßen als Timer oder auch Oszillator nutzbar; seine Zeitkonstanten (Frequenzen) hängen nur von der Kapazität eines Kondensators ab und von den Werten zweier Widerstände. Eine Spule (Induktivität) kommt da nicht vor. Widerstände sind in hoher Präzision leicht zu beschaffen. Die Hoffnung wäre also gewesen, Kapazitäten mit hoher Präzision messen zu können. Das hat auch ganz gut geklappt. Im Quellcode ab Zeile 649. Auch hier gibt es zwei Messungen: einmal ohne eingesteckten Kondensator um die Kapazität des Schaltungsaufbaus zu messen und eine mit eingestecktem Kondensator. Bei der zweiten Messung wird die Kapazität der ersten abgezogen und man erhält die zu messende Kapazität.
4. Die Taster
Vier Taster sind in betrieb, die ihre Entsprechung auch im Quellcode finden (Zeilen 213-240).
key0: ist die Hintergrundbeleuchtung des LC-Display. Einmal drücken: an; ein weiters mal: aus. Ohne Relais.
key1: wechselt durch die drei Meßbereiche des NE555. Das sind die drei Relais, die die Widerstände 1 kOhm, 33 kOhm und 1 MOhm schalten. Wird nur im Meßmode 4 (siehe weiter unten) benutzt.
key2: wechselt zwischen messen und kalibrieren. Nur relevant in Mode 3 und 4 (siehe key3). Kalibrieren heißt, ohne eingesteckten Kondensator messen; und messen heißt mit eingestecktem unbekannten Kondensator messen.
key3: wechselt durch die verschiedenen Meßmodi (switch Statement ab zeile 484) - zwei der komplexeren Methoden im Mode 0 und 1, dann im Mode 2 der hier diskutierte Weg; im Mode 3 wird nur die Kapazität gemessen (im Schwingkreis) und im Mode 4 - alternativ zu 3 - die Kapazität mit dem NE555.
Also … vier Taster sind zu bestücken. Die werden alle gebraucht.
5. Welchen EInfluß haben die Taster auf die Relais?
Auf die Relais wirkt also nur der key1. Die anderen Relais werden vom Programm gesteuert. z.B. das zuschalten von C15 geschiet im Programm. Das sind übrigens die Makros wie etwa OPEN_L3, SHORT_LX etc. Solche Makros schalten im Rahmen eines Meßzyklus die entsprechenden Relais an oder aus. Ich meine, das sieht man im Coding ab Zeile 563 für den oben diskutierten Fall ziemlich gut. Die dort eingebaute Warteschleife werden Sie leicht erkennen - der Oszillator soll Zeit haben, sich nach dem zu- oder abschalten eines Bautels wieder zu stabilisieren.
6. Stückliste
Qty
Value
Device
Package
Part
Description
3
PINHD-1X2
1X02
JP9, JP11, JP14
PIN HEADER
7
PINHD-1X3
1X03
CX, CY1, CY2, CZ, JP6, JP7, JP8
PIN HEADER
2
PINHD-1X4
1X04
JP10, JP12
PIN HEADER
2
PINHD-1X5
1X05
JP15, JP16
PIN HEADER
1
PINHD-1X8
1X08
JP1
PIN HEADER
1
10
R-EU_0207/10
0207/10
R2
RESISTOR, European symbol
3
100k
R-EU_0207/10
0207/10
R4, R5, R8
RESISTOR, European symbol
6
100n/Ker
C-EU025-025X050
C025-025X050
C3, C4, C5, C6, C8, C18
CAPACITOR, European symbol
1
100n/MKS
C-EU025-025X050
C025-025X050
C11
CAPACITOR, European symbol
2
100n/MKS
C-EU050-030X075
C050-030X075
C21, C31
CAPACITOR, European symbol
1
100p
C-EU050-030X075
C050-030X075
C15
CAPACITOR, European symbol
1
100p
C-EU050-035X075
C050-035X075
C17
CAPACITOR, European symbol
2
10k
R-EU_0207/10
0207/10
R3, R13
RESISTOR, European symbol
5
10n/Ker
C-EU025-025X050
C025-025X050
C23, C24, C25, C26, C27
CAPACITOR, European symbol
1
10n/MKS
C-EU025-025X050
C025-025X050
C16
CAPACITOR, European symbol
1
10u
L-EU0207/10
0207/10
L1
INDUCTOR, European symbol
5
10u/25V
CPOL-EUE2.5-5
E2,5-5
C7, C9, C10, C12, C19
POLARIZED CAPACITOR, European symbol
1
4 MHz
CRYTALHC49S
HC49/S
Q1
CRYSTAL
1
1M/1%
R-EU_0207/5V
0207/5V
R10
RESISTOR, European symbol
1
1N4004
1N4004
DO41-10
D3
DIODE
2
1k
R-EU_0207/10
0207/10
R6, R9
RESISTOR, European symbol
1
1k/1%
R-EU_0207/5V
0207/5V
R12
RESISTOR, European symbol
1
1n
C-EU050-030X075
C050-030X075
C28
CAPACITOR, European symbol
1
22uF/25V
CPOL-EUE2.5-5
E2,5-5
C29
POLARIZED CAPACITOR, European symbol
2
330n/MKS
C-EU050-030X075
C050-030X075
C20, C30
CAPACITOR, European symbol
1
330p
C-EU050-030X075
C050-030X075
C14
CAPACITOR, European symbol
1
33k/1%
R-EU_0207/5V
0207/5V
R11
RESISTOR, European symbol
1
470p
C-EU050-030X075
C050-030X075
C13
CAPACITOR, European symbol
1
47k
R-EU_0207/10
0207/10
R7
RESISTOR, European symbol
2
47p/Ker
C-EU025-025X050
C025-025X050
C1, C2
CAPACITOR, European symbol
2
47u
L-EU0207/10
0207/10
L2, L3
INDUCTOR, European symbol
2
4k7
R-EU_0207/10
0207/10
R14, R16
RESISTOR, European symbol
1
50k
R-TRIMM64W
RTRIM64W
R1
Trimm resistor
5
700460
700460
700460
S2, S3, S4, S5, S6
1
7805
78XXS
78XXS
IC4
5V/1A
1
78L05
78LXX
78LXX
IC5
5V/100mA
1
BC546A
BC546A
TO92-EBC
Q2
NPN Transistor
8
HE3621
HE3621
HE3621
K1, K2, K3, K4, K5, K6, K7, K8
RELAY; z.B. SIL 05-1A72-71D von Meder
1
ISP-CONN-06
ISP-CONN-06
2X03
J2
ISP-Connector, 6-polig
1
LCD-16POL-16V
LCD-16POL-16V
16V
J1
Connector LC-Display, 16 polig, mit Hintergrundbeleuchtung
1
LM311N
LM311N
DIL08
IC2
COMPARATOR
1
LM555N
LM555N
DIL08
IC3
TIMER
1
MEGA163P
MEGA163P
DIL40
IC1
MICROCONTROLLER
6
MPB1
MPB1
MPB1
X1, X2, X3, X4, X5, X6
LAB CONNECTOR
1
PORT-A
PINHD-1X8
1X08
JP5
PIN HEADER
1
PORT-B
PINHD-1X8
1X08
JP2
PIN HEADER
1
PORT-C
PINHD-1X8
1X08
JP3
PIN HEADER
1
PORT-D
PINHD-1X8
1X08
JP4
PIN HEADER
1
SB130
SB130
DO41-10
D1
DIODE
1
SK409
SK409
SK409
KK1
Kühlkörper SK409 - fischer Elektronik
Stückliste
Die frequenzbestimmenden Kondensatoren C16, C17 sowie C13, C14, C15 und C28 sollten von hoher Qualität sein - auf keinen Fall Keramikkondensatoren. Mit Folienkondensatoren liegt man schon mal richtig. Analog die frequenzbestimmenden Widerstände R10 bis R12.
Für die restlichen Bauteile können normale Komponenten ohne besondere Anforderungen verwendet werden. Widerstände sind zumeist im Rastermaß 10 mm liegend (manchmal aber auch 5 mm stehend) montiert. Die Keramikkondensatoren und die Elkos haben ein Rastermaß von 2,5mm; die Folienkondensatoren eines von 5 mm.
Die ICs können gesockelt werden; Sockel sind in der Stückliste nicht aufgeführt. 2 mal 8-polig und ein mal 40 polig.
Viele Steckkontakte sind als einrehige Buchsenleiste mit gedrehten Kontakten (ähnlich wie IC-Sockel) ausgeführt. Man kann die einzelnen Baugruppen dann mit Kabeln, wie man sie auf den Steckboards verwendet, verbinden. Oder gleich mit Kabeln verlöten, wenn man garnicht experimentieren mag.
Das LC-Meter wurde als ein Prototyp entworfen bestehend aus je einem Block für
eine CPU mit I/O-Ports
einen freischwingenden LC-Oszillator für die L- und C-Messung
einen monostabilen Multivibrator (Monoflop) für die C-Messung
ein LC-Display
und ein paar Bedientasten
Auf der Platine sind diese Blöcke - von der Stromversorgung einmal abgesehen - nicht untereinander verbunden, um leichter experimentieren zu können. Die Verdrahtung erfolgte durch Steckbrücken. Mittlerweile hat sich eine bestimmte Verdrahtung herauskristallisiert, die auch auf dem folgenden Bild zu sehen ist. Auch bei den Relais hat sich das ein oder andere als nicht notwendig herausgestellt, so daß es nicht mehr bestückt werden braucht. Einzelheiten datzu folgen weiter unten.
Es ist jedoch nicht leicht, die Verbindungen nur aufgrund dieses Bildes zu rekonstruieren. Daher im folgenden eine Tabelle, die die genaue Verdrahtung angibt.
Port
von Buchsenleiste und Pin
nach Buchsenleiste und Pin
Funktion
A0
JP5 - 1
JP1 - 8
LCD: DB7
A1
JP5 - 2
JP1 - 7
LCD: DB6
A2
JP5 - 3
JP1 - 6
LCD: DB5
A3
JP5 - 4
JP1 - 5
LCD: DB4
A4
JP5 - 5
JP1 - 2
LCD: RS
A5
JP5 - 6
JP1 - 3
LCD: R/-W
B1
JP2 - 7
JP11 - 1
LC-Oszillator: HF-out
B2
JP2 - 6
JP6 - 2
LC-Oszillator: K1, Kurzschluß über L3
B3
JP2 - 5
JP6 - 3
LC-Oszillator: K2, 330 pF
B4
JP2 - 4
JP11 - 2
LC-Oszillator: K7, Kurzschluß über Lx
C2
JP3 - 6
JP1 - 4
LCD:E
C4
JP3 - 4
JP12 - 4
Taster S6
C5
JP3 - 3
JP12 - 3
Taster S5
C6
JP3 - 2
JP12 - 2
Taster S4
C7
JP3 - 1
JP12 - 1
Taster S3
D0
JP4 - 8
JP10 - 3
Monoflop: K4, 1 kΩ
D1
JP4 - 7
JP10 - 2
Monoflop: K5, 33 kΩ
D2
JP4 - 6
JP10 - 1
Monoflop: K6, 1 MΩ
D5
JP4 - 3
JP9 - 1
Monoflop: Trigger (Start)
D6
JP4 - 2
JP9 - 2
Monoflop: Q (Pulsausgang)
D7
JP4 - 1
JP1 - 1
LCD: Beleuchtung
Die Lage des Pin 1 ist leider nicht konsequent gewählt. Hier eine Übersicht. Dazu legt man die Platine so hin, daß die Bestückungsseite sichtbar ist und daß der Prozessor in der rechten Hälfte ist. Also - wie bei obigem Bild.
Buchsenleiste
Lage von Pin 1
Funktion
JP1
rechts
LCD
JP2
rechts
Port B
JP3
links
Port C
JP4
rechts
Port D
JP5
rechts
Port A
JP6
rechts
LC-Oszillator: Relais
JP10
oben
Monoflop: Relais
JP11
links
LC-Oszillator: Ausgang und Relais
JP12
rechts
Taster
2. Modifikationen und andere Abweichungen vom Schaltplan
Im folgenden habe ich nochmal die Abweichungen der aktuellen Lösung vom Schaltplan bzw. Layout zusammengefaßt, die sich im Laufe der Zeit ergeben haben. Das Programm verlangt, daß diese Abweichungen/Modifikationen berücksichtigt werden. Der Hauptartikel und die Schaltplanauszüge darin berücksichtigen bereits diese Änderungen.
LC-Oszillator: Das Relais K1 dient jetzt zur Überbrückung von L3, während es im Schaltplan noch dazu dient, den 330 pF Kondensator C14 zu schalten. Der Kondensator C14 wird nicht bestückt. Diese Modifikation ist unten nochmal genauer erklärt.
LC-Oszillator: Der Kondensator C15 mit 100 pF bei Relais K2 wird entfernt und stattdessen der 330 pF Kondensator (ehemals C14) eingelötet.
LC-Oszillator: K8 und C28 werden nicht angesteuert und können daher entfallen.
Monoflop: K3, das einen 100 pF Kondensator parallel zur unbekannten Kapazität Cx schaltet, wird nicht benötigt.
Hier nochmals die Modifikation im Umfeld des Relais K1: Der Kondensator C14 bei K1 wird nicht bestückt. Stattdessen wird die Leiterbahn, die K1 mit dem Kondensator verbunden hätte, jetzt mit der linken Seite (von der Bestückungsseite aus gesehen) von L3 (47 μH) verbunden. Damit kann K1 nun L3 kurzschließen. Das folgende Bild zeigt die Modifikation, die leicht mit einem Stück Draht durchzuführen ist. Leiterbahnen müssen nicht unterbrochen werden:
Im folgenden ist der gesamte Quellcode des LC-Meters dargestellt, wie ich ihn für die einzelnen Experimente und Meßvorschriften im Hauptartikel benutzt habe. Die verwendete CPU ist ein Atmel ATmega163. Wird eine andere CPU aus der ATmega-Reihe verwendet, dann sind gegebenenfalls ein paar Namen (etwa bei den Timern und bei den Interruptvektoren) auszuwechseln. Wird eine völlig andere CPU verwendet, dann sind natürlich alle die Ports, Counter und Interrupts betreffenden Stellen anzupassen. Der Bequemlichkeit halber kann der Qullcode auch hier direkt heruntergeladen werden. Außerdem müssen die Anmerkungen im Artikel Verdrahtung berücksichtigt werden. Dort ist neben der Verkabelung vor allem beschrieben, wie eine notwendige Modifikation durchzuführen ist.
// Firmware for an experimental LC-Meter
// (c) 2005-2009 by DL8NCI
// Compiled with WinAVR 20071221
// and avr libc 1.6.0
// fuse bits: LOW: 0xda HIGH:0xff
// BOOTSZ = 128 word (irrelevant)
// BOOTRST = not checked
// BODLEVEL = 2,7 V (irrelevant)
// BODEN = not checked
// SPIEN = checked
// CKSEL = Crystal Oscillator slowly raising power
// Lockbits: 0xff
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
// for the LC-Display
#define LCD_DDR DDRA
#define LCD_PORT PORTA
#define LCD_PIN PINA
#define LCD_PORT_E PORTC
#define LCD_DDR_E DDRC
#define LCD_E 2
#define LCD_RW 3
#define LCD_RS 4
// some convenient functions
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
// global variables for LC-display
uint8_t LCD_pos;
uint8_t LCD_esc;
// counter value and ready status for interrupt
volatile uint32_t CNT;
volatile uint8_t ready;
uint8_t n_CNT;
// measuring mode, calibration mode and range
uint8_t mmode;
uint8_t cmode;
uint8_t rmode;
// key status
uint8_t keys;
#define NX_MAX 16
// some fixed values
double C13 = 470e-12;
double C15 = 330e-12;
#define PI 3.1415926535
#define TF 200 // ca. 50 ms
double t_gate;
// the relays/switches
#define SHORT_LX cbi(PORTB,4);
#define OPEN_LX sbi(PORTB,4);
#define ON_330 cbi(PORTB,3);
#define OFF_330 sbi(PORTB,3);
#define SHORT_L3 cbi(PORTB,2);
#define OPEN_L3 sbi(PORTB,2);
#define ON_33k cbi(PORTD, 1);
#define OFF_33k sbi(PORTD, 1);
#define ON_1M cbi(PORTD, 2);
#define OFF_1M sbi(PORTD, 2);
#define ON_1k cbi(PORTD, 0);
#define OFF_1k sbi(PORTD, 0);
// all the LCD stuff - connected to the printf statement
void LCD_PulseE(void) {
sbi(LCD_PORT_E,LCD_E);
_delay_us(2); // 2 us
cbi(LCD_PORT_E,LCD_E);
}
void LCD_WaitBusy(void) {
uint8_t h=0x80;
LCD_DDR = 0x0c;
LCD_PORT = 0x00;
while(h!=0) {
LCD_PORT = 0x04;
sbi(LCD_PORT_E,LCD_E);
_delay_us(1); // 1 us
h = LCD_PIN & 0x80;
cbi(LCD_PORT_E,LCD_E);
LCD_PulseE();
}
LCD_DDR = 0xfc;
}
void LCD_SendCmd(char c) {
char ch;
LCD_WaitBusy();
LCD_PORT = c & 0xf0;
LCD_PulseE();
ch = c;
asm("swap %0" : "=r" (ch) : "0" (ch));
LCD_PORT = ch & 0xf0;
LCD_PulseE();
}
void LCD_SendChar_int(char c) {
char ch;
LCD_WaitBusy();
LCD_PORT = (c & 0xf0) | 0x08;
LCD_PulseE();
ch = c;
asm("swap %0" : "=r" (ch) : "0" (ch));
LCD_PORT = (ch & 0xf0) | 0x08;
LCD_PulseE();
LCD_pos++;
}
int LCD_SendChar(char c, FILE *stream) {
if (LCD_esc==0) {
if (c!='\001') {
LCD_SendChar_int(c);
}
else {
LCD_esc = 1;
}
}
else {
switch(c) {
case '\001':
LCD_SendCmd(0x80);
LCD_pos = 0;
LCD_esc = 0;
break;
case '\002':
LCD_SendCmd(0xc0);
LCD_pos = 0;
LCD_esc = 0;
break;
case '\003':
LCD_SendCmd(0x94);
LCD_pos = 0;
LCD_esc = 0;
break;
case '\004':
LCD_SendCmd(0xd4);
LCD_pos = 0;
LCD_esc = 0;
break;
case '\005':
while(LCD_pos<20) LCD_SendChar_int(0x20);
LCD_esc = 0;
break;
}
}
return 0;
}
void LCD_Goto(uint8_t line, uint8_t column) {
LCD_SendCmd(87 + column + 40*line);
LCD_pos = column - 1;
}
void LCD_Init(void) {
uint8_t i;
for (i=0;i<20;i++) { _delay_ms(15.0); } // 300 ms
sbi(LCD_DDR_E,LCD_E);
LCD_DDR = 0xfc;
LCD_PORT = 0x30;
LCD_PulseE();
_delay_ms(15.0); // 15 ms
LCD_PORT = 0x30;
LCD_PulseE();
_delay_ms(1.0); // 1 ms
LCD_PORT = 0x30;
LCD_PulseE();
LCD_PORT = 0x20;
LCD_PulseE();
LCD_SendCmd(0x28);
LCD_SendCmd(0x0c);
LCD_SendCmd(0x06);
LCD_SendCmd(0x01);
static FILE mystdout = FDEV_SETUP_STREAM(LCD_SendChar,NULL,_FDEV_SETUP_WRITE);
stdout = &mystdout;
LCD_pos = 0;
LCD_esc = 0;
}
// sometimes we have nothing to do
void idle(void) { asm("nop" "\n\t" ::); }
// the handlers for key status changes
void key0on(void) { } // not used
void key0off(void) { // togle light on/off
if ((PORTD & 0x80)==0x80) cbi(PORTD,7); else sbi(PORTD,7);
}
void key1on(void) { } // not used
void key1off(void) { // range selection
rmode++;
cmode = 0;
if (rmode==3) rmode=0;
}
void key2on(void) { } // not used
void key2off(void) { // toggle calibration/measurement
if (cmode==0) cmode=1; else cmode=0;
}
void key3on(void) { } // not used
void key3off(void) { // switch to next measuring mode
mmode++;
cmode = 0;
rmode = 0;
if (mmode==5) mmode=0;
}
// the timer2-compare interrupt
ISR(TIMER2_COMP_vect) {
uint16_t l,h;
TCCR1B = 0; // stop counter
TCCR2 = 0; // stop timer
// read counter and ...
l = TCNT1L;
h = TCNT1H;
// ... add to global counter
CNT = CNT + l + (h << 8);
ready=1;
}
// the timer1-capture interrupt
ISR(TIMER1_CAPT_vect) {
uint16_t l,h;
TCCR1B = 0; // stop timer
// read counter and ...
l = TCNT1L;
h = TCNT1H;
// ... add to global counter
CNT = CNT + l + (h << 8);
ready = 1;
}
// some preparation - mainly determine t_gate (done once only)
void Calibrate(void) {
CNT = 0;
// setup timer 1 as counter and timer 2 as timer
cli();
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0;
TCNT1L = 0;
TCCR2 = 0x00;
OCR2 = TF;
TCNT2 = 0;
sbi(SFIOR,PSR2); // Resest Timer Prescaler
//start counter
TCCR1B = 0x02; // 0.5 MHz
//start timer
TCCR2 = 0x07;
//sbi(PORTD,5);
//some further initializations
ready = 0;
sbi(TIMSK,OCIE2); // timer2-compare interrupt on
sbi(TIFR,OCF2); // terminate active interrupts, if existing
sei();
while (ready==0) idle();
t_gate = 8*(double)CNT/(double)F_CPU;
}
// scan the keyboard
void scan_keys(void) {
uint8_t h1,h2,h3;
h1 = PINC;
h2 = h1 & 0x10; // current key0
h3 = keys & 0x10; // previous key0
if ((h3==0x10)&&(h2==0x00)) key0on();
if ((h3==0x00)&&(h2==0x10)) key0off();
h2 = h1 & 0x20; // current key1
h3 = keys & 0x20; // previous key1
if ((h3==0x20)&&(h2==0x00)) key1on();
if ((h3==0x00)&&(h2==0x20)) key1off();
h2 = h1 & 0x40; // current key2
h3 = keys & 0x40; // previous key2
if ((h3==0x40)&&(h2==0x00)) key2on();
if ((h3==0x00)&&(h2==0x40)) key2off();
h2 = h1 & 0x80; // current key3
h3 = keys & 0x80; // previous key3
if ((h3==0x80)&&(h2==0x00)) key3on();
if ((h3==0x00)&&(h2==0x80)) key3off();
keys = h1;
}
// measure one time the current frequency
void Measure_1(void) {
// prepare timer 1 as counter and timer 2 as timer
cli();
TCCR1A = 0x00;
TCCR1B = 0x00;
TCNT1H = 0;
TCNT1L = 0;
TCCR2 = 0x00;
OCR2 = TF;
TCNT2 = 0;
sbi(SFIOR,PSR2); // Resest Timer Prescaler
//start counter
TCCR1B = 0x06;
//start timer
TCCR2 = 0x07;
//some further initializations
ready = 0;
sbi(TIMSK,OCIE2); // timer2-compare interrupt on
sbi(TIFR,OCF2); // terminate active interrupts, if existing
sei();
while (ready==0) idle();
n_CNT++;
// ready for next block
cbi(TIMSK,OCIE2); // timer2-compare interrupt off
scan_keys();
}
// measure one time the pulse length of the NE555
void Measure_555_1(void) {
cli(); // disable all interrupts
TCCR1A = 0x00; // prepare timer 1 and ...
TCCR1B = 0; // ... stop timer 1
TCNT1H = 0; // set timer1 count value to 0
TCNT1L = 0;
// start measurement
ready = 0; // clear the ready status
sbi(TIFR,ICF1); // terminate active interrupts, if existing
sbi(TIMSK,TICIE1); // timer1-capture Interrupt on
sbi(SFIOR,PSR10); // reset prescaler
TCCR1B=0x01; // start Timer 1
cbi(PORTD,5); // start NE555
sei(); // enable interrupts
sbi(PORTD,5); // return to high level
while (ready==0) idle(); // wait until ready
n_CNT++; // this was one more measurement
cbi(TIMSK,TICIE1); // timer1-capture Interrupt off
scan_keys(); // the keys
}
// execute the frequency measuremnt n times
double Measure_M(uint8_t n) {
double f;
CNT = 0;
n_CNT = 0;
while (n_CNT<n) Measure_1();
cli();
f=(double)CNT/((double)n*t_gate);
return f;
}
// execute the pulse length measurement n times
double Measure_555_N(uint8_t n) {
double t;
CNT = 0;
n_CNT = 0;
while (n_CNT<n) Measure_555_1();
cli();
t=(double)CNT/((double)F_CPU*(double)n);
return t;
}
// the main program
int main (void) {
uint8_t i,lcmode;
double f1,f2,f3,f4,Lx,L3,Cy,t1,t2,C13x,Cxa, Cxb, Cx, R;
cli();
LCD_Init();
printf_P(PSTR("\001\001LC-Meter Evaluation\001\005\001\002 (c) 2005 by DL8NCI\001\005"));
for(i=0; i<100; i++) _delay_ms(10.0);
sbi(DDRB,4); // for shorting Lx
sbi(DDRB,3); // for 330 pF
sbi(DDRB,2); // for shorting L0
sbi(DDRD,0); // PD0..PD2 as output
sbi(DDRD,1);
sbi(DDRD,2);
SHORT_LX
ON_330
SHORT_L3
OFF_1k
OFF_33k
OFF_1M
keys = PINC;
DDRC = DDRC & 0x0f; // PC4..PC7 as input
PORTC = PORTC | 0xf0; // PC4..PC7 with Pull Up
cbi(PORTD,7); // PD7 - background light for LCD (LED off)
sbi(DDRD,7); // PD7 as output - LED
sbi(DDRD,5); // PD5 as output
sbi(PORTD,5);
t_gate = 0;
Calibrate(); // determine t_gate
mmode = 0; // the initial measuring mode
cmode = 0; // calibrating mode
rmode = 0; // range
// forever ...
while(1) {
lcmode = cmode;
switch (mmode) {
case 0: // normal operation with L0 and f1, f2, f3
OPEN_L3
OPEN_LX
OFF_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f1=Measure_M(8); // L0 + Lx; 470 pF + Cx
SHORT_LX
for(i=0; i<10; i++) { _delay_ms(10.0); }
f2=Measure_M(8); // L0; 470 pF + Cx
ON_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f3=Measure_M(8); // L0; 470 pF + 330 pF + Cx
if (f1>100) {
L3 = (f2*f2-f3*f3)/(4*PI*PI*f2*f2*f3*f3*C15);
Cy = (C15*f3*f3)/(f2*f2-f3*f3)-C13;
Lx = (f2*f2-f1*f1)*(f2*f2-f3*f3)/(4*PI*PI*f1*f1*f2*f2*f3*f3*C15);
if (Lx>0.1) {
printf_P(PSTR("\001\001%7.4f H %5.1f pF\001\005"),Lx, Cy*1e12);
}
else {
printf_P(PSTR("\001\001%7.2f uH %5.1f pF\001\005"),Lx*1e6, Cy*1e12);
}
printf_P(PSTR("\001\002%7.2f uH ----- pF\001\005"),L3*1e6);
}
else {
printf_P(PSTR("\001\001------- uH ----- pF\001\005"));
printf_P(PSTR("\001\002------- uH ----- pF\001\005"));
}
printf_P(PSTR("\001\003%8.3f %8.3f\001\005"),f1/1000, f2/1000);
printf_P(PSTR("\001\004%8.3f %8.3f ms\001\005"),f3/1000, t_gate*1e3);
break;
case 1: // normal operation with L0 and f1, f2, f4
OPEN_L3
SHORT_LX
OFF_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f2=Measure_M(8); // L0 + Lx; 470 pF + Cx
OPEN_LX
for(i=0; i<10; i++) { _delay_ms(10.0); }
f1=Measure_M(8); // L0; 470 pF + Cx
ON_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f4=Measure_M(8); // L0 + Lx; 470 pF + 330 pF + Cx
if (f1>100) {
L3 = (f1*f1-f4*f4)/(4*PI*PI*f2*f2*f4*f4*C15);
Cy = (C15*f4*f4)/(f1*f1-f4*f4)-C13;
Lx = (f2*f2-f1*f1)*(f1*f1-f4*f4)/(4*PI*PI*f1*f1*f2*f2*f4*f4*C15);
if (Lx>0.1) {
printf_P(PSTR("\001\001%7.4f H %5.1f pF\001\005"),Lx, Cy*1e12);
}
else {
printf_P(PSTR("\001\001%7.2f uH %5.1f pF\001\005"),Lx*1e6, Cy*1e12);
}
printf_P(PSTR("\001\002%7.2f uH ----- pF\001\005"),L3*1e6);
}
else {
printf_P(PSTR("\001\001------- uH ----- pF\001\005"));
printf_P(PSTR("\001\002------- uH ----- pF\001\005"));
}
printf_P(PSTR("\001\003%8.3f %8.3f\001\005"),f1/1000, f2/1000);
printf_P(PSTR("\001\004%8.3f %8.3f ms\001\005"),f4/1000, t_gate*1e3);
break;
case 2: // normal operation without L0
SHORT_L3
OPEN_LX
OFF_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f1=Measure_M(8); // Lx, C13, Cy
ON_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f2=Measure_M(8); // Lx, C13, Cy, C15
if (f1>100) {
Lx = (f1*f1-f2*f2)/(4*PI*PI*f1*f1*f2*f2*C15);
Cy = ((C13+C15)*f2*f2-C13*f1*f1)/(f1*f1-f2*f2);
if (Lx>0.1) {
printf_P(PSTR("\001\001%7.4f H %5.1f pF\001\005"),Lx, Cy*1e12);
}
else {
printf_P(PSTR("\001\001%7.2f uH %5.1f pF\001\005"),Lx*1e6, Cy*1e12);
}
printf_P(PSTR("\001\002\005"));
}
else {
printf_P(PSTR("\001\001------- uH ----- pF\001\005"));
printf_P(PSTR("\001\002------- uH ----- pF\001\005"));
}
printf_P(PSTR("\001\003%8.3f %8.3f\001\005"),f1/1000, f2/1000);
printf_P(PSTR("\001\004-------- %8.3f ms\001\005"), t_gate*1e3);
break;
case 3: // C-Measurement with LC-Oscillator
if (cmode==0) {
printf_P(PSTR("\001\001 Reference "));
OPEN_L3
SHORT_LX
OFF_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f1=Measure_M(8); // L3, C13
ON_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f2=Measure_M(8); // L3, C13, C15
C13x = C15*f2*f2/(f1*f1-f2*f2);
L3 = (f1*f1-f2*f2)/(4*PI*PI*f1*f1*f2*f2*C15);
printf_P(PSTR("\001\002\001\005"));
printf_P(PSTR("\001\003\001\005"));
}
else {
printf_P(PSTR("\001\001Measuring Mode 6.1"));
OPEN_L3
SHORT_LX
OFF_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f3=Measure_M(8); // L3, C13
ON_330
for(i=0; i<10; i++) { _delay_ms(10.0); }
f4=Measure_M(8); // L3, C13
Cxa = (C15*f2*f2*(f1*f1-f3*f3))/(f3*f3*(f1*f1-f2*f2));
Cxb = (C15*f1*f1*(f2*f2-f4*f4))/(f4*f4*(f1*f1-f2*f2));
printf_P(PSTR("\001\002%9.2f pF (a)"),Cxa*1e12);
printf_P(PSTR("\001\003%9.2f pF (b)"),Cxb*1e12);
}
printf_P(PSTR("\001\004%6.2f uH %7.2f pF"),L3*1e6, C13x*1e12);
break;
case 4: // C-measurement with NE555
switch (rmode) {
case 0:
R = 1e6;
OFF_1k
OFF_33k
ON_1M
break;
case 1:
R = 33e3;
OFF_1k
ON_33k
OFF_1M
break;
case 2:
R = 1e3;
ON_1k
OFF_33k
OFF_1M
break;
}
if (cmode==0) {
printf_P(PSTR("\001\001 NE555 Reference "));
t1=Measure_555_N(64);
printf_P(PSTR("\001\002t1 = %9.2f us\001\005"),t1*1e6);
Cy = t1/(1.1*R);
printf_P(PSTR("\001\003Cy = %9.2f pF\001\005"),Cy*1e12);
}
else {
printf_P(PSTR("\001\001 NE555 Measurement"));
t2=Measure_555_N(64);
printf_P(PSTR("\001\002t2 = %9.2f us\001\005"),t2*1e6);
Cx = (t2-t1)/(1.1*R);
printf_P(PSTR("\001\003Cx = %9.2f pF\001\005"),Cx*1e12);
}
printf_P(PSTR("\001\004R = %4.0f kOhm\001\005"),R*1e-3);
for(i=0; i<30; i++) _delay_ms(10.0);
break;
}
}
return (0);
}
Auf dieser Seite möchte ich zeigen, daß das LC-Meter durchaus zu etwas nütze ist. Ich werde von Zeit zu Zeit praktsiche Meßbeispiele zufügen. Das erste Beispiel beschäftigt sich mit der Bestimmung des AL-Wertes von verschiedenen Kernmaterialien. Im zweiten Beispiel wurde der Kopplungsfaktor eines auf einem Ringkern gewickelten Transformators bestimmt.
1. Beispiel: Der AL-Wert einiger Ferritkerne
Der AL-Wert von Kernen (Ringkerne, M-Kerne, E-Kerne, etc.) dient dazu die Anzahl der Windungen zu berechnen, die man auf einen Kern wickeln muß, um eine gewünschte Induktivität zu erhalten. Die Induktivität L errechnet sich gemäß:
Die Meßvorschrift könnte also sein, eine bestimmte Anzahl von Windungen auf den Kern aufzubringen, die Induktivität zu messen und dann die Meßwerte in die nach N aufglöste Formel einzusetzten:
Ich bin einen etwas anderen Weg gegangen. Ich habe zu den Kernen, deren AL-Wert ich bestimmen wollte, die Induktivität zu jeweils einer, zwei, drei, …, acht Windungen bestimmt und die Werte notiert:
N
L1
L2
L3
1
-
3,2 μH
3,0 μH
2
-
8,8 μH
8,1 μH
3
18 μH
17,3 μH
19,9 μH
4
28 μH
28,4 μH
26,0 μH
5
40 μH
42,6 μH
38,6 μH
6
54 μH
59,8 μH
53,6 μH
7
72 μH
80,3 μH
71,2 μH
8
92 μH
104 μH
91,5 μH
Gemessene Induktivitätswerte dreier Induktivitäten in Abhängigkeit von der Windungszahl
Die drei Spalten L1, L2 und L3 stehen für die gemessenen Induktivitäten eines Amidon Ringkerns FT114-77, eines Kerns der Größe EE25 und eines Kernes der Größe E30. Zum dritten Kern sind mir die Daten völlig unbekannt. Siehe folgende Bilder.
Die drei Kerne - Amidon FT114-77, EE25, E30
Die drei Kerne, andere Perspektive - Amidon FT114-77, EE25, E30
Um aus den Meßreihen auf den AL-Wert zu kommen, ist es am bequemsten, die Formel an die Meßwerte anzufitten, wobei AL so lange variiert wird, bis die Summe der Fehlerquadrate minimal wird. Gnuplot [1] hat beispielsweise eine solche Funktion integriert. Das Ergebnis ist dann der AL-Wert inclusive seines Fehlers. Es hat sich als zweckmäßig herausgestellt, die Formal noch um einen Summanden L0 zu ergänzen, um konstante Induktivitäten des Meßaufbaus und der Zuleitungskabel zu berücksichtigen. Die Formel, die gefittet wird, ist also:
Das Fitergebnis ist in der folgenden Tabelle wiedergegeben:
Auswertung der Bestimmung des AL-Wertes einiger Kerne
Die Zuverlässigkeit der AL-Werte ist sehr gut, was vor allem bedeutet, daß die quadratische Abhängigkeit von der Windungszahl in der Realität hervorragend erfüllt ist. Anders dagegen die absoluten AL-Werte: Der gemessene Wert des Amidon-Kerns ist rund 18% größer als der Wert den der Herstellers [2] angibt. Bei Kern 2, dem EE25-Kern ist der gemessene Wert 16% kleiner als der Wert nach Herstellerangaben [3]. Allerdings gibt in diesem Fall der Hersteller die Toleranz seines AL-Werte mit 25% an. Damit liegen die AL-Werte der ersten beiden Kerne innerhalb der Toleranzgrenzen.
Zum dritten Kern (E30) kann man weiter nichts sagen, weil es keinen Referenzwert gibt. Der wahre AL-Wert dürfte zwischen 1,12 und 1,87 μH/Wdg2 liegen, wenn man 25% Toleranz zugrunde legt. Wahrscheinlich sind die Kerne EE25 und E30 daher nicht aus dem selben Material - zumal der größere E30 einen kleineren AL-Wert hat, als der kleinere EE25-Kern.
2. Beispiel: Bestimmung der Permeabilität μr
Die Induktivität einer Zylinderspule der Länge l und des Wicklungsquerschnitts A mit N Windungen auf einem Kermaterial mit der relativen Permeabilität μr läßt sich gemäß
berechnen, wobei μ0 = 4 π 10-7 H/m (ca. 1.26x10-6 H/m) ist. Diese Formel läßt sich leicht nach μr auflösen:
Die Größe le steht hier nun für eine effektive Länge der Spule oder - genauer - für die mittlere Länge einer magnetischen Feldlinien, die die Spule durchsetzt. Damit erlangt die Formel prinzipiell Gülrigkeit für beliebige Kernformen. Bei handelsüblichen Kernformen (vor allem bei Ringkerne, E-Kernen und anderen Kernen mit einem geschlossenen magnetischen Kreis) werden die geometrischen Größen le und A im Datenblatt mit angegeben (magnetische Formkenngrößen).
Der in der Formel auftretende Quotient aus L und N2 kann außerdem durch AL ersetzt werden. Somit können die im vorherigen Beispiel bestimmten AL-Werte hier direkt weiterverwendet werden, um auch die relative Permeabilität zu erhalten. Das Beispiel wird sich also wieder auf die drei oben erwähnten Kerne (Amidon FT114-77, ein EE25 und ein E30) beziehen. Die folgende Tabelle zeigt das Ergebnis der einfachen Rechnung.
Die Permeabilität des Amidon-Kernes wurde recht gut bestätigt. Die des EE25 Kernes weicht doch erheblich vom Wert ab, den das Material erwarten läßt. Interessanterweise hat der Kern mit dem umbekannten Material eine Permeabilität, die erstaunlich dicht am Meßwert des EE25-Kernes liegt. In Anbetracht der Abweichungen zu den Herstellerangaben ist diese Gleichheit natürlich mit Vorsicht zu interpretieren.
3. Beispiel: Der Kopplungsfaktor zweier Wicklungen auf einem Ferrit-Ringkern
Auf einen Amidon Ringkern FT114-77 [2] wurden als Sekundärwicklung etwas über 90 Windungen eines 0,15 mm CuLL-Drahtes - Windung an Windung - aufgebracht. Die Wicklung belegt damit etwa die Hälfte des Kerns. Mittig auf der freien Hälfte wurden 8 Windungen - ebenfalls Windung an Windung - eines 0,8 mm CuL-Drahtes als Primärwicklung aufgebracht. Ein leere und ein bewickelter Kern ist im folgenden Bild dargestellt.
Der Versuch, diesen Transformator als Durchflußwandler zu benutzen, schlug allerdings fehl, weil es im Ausschaltmoment auf der Primärseite sehr energiereiche Spannungsspitzen gab, die das angeschlossene Snubber-Netzwerk zu stark belasteten. Dieser Effekt ist ein deutliches Indiz für eine zu hohe Streuinduktivität. Das heißt, es steht zu befürchten, daß der Kopplungsfaktor nicht nahe genug bei 1 ist.
Wie sich der Kopplungfaktor k messen läßt, ist hier erklärt. Hier nochmal zusammenfassend die Formel:
Gemessen werden jeweils die einzelnen Induktivitäten der Wicklungen auf dem Kern (L1, L2) sowie die resultierende Induktivität, wenn man beide Wicklungen in Reihe schaltet (Lx) und wenn man eine Wicklung der Reihenschaltung umpolt (Ly). Hier die Meßwerte:
Messung von
Messwert
L1
110 μH
L2
13,8 mH
Lx
16,3 mH
Ly
11,6 mH
Die gemessenen Induktivitäten als Grundlage zur Bestimmung des Kopplungsfaktors k
Eingesetzt in die Formel ergibt sich ein Kopplungsfaktor von k=0,95, was deutlich kleiner als 1 ist. Damit hat sich der Verdacht erhärtet, daß zumindest diese Art des Bewickelns eines Ferrit-Ringkernes eher ungeeignet ist.
Dieser Artikel beschreibt einen Prototyp eines LC-Meters und vor allem die dahinter stehende Theorie. Eine praktische Bauanleitung incl. Platine und Stückliste ist im Artikel LC-Meter 2.0 beschrieben.
1. Motivation
Vor einiger Zeit hat mich die Frage eingeholt, wie gross denn wohl die Induktivität einer unbekannten Spule ist. Oder etwas genauer gefragt: wie gross ist der Kopplungsfaktor zweier Wicklungen auf einem Ringkern, den ich als Balun von 50 Ohm unsymmetrisch auf 50 Ohm symmetrisch benutzen wollte.
Dazu kann man die zwei Wicklungen auf dem Ringkern (im Bild sind es tatsächlich drei Wicklungen; die gerade nicht betrachtete Wicklung kann jeweils ignoriert werden) wie die zwei Wicklungen eines Transformators betrachten. Ich nenne sie daher auch Primär- und Sekundärwicklung. Selbst dann, wenn wie in meinem Fall, Primär- und Sekundärwicklung gleichartig aufgebaut sind, und sie vertauschbar sind.
Um nun den Kopplungsfaktor zwischen zwei Wicklungen, die sich auf einem Wickelkörper befinden, zu bestimmen, lautet eine mögliche Meßvorschrift wie folgt:
1.1 Erste Messung: Serienschaltung der Induktivitäten
Serienschaltung zweier Induktivitäten
Messe die Induktivität, wenn die Primärwicklung und die Sekundärwicklung in Reihe geschaltet sind. Diesen Wert nennen wir Lx. Das heißt, der Anfang der Primärwicklung wird mit dem einen Anschluß des Induktivitätsmeßgerätes verbunden. Das Ende der Primärwicklung wird mit dem Anfang der Sekundärwicklung verbunden. Das verbliebene Ende der Sekundärwicklung verbindet man mit dem anderen Pol des Meßgerätes. Wenn Primär und Sekundärwicklung gleichartig aufgebaut sind, so ist die Induktivität der Reihenschaltung etwa das vierfache einer einzelnen Wicklung, da die Induktivität proportional zum Quadrat der Windungszahl ist: Doppelte Windungszahl, vierfache Induktivität; dreifache Windungszahl, neunfache Induktivität; usw. Diese Aussage gilt natürlich nur bei starker Kopplung, wie sie in Transformatoren und auf meinem Ringkern zu erwarten ist. Bei sehr schwacher Kopplung würden sich die Induktivitäten der beiden Wicklungen einfach addieren. Das wäre beispielsweise bei zwei Festinduktivitäten oder bei zwei Spulen, die genügend weit voneinander entfernt sind, der Fall. In der Praxis wird man viele Fälle finden, bei denen die Gesamtinduktivität zwischen der doppelten (keine Kopplung) und der vierfachen Induktivität (perfekte Kopplung) liegt.
1.2 Zweite Messung: Anti-Serienschaltung der Induktivitäten
Anti-Serienschaltung zweier Induktivitäten
Messe die Induktivität, wenn gegenüber der ersten Messung eine der beiden Wicklungen umgepolt wird. Diesen Wert nennen wir Ly. Bei starker Kopplung und ansonsten gleichartigen Wicklungen erhält man das, was man eine bifilar gewickelte Spule bezeichnet. Die Konsequenz ist, daß die resultierende Induktivität nahe bei Null liegt. Zumindest ist sie sehr klein verglichen mit den Induktivitäten der einzelnen Wicklungen. Wenn gar keine Kopplung vorliegt, dann addieren sich ebenfalls die einzelnen Induktivitäten. Genauso, als ob man zwei Festinduktivitäten auf dem Labortisch liegen hat, die in Reihe geschaltet sind, und von denen man eine umpolt. Die Gesamtinduktivität ändert sich nicht.
1.3 Auswertung
Aus der Messung der Induktivität für die Serienschaltung und der Induktivität für die 'Anti-Serienschaltung' sowie der Messung der einzelnen Induktivitäten und kann der Kopplungsfaktor wie folgt ermittelt werden:
(1)
Kennt man übrigens den Kopplungsfaktor , so läßt sich die Gegeninduktivität wie folgt berechnen:
(2)
Wenn man zwei Induktivitäten hat, für die ist und die nicht gekoppelt sind (z.b. jede Induktivität auf einem eigenen Ringkern), dann ist und somit und . Befinden sich dagegen diese zwei gleichen Induktivitäten gemeinsam auf einem Ringkern - was eine sehr starke Kopplung bewirkt - dann ist und . Durch einsetzen in die erste Gleichung erhält man und somit . Je nach Konstruktion kann man losere Kopplungen (zwei Luftspulen ein einem gewissen Abstand) oder festere Kopplungen (ein Netztransformator) erhalten. Man kann die Kopplung als ein Maß verstehen, das angibt, wie stark das Magnetfeld der einen Induktivität das Innere der jeweils anderen Induktivität durchdringt.
Weitere Anwendungen zum LC-Meter werden hier vorgestellt.
Festlegung eines Konzeptes
Da ich gerade kein Induktivitätsmeßgerät zur Hand hatte, habe ich mir eins gebaut. Na ja … es ist ein kleines Projekt draus geworden. Im Web findet man natürlich immer Anregungen. Und letztlich unterscheidet sich meine Lösung nicht fundamental von der Lösung in [1].
Grundsätzlich wird (zumindest in meinem Projekt) die Bestimmung der Induktivität L auf die Frequenzmessung eines freischwingenden Oszillators zurückgeführt, wobei die Thomsonsche Schwingungsformel
(3)
die Frequenz oder die Kreisfrequenz mit der unbekannten Induktivität und der bekannten Kapazität des Schwingkreises verknüpft.
Eine alternativer Ansatz besteht aus einem Oszillator, der lose an den Schwingkreis gekoppelt ist, der wiederum die zu messende Induktivität enthält. Gemessen wird die Spannung über dem Schwingkreis in Abhängigkeit von der Frequenz . Stimmt die Frequenz des Oszillators mit der Eigenfrequenz des Schwingkreises überein, so ist die Spannung maximal. Die Induktivität wird auch hier über die Thomsonsche Schwingungsformel errechnet. Letzten Endes handelt es sich hier direkt um die Aufnahme der Resonanzkurve.
Eine dritte Variante beruht auf der Wheatstone'schen Wechselstrom-Brücke. Ich möchte sie hier nicht weiter betrachten.
Aus diesen Vorbemerkungen ergeben sich folgende Anforderungen
Das LC-Meßgerät muß sowohl sehr kleine Induktivitäten (kleiner 1 μH) als auch sehr große Induktivitäten (nicht unter 100 mH) messen können.
Das LC-Meßgerät muß in der Lage sein, Kapazitäten aufgrund des Layouts und des Oszillators zu ermitteln und bei der Berechung der Induktivität zu berücksichtigen. Diese Forderung ist gleichbedeutend mit dem Wunsch, auch unbekannte Kapazitäten messen zu können.
Eine zum vorigen Punkt verwandte Forderung ist, daß eineInduktivität bereits einen Kondensator parallel geschaltet haben darf, der die L-Messung nicht beeinträchtigt.
Idealerweise sollte die Induktivitätsmessung direkt oder indirekt auf eine Widerstandsmessung zurückgeführt werden. Grund ist vor allem, daß man nicht an jeder Straßenecke Induktivitäten mit geringer Toleranz und hoher Langzeitstabilität beschaffen kann. Bei Kondensatoren ist die Situation schon besser - Kondensatoren mit 2,5% Toleranz sind durchaus im einschlägigen Versandhandel erhältlich. Noch geringere Toleranzen sind bei Widerständen möglich - vor allem, wenn sie für Meßzwecke ausgelegt wurden (0,1%).
Bild 2: Das Prototyp- und Experimentierboard des LC-Meßgerätes. Vorne links befindet sich der LC-Oszillator, hinten links der monostabile Multivibrator. In der rechten Hälfte dominiert der ATMega163. Hinten rechts befindet sich der Anschluß des LC-Displays und hinten in der mitte erkennt man den Spannungsregler, dessen Kühlkörper etwas groß geraten ist. Die Verbindungen mit dem Controller erfolgt über Steckbrücken.
Bild 3: Die wesentlichen Komponenten des LC-Meßgerätes
Die wesentliche Baugruppe ist der freischwingende LC-Oszillator. Sein frequenzbestimmender Schwingkreis besteht aus der zu messenden Induktivität L und der Kapazität C, die als bekannt angenommen wird. Als aktives Bauelement findet der Komparator LM311 Verwendung.
Nicht minder wichtig ist der Micro-Controller ATMega163 von Atmel. Der ATMega163 ist zwar mittlerweile veraltet und kann leicht durch einen ATMega16 oder, falls nötig, durch den größeren ATMega32 oder deren Nachfolger ersetzt werden. Ich hatte einen 163er noch in der Schublade gehabt und wollte ihn in diesem Projekt einem sinnvollen Verwendungszweck zuführen. Der ATMega163 enthält eine Reihe verschiedener peripherer Komponenten, von denen neben den klassischen I/O-Ports die drei kombinierten Timer und Counter für das LC-Meter mit die wichtigsten sind.
Das LC-Display dient als Ausgabemedium. Im Prototyp wir ein vierzeiliges Exemplar eingesetzt. Für die tägliche Anwendung dürfte wohl ein zweizeiliges Display vollkommen ausreichen.
Bedient wird das LC-Meter mittels einiger weniger Taster. Neben einem Taster, der die Hintergrundbeleuchtung des LCD schaltet, gibt es einen weiteren, der den Meßmodus (L-Messung, C-Messung über den Oszillator, C-Messung mit dem NE555) bestimmt.
Abschließend gibt es noch den monostabilen Multivibrator, der mit einem NE555 aufgebaut ist. Er dient dazu, die Kapazität über die Zeit, die benötigt wird, einen Kondensator über einen Widerstand aufzuladen, zu ermitteln. Hier steht die Idee im Vordergrund, die Kapazitätsmessung, wie eingangs gefordert, auf eine Widerstandsmessung zurückzuführen.
Die folgenden Bilder zeigen den Schaltplan, der auf vier Seiten verteilt ist, sowie das Layout der Platine. Schaltplan und Platine liegen auch als Eagle-Files vor ([3],[4]).
Schaltplan - Teil 1 (Microcontroller)
Schaltplan - Teil 2 (LC-Oszillator)
Schaltplan - Teil 3 (NE555)
Schaltplan - Teil 4 (Stromversorgung)
Layout
4. Induktivitäten
Auf den ersten Blick mag dieses Kapitel überflüssig erscheinen. Was gibt es schon großartiges über Induktivitäten zu bemerken? Eine Induktivität ist durch ihren Wert, angegeben in μH, mH oder gar H doch ausreichend charakterisiert? Daß dem nicht so ist, sieht man allein schon daran, daß eine Induktivität aus Draht aufgebaut ist. Drähte, auch Kupferdrähte, haben einen nicht verschwindenden Widerstand. Beispielsweise hat eine handelsübliche Festinduktivität für 1 mH einen Widerstand von 14 Ω. Widerstände sind ein Maß für Verluste. Auch das Kernmaterial wird für Verluste sorgen und so für eine weitere Erhöhung der ohmschen Anteile. Weiterhin haben Induktivitäten Anschlußdrähte. Diese, und seien sie auch noch so klein (SMD), haben eine nichtverschwindende Kapazität. Auch abhängig vom Spulenaufbau können weitere kapazitive Anteile hinzukommen. Man könnte das Spiel sogar noch weiter treiben und jedem Paar aus benachbarten Windungen eine Kapazität zuschreiben. Abschließend sei bemerkt, daß vor allem die parasitären Beiträge auch noch frequenzabhängig sein können. Vor allem die Eigenschaften des verwendeten Kernmaterials können eine Ursache dafür sein. Oder auch der Skin-Effekt, der bei zunehmender Frequenz den Strom nur noch in der Nähe der Oberfläche des Drahtes fließen läßt, ist naturgemäß frequenzabhängig.
Wenn man ein Induktivitätsmeßgerät baut, dann muß man sich selbst darüber im klaren sein, welche parasitären Anteile der Spule man bei der Messung neben der primär zu messenden Induktivität darüber hinaus noch berücksichtigen will. Im einfachsten Fall würde man sowohl die ohmschen Verlustwiderstände als auch jegliche Form der Parallelkapazitäten vernachlässigen. Des weiteren würde man alle Größen als frequenzunabhängig annehmen. Eine etwas realistischere Betrachtung wäre, daß man zusätzlich zur Induktivität die Parallelkapazität versucht zu ermitteln. Dieser Weg soll im weiteren Verlauf auch beschrieben werden.
Übrigens für Kapazitäten kann man analoge Betrachtungen durchführen. Die Zuleitungen liefern einen Beitrag zur Serieninduktivität und die endliche Leitfähigkeit sowie (frequenzabhängige) Verluste im Dielektrikum tragen zu einem Verlustwiderstand bei.
5. Die L-Messung
Wie bereits in der Einführung angedeutet, beruht die Messung einer Induktivität auf der Messung der Frequenz bzw der Kreisfrequenz eines Schwingkreises bestehend aus und . Die Thomsonschen Schwingungsformel verknüpft diese Größen gemäß:
(4)
Sind zwei Größen der Gleichung bekannt, so kann die dritte daraus berechnet werden. Für ein Induktivitätsmessgerät wäre ein gängiges Vorgehen, die Frequenz zu messen und die Kapazität als bekannt vorauszusetzen. Beispielsweise könnte man einen Kondensator mit genügend genau bekannter Kapazität in den Schwingkreis einbauen. Dann kann leicht gemäß
(5)
berechnet werden. In dem hier diskutierten Induktivitätsmeßgerät wird prinzipiell genau so vorgegangen. In der Praxis hat man jedoch mit verschiedenen Schwierigkeiten zu rechnen:
Sehr kleine Induktivitäten bedingen sehr hohe Frequenzen, die sowohl den LM311 als auch den ATMega163 überfordern.
Induktivitäten haben, abhängig vom Wicklungsaufbau, parasitäre Kapazitäten.
Der Aufbau der Schaltung und die Leiterbahnführung sind nicht ohne zusätzliche und unbekannte Kapazitäten realisierbar.
Der im Rückkopplungszweig angeordnete LM311 hat eingangsseitig eine unbekannte, aber nicht verschwindende Kapazität.
Anhand des folgenden Schaltbildes, das ein Auszug aus dem Schaltplan - Teil 2 (LC-Oszillator) ist, werden die weiteren Einzelheiten diskutiert.
Schaltplan - der Schwingkreis - vereinfacht
Die unbekannte Induktivität wird an die Klemmen X3 und X4 angeschlossen. Damit ist sie in Serie zu angeordnet. ergänzt die Schaltung zu einem vollständigen Schwingkreis. Hinweis: Der Schalter K1 dient hier zur überbrückung von , während er im Schaltplan noch dazu dient, den 330 pF Kondensator zu schalten. Dieser Kondensator wird jetzt über K2 geschaltet. K8 wird nicht weiter berücksichtigt.
Um die hohen Frequenzen zu vermeiden, die sich aus sehr kleinen zu messenden Induktivitäten ergeben, kann man einerseits die Kreiskapazität erhöhen oder andererseits die Induktivität erhöhen, indem man eine weitere Induktivität zur unbekannten und zu messenden Induktivität in Reihe schaltet: . Generell gilt als Daumenregel, daß das Verhältnis aus und eher groß als klein sein soll. Es ist also ratsamer zu vergrößern statt . Wie ein Blick auf den Schaltplan beweist, wurde genau diese zweite Möglichkeit realisiert - genauso wie in der Vorlage ([1]). Ist (oder zumindest sehr viel kleiner als ) so hat der Schwingkreis, der jetzt nur noch aus und besteht, eine Eigenfrequenz von rund 1 MHz. Selbst ein sehr kleines kann die Frequenz nur noch erniedrigen.
5.1 Meßvorschrift 1
Zunächst wollen wir nicht berücksichtigen und es mittels K1 kurzschließen, was zur Konsequenz hat, daß nicht wesentlich kleiner als 50 μH sein darf, damit die obere Frequenzgrenze des Oszillators und des ATMega163 nicht überschritten wird. Weiterhin wollen wir annehmen, daß eine parasitäre Parallelkapazität haben kann. Schließlich müssen wir sogar annehmen, daß der Schaltungsaufbau selber einen weiteren unbekannten kapazitiven Beitrag zum gesamten Schwingkreis liefern wird. Diese parasitäre Kapazität von und die Kapazität aus dem Schaltungsaufbau fassen wir unter zusammen. Man sieht sofort, daß zwei Größen zu bestimmen sind: primär und als Dreingabe . Da liegt einem doch sofort der Satz "zwei Gleichungen - zwei Unbekannte" auf der Zunge. Welches sind nun die zwei Gleichungen? Da wir Schwingkreise betrachten, müssen die beiden Gleichungen, die wir benötigen, auf die Thomsonsche Schwingungsformel zurückzuführen sein. Wir können leicht dadurch zwei Gleichungen erzielen, indem wir zwei Messungen durchführen und bei der zweiten Messung ein Bauteil in den Schwingkreis einfügen, dessen Wert wir genau kennen. bietet sich sofort an, weil dieser Kondensator über K2 zugeschaltet werden kann.
Messung von
Dabei wirksame Komponenten
, ,
, , ,
Die wirksamen Komponenten bei Messung von und
(6)
(7)
Die Herleitung ist hier noch ein wenig detaillierter dargestellt. Die Formeln sind nicht zu komplex und lassen sich leicht auch für einen Microcontroller realisieren. Im folgenden werden ein paar Messergebnisse gezeigt, die die prinzipielle Tauglichkeit dieses Ansatzes belegen.
Messung
nomineller Wert
gemessener Wert
Cy
Bemerkungen
1
2,4 mH
2,41 mH
46,9 pF
Festinduktivität
4
unbekannt
12,1 mH
332 pF
Trafo 230V/15 V auf Sekundärseite gemessen
5
unbekannt
127 μH
34,1 pF
Einlagige Zylinderspule
6
47 μH
47,3 μH
45,4 pF
Festinduktivität
7
unbekannt
4,18 mH
37,1 pF
LW-Spule auf Ferritstab
8
47 μH || 470 pF
47,3 μH
522 pF
Festinduktivität mit Parallelkapazität
Einige Beispielmessungen zur Messvorschrift 1
Die Nummern, zu denen es keine Messungen gibt, konnten hier noch nicht durchgeführt werden, weil die Induktivitäten mit wenigen 10 μH zu gering waren. Der Oszillator ist garnicht erst angeschwungen. Was man erkennt, ist, daß die Werte der bekannten Induktivitäten sich gut reproduzieren lassen. Die Kapazität der gesamten Meßanodnung dürfte bei rund 30 pF liegen, wie die Messung der einlagigen Zylinderspule, die von hause aus kapazitätsarm ist, belegt. Eine Zusatzkapazität von 470 pF wird auch ziemlich korrekt ermittelt (Messungen 6 und 8). Die Langwellenspule ist ebenfalls recht kapazitätsarm, während der Trafo eine schon recht hohe Kapazität aufweist.
Als Schmankerl sei noch folgendes erwähnt: Selektiert man aus einer größeren Menge von Festinduktivitäten zwei Stück, deren gemessene Induktivitäten und gemessene Kapazitäten möglichst gleich sind, so kann man beide Induktivitäten dann in Reihe schalten und erneut messen. Die gemessene Induktivität wird sich dann verdoppeln während der gemessene Wert von sinken wird, weil die parasitären Kapazitäten der beiden Induktivitäten jetz in Reihe geschaltet sind und sie sich somit halbieren. Das doppelte der Differenz der beiden -Werte ist die parasitäre Kapazität einer Induktivität. Der Versuch, dies mit der 47 μH-Festinduktivität durchzuführen ergab eine parasitäre Kapazität von etwa 15 pF. Das heißt, in Messung 6 gehen 15 von den 45,4 pF auf das Konto der Induktivität und rund 30 pF stammen vom Schaltungsaufbau. Auch das ist im Einklang mit den Ergebnissen der kapazitätsarmen Spulen.
5.2 Meßvorschrift 2
Jetzt möchten wir auch kleine Induktivitäten messen und dazu ist es notwendig der unbekannten Induktivität in Reihe zu schalten. Daraus ergibt sich die einfachste Meßvorschrift: Der Schwingkreis besteht nur aus , und . Die Bauteile werden als ideal betrachtet, die Bauteilewerte von und werden als exakt angenommen, die Einflüsse der Leiterbahnen werden vernachlässigt und der Einfluß des LM311 auf die Schwingfrequenz wird ebenfalls vernachlässigt. ist also null. Dann läßt sich aus der gemessenen Frequenz , deren Meßfehler ebenfalls vernachlässigt werden kann, wie folgt berechnen:
Messung von
Dabei wirksame Komponenten
,,
Die wirksamen Komponenten bei Messung von
(8)
Ein Anfang ist gemacht. Aber diese Lösung ernsthaft weiter zu vefolgen, lohnt nicht. Unter realen Bedingungen werden zumindest die Werte der verwendeten Bauteile und eine nichtverschwindende Toleranz aufweisen. Leicht (für den Bastler) beschaffbare Kondensatoren lassen sich bis auf weinige Prozent genau fertigen; bei Induktivitäten liegen die Toleranzen kaum unter 10%. Ganz grob kann man daraus schließen, daß gemessene Induktivitäten von 5 μH oder weniger einen Fehler von mindestens 100% aufweisen werden. Die Messung ist dann praktisch wertlos. Je kleiner also ist, desto größer ist der Einfluß des Fehlers von auf den Meßwert. Der Fehler von spielt dann nur noch eine untergeordnete Rolle. Umgekehrt - je größer ist desto geringer ist der Einfluß von auf das Meßergebnis. Dann dominiert nur noch der Fehler von . Da hier nicht berücksichtigt wird, wollen wir uns mit dieser Meßvorschrift nicht weiter befassen und uns gleich der nächste Meßvorschrift zuwenden, die zeigt, wie man zunächst den Fehler von eliminieren kann.
5.3 Meßvorschrift 3
Diese Meßvorschrift eliminiert die Toleranz der Induktivität , indem zwei Messungen durchgeführt werden wobei im einen Fall am Schwingkreis beteiligt ist während im anderen Fall kurzgeschlossen ist und damit 0 ist. Der Schalter K7 dient dazu, die unbekannte Induktivität zu überbrücken. Die erste Messung wird also gemäß der Meßvorschrift 2 durchgeführt wobei K7 offen ist. Sie lefert die Frequenz die zum Schwingkreis bestehend aus , und gehört. Die zweite Messung liefert die Frequenz , die zu einem Schwingkreis gehört, der nur aus und besteht. Daraus kann leicht berechnet werden. Dieser Schwingkreis hat natürlich eine höhere Resonanzfrequenz als derjenige, der bei der Messung von benutzt wurde. Also .
Messung von
Dabei wirksame Komponenten
,,
,
Die wirksamen Komponenten bei Messung von und
(9)
(10)
Der Wert von tritt, nachdem in die untere Gleichung eingestzt wurde, nicht mehr auf und kann somit auch keinen Beitrag mehr zum Fehler leisten. Bleibt immer noch , das für kleine Induktivitäten nicht berücksichtigt wurde. Die folgende Meßvorschrift 4a und alternativ 4b zeigen einen Weg, auch eine Aussage über zu erhalten.
5.4 Meßvorschrift 4a
Jetzt wird zusätzlich noch eine dritte Messung durchgeführt. und bestimmen sich wie oben. wird gemessen während kurzgeschlossen ist, und über K2 zugeschaltet ist. Insgesamt liegen damit drei Gleichungen vor mit den drei Unbekannten , und . Es gäbe sogar noch eine vierte Möglichkeit zu messen: nämlich bei offenem K7 und geschlossenem K2. Dies würde jedoch zu einem überbestimmten Gleichungssystem führen, das normalerweise nicht lösbar ist, sondern nur im Sinne eines geringsten Fehlers - nicht unmöglich, aber ich habe das nicht weiter betrachtet. Was aber leicht geht, ist diese vierte Messung trotzdem durchzuführen und die Ergebnisse dann für zu vergleichen. Abweichungen deuten dann auf Besonderheiten der unbekannten Induktivität hin. Siehe auch 5.5.
Messung von
Dabei wirksame Komponenten
, , ,
, ,
, , ,
Die wirksamen Komponenten bei Messung von , und
(11)
(12)
(13)
Interessant ist natürlich die dritte Gleichung, die die drei gemessenen Frequenzen , und sowie die Kapazität mit der Induktivität in Beziehung setzt. Die anderen beiden Gleichungen wurden nur der Vollständigkeit halber angegeben. In Einzelfall mag es durchaus interessant sein, zu bestimmen, denn dieser Wert sagt ja etwas über die parasitären Kapazitäten des Aufbaus aus. Für ist tatsächlich der aufgedruckte Wert einzusetzten. Die Toleranz wurde ja zugeschlagen. Auch läßt sich aus den drei gemessenen Frequenzen und ermitteln. Da jetzt alle Werte nur noch von den Frequenzen und abhängen, kann man folgern, daß man sich diesen Kondensator mit der niedrigsten Toleranz und möglichst auch mit einer hohen Langzeitstabilität beschaffen soll. Außerdem soll seine Einbindung in das gesamte Layout so wenig wie möglich weitere parasitäre Kapazitäten beisteuern. Hier gilt es alle Leiterbahnen so kurz wie möglich auszuführen. Bei einem Kondensator mit 330pF und einer Toleranz von 2,5% bedeuten 8pF Aufbau- und Leiterbahnkapazitäten einen erheblichen Verlust an Genauigkeit. Andererseits hoffe ich, daß es mir gelungen ist, deutlich unter den 8 pF zu liegen.
Die mit dem Prototypen durchgeführten Messungen gemäß Vorschrift 4a ergaben folgende Ergebnisse:
Messung
nomineller Wert
gemessener Wert
L3
Cy
Bemerkungen
1
2,4 mH
2,41 mH
46,2 μH
43,4 pF
Festinduktivität
2
15 μH
14,8 μH
46,2 μH
43,3 pF
Festinduktivität
3
10 μH
9,2 μH
46,2 μH
43,4 pF
Festinduktivität
4
unbekannt
18,8 mH
46,2 μH
43,5 pF
Trafo 230V/15 V auf Sekundärseite gemessen
5
unbekannt
122 μH
46,2 μH
43,5 pF
Einlagige Zylinderspule
6
47 μH
45,4 μH
46,2 μH
43,5 pF
Festinduktivität
7
unbekannt
4,04 mH
46,2 μH
43,6 pF
LW-Spule auf Ferritstab
8
47 μH || 470 pF
72,8 μH
46,2 μH
43,8 pF
Festinduktivität mit Parallelkapazität
9
Kurzschluß (L=0)
-0,02 μH
46,1 μH
43,2 pF
2 cm Leiterschleife
10
10 μH || 470 pF
10,8 μH
46,2 μH
44,1 pF
Festinduktivität mit Parallelkapazität
Einige weitere Beispielmessungen
Bei allen Messungen fällt auf, daß die Werte von und kaum variieren. Auf den ersten Blick ein gutes Zeichen. Aber der Vergleich mit den Messungen aus 5.1 liefert Widersprüche. Die Induktivitäten der Bauteile mit hoher Parallelkapazität (Messung 4 und 8) liefern einen zu hohen Wert für und zu kleine Werte für . Betrachtet man insbesondere die Messung 8, So fällt auf, daß die Parallelkapazität zu sich ausschließlich auf den Wert der Induktivität von auswirkt und nicht, wie erwartet, als Erhöhung des Wertes von . Schaltet man jedoch die 470 pF parallel zu , so wird für ein Wert von 522 pF ermittelt, was ein durchaus vernünftiger Wert ist. Diese Messung zeigt, daß die gewählte Konfiguration nicht dazu geeignet ist, Parallelkapazitäten zu richtig zu ermitteln. Diese Konfiguration liefert also nur dann vernünftige Resultate, wenn eine ideale (oder doch zumindest kapazitätsarme) Induktivität ist. Letzten Endes ist das aber nicht verwunderlich, denn der Schwingkreis hat hier ein viel komplizierteren Aufbau. bildet mit seiner parasitären Kapazität, die nur ein Teil von ist, bereits einen Schwingkreis, dem in Reihe die Induktivität geschaltet ist. Dieser Anordnung sind dann noch die Kapazitäten , , und die schaltungsbedingten Anteile von parallelgeschaltet.
Messung 9 liefert einen negativen Wert. Das kann immer mal wieder passieren, wenn sehr große, fast gleiche Zahlen voneinander subtrahiert werden. Möglicherweise führt das Schließen von K7 zu einer Erhöhung parasitärer Kapazitäten, die die Reduzierung der Induktivität überkompensiert.
5.5 Meßvorschrift 4b
Wie bereits bei der Meßvorschrift 4a (5.4) angedeutet, gibt es noch eine weitere, die sich in der Ausführung der dritten Messung unterscheidet. Alternativ wird ausgehend von der ersten Messung, bei der nicht kurzgeschlossen ist, zugeschaltet und dabei gemessen. Es sind also alle Bauteile am Schwingkreis beteiligt, während in der Meßvorschrift 4a die unbekannte Induktivität ja kurzgeschlossen und somit nicht wirksam war. Das Ergebnis ist der folgende Satz von Gleichungen:
Messung von
Dabei wirksame Komponenten
, , ,
, ,
, , , ,
Die wirksamen Komponenten bei Messung von , und
(14)
(15)
(16)
Es fällt auf, daß die Gleichungen strukturell sehr ähnlich aussehen. Natürlich müssen die beiden Meßvorschriften 4a und 4b zum selben Ergebnis für alle drei Größen , und führen. In der Realität werden sie das jedoch nicht tun. Wir werden zufrieden sein, wenn die drei Größen nicht zu sehr voneinander abweichen. Vor allem sollte zwischen beiden Varianten weniger variieren, als es der Meßfehler vermuten läßt. Wenn keine parasitären Kapazitäten hat, dann werden die Ergebnisse konsistent sein. Hat aber z.B. sogar einen Kondensator parallel geschaltet, dann werden die Messungen massiv abweichen. Das kann beispielsweise auch dann passieren, wenn die zu messende Spule gar keinen Kondensator eingebaut hat. Entweder sie hat dann einen Wicklungsaufbau, der zu einer hohen Kapazität führt, oder es handelt sich um einen Transformator mit großem übersetzungsverhältnis. Mißt man auf der Seite mit der geringen Windungszahl (Primärseite, Windungen), dann werden die Wicklungskapazitäten (oder sogar eine echte angeschlossene Kapazität) der Spule mit der hohen Windungszahl (Sekundärseite, Windungen) so transformiert daß sie um den Faktor an der Primärspule erscheinen. ist das Windungsverhältnis der Sekundärspule und der Primärspule.
Das Problem mit den Kapazitäten der zu messenden Induktivität ist, daß sie nicht parallel zum gesamten Schwingkreis bestehend aus und liegen, sondern nur parallel zu , was ja seinerseits nur ein Teil der gesamten Induktivität des Schwingkreises ist. Das gesamte Gebilde ist dann jedenfalls kein einfacher Schwingkreis mehr.
Die Messungen nach der Meßvorschrift 4a haben ja schon gezeigt, daß die Ergebnisse mir Vorsicht zu genießen sind. Trotzdem wurden die Messungen mit den selben Bauteilen in der Variante 4b wiederholt. Nachfolgend die Ergebnisse.
Messung
nomineller Wert
gemessener Wert
L3
Cy
Bemerkungen
1
2,4 mH
2,40 mH
46,1 μH
46,4 pF
Festinduktivität
2
15 μH
14,9 μH
47,1 μH
34,5 pF
Festinduktivität
3
10 μH
9,2 μH
46,9 μH
36,4 pF
Festinduktivität
4
unbekannt
12,1 mH
29,7 μH
331 pF
Trafo 230V/15 V auf Sekundärseite gemessen
5
unbekannt
126 μH
47,5 μH
29,7 pF
Einlagige Zylinderspule
6
47 μH
46,5 μH
47,3 μH
32,0 pF
Festinduktivität
7
unbekannt
4,14 mH
46,9 μH
36,9 pF
LW-Spule auf Ferritstab
8
47 μH || 470 pF
55,6 μH
35,3 μH
202 pF
Festinduktivität mit Parallelkapazität
9
Kurzschluß (L=0)
-0,02 μH
46,2 μH
42,4 pF
2 cm Leiterschleife
10
10 μH || 470 pF
10,6 μH
45,4 μH
54,0 pF
Festinduktivität mit Parallelkapazität
Einige weitere Beispielmessungen
Im Vergleich zu den Messungen in 5.4 fällt hier auf, daß und vor allem stärker variieren. Das ist ein Indiz dafür, daß parasitäre Kapazitäten von vorhanden sind und sie sich unterschiedlich stark auf und auswirken. Messung 8 mit der absichtlich zugefügten Kapazität und Messung 4 mit dem Transformator zeigen dies deutlich. Die gemessene Induktivität fällt kleiner aus, während ein Teil der Parallelkapazität jetzt bei zu finden ist. Schaltet man bei Messung 8 jedoch die 470 pF wieder parallel zu , so wird für ein Wert von 511 pF ermittelt, was auch hier ein durchaus vernünftiger Wert ist. Die Messung 4 mit dem Trafo zeigt noch etwas anderes: Sowohl als auch stimmen sehr gut mit den Werten aus 5.1 überein. Das liegt daran, daß sehr klein verglichen mit ist.
Zum negativen Wert der Messung 9 gilt ebenfalls das in 5.4 gesagte.
Tendenziell scheint diese Meßvorschrift die etwas besseren Ergebnisse zu liefern. Die Werte von liegen näher an den nominellen Werten dran. Aber auch hier muß als Fazit festgehalten werden, daß die gewählte Konfiguration zur Messung von Kapazitäten parallel zu nicht geeignet ist, vor allem wenn von der selben Größenordnung wie ist. Ist jedoch so wirkt sich eine parasitäre Kapazität kaum noch auf das Ergebnis von aus, wie die Messungen 10 im Vergleich zu 3 zeigen. bleibt aber trotzdem wertlos.
6. Die C-Messung
Kapazitäten können wir auf zwei Wegen messen. Einmal können wir wieder auf einen Schwingkreis zurückgreifen, bei dem wir den Wert der Induktivität kennen und aus der gemessenen Frequenz auf die Kapazität rückschließen können. Die bereits mehrfach zitierte Thomsonsche Schwingungsformel wird dazu einfach nach C aufgelöst und man erhält:
Alternativ wird zur Messung der Kapazität der gute alte Timer NE555 (z.B. [6]) verwendet, der von vielen Herstellern angeboten wird. Er kennt zwei Betriebsarten, wobei in diesem Einsatzfall er als sogenannter monostabiler Multivibrator, auch bekannt als Monoflop, betrieben wird. Grundidee ist, daß die Ladezeit (oder auch Entladezeit) eines Kondensators in einem formelmäßigen Zusammenhang mit seiner Kapazität steht.
6.1 Die C-Messung basierend auf einem Schwingkreis
Da wir auch hier wieder sehr kleine Kapazitäten Cx messen wollen, folgen wir der selben Strategie wie bei der Messung kleiner Induktivitäten Lx. Ähnlich, wie dort die Serienschaltung aus Lx und L3 sicherstellt, daß die Induktivität im Schwingkreis einen Minimalwert, nämlich den von L3, nicht unterschreitet, wird hier durch Parallelschaltung von Cx und C13 erreicht, daß die Kapazität nicht unter den Wert von C13 fällt. Die Schwingfrequenz im Schwingkreis wird daher nicht über rund 1 MHz liegen. Im folgenden als Wiederholung nochmal der relevante Ausschnitt aus dem Schaltplan.
Schaltplan - der Schwingkreis - vereinfacht
Wir hatten bei der L-Messung immer die parasitären Kapazitäten der Induktivität und des Schaltungsaufbaus durch Cy ausgedrückt und versucht, diesen Wert zu bestimmen. Da wir uns bei der C-Messung nicht weiter dafür interessieren, schlagen wir sie einfach dem Kondensator C13 zu.
Die Größen Cx, L3 und C13 sind als unbekannt zu betrachten. Es müssen also minimal drei Frequenzmessungen durchgeführt werden, bei denen der Schwingkreis so zu konfigurieren ist, daß drei Gleichungen dabei entstehen. Die folgende Aufstellung zeigt eine Möglichkeit:
Messung von
Dabei wirksame Komponenten
f1
C13, L3
f2
C13, C15, L3
f3
Cx, C13, L3
Die wirksamen Komponenten bei Messung von f1, f2 und f3
Damit ist C15 derjenige Kondensator, dessen Genauigkeit direkt in das Meßergebnis einfließt. Sein Wert muß daher so genau wie möglich bekannt sein. Die folgenden Formeln geben an, wie aus den gemessenen Frequenzen neben L3 und C13 vor allem die zu bstimmende Kapazität Cx zu berechnen ist.
Alternativ besteht auch hier wieder die Möglichkeit - wie bei der Messung der Induktivitäten - die dritte Frequenzmessung mit zugeschaltetem Kondensator C15 durchzuführen. Die Frequenz in dieser Konfiguration bezeichnen wir hier mit f4.
Messung von
Dabei wirksame Komponenten
f1
C13, L3
f2
C13, C15, L3
f4
Cx, C13, C15, L3
Die wirksamen Komponenten bei Messung von f1, f2 und f3
Die Werte von C13 und L3 berechnen sich genau so wie vorher; nur die Berechnung von Cx erfolgt deutlich anders.
Elegant wäre es, den Kondensator Cx über ein Relais unter der Kontrolle des Microcontrollers zuzuschalten. Das wurde aber nicht vorgesehen, so daß die Bedienung des LC-Meters in diesem Meßmodus ein wenig anders erfolgt. Man muß manuell festlegen, ob man gerade die f1 und f2-Messung ohne Cx durchführt, oder die eigentliche f3 bzw. f4-Messung mit Cx.
Die parasitären Kapazitäten einer Induktivität liegen in einer Größenordnung, die das LC-Meter leicht bestimmen kann und deren Nichtberücksichtigung das Meßergebnis deutlich beeinträchtigen kann. Das Gegenstück bei der Kapazitäsmessung wären demnach parasitäre Induktivitäten, die unter anderem von den Zuleitungen kommen können. Wir werden solche Induktivitäten, die zumeist unter 1 μH liegen;, nicht weiter berücksichtigen.
6.2 Die C-Messung basierend auf der Messung der Ladezeit (NE555)
Der NE555 (auch als LM555 bekannt) [6] ist ein immer wieder gern genommener Baustein, wenn es darum geht, mittels eines Widerstandes und eines Kondensators eine Impulslänge festzulegen. Genau so wird der Baustein auch hier verwendets wobei er in der monostable operation betrieben wird (monostabiler Multivibrator, Monoflop). Das folgende Bild zeigt den wesentlichen Schaltungsauszug so weit er zum Verständnis relevant ist.
NE555 als monostabiler Multivibrator
Ein Übergang von High nach Low am Triggereingang TR (Pin 2) bewirkt, daß der Ausgang Q (Pin 3) auf High wechselt. Abhängig von der Dimensierung der zeitbestimmenden Bauteile bleibt der Ausgang für die Zeit Δt auf High bevor er wieder auf Low wechselt. Der Triggerimpuls sollte dabei deutlich kürzer als Δt sein. Die Bauteile, die die Zeit Δt bestimmen, sind
der unbekannte Kondensator Cx, der an die Anschlüsse X5 und X6 angeschlossen wird,
der Kondensator C17, der über K3 zugeschaltet werden kann und dann parallel zu Cx liegt,
einer der drei Widerstände R10, R11, R12.
Ganz allgemein berechnet sich die Impulsdauer Δt gemäß folgender Formel:
Das heißt, die Kapazität C ist direkt proportional zur gemessenen Zeit Δt und hängt sonst nur noch vom Wert des Widerstandes R ab. Somit kann die Kapazitätsmessung auf eine Widerstandsmessung (und natürlich eine Zeitmessung) zurückgeführt werden. Der Faktor ln3, dessen Wert ungefähr 1,1 ist, rührt daher, daß der Kondensator C bis auf 2/3 der Betriebsspannung aufgeladen wird. Löst man nach C auf, so erhält man:
Die Kapazität C setzt sich - nicht unerwartet - aus mehreren Teilkapazitäten zusammen: Zunächst natürlich aus der unbekannte Kapazität Cx, die zu messen ist, dann aus der parasitäre Kapazitäten Cy die vor allem vom Layout und der Verkabelung herrühren und optional aus der Kapazität C17.
Der Faktor ln3, dessen Wert ungefähr 1,1 ist, rührt daher, daß der Kondensator C bis auf 2/3 der Betriebsspannung aufgeladen wird.
6.3 Ein paar Beispiele
Im folgenden werden ein paar Beispiele vorgestellt, die wiederum die Tauglichkeit der Messungen belegen sollen
Messung
nomineller Wert
LC-Kreis (a)
LC-Kreis (b)
NE555
R (NE555)
Bemerkungen
1
470 pF
481 pF
482 pF
480 pF
1 MΩ
FKC?
2
470 pF + 10 μH
527 pF
515 pF
481 pF
1 MΩ
Serienschaltung
3
8,2 pF
8,3 pF
8,4 pF
8,2 pF
1 MΩ
Keramikkondensator
4
100 nF
92,4 nF
92,4 nF
98,8 nF
33 kΩ
Vielschichtkondensator
5
100 nF
98,3 nF
98,3 nF
97,0 nF
33 kΩ
MKS
6
330 nF
374 nF
374 nF
359 nF
33 kΩ
MKS
7
100 pF
95,0 pF
95,3 pF
95,5 pF
1 MΩ
FKC?
Einige Beispielmessungen
Die höchste messbare Kapazität liegt bei ungefähr 330 nF. 470 nF führen bereits zu unsinnigen Resultaten. Beide Varianten liefern praktisch identische Messwerte. Eine zugeschaltete Induktivität führt zu einer Erhöhung der Kapazität; in der zweiten Variante fällt sie aber nicht so groß aus, wie in der ersten. Die Messung mittels NE555 zeigt keine Abhängigkeit von einer vorhandenen Serieninduktivität.
7. Messung des Kopplungsfaktors
Endlich ist es so weit. Wir sind am Ziel. Wobei zugegebenermaßen das Kapitel über die Kapazitätsmessung keinen weiteren Beitrag zur urspürunglichen Frage - nämlich wie groß ist der Kopplungsfaktor zweier Wicklungen auf einem gemeinsamen Kern - geleistet hat. Gemessen wurden
Eine Mittelwellenspule (bezeichnet mit L) aus dem Kosmo Experimentierkasten Elektroniklabor XG (Siebziger Jahre) ohne Kern.
wie zuvor, jedoch mit Kern
Ein Wicklungspaar für Mittelwellenempfang auf einem Ferritstab
Ein Wicklungspaar für Langwellenempfang auf einem Ferritstab
Zum Zeitpunkt der Aufbereitung dieses Artikels liegt mir leider kein Ringkern, wie eingangs genannt mehr vor. Daher kann ich dazu keine Ergebnisse mehr vorstellen.
Spulen, zu denen der Kopplungsfaktor bestimmt worden ist
Das Bild zeigt die Teile im Detail. Oben die Spule aus dem Experimentierkasten, darunter der Ferritstab auf dessen linker Seite die Langwellenspulen und auf dessen rechter Seite die Mittelwellenspulen angeordnet sind. Gemessen wurden jeweils die Induktivitäten der einzelnen Wicklungen L1 und L2 sowie die Induktivitäten der Serienschaltung Lx und der Antiserienschaltung Ly. Berechnet wurde dann gemäß
der Kopplungsfaktor k und die Gegeninduktivität M. Die folgende Tabelle führt die Ergebnisse aus.
Messung
L1
L2
Lx
Ly
k
M
Bemerkungen
1
149 μH
13,5 μH
193 μH
130 μH
0,35
15,8 μH
ohne Kern
2
229 μH
22,8 μH
332 μH
174 μH
0,55
39,5 μH
mit Kern
3
254 μH
28,1 μH
394 μH
171 μH
0,66
55,8 μH
MW-Spulen auf Ferritstab
4
4071 μH
56,2 μH
4965 μH
3437 μH
0,88
382 μH
LW-Spulen auf Ferritstab
Einige Beispielmessungen
Den Ergebnissen kann man folgende einfache Erkenntnisse entnehmen:
Ein Kern erhöht den Kopplungsfaktor (Messung 1 und 2)
Mittelwellenspulen sind im Grunde doch recht ähnlich aufgebaut (Messung 2 und 3)
Liegen die Wicklungen übereinander, so ist der Kopplungsfaktor größer, als wenn sie nebeneinanderliegen (Messung 3 und 4)
8. Auszüge aus dem Quellcode
Nachdem die bisherigen Kapitel einige theoretische und grundsätzuliche Aspekte der Meßtechnik beleuchtet haben, soll jetzt der Schwerpunkt auf den Quellcode gelenkt werden. Der Prototyp wurde in C implementiert und findet leicht im Flash-Speicher des Atmel ATmega163 Platz. Dieser Typ ist heute veraltet; eine Implementierung in einem aktuellen ATmega16x sollte - bis auf eventuell leicht abweichende Register- oder Interruptnamen - kein Problem darstellen. Als Entwicklungsumgebung wurde das AVRStudio 4.15 [8] zusammen mit dem GNU-C-Compiler 4.2.2 aus WinAVR-Suite [9] und der avr-libc in der Version 1.6.0 [10]] benutzt. Die Programmierung erfolgte über das Starter-Kit STK500 [11] im SPI-Mode. Der gesamte Quellcode ist unter [3] nachzulesen. Im folgenden werden einige wichtige Teilaspekte behandelt.
8.1 Frequenzmessung
Alle hier vorgestellten Kapazitäts- und Induktivitätsmessungen, denen ein Schwingkreis zugrunde liegt, basieren auf der Messung von Frequenzen. Damit ist dies die Hauptaufgabe, die der ATmega163 zu erfüllen hat. Frequenzmessungen können grundsätzlich auf zwei Arten erfolgen: Messung der Periodendauer einer Schwingung und Zählen der Schwingungen während eines vorgegebenen Zeitintervalls. Hier wird der zweite Ansatz verfolgt, weil Periodendauermessungen nur im Bereich unter einigen kHz sinnvoll sind, während hier bei den L- und C-Messungen Frequenzen ab ca. 10 kHz bis zu rund 1 MHz zu erwarten sind.
Wir benötigen also zwei Timer/Counter. Einer (Timer/Counter 2) wird als Timer konfiguriert während der andere (Timer/Counter 1) als Zähler (Counter) verwendet wird.
#include <avr/interrupt.h>
volatile uint32_t CNT; // the global counter
volatile uint8_t ready; // 0:counting; 1:ready
uint8_t n_CNT; // number of measurements executed
double t_gate; // the gate-time
#define TF 200 // ca. 50 ms
// the timer2-compare interrupt
ISR(TIMER2_COMP_vect) {
uint16_t l,h;
TCCR1B = 0; // stop counter
TCCR2 = 0; // stop timer
l = TCNT1L; // read counter and ...
h = TCNT1H;
CNT = CNT + l + (h << 8); // ... add to global counter
ready=1; // notify main program
}
// measure one time the current frequency
void Measure_1(void) {
cli(); // disable interrupts
TCCR1A = 0x00; // setup timer/counter 1 as counter
TCCR1B = 0x00;
TCNT1H = 0; // clear timer/counter registers
TCNT1L = 0;
TCCR2 = 0x00; // setup timer/counter 2 as timer
OCR2 = TF; // set timer to ca. 51 ms
TCNT2 = 0; // clear timer register
sbi(SFIOR,PSR2); // Resest Timer Prescaler
TCCR1B = 0x06; //start counter
TCCR2 = 0x07; //start timer
ready = 0;
sbi(TIMSK,OCIE2); // timer2-compare interrupt on
sbi(TIFR,OCF2); // terminate active interrupts, if existing
sei(); // enable interrupts
while (ready==0) idle(); // wait until measurement is complete
n_CNT++; // increment number of mesurementes executed
cbi(TIMSK,OCIE2); // timer2-compare interrupt off
}
// execute the frequency measuremnt n times
double Measure_M(uint8_t n) {
double f;
CNT = 0; // reset the global counter
n_CNT = 0; // reset number of measurements executed
while (n_CNT<n) Measure_1(); // execute n single measurements
cli(); // no more interrupts
f=(double)CNT/((double)n*t_gate);// divide total counts by total gate time
return f; // that's it
}
Neben den Deklarationen, die hier nur auszugsweise dargestellt sind, folgt der Interrupt-Behandler für den Timer-2-Interrupt, die Prozedur zur Durchführung einer einzelnen Messung und die Funktion zur Messung der Frequenz basierend auf mehreren Einzelmessungen. Die Konstante TF (Torzeit) wurde so gewählt, daß bei einer zu messenden Frequenz von 1 MHz noch keine Gefahr besteht, daß der Zähler überläuft. Innerhalb etwa 40 ms wird ein Zählerstand von 40000 erreicht, was noch weit genug vom höchstmöglichen Wert 65535 ist.
Tritt der Interrupt auf, so wird als allererstes der Zähler und danach der Timer angehalten. Das Ergebnis des Zählers wird ausgelesen und zum globalen Zähler addiert. Führt man auf diese Art mehrere Messungen aus, so kann die effektive Torzeit auf ganzzahlige Vielfache von etwa 40 ms erhöht werden, was vor allem bei niedrigeren Frequenzen die Genauigkeit erhöht. Danach wird dem Hauptprogramm signalisiert, daß der Interrupt abgearbeitet wurde.
Die Prozedur, die genau eine Messung durchführt, initialisiert im wesentlichen die relevanten Register der beiden Timer/Counter für die nächste Messung und wartet, nachdem timer und counter gestartet wurden, auf das Ende des Interrupts. Dazu wird die Prozedur idle() aufgerufen, in der sinnvolle Dinge durchgeführt werden können. Nach einer Einzelmessung wird der Zähler für die Anzahl der Messungen aktualisiert.
// the timer1-capture interrupt
ISR(TIMER1_CAPT_vect) {
uint16_t l,h;
TCCR1B = 0; // stop timer
l = TCNT1L; // read counter and ...
h = TCNT1H;
CNT = CNT + l + (h << 8); // ... add to global counter
ready = 1; // notify main program
}
// measure one time the pulse length of the NE555
void Measure_555_1(void) {
cli(); // disable all interrupts
TCCR1A = 0x00; // prepare timer 1 and ...
TCCR1B = 0; // ... stop timer 1
TCNT1H = 0; // set timer1 count value to 0
TCNT1L = 0;
ready = 0; // clear the ready status
sbi(TIFR,ICF1); // terminate active interrupts, if existing
sbi(TIMSK,TICIE1); // timer1-capture Interrupt on
sbi(SFIOR,PSR10); // reset prescaler
TCCR1B=0x01; // start Timer 1
cbi(PORTD,5); // start NE555
sei(); // enable interrupts
sbi(PORTD,5); // return to high level
while (ready==0) idle(); // wait until ready
n_CNT++; // this was one more measurement
cbi(TIMSK,TICIE1); // timer1-capture Interrupt off
}
// execute the pulse length measurement n times
double Measure_555_N(uint8_t n) {
double t;
CNT = 0; // reset the global counter
n_CNT = 0; // reset number of measurements executed
while (n_CNT<n) Measure_555_1(); // execute n single measurements
cli(); // no more interrupts
t=(double)CNT/((double)F_CPU*(double)n); // divide total counts by CPU-frequency and number of measurements
return t; // that's it
}
Die Messung der Frequenz wird von der Funktion Measure_M durchgeführt deren Parameter die Anzahl der Einzelmessungen angibt und deren Rückgabewert die gemessene Frequenz in Hz ist.
8.2 Impulsdauermessung
Die Messung der Kapazität mit dem NE555 basiert darauf, daß die Länge eines Impulses zu messen ist. Während also bei der Frequenzmessung die Torzeit vorgegeben ist und die Anzahl der Impulse in dieser Zeit gezählt werden, ist es bei der Impulsdauermessung umgekehrt. Die Frequenz der zu zählenden Impulse ist fest und die Impulsdauer, die dann der Torzeit entspricht, ist variabel.
Die Deklarationen sind die selben wie für die Frequenzmessung. Daher wird sie hier nicht wiederholt dargestellt. Hier haben wir einen anderen Interrupt-Behandler, der immer dann ausgeführt wird, wenn der Puls des NE555 zurück auf Low wechselt.
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional
Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt.Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.