Hallo,
ich bin der Neue..
Ich habe eine Frage bezüglich der groben Architektur eines Projekts.
Dabei handelt es sich um ein "AddOn" für die Bordelektronik eines alten VW T3.
Ich plane, in der Heckstoßstange einen Abstandsmesser einzubauen (bestehend aus drei US-Modulen).
Das Feedback soll primär akustisch über zwei Lautsprecher im Führerhaus ausgegeben werden.
Aber eventuell soll auch über ein kleines Display in der Mitte des Tacho-Moduls irgendwie visuell dargestellt werden wie es grob mit dem Abstand aussieht. (weitere Features wie RTC, Temperatur, evtl. kleines Menü etc. wären sind für das "Display-Update" angedacht.)
Letzteres ist bisher pure Spinnerei, das wird erstmal nicht umgesetzt, es geht ja vorerst um die Grundfunktionalität der (groben) Abstandsmessung.
Beim Durchlesen ist mir gerade aufgefallen dass es sich so anhören könnte als soll das ins bisherige Bordsystem integriert werden. Das soll es nicht. Alles was ich als Ressource abgreifen werde ist der Strom. (ja, ich habe mich über die Problematik von tlw. starken Schwankungen und Peaks der Spannungsversorgung grob informiert, das Problem soll hier erstmal außer Acht bleiben.)
Jetzt aber zurück zum Thema:
Zuerst wollte ich das alles auf einen Arduino UNO (liegt bereits seit geraumer Zeit daheim rum) laufen lassen. Mittlerweile habe ich allerdings Zweifel an der Echtzeit-Bedingung.
Der Arduino müsste die Ultraschall-Sensoren nacheinander abfragen, die Werte in Soundpegel umrechnen, das Ausgeben und dann alles von vorne. So weit sollte das ja noch halbwegs in Echtzeit ablaufen.
-> grobe Abschätzung anhand des Datenblattes: ein Durchlauf dauert im Fehlerfall circa 40ms, wenn alles klappt sollte es nicht länger als 1ms dauern.
-> ein gesamter Messzyklus mit dringend auszuwertenden Daten dauert max. ~81ms (2 Fails, einer schlägt auf ein Objekt an)
Die Umrechnung auf das akustische Signal dürfte relativ schnell gehen. Somit würde ich das System als "in Echtzeit" laufend bezeichnen. Stimmt Ihr da überein, oder ist das nach eurem Geschmack für den vorgesehenen Anwendungsfall keine Echtzeit mehr? (ja, Echtzeit = "Rechtzeit")
Was ist aber wenn danach weitere Funktionen hinzugefügt werden sollen deren Ansteuerung ein vielfaches der Zeit der US-Sensoren in Anspruch nimmt?
Ich habe drüber nachgedacht das gesamte System modular aufzubauen, also an jeden Sensor noch eine kleine Platine mit Arduino Mini/Micro/Nano / ATtiny oä dranzuhängen der dann die Werte erfasst und die dann auf einen Daten-Bus zur Übertragung an den UNO im Führerhaus zu geben. (->evtl. CAN?)
Da stellt sich aber wieder die Frage ob es nicht mehr Zeit in Anspruch nimmt die Kommunikation durchzuführen, oder die Werte zentral durch einen einzelnen uC direkt von den Sensoren abfragen zu lassen?
Wie würde man solch ein gemischtes System aus Echtzeitkomponenten und eher in Richtung "Unterhaltungselektronik" orientierte Features auslegen?
nochmal kurz die zwei Ansätze die mir in den Sinn kamen:
- für einzelne Sensoren/Sensor-Gruppen getrennte Slaves, die einem Master Bericht erstatten
- alles auf einem Zentralen uC zusammenlaufen lassen (zeit-kritische und unkritische Komponenten)
Mich interessiert bei der Wahl einer der beiden Versionen vor allem auch die Kommunikation zwischen uCs. Wie programmiert man das zeitoptimiert?
Generell: Wie kann ich "hard RTOS"-like Zeiten genau einhalten wenn ich mehr Zeitintervalle im Auge behalten will als Interrupt-fähige Timer verfügbar sind?
-> dazu hatte ich mir gestern Abend folgendes durchgelesen: Enginursday: Doing Away with Delay(); - News - SparkFun Electronics
Ich sehe dabei allerdings das Problem dass ich zwar mit der Auflösung des ausgewerteten Timers bestimmen kann ob die Zeit noch nicht erreicht ist, oder überschritten ist, aber GENAU die angestrebte Zeit einhalten ist eine Glückssache.
Gibt's da eine praktikable Alternative?
Ist jetzt doch ein bisschen mehr ausgeartet als erwartet, irgendwie muss ich solche Sachen manchmal erst in Worte fassen bevor da ein großer Entwicklungsfortschritt bei rumkommt. Sorry..
Falls ich den Timer-Teil besser in ein gesondertes Thema auslagern soll, sagt bitte bescheid.
EDIT: habe vergessen das Datenblatt des US-Sensors anzuhängen..
es handelt sich um den HC-SR04:
Vielen Dank für die Hilfe
SimMue