otto23
30.04.2017, 17:32
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 IO-Karte her? Habe im Netz gesucht, aber nichts Vernünftiges gefunden
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!
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 IO-Karte her? Habe im Netz gesucht, aber nichts Vernünftiges gefunden
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!