Forum: Mikrocontroller und Digitale Elektronik Elektromotoren über USB ansteuern


von Richard S. (djlg)


Lesenswert?

Hallo liebe Mikrocontroller- Gemeinde

Bin neu hier im Forum und habe ein paar Frage bezüglich einens 
Freizeitprojekts:

- Is es möglich 2 Elektromotoren über USB in Echtzeit also Live zu 
steuern ?
- Welches USB Interface sollte benutzt werden ??
- in einem anderen Beitrag aus diesem Forum wird auch das Octopus USB 
Can benutzt. Is dies eventuell dafür zu gebrauchen ??

Wichtig wäre das die Motoren in ihrer Drehzahl Dosierbar sind.

Vielen Dank schon mal im Voraus


djlg

von Niels K. (niels-k)


Lesenswert?

Hallo Richard,

Fragen:
Welcher Motorentyp?
Bei Schrittmotoren ist das recht einfach über den Parallelport 
umsetzbar.

Ist auch der Parallel-Port denkbar?

Falls ja, hier gibt es ein einfaches Beispielprogramm für QBASIC:
http://www.franksteinberg.de/pbeisp.htm

Dann einfach ein Drehfeld entsprechend ausgeben --> Geschwindigkeit frei 
wählbar.

Grüße Niels

von Thomas E. (thomase)


Lesenswert?

Niels Keller schrieb:
> Falls ja, hier gibt es ein einfaches Beispielprogramm für QBASIC:
> http://www.franksteinberg.de/pbeisp.htm

Was ist denn das für 'ne Mottenkiste?

Richard Schlitz schrieb:
> - Is es möglich 2 Elektromotoren über USB in Echtzeit also Live zu
> steuern ?

Worüber man das ansteuert ist eigentlich ziemlich egal. USB mit 
virtuellem COM-Port und einem µC bietet sich natürlich an. Da bist du 
hier auch genau richtig.

Richard Schlitz schrieb:
> Echtzeit also Live zu steuern ?

Definier das mal genauer.
Also wenn die Windowskiste sagt "dreh links rum", dann dreht er ohne 
Verzögerung links rum. Falls du das meinst.

Richard Schlitz schrieb:
> Wichtig wäre das die Motoren in ihrer Drehzahl Dosierbar sind.

Natürlich.

mfg.

von Christian R. (supachris)


Lesenswert?

Thomas Eckmann schrieb:
> Also wenn die Windowskiste sagt "dreh links rum", dann dreht er ohne
> Verzögerung links rum.

Naja, das kann man so nicht stehen lassen. Natürlich gibts da 
Verzögerungen, denn Windows und Linux und MacOS sind keine Echtzeit-OS. 
Auf keinen Fall darf man einen Sicherheitsschalter über Software einfach 
so abfragen, denn niemand kann garantieren, dass in einer Zeit x die 
Software den Status abfragen kann.

Was ist denn bei dir Echtzeit? Wie schnell müssen die Motoren reagieren? 
Echtzeit können ja auch Tage sein...

von Thomas E. (thomase)


Lesenswert?

Christian R. schrieb:
> Naja, das kann man so nicht stehen lassen.

Natürlich kann man das so stehen lassen.

Wenn vom Programm auf die serielle Schnittstelle eine Ausgabe erfolgt, 
wird diese auch spontan vom Mikrocontroller ausgeführt. Das hat mit 
Echtzeit überhaupt nichts zu tun. Über die Verzögerung, die durch die 
Datenübertragung entsteht, muß man jetzt auch nicht philosophieren.

Christian R. schrieb:
> Auf keinen Fall darf man einen Sicherheitsschalter über Software einfach

Häh?

mfg.

von Christian R. (supachris)


Lesenswert?

Thomas Eckmann schrieb:
> Wenn vom Programm auf die serielle Schnittstelle eine Ausgabe erfolgt,
> wird diese auch spontan vom Mikrocontroller ausgeführt

Achso? Woher weißt du das? Und woher weißt du, wieviel Zeit (maximal) 
vergeht, bis die Eingabe in der Benutzeroberfläche zur Schnittstelle 
gereicht wird?

> Häh?

Windows/Linux/MacOS in Standard Konfig ist nun mal kein Echtzeit-OS. 
Angenommen, du fragst einen Endschalter über USB ab und willst den Motor 
über USB anhalten, damit er nichts zerstört. Tja, aber was das OS in der 
Zwischenzeit macht, ist unbestimmt. Trotz MultiCore und HyperThreading 
usw. kann sich Software auf unbestimmte Zeit die CPU klauen, speziell 
auf Kernel-Ebene. Und auch auf User-Ebene ist eine Reaktionszeit 
keinesfalls garantiert.
Sowas geht nur mit Echtzeit-OS oder solchen Aufsätzen für Windows, wie 
es zum Beispiel Beckhoff für seine Software-SPS macht. Und gerade USB 
ist alles andere als hoch priorisiert, das ist dran, wenn gerade mal 
nichts anderes zu tun ist....

von Thomas E. (thomase)


Lesenswert?

@ Christian R.

Hör auf hier rumzutrollen. Darum geht das überhaupt nicht.

Habe weder Zeit noch Lust hier eine schwachsinnige Diskussion über das 
Echtzeitverhalten von Windows und Linux zu führen.

mfg.

von Richard S. (djlg)


Lesenswert?

Hallo alle miteinander

Zunächst einmal vielen Dank für die vielen Antworten !!!

Mit Echtzeit meine ich :

''Also wenn die Windowskiste sagt "dreh links rum", dann dreht er ohne
Verzögerung links rum. Falls du das meinst.'' genau so !!!

Wenn vom Programm auf die serielle Schnittstelle eine Ausgabe erfolgt,
wird diese auch spontan vom Mikrocontroller ausgeführt.

Die Verzögerung sollte natürlich so gering wie möglich sein.


Leider kenne ich mich damit nicht so gut aus und bin totaler Laie.


Was ist ein Parallelport ?? Ist das der alte Anschluss am Pc oder so ?
Ich habe einen ganz neues Notebook das hat garkeinen Parrallen Anschluss 
mehr !!! Also sollte schon USB sein!



''USB mitvirtuellem COM-Port und einem µC bietet sich natürlich an.''
Welche Teile sind hierfür notwendig ? ( welches USB interface)


Danke fpr die antworten =)

Richard

von Thomas E. (thomase)


Lesenswert?

Richard Schlitz schrieb:
> Leider kenne ich mich damit nicht so gut aus und bin totaler Laie.

Das ist dann schon etwas schwieriger. Sonst wäre das eine schöne Aufgabe 
für einen verregneten Nachmittag.

Richard Schlitz schrieb:
> Welche Teile sind hierfür notwendig ? ( welches USB interface)

Google mal nach Arduino.
Das ist ein kleines Mikrocontrollerboard für relativ wenig Geld. Würde 
mich nicht wundern, wenn es in der Fangemeinde das, was du suchst, schon 
fertig gibt.

mfg.

von ein (Gast)


Lesenswert?

Hallo
Richard Schlitz schrieb:
> Leider kenne ich mich damit nicht so gut aus und bin totaler Laie.

Was heißt totaler Laie? Kennst du die Grundlagen der Elektrotechnik? 
Kannst du den PC Programmieren?
In Anbetracht dessen das du Laie bist hast du 2 Möglichkeiten:

1. du hast viel Zeit und wenig Geld und möchtest daher alles 
selberbauen. Dann kannst du mit einem µC bzw. mit Arduino anfangen. 
Arduino ist einfach ein Mikrocontroller für Anfänger oder Fachfremde.

2. Du möchtest/benötigst schnell ein Ergebnis.
Dann brauchst du zwei Dinge:
-für jeden Motor einen Drehzahlsteller
-ein USB Interface mit geeignetem Ausgang.
Du hast z.B. ein Drehzahlsteller das eine analoge Eingangspannung von 
0-5V erwartet, also brauchst du ein Interface das 0-5V liefert.

Es wäre gut zu wissen was für Motoren du hast: Gleichstrom, 
Wechselstrom, Schrittmotor, BLDC?
Spannung, Strom?

Richard Schlitz schrieb:
> Die Verzögerung sollte natürlich so gering wie möglich sein.

Diese Aussage ist sehr ungenau. Was willst du damit machen?
Solange du nicht sagst was du genau machen willst können alle nur im 
Nebel stochern.

von Christian R. (supachris)


Lesenswert?

Thomas Eckmann schrieb:
> @ Christian R.
>
> Hör auf hier rumzutrollen. Darum geht das überhaupt nicht.
>
> Habe weder Zeit noch Lust hier eine schwachsinnige Diskussion über das
> Echtzeitverhalten von Windows und Linux zu führen.
>
> mfg.

Dann schreib nicht so einen unqualifizierten Kommentar wie "wird ohne 
Verzögerung ausgeführt"
Das ist eine völlig irreführende und aus der Luft gegriffene Aussage, 
die jeglicher Grundlage entbehrt und dem Frager nichts bringt.
Er hat in seiner ersten Frage nach Echtzeit gefragt, und es gibt eine 
eindeutige Definition von Echtzeit. Und ich hab mich sachlich zu seiner 
Frage nach Echtzeit geäußert und darauf hingewiesen, dass das mit einem 
Standard-Windows und USB nicht einzuhalten ist.

Bei Wikipedia ist es ausnahmsweise mal sehr klar gleich im ersten Satz 
beschrieben: "In der Informatik spricht man von Echtzeit (englisch: 
real-time), wenn die Dauer eines Vorgangs (auch eine Wartezeit) 
vorhersehbar ist."

Und genau das trifft bei Windows und dann auch noch bei USB eben 
keinesfalls zu. Man kann problemlos im User Space das Windows dazu 
bringen, dass ein Programm über USB nur noch hunderten Millisekunden 
oder gar Sekunden reagiert.

Natürlich kann ich mir denken, dass der Frager mit Echtzeit was anderes 
meint. Aber was genau, kann nur er selbst beantworten.

Ich versuche hier lediglich falsche und irreführende Pauschal-Aussagen 
zu klären.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Hallo!

Über den Parallelport bekommt man das ohne Echtzeiterweiterung des 
Betriebssystems erst recht nicht hin, weil man dann die Takte für die 
Schrittmotor-Endstufen auf dem PC erzeugen muss. Und da geht es nicht 
nur darum, 5 oder 10 kHz zu erzeugen, sondern auch den Jitter niedrig zu 
halten, damit der Motor nicht aussteigt.

Für USB gibt es fertige Lösungen, die den Echtzeit kritischen Teil auf 
einen externen Controller verlagern. Die Latenz für die 
USB-Kommunikation wird man damit natürlich nicht los, aber man kann ja 
z.B. die Überwachung des Arbeitsraums, Abfragen von Endschaltern usw. 
direkt auf der externen Hardware machen.

@Richard: Wenn Du sowas fertig kaufen willst, kann ich dir für 
Schrittmotoren eine Lösung anbieten. Sprich mich bei Bedarf an.

Mit freundlichen Grüßen
Thorsten Ostermann

von Richard S. (djlg)


Lesenswert?

Hallo,

also mit "Echtzeit" meine ich einfach, dass man einen Motor (ein Motor 
ausgebaut aus einem Drucker, ich glaube nicht dass das ein Schrittmotor 
ist) in einer Zeit geringer als 1 Sekunde "ansprechen" kann. Das 
Interface muss nur diese 3 Möglichkeiten haben:

-"Richtungswechsel" des Motors (Umpolen?)
-Drehzahl Regulieren, also auch komplett auf 0 setzen.
-mit C++ ansprechbar sein.

---> ich will die Motoren im endeffekt über Tastendruck steuern, also 
Ich drücke z.B. W um die Drehzahl zu erhöhen, S um in die andere 
Richtung zu drehen. Es muss nicht "perfekt" und immer gleichschnell 
reagieren, es soll nur den Motor steuern, nichts bedenkliches bezüglich 
der Sicherheit ;)

Ich kann ein wenig C++ (Grundlagen) und kenne mich mit den Grundlagen 
der Elektrotechnik aus. Die 3 genannten Punkte sollten also, 
vorrausgesetzt das Interface liefert eine Funktionsbibliothek mit, nicht 
allzu schwer zu machen sein.

Danke für eure Hilfe!

von Thomas E. (thomase)


Lesenswert?

Richard Schlitz schrieb:
> also mit "Echtzeit" meine ich einfach

Lass dich nicht verrückt machen. Das funktioniert hundertprozentig so, 
wie du das haben willst.

Bleiben wir mal bei Arduino.

Wenn du so ein Teil nimmst, gibt es für etwas mehr als 20 €, musst du 
nur noch in der Lage sein, über die serielle Schnittstelle vom PC aus 
etwas zu senden und zu empfangen.

Auf dem Board ist ein USB-Interface, daß sich auf dem PC als serielle 
Schnittstelle ausgibt. Beim Arduino sind Beispiele bei für PWM und 
Kommunikation. Das kannst du dann in der Arduino-IDE bearbeiten. Das 
Ganze fühlt sich fast wie C an.

Für die Motoren setzt du dann einen L293 oder ähnliches an den Port des 
Controllerboards.

mfg.

von Richard S. (djlg)


Lesenswert?

Ok, vielen Dank!

Wieviel würde denn so ein L293 kosten und wo bekomme ich den am besten 
her?

Ist ein L293 auch für "größere" Motoren geeignet, falls ich damit später 
mal was in der Dimension eines Scheibenwischermotors ansteuern will?

von Uwe (Gast)


Lesenswert?

>(ein Motor ausgebaut aus einem Drucker, ich glaube nicht dass das ein 
Schrittmotor ist)

@Richard : ich glaube schon ! (wieviel Anschlüsse hat denn der Motor ?)

von Richard S. (djlg)


Lesenswert?

ich habe 2 motoren ausgebaut

Der eine hat 2 und der andere 4

von Thomas E. (thomase)


Lesenswert?

Richard Schlitz schrieb:
> Der eine hat 2 und der andere 4

Der mit 2 Anschlüssen ist klar, brauchen wir nicht drüber reden.
Der andere hat 2 Wicklungen. Den kann man aber auch mit einem ganzen 
L293 ansteuern. Für den ersten braucht man nur eins der beiden 
Anschlusspaare.

mfg.

von Uwe (Gast)


Lesenswert?

Der mit 4 Anschlüssen ist ein bipolarer Schrittmotor.

von Richard S. (djlg)


Lesenswert?

Hallo!

Also ich würde gerne nur den nicht-Schrittmotor ansteuern (erstmal zum 
einarbeiten in die Usb Interface-Software usw. , später dann wenns geht 
3 dieser nicht-Schrittmotoren).
Deshalb auch gleich die nächsten Fragen:

Ist es möglich mit dem L293 bis zu 3 Motoren anzusteuern?

Brauche ich für das L293 extra Software (muss ich das extra 
Programmieren, oder regelt das das USB Interface?

Kann man die Motoren auch direkt an das USB Interface anschließen, ohne 
den L293?

Ist es möglich die Motoren, die an dem L293 angeschlossen sind, mit 
einem Externen Akku / Netzteil zu versorgen (bis zu 12V? )

Das Arduino - Board sieht gut aus, nicht zu kompliziert. Ich denke mit 
der Programmiersprache werde ich zurechtkommen.

Danke schonmal im Vorraus!

von Thomas E. (thomase)


Lesenswert?

Richard Schlitz schrieb:
> Ist es möglich mit dem L293 bis zu 3 Motoren anzusteuern?

Der L293 hat 4 Ausgänge zum Anschluss von max. 4 Motoren(eine Richtung).
Für Rechts-Linkslauf brauchst du 2 dieser Ausgänge und für einen 
bipolaren Stepper alle vier.

Die Anschlüsse sind im Datenblatt genau beschrieben.

Richard Schlitz schrieb:
> Brauche ich für das L293 extra Software (muss ich das extra
> Programmieren, oder regelt das das USB Interface?

Dafür sollten Beispiele beim Arduino dabei sein.

Richard Schlitz schrieb:
> Kann man die Motoren auch direkt an das USB Interface anschließen, ohne
> den L293

Nein

Richard Schlitz schrieb:
> Ist es möglich die Motoren, die an dem L293 angeschlossen sind, mit
> einem Externen Akku / Netzteil zu versorgen (bis zu 12V? )

Ja

mfg.

von Loonix (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Lass dich nicht verrückt machen. Das funktioniert hundertprozentig so,
> wie du das haben willst.

Warum hörst DU nicht auf, hier zu trollen? Deine Aussagen sind (nicht 
nur in diesem Topic) meist schwammig und bei genauerem Hinsehen nicht 
korrekt. Ich frage mich, wie lange es noch dauert bis du mit deinem 
"Laden" auf Grundeis gefahren bist. Wie ein seriöser Entwickler benimmst 
du dich jedenfalls nicht!

Zieh dir deine Beiträge doch selber mal rein, am informativsten sind 
noch diese:

Thomas Eckmann schrieb:
> Die Anschlüsse sind im Datenblatt genau beschrieben.

Thomas Eckmann schrieb:
> Dafür sollten Beispiele beim Arduino dabei sein.

Obwohl du hier auch nur schwammig auf Datenblätter und Beispiele 
verweist. Was soll der Müll?

von Thomas E. (thomase)


Lesenswert?

Richard Schlitz schrieb:
> Brauche ich für das L293 extra Software (muss ich das extra
> Programmieren, oder regelt das das USB Interface?

Hier ist ein kleines Projekt für den Einstieg:

http://itp.nyu.edu/physcomp/Labs/DCMotorControl

Der Arduino ist kein USB-Interface, sondern ein komplettes 
Mikrocontrollersystem mit einem USB-Interface, das selbständig den Motor 
steuert. Vom PC bekommt er nur die Anweisungen wie schnell und wie herum 
er drehen soll.

mfg.

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.