Forum: PC-Programmierung IO-Karte PCI oder USB, MC-Board oder Alternativen? (für Motorsteuerung)


von Otto M. (otto82)


Lesenswert?

Aufgabe:
Es soll eine einfache Motorsteuerung gebaut werden, ca. 8 Out-, ca. 4 
In-Kanäle, TTL, gerne galvanisch getrennt.
Es gibt zwei zu realisierende Teilbereiche:
- eine einfache Oberfläche zum Starten und Stoppen sowie zur Einstellung 
der Parameter (Einspritzdauer, Zündzeiten usw.) sowie
- ein Programm bzw. Programmteil, welches auf Sensorimpulse reagiert und 
die Einspritzung und Zündung ansteuert
Die Programmierung soll in C# und/oder C++ erfolgen (nach Möglichkeit 
Windows mit Visual Studio). Die geforderten Schalt- und Reaktionszeiten 
bewegen sich um die 100 Mikrosekunden.

Problem:
Welches ist der beste Weg, dies zu realisieren? Ich sehe folgende 
Alternativen:

A) Ein PC mit einer IO-Karte (PCI). Ein C++-Programm, welches die 
Oberfläche bereitstellt sowie in einem Hintergrund-Thread die 
Motorsteuerung durchführt.
Vorteile:
- gutes Zeitverhalten bei der Ansteuerung der IOs
- ein Programm für alles
Nachteile:
- muss die Oberfläche mit C++ programmieren (bin da etwas aus der Übung, 
die letzten Jahre nur C#)
- kann meinen Notebook nicht verwenden, man braucht immer einen 
konventionellen PC mit Steckplatz, dort müsste ich erst mühsam alles 
installieren, bei Änderungen müsste ich vor Ort sein bzw. den PC erst 
herholen...
Fragen:
- wo bekomme ich eine passende (bezahlbare) IO-Karte her? Habe hier auf 
mikrocontroller.net einen Tipp zur Fa. Kolter gefunden, aber vielleicht 
gibt's ja noch Alternativen.

B) Wie A), jedoch keine PCI-IO-Karte sondern ein externes Modul mit 
entsprechenden IO-Ports, welches man über USB ansteuern kann.
Vorteile:
- man braucht keinen PC mit Karte, sondern kann "jeden x-beliebigen" 
Notebook nehmen
- könnte meinen normalen Arbeitsnotebook nehmen (wo die 
Entwicklungsumgebung schon installiert ist)
- bei Erweiterungen/Fehlersuche usw. deutlich einfacher
Nachteile:
- Zeitverzögerung durch die USB-Schnittstelle
Fragen:
- ist dies überhaupt realistisch? IMHO wird doch hier USB benützt, was 
ja kein definiertes Zeitverhalten hat. Oder wird hier quasi die Hardware 
der USB direkt angesteuert, so dass nur Verzögerungen auftreten, die für 
meine Zwecke keine Rolle spielen (also geschätzt kleiner als 10 
Mikrosekunden sind)?
- wo bekomme ich eine passende externe Hardware (IO-Modul)?

C) Notebook mit einem Mikrocontrollerboard (z.B. Arduino, Raspi), 
welches z.B. über USB (alternativ Bluetooth, Wireless, LAN) verbunden 
ist. Auf dem MC-Board liefe die Motorsteuerung (C++-Programm), auf dem 
Notebook ein C#-Programm mit schöner GUI. Beide kommunizieren, was nicht 
zeitkritisch ist.
Vorteile:
- könnte GUI mit C# machen
- man bräuche keine besondere Hardware
Nachteile:
- zwei getrennte Projekte
- Programmierung der Kommunikation nötig
- Tests aufwändiger
- Einarbeitung in MC-Board, Installation der Entwicklungsumgebung 
hierfür
Fragen:
- hat jemand einen Tipp für das MC-Board?

Bitte schreibt mir eure Meinung. Vielleicht, so hoffe ich, gibt es 
bessere Alternativen, die ich übersehen habe oder nicht kenne. Selbst 
wenn nicht, würde ich mich über Einschätzungen über die o.a. 
Realisierungswege freuen.

Danke!

: Verschoben durch Moderator
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Otto M. schrieb:
> A) Ein PC mit einer IO-Karte (PCI). Ein C++-Programm, welches die
> Oberfläche bereitstellt sowie in einem Hintergrund-Thread die
> Motorsteuerung durchführt.
> Vorteile:
> - gutes Zeitverhalten bei der Ansteuerung der IOs

Wie kommst Du darauf, daß ausgerechnet ein PC ein "gutes Zeitverhalten" 
bei der I/O-Ansteuerung hätte?

Ein PC ist zwar, was Berechnungen etc. angeht, sauschnell, und ein PC 
kann sehr große Datenmengen in kurzer Zeit verarbeiten, aber gerade die 
schnelle und vorhersagbare Reaktion auf externe Ereignisse ist nicht 
seine Stärke. Dabei hilft auch eine PCI(e)-Karte nicht.

Ein stinkpopliger µC aus der 8-Bit-AVR-Klasse kann deterministischer auf 
externe Ereignisse reagieren als ein PC; erst recht, wenn auf dem PC 
irgendein normales Betriebssystem läuft.

Der zeitkritische Teil Deiner Motorsteuerung gehört nicht auf den PC.

von Georg (Gast)


Lesenswert?

Otto M. schrieb:
> Oder wird hier quasi die Hardware
> der USB direkt angesteuert, so dass nur Verzögerungen auftreten, die für
> meine Zwecke keine Rolle spielen (also geschätzt kleiner als 10
> Mikrosekunden sind)?

10 µs?? Davon trennen USB Welten. Übertragung per USB ist Ok, weil das 
überall geht, aber nur zur Übertragung von Befehlen, zeitkritische 
Aufgaben wie die Motorsteuerung müssen lokal mit einem µController 
bearbeitet werden.

Solche Einheiten zur Ansteuerung aller möglichen Antriebe gibt es 
fertig.

Georg

von Otto M. (Gast)


Lesenswert?

Danke für eure Hinweise!
Werde jetzt die Realisierung mit einem Raspi angehen.

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.