Forum: PC-Programmierung genaue Frequenz am LPT erzeugen


von Elmar S. (elmarst)


Lesenswert?

Hallo,
Hab eine Frage zur LPT-Ansteuerung;
Ich möchte gerne einen Modellbau-Servo ansteuern.
Dazu brauche ich ein Signal der folgenden Form:
1-2ms Signal 1
20ms  Signal 0
und das ganze alternierend.
1-2ms ergibt sich daraus, dass der Servo durch
diese Signallänge seine Stellposition ermittelt.
1ms==> max Linksausschlag
2ms==> max Rechtsausschlag
alles dazwischen ergibt die jeweilige Winkellage.
Habe dafür auch eine (ganz) einfache Optokopplerschaltung
gelötet. der Servo hat also eine eigene Stromversorgung.
Allerdings scheitert es an dem Programm.
Hab einige Erfahrung mit LabView, konnte damit auch den LPT
ansteuern. aber es kommt nur zu Stöhrungen.
Danac ha ich das ganze in Java Eclipse gemacht.
Auch hier schaffe ich die LPT-Ansteuerung.==>Stöhrungen
Also hab ich mir in LabView ein Programm geschrieben, mit
dem ich die Signale am LPT in einem Diagramm darstellen kann
und damit das laufende Java-Programm "gemessen".
Leider musste ich feststellen, dass das Signal am LPT alles
andere ist als das Signal, welches von Java ausgegeben wird.
Daraus ergeben sich die Stöhrungen.
Daher meine Frage an alle Forumsbesucher
was kann ich da machen, um ein "genaues" Signal mit obigen
Bedingungen am Lpt zu realisieren.
PS:bin eigentlich Maschinenbauer und daher nicht allzu versiert im 
Programmieren. Abgesehen von LabView und ein bisschen JAVA.

von *.* (Gast)


Lesenswert?

Das wird höchstens unter DOS oder einem Echtzeit-Betriebssystem etwas. 
Kannst mal probieren, den Prozess auf Echtzeitpriorität zu setzen, aber 
schon Mauszeigerbewegungen können es versauen.

von Karl (Gast)


Lesenswert?

Da hast du heutzutage eigentlich keine Chance, weil dir das 
Betriebssystem immer dazwischenfunkt. Nimm einen kleinen µC.

von Elmar S. (elmarst)


Lesenswert?

Hallo,
danke für die raschen Meldungen.
das mit dem Mikrocontroller klingt nicht schlecht. Ich muss aber 
zugeben, dass ich kein Elektroniker bin. Wie könnte ich denn so eine 
Schaltung am einfachsten realisieren?
Gibts da dann auch Möglichkeiten, dem Mikrocontroller die 
"Stellposition" über ein einziges Pinsignal mitzuteilen?

von Matthias (Gast)


Angehängte Dateien:

Lesenswert?

Das geht wie schon beschrieben nur, solange das System wenig ausgelastet 
ist. Ich habe Dir schnell ein Beispiel gelinkt, was in etwa die 
gewünschte Impulsfolge am LPT1 (0378H) Pin 2 (D0) ausgibt, nur mal so 
zum testen.

von Karl (Gast)


Lesenswert?

Du könntest dir das Tutorial zum AVR mal ansehen. Da wird eigentlich 
alles behandelt, was du dazu brauchst.

von Elmar S. (elmarst)


Lesenswert?

Danke für alle Tipps,
Ich werd mich da mal einlesen.

von yalu (Gast)


Lesenswert?

Viel wichtiges und richtiges ist bereits von den Vorpostern gesagt
worden. Hier noch ein paar Zusatzinformationen und Vorschläge:

Reine Softwarelösungen über Parallelport
----------------------------------------

Damit das Servo halbwegs ruckelfrei angesteuert werden kann, darf der
Jitter des vom PC erzeugten PWM-Signals maximal bei etwa 10 µs liegen.
Damit kann man ca. 100 verschiedene Winkelstellungen auflösen.

Das geht unter Mainstream-Betriebssystemen wie Windows oder Linux ohne
Echtzeitzusätze definitiv nicht.

Unter DOS könnte es prinzipiell gehen, man ist sich aber auch hier
nicht vor sporadischen Interrupts sicher, die man auch nicht unbedingt
alle sperren möchte.

Linux mit dem RT-Patch von Ingo Molnar könnte ähnlich gute Ergebnisse
wie DOS liefern, aber auch hier kann der maximale Jitter nur sehr
schwer vorausgesagt werden.

Linux mit RT-Linux oder RTAI ist hart echtzeitfähig mit Latenzzeiten
im µs-Bereich (oder sogar noch besser, je nach Rechner) und erfüllt die
Anforderungen locker, der Weg zum ersten lauffähigen Programm kann
aber etwas steinig sein.

Echtzeiterweiterungen gibt es m.W. auch für Windows, sind aber
ebenfalls Frustdünger, und die meisten davon (oder alle?) kosten Geld.

Beim Einsatz solcher Erweiterungen ist die Programmierprache natürlich
nicht mehr Java, sondern C oder (für ganz Mutige) Assembler.


Lösungen mit externer Hardwareunterstützung
-------------------------------------------

Die Möglichkeit, den echtzeitkritischen Teil durch einen
Mikrocontroller erledigen zu lassen, wurde schon genannt.

Prinzipiell würde aber ein externer Timer-Baustein ala 82C54 zur
Generierung des PWM-Signals genügen. Der hat gegenüber dem µC den
Vorteil, dass er nicht programmiert werden muss und somit für einen
µC-Unkundigen etwas schneller zum Ziel führt. Allerdings reichen die
Steuerleitungen des Parallelports nicht ganz aus, den Baustein direkt
anzusteuern. Man wird also noch etwas Interface-Logik drumherumbasteln
müssen.

Es gibt aber auch PWM-Bausteine mit SPI oder I²C-Interface. Die müsste
man direkt an die Parallelportleitungen anschließen können. Im Moment
habe ich leider keine Typenbezeichnung im Kopf.


Lösung mit interner Hardwareunterstützung
-----------------------------------------

Einen 82C54 muss man gar nicht notwendigerweise extern anschließen, da
bereits einer im PC drinsteckt (bzw. etwas kompatibles als Teil eines
der Mainboard-Chips). An einen der Ausgänge des Timers ist der
PC-Lautsprecher angeschlossen. Je nachdem, wie das Lautsprechersignal
aussieht (Spannungspegel, AC-Kopplung) kann man es mit etwas Glück
direkt dem Servo zuführen. Ansonsten bedarf es einer kleinen
Interfaceschaltung, oder man versucht, das Signal schon vor dem
Lautsprecherverstärker als reines Digitalsignal abzugreifen.

Ich bin jetzt mir nicht sicher, ob diese Lösung irgendwelche
Fallstricke in sich birgt. Wenn nicht, verbindet sie minimalen
Hardware- und Software-Aufwand mit maximaler Echtzeitfähigkeit.

Wenn doch, würde ich als Nächstes einen externen SPI-PWM-Controller am
Parallelport favorisieren, gefolgt von einer RT-Linux/RTAI-Lösung.

Der externe µC ist natürlich dann die beste Wahl, wenn man ihn sowieso
schon in der Schublade liegen hat, einen Programmieradapter parat hat,
die Entwicklungstools eh schon auf dem Rechner hat und sie auch schon
ein paar Male benutzt hat. Dann ist es eine Sache von vielleicht einer
Stunde, damit einen PWM-Adapter mit Parallelport- oder
RS-232-Anschluss zusammenzupappen und zu programmieren :)

von *.* (Gast)


Lesenswert?

> An einen der Ausgänge des Timers ist der PC-Lautsprecher angeschlossen.

Geniale Idee :-)

von juppi (Gast)


Lesenswert?

die DOS variante

startdiskette mit Q-basic
oder auch dosmodus
q-basic-Compiler
dann kannst du dein servo in 3 Stunden experimentel
ansteuern.
Mache ich manchmal heute noch natürlich mit extra comp.
manchmal aber auf diese weise.
Q-basic ist sehr gut.

danach kannst du immer noch eine eigenständige steuerung mit
Controller (was ich aus zeitgründen nicht empfehlen kann)
aufbauen.
das einfache zuerst

viel erfolg

von Weinga-Unity (Gast)


Lesenswert?

Hallo!

Beschäftige mich seit längeren mit RTAI-Linux und bin da mal über 
folgendes Projekt gestoßen:

http://linuxdevices.com/articles/AT9847654820.html

Persönlich finde eine µC Lösung ebenfalls die beste Lösung. Habe so auch 
mehrere Roboter mit Servos realisiert und per PC+Windows+SCICOS dann die 
Inversekinematik getestet. Da man dann unter Windows nur mehr den Winkel 
vorgeben muss reicht hier die "weiche Echtzeitfähigkeit" von Windows.

mfg Weinga-Unity

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.