PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos per PC steuern



M!ni M0nk3y
23.02.2007, 21:20
Halli Hallo.

Bin neu hier und wollte mal fragen, ob mir jemand sagen kann, wie man Servos per PC steuern kann?!
Hab so viel zu Servos gefunden, nur nix Grundlegendes.

Möchte wissen, welche Hardware ich benötige (außer den Servos halt) und wie ich den Servo möglichst einfach über den PC steuern kann (VB, QB etc.).
Oder gibts da eventuell schon fertige Software?

Ich fände es am besten, wenn man die Servos (ca. 5 Stück) über den Druckerport steuern könnte. Ist das möglich?

Vielen Dank im Vorraus für alle antworten.

MfG,
M!ni M0nk3y

sigo
23.02.2007, 23:41
Hallo, hier (https://www.roboternetz.de/wissen/index.php/Servos) steht, wie ein Servo angesteuert wird.
Im Prinzip spricht also nichts dagegen, bis zu 8 Servos an einen Druckerport zu hängen.
Du brauchst dann "nur" noch dafür zu sorgen, dass du das Timing erzeugst.

Sigo

M!ni M0nk3y
24.02.2007, 08:45
Hallo.

Danke für die schnelle anrwort, aber die Seite kenne ich schon.
Sie hilft mir leider nicht wirklich weiter.
Bin in dem Gebiet noch ein noob!

Wie muss man das genau anschließen und welche Befehle braucht man z.B. in VB oder QB?

MfG,
M!ni M0nk3y

Xtreme
24.02.2007, 10:40
Da gibt es keine Befehle... du musst dir selbst einen Timer programmieren der die entsprechenden Impulse erzeugt.
Sowas wie in Bascom (servo(100)) wirst du nicht finden... höchstens in ner lib, aber ich glaube nicht das es sowas gibt...

Goblin
24.02.2007, 12:08
es gibt auch ne menge fertige programme für sowas. in VB kannst du imho am einfachsten über den parallelport machen (brauchst du ne lib für, gibts zum download bei google). nimmst du 2 timer für jedes servo. evtl brauchst du auch ne lib die dir die möglichkeit gibt, pulse < 1ms zu erzeugen, was ja bekanntlich mit den standart-timern nicht möglich ist. naja und wenn du weisst, was so ein servo für signale erwartet, wovon ich mal ausgehe, dann ist das nicht schwer zu proggen. in qb wird es wahrscheinlich noch einfacher (brauchst allerdings win98 oder niedriger, um auf den Parallelport zu kommen). wie das da mit den timern aussieht, weiss ich allerdings nicht. nachteil: keine gui.

M!ni M0nk3y
25.02.2007, 12:50
naja, es ist so, dass ich davon absolut keine ahnung habe.
hat nicht jemand en fertigen schaltplan mit benötigten timer uns so?
Bin erst neu im Elektronik Bereich (1 Lehrjahr zum Elektroniker für Geräte und Systeme)...

Wäre nett, wenn mir jemand sowas geben könnte :-)

Goblin
25.02.2007, 14:52
hey, du hast mit VB und QB angefangen :) Die Servos haben 3 Anschlüsse, +, -, signal (salopp gesagt). + und - kommen an die spannungsquelle, - ausserdem noch an gnd des parallelports. die signalanschlüsse packst du dann an beliebige daten/ios des parallelports. und dann kannst du deine signale mittels einer bitmaske auf den Parallelport geben. Gehen deine Probleme eher in Richtung Software oder Hardware?

Achso, die Timer sind reine Softwarekonstrukte. Du musst nur die Servos wie o.g. anschliessen, mehr hardware brauchst du nicht.

M!ni M0nk3y
25.02.2007, 19:33
mein problem ist das mit dem timer.

was muss ich da machen?
weil parallelport sagt ja entweder 1 oder 0, das heißt servovollausschlag oder neutralstellung, richtig?

ich will ja per software sagen, servo 1, du drehst dich jetzt um 25°,
servo 2 du drehst dich um -35° usw ;-)

Danke für die superschnellen antworten schonmal, das Forum gefällt mir :)

Goblin
26.02.2007, 10:14
https://www.roboternetz.de/wissen/index.php/Servos

da steht, was ein servo für ein signal erwartet. besser erklären kann ich es auch nicht. wenn du fragen zu dem artikel hast, stell sie jederzeit hier. aber der artikel sollte dich erstmal ein stück weiter bringen.

M!ni M0nk3y
26.02.2007, 16:01
ich glaube langsam verstehe ich.
also wenn ich das teil steuern will muss ich es einfach an die spannung anschließen und außerdem die signalleitung an den parallelport legen.

die dauer des signals vom parallelport gibt den servoausschlag an. richtig?

Goblin
26.02.2007, 16:25
ja so in etwa. du hast halt immer 1-2 Millisekunden HIGH und dann Konstante 20 Millisekunden LOW. Die Länge der Highphase gibt den Drehwinkel des Servos an. Bei ca. 1,5 Millisekunden sollte die Nullstellung sein. Angeschlossen wird das ganze wie ich es oben schon beschrieben habe. Wichtig ist, dass du GND des Parallelports und GND deiner Spannungsquelle verbindest. Sonst bekommst du keinen vernünftigen Signalpegel

robocat
26.02.2007, 16:28
wenn du nicht sooviel ahnung hast, aber dafür bissl kleingeld übrig, gibts das k8055 usb board von vellemann. damit hab ich meine ersten gehversuche mit servos gemacht, man braucht aber noch eine schaltung.
http://codefactory.dead-men.de/index.php?tutorial=74
ist alles andere als perfekt, sevos zappeln, etc.
vorteil ist die wirklich simple programmierung, da ist eine dll bei, mit der in allen möglichen sprachen sehr einfach angesteuert werden kann.

parallelport ansteuern unter xp ist möglich (http://codefactory.dead-men.de/index.php?tutorial=75) aber da es kein wirkliches echtzeit-system ist, wird sich das timing nicht sehr zuverlässig gestalten.

eher zu empfehlen wäre entweder ein alter pc mit dos, da gibt es sehr einfache möglichkeiten, den druckerport anzusteuern, und da nur (d)ein programm läuft, gibt es keine probleme mit dem timing.

oder man verwendet ein fertiges servoboard mit controller drauf, das über die serielle schnittstelle deines rechners nur noch die gewünschte servostellung übermittelt bekommt.

@servo:
du hast ein 50Hz (alle 20ms) rechtecksignal, die rechtecke müssen dann zwischen 1ms und 2ms langsein, um den servo zu steuern.

gruesse

M!ni M0nk3y
27.02.2007, 12:23
kann jemand von euch sowas programmieren?
wäre nett wenn jemand das für mich machen könnte.

vielleicht so mit einem regler, wie in der scrolleiste, dass man da angeben kann, wie weit sich der servo dreht...

wäre cool ;-)

Goblin
28.02.2007, 11:43
könnte ich machen, ja. hast du icq oder skype, um genaueres zu besprechen?

M!ni M0nk3y
28.02.2007, 12:37
ICQ# : 155412134

Netbird
17.03.2007, 15:12
Hallo,

die Steuerung kann man einfach mit Excel - Schieberegler machen. Was lediglich benötigt wird, ist eine Zeitsteuerung in Millisekunden. Dazu geht z.B. die Port.DLL oder die RSAPI.DLL von Kainka/ Bernd. Über den Druckerport geht es mit der Inpout.DLL (oder so ähnlich heißt sie). Bei B.Kainka schauen, da gibt es alles wichtige dazu ...

Die Steuersignale gängiger Servos brauchen 0,3 ... 1,5 ms, muss man probieren.

Gruss ..

M!ni M0nk3y
17.03.2007, 22:46
Aha.

Und wie genau funktioniert das.
Ein User aus diesem Forum hier hilft mir momentan per ICQ,
er will das mit einem Programmieradapter, eineem RS232 und einem ATMEGA 8 irgendwie hinkriegen.
Die Programmierung wollte er glaube ich mit Bascom machen.

MfG,
M!ni M0nk3y

vohopri
08.04.2007, 10:31
Hallo,

in diesem Thread wird ernsthaft vorgeschlagen, das PWM Signal für ein Modellbau Servo direkt mit dem Druckerport des PC zu erzeugen. Da wundere ich mich schon sehr.

Hat das denn jemand von euch schon erfolgreich getestet?

Bei welchem Prozessortakt?
Auf welchem Betriebssystem?
In welcher Sprache?
Interpretiert oder compiliert?

Wenn ein Servo mit einer Auflösung 10 Schritte links und 10 Scritte rechts angesteuert werden soll, braucht es fortlaufend zuverlässige Signale mit einer Genauigkeit von 0.05 Millisekunden.

Jetzt bin ich mal neugierig, wer von euch diese Aufgabe erfolgreich gelöst hat und womit.

grüsse,
Hannes

Xtreme
08.04.2007, 13:39
Ja, es geht... mit der Port.dll auf jedem x-beliebigen PC unter Delphi oder VBasic... C geht auch.
Das wurde schon oft hier diskutiert und mir hatts anfangs auch keiner geglaubt... außerdem sind es streng genommen keine PWM Signale

vohopri
08.04.2007, 16:22
tja,

solche Gerüchte kann man vielfach lesen, und es wird viel behauptet. Das ist schon zum gähnen. Aber aus gutem Grund und ehrlicherweise schreibst du nicht, du hättest es selbst getestet und es hätte dabei funktioniert. Du hast nicht mal die oben gestellten Fragen beantworten können.

Wenn ich mal wen treffe, der da aus eigener Erfahrung was weiss, dann könnte ich endlich gezielte Fragen dazu stellen.

Dass man die Ports gezielt ansprechen kann, das reicht noch lange nicht für ein direktes und fehlerfreies Ansteuern von Modellbauservos.

Vielleicht meinst du auch ganz etwas anderes, ich meine Pulse alle 20 ms, deren Pulsweite zwischen 1 und 2 ms variiert, das heisst moduliert wird. Das ist technisch korrekt eine Pulsweitenmodulation. Wobei es für andere Zwecke auch völlig andere Formen von Pulsweitenmodulation gibt.

grüsse

Xtreme
08.04.2007, 18:26
Ich habe es am COM Port gemacht und es HAT funktioniert...
PC: Intel Pentium 4 1,5GhZ, Windows XP, compiliert

In diesem Buch sehr gut beschrieben:
http://www.amazon.de/PC-Schnittstellen-Windows-Messen-steuern-regeln/dp/3895760862/ref=sr_1_12/303-7705691-0244246?ie=UTF8&s=books&qid=1176053379&sr=8-12

vohopri
08.04.2007, 19:04
Oha, das ist natürlich beachtenswert. Aber du hast etwas gaanz anderes gemacht hat, als da einige Posts weiter oben behauptet wurde. Du hast Daten über den Seriellen Anschluss übertragen. Das ist natürlich grossartig und erfreulich, aber dafür brauche ich nicht mal eine port.dll. Und timingprobleme gibts ja in einer asynchronen Betriebsart auch nicht.

Btw wie sieht bei dir das Interface zwischen seriellen pc Anschluss und Servo aus? Hat zwar nichts mit den obigen Behauptungen zu tun, aber könnte durchaus interessant sein.

grüsse,
Hannes

Xtreme
09.04.2007, 11:00
Ich habe keine DATEN übertragen(wie kommst du eig. darauf und wie könnte man damit ein Servo steuern??)... die Port.dll stellt einen Timer zur Verfügung, der es ermöglicht z.B. den "DTR Pin" des COM Ports mit hohen Frequenzen zu beschalten. Dieser bevor man den Timer verwenden kann muss man durch die Funktion REALTIME die Applikation in eine art... naja Echtzeit versetzen.
Dieser Timer ist dann shr viel hochauflösender als die üblichen (bei Delphi z.b. die TTimer Komponente; diese kann man theoretisch bis 1ms herunter betreiben, sie arbeitet dann aber wie du schon sagtest nicht mehr "konstant")
Mit diesem Timer kann man dann ein Rechtecksignal an einem beliebigen
O- Pin des COM Ports erzeugen, dass den Anforderungen eines Servosignals entspricht...
Zum Interface: Naja, der modulierte Pin wird mit der Signalleitung des Servos verbunden und das Servo an eine Stromquelle angeschlossen ;-)
u.U. braucht man nicht mal einen gemeinsamen Massepunkt, wenns aber nicht funktionieren sollte hilft es wenn man GND des Comports auf - am Servo legt.
Ich hoffe ich konnte helfen...

radbruch
09.04.2007, 11:46
Ich habe es am COM Port gemachtWenn beim Com-Port eine Steuerleitung als Signal für den Servo verwendet wird, gäbe es durchaus Parallelen zum Betrieb am LPT-Port. Dann müsten die Zeiten auch berechnet werden.

Vielleicht wird auch mit einer passenden Baudrate ein Bitmuster seriell zum Servo übertragen? Diese High-Low-Folge könnte dann vom Servo als PWM interpretiert und als Steuerimpulse auswertet werden? Startbit+Highs in Dauer des PWM-Impulses (die ca. 1ms), dann Lows+Stopbits um den Zyklus zu beenden. Die Baudrate müsste dann eben so groß sein, dass ein Zeichen in 20 ms gesendet wird. Klingt gut? Keine Ahnung ob's funzt, ich teste es mal bei Gelegenheit, wenn niemand Einspruch erhebt.

Gruß

mic

Sorry Xtreme, das habe ich erst nach dem Absenden meines Beitrags gelesen. (War abgelenkt *GG*) So in der Art hatte ich es auch vermutet, die COM-Steuerleitungen sind flotter als der LPT.

Xtreme
09.04.2007, 13:30
So, hab mir grad mal die Arbeit gemacht und das vom PC modulierte Signal am Oszi angeschaut (leider bin ich anscheinend zu doof das Bild vernünftig ab zu fotografieren... wie macht ihr das immer??)
https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=1398

Zwei Signale... eins am RTS eins am DTR abgegriffen.
Ich glaube man erkennt, dass eines doppelt so lang ist wie das andere...

radbruch
09.04.2007, 13:37
Kannst du so das Impuls zu Pause bzw. 1ms zu 20ms Verhältniss nachmessen?

vohopri
09.04.2007, 16:09
Hallo xtreme,

danke für die ausführlichere Info. So kann ich mir schon was vorstellen. Werd jetzt einmal nach diesem Echtzeitmodus recherchieren.

Welche Pegel hast du denn auf dem seriellen Anschluss?. Das Servo direkt an einen rs232 Pegel zu hängen ist allerdings eine riskante Sache und wenn das wirklich so funktionieren sollte, dann ist das ein Zufallstreffer, ebenso kann die Servoelektronik Schaden nehmen. MINUS 15 V ist für TTL schon ein Hammer. + 15 V aber auch. Nicht jedes Servo verkraftet das.

Zwei Schutzdieoden und ein Strombegrenzungswiderstand wären das Minimum einer Beschaltung.

Ohne Anschluss der Masse, kannst du niemal eine störsichere Übertragung realisieren.

Wie genau funktioniert das jetzt eigenlich?
* Wie fein kannst du abstufen?
* Wie breit streuen die Impulszeiten bei einer bestimmten Vorgabe?

Hast du schon mit Servo getestet? Wie ruhig sind die Servos, knurren und brummen sie in bestimmten Stellungen?

Wenn du das Signal innerhlb von 10 Sekunden von 1 ms kontinuierlich bis 2 ms und wieder zurückverstellst, wie folgt das Servo? Ruckt es? Erkennt man eine Rasterung?

grüsse

Xtreme
09.04.2007, 19:40
Kannst du so das Impuls zu Pause bzw. 1ms zu 20ms Verhältniss nachmessen?
Das Oszi hat natürlich ein Raster, das sieht man nur auf dem Foto nicht ;-) Also mit dem geht das natürlich...

@vohopri
Mit dem Pegel hast du natürlich recht. Wenn ich mir das so überlege war es anscheinent wirklich Zufall dass das Servo keinen Schaden nahm..

Ich werde morgen mal ein Video mit Ton machen und die von dir vorgeschlagenen Tests aufnehmen. Da kannst du dir dann sprichwörtlich selbst ein Bild machen

Xtreme
10.04.2007, 12:43
So, hab nun mal ein Video erstellt.
Das von mir verwendete Servo ist ein billiges altes Multiplex Servo.
Auf Wunsch kann ich auch noch andere Servos testen... u.a. Hitec digital.

Das Servo wird in 10s von einer Endstellung in die Andere und zurück bewegt.
Der verwendete Timer nimmt Werte bis 1µs an. (so viel zur Abstufung)
Wie genau er dann noch arbeitet habe ich allerdings mangels Zeit noch nicht geprüft.

http://video.google.de/videoplay?docid=-7561286741785920351

vohopri
10.04.2007, 18:13
Tolles Video - sehr überzeugend.

1 µs Abstufung ist sicher um einiges genauer als diese Servos das reproduzieren können, also mehr als gut genug.

grüsse,
Hannes

Xtreme
10.04.2007, 19:41
Was ich noch vergessen habe... der PC auf dem dieser Test lief war ein 750MhZ mit 256MB Arbeitsspeicher. Mal sehen ob's auf meinem alten 486er auch so läuft, und wie kritisch somit die Leistung des PCs ist (auf meinem P4 1,5GhZ lief es vor ca. 2 Jahren auch... nur da war meine Werkstatt auch noch im Arbeitszimmer ;-) )

lpw
10.04.2007, 19:47
Und mit welchen Programmen und mit welchem Betriebsystem hast du das gemacht?

Xtreme
10.04.2007, 20:54
Programme? Selbst geschrieben mit Delphi 5 (bzw. 7)... und die "Port" Library. Getestet unter Win XP. Dank der DLL die ja mit dem Programm übertragen werden muss wird es aber auch unter 98, 2000 etc. laufen.

lpw
10.04.2007, 20:58
Ja, das mit der "Port" Library meinte ich.

Dnake, vielleicht ersuch ich das auch mal, im moment ist mein roboter noch in der plannungs Phase, soll aber entweder ein PC Mainbord (mit Festplatte etc.) oder ein Laptop zur Steuerung benutz werden. Vielleicht kommt mit diesen Möglichkeiten hier noch ein servo gesteuerter Kamera Kopf dazu ;)