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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.