technik leistungselektronik - WebHTB
technik leistungselektronik - WebHTB
technik leistungselektronik - WebHTB
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
TECHNIK FERNSTEUER-INTERFACE<br />
Bild 2. Layout der USB-Interface-Platine.<br />
Stückliste<br />
RWiderstände:<br />
R1, R2 = 100 k<br />
R3 = 10 k<br />
R4 = 2k2<br />
Kondensatoren:<br />
C1, C4 = 100 µ/25V, radial<br />
C2 = 100 n<br />
C3 = 10 n<br />
C5, C6 = 22 p<br />
Halbleiter:<br />
IC1 = PIC18F2550-I/S, programmiert,<br />
EPS 060378-41<br />
T1 = BC547<br />
Außerdem:<br />
K1 = SIL-Pfostenstecker, 5-polig<br />
K2-K10 = SIL-Pfostenstecker, 2-polig, mit<br />
Jumper<br />
K11 = SIL-Pfostenstecker, 2-polig<br />
K9 = USB-B-Buchse für Platinenmontage<br />
X1 = Quarz, 8-MHz<br />
Platine EPS 060378-1 via the PCBShop<br />
(siehe www.elektor.de)<br />
Software 060378-11.zip (Gratis-Download<br />
von www.elektor.de)<br />
onen recht häufi g von Interrupts Gebrauch<br />
machen, werden Interrupts<br />
nicht zur Messung der Pulsbreiten<br />
eingesetzt.<br />
Für die Messung der Pulsbreite ist das<br />
Capture/Compare/PWM-Modul zuständig.<br />
Das Capture-Register CCPR1 ist<br />
ein für Timer1 konfi guriertes 16-bit-Register,<br />
das dessen Wert sowohl bei<br />
High/Low- als auch bei Low/High-<br />
Übergang des mit Jumper K10 an RB0<br />
gelegten Eingangs erhält. Timer1 läuft<br />
dabei kontinuierlich. Durch den Vorteiler<br />
„÷2“ mit 3 MHz getaktet, wird er<br />
alle 333 ns inkrementiert. Die Pulsbreite<br />
lässt sich so mit einer Genauigkeit<br />
von maximal 666 ns erfassen. Da Modellbau-Servos<br />
mit Pulsbreiten zwischen<br />
1 und 2 ms gesteuert werden,<br />
ergibt sich für den Wert von Timer1 ein<br />
Bruttobereich von 3000 bis 6000, was<br />
mit einer Variation von 3000 in etwa<br />
der erwähnten 11-bit-Auflösung<br />
entspricht.<br />
Beim Programm-Start wird „InitRC_<br />
USB“ aufgerufen, wodurch die Ports<br />
konfi guriert werden und CCPR auf das<br />
Übernehmen des Werts von Timer1 bei<br />
der steigenden Flanke vorbereitet<br />
wird. Dann kommt „InitUSB“ an die<br />
Reihe, und die USB-typische Enumeration<br />
wird gestartet (dann wird gewartet,<br />
bis diese erfolgt ist).<br />
„LOOP“ ist die Hauptschleife des Programms.<br />
Nach dem Erkennen eines<br />
Impulses (das CCP1IF-Bit ist gesetzt)<br />
wird überprüft, ob es ein Synchronisationsimpuls<br />
(> 2,7 ms) oder ein Kanal-<br />
Impuls mit einer Breite zwischen 1<br />
und 2 ms ist. Der letzte Wert von<br />
CCPR1 (Tmr1Lo und Tmr1Hi) wird<br />
vom aktuellen Wert von CCPR1 subtrahiert,<br />
so dass man die Pulsbreite in<br />
Einheiten zu 333 ns erhält. Wenn es<br />
sich um einen Sync-Impuls handelt,<br />
werden die Daten in den „BUFFER“<br />
der USB-Routinen übertragen, um sie<br />
dann zum PC zu schicken. Bei einem<br />
normalen Kanal-Impuls wird zunächst<br />
4500 subtrahiert (entspricht 1,5 ms in<br />
333-ns-Einheiten), da die Pulsbreite<br />
bei Joysticks in Mittelstellung 1,5 ms<br />
betragen sollte. Positive Zahlen entsprechen<br />
demnach positiven Auslenkungen<br />
des Joysticks und umgekehrt<br />
negative Zahlen eben negativen Auslenkungen.<br />
Diese Information wird<br />
dann an der richtigen Stelle in „BUF-<br />
FER“ abgelegt (wie bei der Variable<br />
„Pulse_Count“ beschrieben). „Temp_<br />
Count“ ist ein temporärer Zwischenspeicher<br />
für „Pulse_Count“, dessen<br />
Daten so gefahrlos manipuliert werden<br />
können.<br />
Jumper für manche Fälle<br />
Linkshänder unter den Modellpiloten<br />
würden gerne die Funktionen von<br />
linkem und rechtem Steuerknüppel<br />
tauschen: Jumper K8 für Port RB1 ist<br />
für den korrekten Speicherort des Wertes<br />
von „Temp_Count“ in „BUFFER“<br />
verantwortlich.<br />
Manche RC-Fernsteuerungen verwenden<br />
nichtstandardisierte Sync-Impulse.<br />
Das hat Folgen: Der Jumper für RB0<br />
veranlasst die Übertragung des Timer-<br />
Wertes in „CCPR1“ bei der fallenden<br />
Impulsflanke. Da es sicherlich noch<br />
weitere exotische Varianten gibt, müssen<br />
Sie notfalls den Code entsprechend<br />
anpassen.<br />
Aufbau<br />
Das komplette Interface fi ndet auf der<br />
kleinen Platine von Bild 2 Platz. Die<br />
Platine ist bei www.elektor.de via PCB-<br />
Shop erhältlich.<br />
Bild 3 zeigt einen frühen Prototypen.<br />
Mit so wenigen Bauteilen in Normalgröße<br />
(nicht in der SMD-Ausführung)<br />
dürfte die Bestückung keine Probleme<br />
bereiten. Es empfi ehlt sich, für IC1 eine<br />
IC-Fassung vorzusehen.<br />
Kalibration<br />
Wenn die Schaltung an einen PC angeschlossen<br />
wird, startet der Prozess der<br />
Enumeration. Der PC wird melden,<br />
dass er ein „RC/USB Interface“ gefunden<br />
hat. Dann öffnet man die Systemsteuerung<br />
und klickt auf „Gamecontroller“.<br />
In dessen Dialog-Box sollte ein<br />
Eintrag „RC/USB Interface“ auftauchen.<br />
Dieser Eintrag sollte ausgewählt<br />
und dessen Eigenschaften-Dialog aktiviert<br />
werden. Eine Veränderung der<br />
Stellung der Joysticks sollte nun auch<br />
auf dem Bildschirm zu sehen sein. Falls<br />
sich keine Bewegung auf den Bildschirm<br />
überträgt, sollte Jumper K10<br />
„getoggelt“ werden: falls gesteckt abziehen<br />
und umgekehrt. Mit K8 kann<br />
man dann noch die beiden Joysticks<br />
vertauschen. Falls alles wie gewünscht<br />
funktioniert, muss die Schaltung noch<br />
kalibriert werden: Mit der Auswahl von<br />
„Settings“ (Einstellungen) kommt eine<br />
neue Dialog-Box und dort wählt man<br />
„Calibrate“. Wenn man den dortigen<br />
Anweisungen folgt, ist die Kalibration<br />
schnell abgeschlossen.<br />
Falsche Enumeration<br />
Aus unbekannten Gründen meldet<br />
Windows in manchen Fällen ein Gerät<br />
namens „RC/U“ obwohl es den korrekten<br />
String „RC/USB Interface“ zur<br />
38 elektor - 5/2007