Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos Steuern vom PC
Hallo, ich habe in den Letzten 2 Tagen mal ausprobiert ob ich es hinbekomme die 2 Servos von meinem Modellpanzer vom PC aus zu Steuern.
Habe es auch hinbekommen, und Heute vorerst Fertiggestellt.
Ich habe die Servos über je eine Datenleitung des LPT-Ports angesteuert.
Die Software dafür habe ich in VB.Net geschrieben.
Bilder:
http://tredory.dnsalias.org/Frei/Bilder/Projekte/Servosteuerung/Programm.jpg
http://tredory.dnsalias.org/Frei/Bilder/Projekte/Servosteuerung/100_1173.JPG
Man kann nun in dem Programm einen der beiden Servos aktivieren (über den Start button), und dann mit dem oberen Schieber die Position des Servos verändern, der kleine Dimmer Schieber ist nur um etwas feiner Einzustellen. Wenn man dann den anderen Servo Steuern möchte, muss man den ersten erst wieder deaktivieren, denn sobald beide Prozesse gleichzeitig laufen kommt der PC nicht mehr hinterher die Signale genau genug zu Senden, und die Servos fangen an zu flattern (Test PC hatte nur 933 Mhz). Deshalb habe ich es so eingebaut das man immer nur einen Prozess Starten kann.
mfg
Jens
Habe die Software nochmal komplett neu geschrieben, da leider die Delay Zeiten aus der Elexs.dll nicht sehr genau sind. Wenn der rechner mal ein wenig stärker ausgelastet sind sind die pausen die mit der funktion aufgerufen werden irgendwie wohl minimal länger. Deshalb kann man in der neuen version jetzt für anfangspunkt und endpunkt des servos die impulszeiten eingeben und dann halt ausprobieren was passt.
Läuft auch ein wenig flüssiger als die letzte Version
http://tredory.dnsalias.org/Frei/Bilder/Projekte/Servosteuerung/Programm(Aktuell).jpg
Festblatte
29.09.2007, 17:32
Was hast du denn für einen computer?
Servosteuerung kriegt doch schon ein
controller mit 16Mhz und weniger hin
Klingt schon eher nach einem Programier fehler ;-)
Aber sonst gut gemacht !
MfG moud
Also der Rechner auf dem ich das immoment Laufen lasse ist ein P3 mit 933mhz und 256mb ram. Ich weiß nicht woran das mit den unterschiedlichen pausenzeiten liegt, aber ich glaube nicht das es ein Programmierfehler von mir ist. Denn auf meinem Hauptrechner 3ghz 2gbram hab ich mal einen kleinen Test gemacht:
ich habe einfach eine led am com port eingeschaltet, und dann nach ablauf von DELAY(10000) wieder ausgeschaltet.
In der beschreibung der Elex.dll ist der Befehl als "DELAY(Wert in ms)"
angegeben. Bei meinen 10000ms bleibt die LED aber nur ca 6,5 sek statt 10sek an.
Ich weiß nicht wodran das liegt, ich weiß auch nicht wie die dll genau Arbeitet.
vklaffehn
29.09.2007, 20:11
Naja, so ein µC macht auch nicht 'tausend' Dinge nebenbei, wie z.B. ein Windows rumdümpeln lassen. Wenn man z.B. das Tool in Dos von einer Bootdisk laufen läßt, so kann man auch mit 'nem 286'er mit 12 MHz Servos steuern, Windows ist halt nur kein Echtzeitsystem, d.H. ein Programm kriegt von Windows nur so circa Prozessorzeit zugeteilt, so daß die Geschwindigkeit des Programms schwankt. Um das also präzise(r) unter Windows hinzubekommen, muß man auch dort Timer benutzen, z.B. aus dem Multimedia-krams, wo ja z.B. für Ton und Video auch genaues Timing benötigt wird. Evtl. kann man bei dem Programm das Timing verbessern, wenn man im Taskmanager die Priorität erhöt...
MfG
Volker
im task manager die Priorität erhöhen funktioniert auch, aber nur auf "Höher als Normal". Bei "Höher bekommt man schon Probleme mit der Maus noch irgendwas zu treffen, da es dann eine Diashow ist, und man raten muss wo der Zeiger landet wenn man die maus bewegt ;). Auf Echtzeit nimmt er dann gar keine Befehle mehr entgegen
vklaffehn
30.09.2007, 10:38
Jupp, auf so einem Windows-System laufen halt so 57 Prozesse immer schön reihum, und einer davon fragt die Maus ab, ein anderer malt Mauszeiger usw., das hast Du bei Deinem Microcontroller halt nicht. Wenn man jetzt annimmt, daß jeder Prozess von Windows immer nur, sagen wir mal, eine Millisekunde Zeit bekommt, in der er was tun darf, bis der nächste dran ist, und Du hast aber etwas, das länger dauert, wird es entweder kurz unterbrochen und die anderen Prozesse sind kurz dran, oder, bei hoher Priorität, darf Dein Prozess solange am Zuge bleiben, dafür kriegen alle anderen nur noch ein paar Mikrosekunden....
MfG Volker
Naja, solange wie ich nur einen servo Steuer läuft das ganze ja auch ganz stabil ;) Ist ja auch eher nur bisschen Rumprobieren um mal ein wenig in VB reinzukommen. Will mir demnächst irgendwann mal das rn-board holen, und den dann die Steuerungssachen machen lassen, die er über den Com Port als Befehle vom PC bekommt. Aber das wird dann wahrscheinlich erstmal bisschen dauern, hab bis jetzt noch nie nen microkontroller programmiert ;)
vklaffehn
30.09.2007, 11:12
Also wenn Du unter Windows und VB 'nen Servo steuern kannst, dann dürfte der Umstieg auf einen µC recht flott gehen, denke ich.
MfG
Volker
Hoff ich auch mal, gibt hier ja auch alles was man wissen muss um anzufangen als tutorials ;)
Habe nochmal ein bisschen was rumprobiert, und das Programm geändert. Ich lasse das generieren der Impulse jetzt nicht mehr duch eine do loop schleife in einem extra Thread geschehen, sondern starte einfach einen Timer der alle 20 millisekunden einmal auslöst und die Datenleitung für eine bestimmte Zeit einschaltet. Wenn ich nun für jeden Servo einen Timer setze, und die Starte kann ich beide gleichzeitig ansteuern, ohne einen abstellen zu müssen. Und das ganze läuft sehr stabil (also die Impulse werden sehr Stabil erzeugt) und es benötigt auch noch weniger cpu auslastung ;))
So hab die Anwendung jetzt nocheinmal neu erstellt, man kann nun an Allen 8 Datenleitungen ein PWM Signal erzeugen und z.b. Servos Steuern. Auch wenn alle gleichzeitig Aktiv sind geht die CPU Auslastung dadurch kaum hoch (Normal hatte ich 14- 18%, inkl alle ausgänge ativiert dann 24%). Die Impulsbreitenbereiche können für jede Leitung einzelnd Eingestellt werden, ebenso die Pause zwischen den impulsen.
Sehe die Anwendung jetzt endgültig als Fertig an ;)
Oder hat noch wer ideen was ich da noch einbauen sollte ?
http://tredory.dnsalias.org/Frei/Bilder/Projekte/Servosteuerung/Programm(Final).jpg
Falls das mal wer ausprobieren möchte, die dlls, und das Programm als VB.Net Projekt, und die Exe hab ich mal online gestellt.
.Net Framework 2 muss installiert sein
http://tredory.dnsalias.org/Frei/Programmieren/Servo%20Steuerung/
MarsoTexx
09.10.2007, 22:43
Hallo,
habe etwas Anliches for wenige Monaten auch mall gemacht.
Nur zum proberen mall bischen mit QBasic rum gebastellt aber das eignet
sich sehr slecht, trotzdem habe ich 8 servo's am LPT hangen. Spater werde ich TurboPascal oder C++ anwenden. Sehr wichtig ist das Signal
von 1ms bis 2ms. die Takt kan einiges varieren habe ich entdeckt. Besser noch ein PIC controller anwenden die der ganze Ansteuerung ubernimmt. PC braucht nur Servo-Indentifier und gewahlte-Position zu schicken, PIC macht die Rest. Die Servo's habe ich modificeert zu Geschwindigkeitcontroll stat Positioncontroll. Ich muss unbedingt QBasic zur Seite entfernen weil mein Hobby-PC ist ein P200, wen ich ein program-regel einfure, stimt die PWM (1-2ms) nicht mehr...
Seit kurz habe ich ein einfache PIC-programmer vorhanden mit einige
verschiedene PIC's. Wen ich die Servo's via ein PIC mit PC gesteuert habe, werde ich das im R.N. melden.
Gruss. Der Marcel
Hallo,
weil es problematisch ist, von einem Windows, das Multitasking betreibt, einen lpt in Echtzeit betreiben zu wollen, hab ich mir etwas anderes einfallen lassen.
Ich steuere meine Servos (bis zu 10) über die Soundkarte. Und das geht sehr gut, ohne Zittern und ohne Aussetzer. Als Multimediafähiges Betriebssystem schaut Windows, dass der Soundstream lückenlos bedient wird. Sonst würde es auch dauernd Krachen, wenn man mit der Maus wedelt.
Hier
http://www.jbergsmann.at/servo-soundcard.htm
kann man näheres nachlesen.
grüsse,
vohopri
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.