USB in Echtzeit?

Hallo,

ich möchte Motoren in harter Echtzeit mit Linux- RTAI ansteuern.

Weiss jemand ob ich die Motoren via USB ansteuern kann?
Ist USB 2.0 überhaupt Echtzeitfähig?

Welche anderen Möglichkeiten als via USB hätte ich sonst noch um die Motoren anzusteuern? (seriell, pcmcia ???)

Das ganze sollte nach Möglichkeit von einem Notebook aus möglich sein.

Echtzeit ist zwingend!

Über eine Antwort würde ich mich sehr freuen.

Gruss

Hallo,

das ist ein Standardproblem für Firmen der Regeltechnik, die Standardlösung ist ein Feldbus, z.B. CAN.

USB ist als Feldbus ungeeignet, schon wegen der Stecker.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Weiss jemand ob ich die Motoren via USB ansteuern kann?

Ja

Ist USB 2.0 überhaupt Echtzeitfähig?

nein. USB ist so echtzeitfähig wie ethernet, also gar nicht.

Welche anderen Möglichkeiten als via USB hätte ich sonst noch
um die Motoren anzusteuern? (seriell, pcmcia ???)

seriel an eine relaiskarte. (Oder sind es schrittmotoren ?)

cu

Hey,
erstmal danke für die schnellen Antworten.

@Pumpkin:
Ich weiß noch nicht genau, welchen Motortyp ich einsetzen werde. Der Motor soll eine Art Seilwinde werden und es müssen insgesamt 4 Motoren gleichzeitig angesteuert werden.Also es sollen vier Seilwinden werden.

Schrittmotoren habe ich ins Auge gefasst, weil ich nicht weiß, ob es Servos gibt, die ca. 30 - 50 volle Umdrehungen machen können. Bei normalen DC-Motoren wird es wohl mit den Winkelencodern alles ein bissl zu aufwendig. Oder wäre das gar nicht so kompliziert?
MfG,
der Mordin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moien

Ich weiß noch nicht genau, welchen Motortyp ich einsetzen
werde. Der Motor soll eine Art Seilwinde werden und es müssen
insgesamt 4 Motoren gleichzeitig angesteuert werden.Also es
sollen vier Seilwinden werden.

Nimm Schrittmotoren. Bei DC-Motoren müsste man die Spannung an die Last der Motoren anpassen (weil’s sonst aus dem Gleichtakt läuft). Spannungsregelung bei hohen Lasten ist nicht so einfach wie Schrittmotoren mithilfe von Transistoren (4 pro Motor, also 16 I/O-Bit insgesamt). Relais und Schrittmotor verträgt sich allerdings nicht.

Wie hart und genau muss die Echtzeit werden ? Könnte was im Styl C-Control schon reichen ?

Schrittmotoren habe ich ins Auge gefasst, weil ich nicht weiß,
ob es Servos gibt, die ca. 30 - 50 volle Umdrehungen machen
können.

Ohne Übersetzung: nein. Servos sind da etwas eingeschränkt. Andererseits: wieviel Kraft brauchst du ?

Bei normalen DC-Motoren wird es wohl mit den
Winkelencodern alles ein bissl zu aufwendig. Oder wäre das gar
nicht so kompliziert?

Naja, musst halt schnell genug alle Winkel abfragen und auswerten. Eine normale Sensorenkarte, zusammen mit einem Endlospoti pro Motor macht das. Bleibt das Problem der Spannungsregelung. Frag mal im Elektronikbrett nach.

cu

Ok, ich denke, dass mit den Schrittmotoren in Verbindung mit den Transistoren ist die beste Lösung, auch wenn ich noch nicht so ganz weiß, wie sowas zusammengebaut wird. Bin relativ neu auf dem Gebiet.
Wie „hart“ die Echtzeit werden muss, kann ich auch nicht genau sagen, da ich keine Vergleiche hab. Ich weiß allerdings, dass eine Unterbrechung von 50 millisekunden schon zu lang ist. Also denke ich mal, dass es eine ziemlich „harte“ Echtzeit ist.
Könntest du mir evtl. noch ein paar Stichworte geben, welche Möglichkeiten ich habe, von einem Notebook aus diese vier Schrittmotoren anzusteuern? Dann hätte ich schonmal einen weiteren Anhaltspunkt, in welche Richtung ich mich schlau machen muss.

vielen Dank aber schonmal bis hierhin!

Moien

Ok, ich denke, dass mit den Schrittmotoren in Verbindung mit
den Transistoren ist die beste Lösung, auch wenn ich noch
nicht so ganz weiß, wie sowas zusammengebaut wird.

Das erklären die Jungs im Elektronik-Brett besser.

Wie „hart“ die Echtzeit werden muss, kann ich auch nicht genau
sagen, da ich keine Vergleiche hab. Ich weiß allerdings, dass
eine Unterbrechung von 50 millisekunden schon zu lang ist.

50 ms ist verdammt wenig. Da kommst du an Grenzen was die Reaktionzeiten von Relais angeht. Und auch das Umwandeln von analogen Messwerte in digitale Werte angeht … rechne da mal 10-15 ms für das auslesen von 4 Werten ein.

Könntest du mir evtl. noch ein paar Stichworte geben, welche
Möglichkeiten ich habe, von einem Notebook aus diese vier
Schrittmotoren anzusteuern?

Es gibt IO-Karten. Die werden seriel oder per USB angeschlossen und bieten (je nach Ausstattung) zwischen 4 und ein paar hundert digitale Ein/Ausgänge. Es gibt sie mit Relais (220V,2-6Amp, also belastbar) oder mit Transistorausgängen (5-20V, 0.01-0.5 Amp, reicht nicht für einen Motor). DC-Motoren kann man per Relais ansteuern, Schrittmotoren eher nicht (Es geht, aber die Relais überleben nicht lange).

Dann kann man den lpt-Port benutzen. Er hat 8 frei belegbare Ausgänge. Ist allerdings nicht belastbar.

Dann gibt’s MircoController wie z.B. C-Control von Conrad. Das Teil wird seriel an den PC angeschlossen. Läuft auch stand-alone ohne PC. Es gibt eine Variante mit 16 Ein/Ausgängen (nicht belastbar) die gleichzeitig auch noch 8 (6?) Spannungen messen kann (ein Wandler und 8 (6?) Eingänge. Nicht schnell). Der kann 50ms Reaktionszeit einhalten, aber nur wenn man ihn in ASM programmiert. In ASM hat er wenig Platz, gibt bessere. Aber der C-Control ist halt fertig und man muss nicht löten. Ausserdem ist er billig im Vergleich zu anderen bei denen die Entwickelungssoftware schonmal 4 stellig Preisregionen erreichen kann. In Basic macht der so etwa 100-250 Befehle pro Sekunde, kann man also vergessen.

Man braucht 4 Ausgänge pro Schrittmotor. Nicht belastbare Ausgänge kann man per Transistor in Belastbare verwandeln. Solange du im Bereich ±24V bleibst geht das ohne grössere Probleme. Darüber wird es komplexer, aber es bleibt möglich. Bei Wechselspannung (230V) wirds dann richig fies. Genaueres => Elektronik-Brett.

Zum Dateneinlesen gibts auch IO-Karten (seriel, USB, PCI). Meistens können diese maximal eine Spannung gleichzeitig decodieren und zwischen 4-8 Eingängen umschalten. Die lesen so zwischen 0 und 5 oder 0 und 12V mit 8-12 Bit Genauigkeit.

Echtzeit ist mit den Teilen nicht so ganz ohne, besonders wenn du den Beweis führen musst.

Dann hätte ich schonmal einen
weiteren Anhaltspunkt, in welche Richtung ich mich schlau
machen muss.

Conrad und Reichelt haben alles was du brauchst. Lies aber immer die pdf’s durch, da wird so mancher Fallstrick sichtbar.

cu

Hallo Fragewurm,

Wie „hart“ die Echtzeit werden muss, kann ich auch nicht genau
sagen, da ich keine Vergleiche hab. Ich weiß allerdings, dass
eine Unterbrechung von 50 millisekunden schon zu lang ist.
Also denke ich mal, dass es eine ziemlich „harte“ Echtzeit
ist.

Hart wird es nur, wenn die Hard- und SOftware nicht mitmacht !!!

Windows kannst du bei 50ms schon mal vergessen, dass „denkt“ öfters mal ein paar Sekunden nach …

AUf jeden Fall wirst du das nur hinbekommen, wenn du intelligente Controller verwendest, wie z.B. die schon vorgeschlagene C-Control. Also die Ausführende Intelligenz kann auch ohne den PC funktionieren und zumindest einen sicheren Zustand herstellen, wenn z.B. der PC mal abstürzt.
Auf jeden Fall wäre es unmöglich für z.B. Windows einen Sicherheitsnachweis zu erbringen. Selbst wenn du das hinbekommen würdest, wäre dieser nach dem nächsten Sicherheitspatch oder der Installation von einem Viren-Scanner wieder hinfällig.

Mittlerweile gibt es CPUs mit eingebautem USB-Controller, welche dann die Steuerung der Motoren und die Auswertung der SIgnale vornehmen können. Per USB gibst du dann nur noch die Aktionen vor, welche nicht in Echtzeit erfolgen müssen.

Hier kannst du etwas finden (schau die mal die AP-Notes an):
http://www.maxim-ic.com/products/microcontrollers/tini/
http://www.maxim-ic.com/solutions/usb/functions.mvp

MfG Peter(TOO)

Moien

Windows kannst du bei 50ms schon mal vergessen, dass „denkt“
öfters mal ein paar Sekunden nach …

Der schreib was von Linux-RTAI. Wenn er sowas nimmt kann er’s zwar nicht nachweisen (versuchs mal bei den aktuellen CPU-designs). Aber hinbekommen kann er es. Er wird aber in das Problem „Interface-zur-Aussenwelt“ laufen

Hier kannst du etwas finden (schau die mal die AP-Notes an):

Cool, die kannte ich noch nicht. Danke.

cu