Powell
07.06.2008, 17:18
Hallo zusammen,
ich hatte vor einiger Zeit von einem seltsamen Problem erzählt, wens interessiert kann sich den Thread nochmal hier anschauen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=40649&highlight=
Ich konnte die Fehlerursache bisher immer noch nicht herausfinden, mir ist nun aber ein anderer Lösungsansatz eingefallen, das Stichwort heißt Redundanz.
Um die Funktion des Systems noch mal kurz zu erläutern, schaut euch das Schema an (vereinfacht, nur die wichtigen Komponenten enthalten).
Das ganze funktioniert so: zwei Taster tasten auf GND. Wenn sie gedrückt werden erhält der Controller am entsprechenden Eingang eine fallende Flanke, die über DEBOUNCE ausgewertet und ein Sprung in das zugehörige SUB vollzogen wird. Hier wird der dazugehörige Ausgang auf 1 gesetzt und nach 100ms wieder rückgesetzt auf 0. Der andere Ausgang bleibt auf 0.
Durch die logische Ungleichheit der Ausgänge des MC führt der Motortreiber (ist ein VNH2SP30) den Schaltbefehl am Treiberausgang aus, wodurch eine Spannung zwischen OUTA und B anliegt, die wiederum den Motor drehen lässt.
Ich habe nun mehrere Lösungsansätze zu denen mir aber bisher leider die Ideen zur Hardwaretechnischen Umsetzung fehlen:
1.: Der Schaltbefehl des Tasters wird parallel zum Controllereingang auch zum Motortreibereingang geführt. Der Controller gibt nun nicht mehr den Befehl "Motor soll für 100ms drehen", sondern der Tastendruck selbst gibt den Befehl zum drehen. Der Controller muss nun nach 100ms das Signal des Tasters unterbrechen, falls der Taster länger gedrückt bleibt, und er muss den Befehl des Tasters für 100ms aufrechterhalten, falls der Taster schon vor Ablauf der 100ms losgelassen wird.
Soetwas kann man sicher irgendwie über Transistoren realisieren, mir ist dazu aber noch nichts passendes Eingefallen, für Entwürfe bin ich dankbar.
In diesem Falle muss also, falls der Controller ausfällt, der Motortreiber noch angesteuert werden wenn man den Taster drückt. Hierbei wird die Zeit von 100ms zwar nicht mehr eingehalten, das ist aber besser als gar keine Reaktion.
2.: Das System bleibt so wie es ist, nur werden alle komponenten zweifach verwendet. Das heißt 2 Controller die unabhängig voneinander arbeiten, und 2 Motortreiber, die jedoch nicht voneinander unabhängig arbeiten dürfen: Angenommen ein Controller fällt aus, dann muss der andere Controller den Schaltbefehl auch an den anderen Motortreiber weitergeben, sodass diese parallel weiterarbeiten (andernfalls würde es einen Kurzschluss am Ausgang der Motortreiber geben).
Soetwas müsste man auch irgendwie mit Dioden oder evtl. Transistoren lösen können, aber auch hier hatte ich noch nicht den richtigen Einfall.
Es ist auch denkbar dass man beide Systeme kombinieren könnte, aber ich warte doch zunächst mal ab ob jemand von euch ne clevere Idee zu dieser Problemstellung hat.
Grüße Paul
ich hatte vor einiger Zeit von einem seltsamen Problem erzählt, wens interessiert kann sich den Thread nochmal hier anschauen:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=40649&highlight=
Ich konnte die Fehlerursache bisher immer noch nicht herausfinden, mir ist nun aber ein anderer Lösungsansatz eingefallen, das Stichwort heißt Redundanz.
Um die Funktion des Systems noch mal kurz zu erläutern, schaut euch das Schema an (vereinfacht, nur die wichtigen Komponenten enthalten).
Das ganze funktioniert so: zwei Taster tasten auf GND. Wenn sie gedrückt werden erhält der Controller am entsprechenden Eingang eine fallende Flanke, die über DEBOUNCE ausgewertet und ein Sprung in das zugehörige SUB vollzogen wird. Hier wird der dazugehörige Ausgang auf 1 gesetzt und nach 100ms wieder rückgesetzt auf 0. Der andere Ausgang bleibt auf 0.
Durch die logische Ungleichheit der Ausgänge des MC führt der Motortreiber (ist ein VNH2SP30) den Schaltbefehl am Treiberausgang aus, wodurch eine Spannung zwischen OUTA und B anliegt, die wiederum den Motor drehen lässt.
Ich habe nun mehrere Lösungsansätze zu denen mir aber bisher leider die Ideen zur Hardwaretechnischen Umsetzung fehlen:
1.: Der Schaltbefehl des Tasters wird parallel zum Controllereingang auch zum Motortreibereingang geführt. Der Controller gibt nun nicht mehr den Befehl "Motor soll für 100ms drehen", sondern der Tastendruck selbst gibt den Befehl zum drehen. Der Controller muss nun nach 100ms das Signal des Tasters unterbrechen, falls der Taster länger gedrückt bleibt, und er muss den Befehl des Tasters für 100ms aufrechterhalten, falls der Taster schon vor Ablauf der 100ms losgelassen wird.
Soetwas kann man sicher irgendwie über Transistoren realisieren, mir ist dazu aber noch nichts passendes Eingefallen, für Entwürfe bin ich dankbar.
In diesem Falle muss also, falls der Controller ausfällt, der Motortreiber noch angesteuert werden wenn man den Taster drückt. Hierbei wird die Zeit von 100ms zwar nicht mehr eingehalten, das ist aber besser als gar keine Reaktion.
2.: Das System bleibt so wie es ist, nur werden alle komponenten zweifach verwendet. Das heißt 2 Controller die unabhängig voneinander arbeiten, und 2 Motortreiber, die jedoch nicht voneinander unabhängig arbeiten dürfen: Angenommen ein Controller fällt aus, dann muss der andere Controller den Schaltbefehl auch an den anderen Motortreiber weitergeben, sodass diese parallel weiterarbeiten (andernfalls würde es einen Kurzschluss am Ausgang der Motortreiber geben).
Soetwas müsste man auch irgendwie mit Dioden oder evtl. Transistoren lösen können, aber auch hier hatte ich noch nicht den richtigen Einfall.
Es ist auch denkbar dass man beide Systeme kombinieren könnte, aber ich warte doch zunächst mal ab ob jemand von euch ne clevere Idee zu dieser Problemstellung hat.
Grüße Paul