03.12.2012 Aufrufe

technik leistungselektronik - WebHTB

technik leistungselektronik - WebHTB

technik leistungselektronik - WebHTB

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!