PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sichere Abschaltung bei µC Störungen



sast
16.09.2010, 09:27
Hi,

ich benötige einen Gedankenanstoß.

Für die Ansteuerung eines Brushlessmotors schalte ich einen ENABLE- und einen BRAKE-Eingang der Steuerung mit einem ATMega8. Außerdem stelle ich die Geschwindigkeit über ein DS1804 zwischen 0-5V.

Das Gerät soll autark versorgt werden und ist lediglich durch ein Funkmodul erreichbar. Den Fall, dass der Funkkontakt abreißt und dadurch ein Weiterfahren verhindert wird, habe ich durch eine Dauersendung des Senders (Broadcast) gelöst.

Nun aber zu meinem Problem. Nehmen wir mal an, dass der Controller aus irgend einem Grund nicht mehr korrekt funktioniert. Dann möchte ich gern, dass auch für diesen Fall der Motor sicher angehalten wird. Ich kann aber ja nicht die Zustände der Ausgänge sicher definieren. Jetzt würde ich einfach mal einen separaten Ausgang toggeln und daran eine Schaltung basteln, die bei längerem Verharren in einem der beiden Zustände einen Ausgang schaltet. Wohin ist erstmal egal.

Ich meine soetwas schonmal im Forum gelesen zu haben, finde es aber nicht mehr. Hat vielleicht jemand eine Idee wie dies Schaltung aussehen könnte?

sast

markusj
16.09.2010, 10:12
Du kannst sowas relativ einfach über eine Ladungspumpe machen - Ein Kondensator in Reihe zum Port lässt nur Strom fließen wenn dieser umgeschaltet wird. Die Dioden sorgen für "Stromnachschub", der zweite Kondensator glättet die gepumpte Spannung.

mfG
Markus

wkrug
16.09.2010, 10:13
Für so einen Fall haben die meisten Controller einen Watchdog Timer eingebaut.
Dieser Timer hat eine eigene Taktquelle und löst, wenn er nicht regelmässig resettet wird einen Reset aus, der den Controller neu bootet.

Problemen mit der Stromversorgung kann man mit der Controllerinternen Brown Out detection entgegentreten.

Dabei wird beim Unterschreiten einer bestimmten Versorgungsspannung ein Reset des Controllers ausgelöst.

Wenn die Funksignale regelmässig kommen, könntest Du den Watchdog in der Empfangsroutine des Controllers einbauen und ihn mit WDR nur resetten wenn ein gültiges Funksignal eingetroffen ist.

Ansonsten wird der Controller resettet.

Damit wäre dann eine Controllerhänger und ein Funkausfall gleichermassen abgedeckt.

Jakob L.
16.09.2010, 11:05
Der Watchdog hilft nur dann, wenn sich der Controller aufgrund eines temporären Fehlers (z.B. elektromagnetische Störung oder selten auftretender Fehler im Programm) aufhängt. Wenn der Controller jedoch aus irgendeinem Grund dauerhaft nicht mehr funktioniert (z.B. durch Erschütterungen defektes Quarz), dann hilft auch ein Watchdog nicht. Eine reine Hardwarelösung wie die von Markus vorgeschlagene Schaltung kann da die Sicherheit deutlich erhöhen.

sast
16.09.2010, 11:09
@markusj so etwas in der Art schwebt mir vor. Muss ich doch gleich mal aufbauen.

@wkrug ja watchdog ist mir bekannt, ich weiß nur nicht, ob der bei Spannungsunterschreitung noch funktioniert. Wenn das Brownout eine Unterspannung detektiert hat das Brushlessmodul möglicherweise immer noch genug Spannung da getrennte Versorgung. Was nützt mir ein Reset wenn danach trotzdem noch alles unterversorgt ist. Dann fährt der Controller nicht an und alles bleibt beim Alten.

Beim Ausfall der Funkstrecke gehe ich davon aus, dass es an der Entfernung bzw an Störungen liegt.
In meinem Problemfall gehts um undefinierte Zustände des Controllers durch verschiedenartige Einflüsse wie zB permanente Unterspannung, oder Aufhängen, oder was weiß ich noch. Ich kann das Gerät sonst nicht anhalten und irgendwann fährt es sonst gegen Konstruktionsteile in 300m Höhe.

Vielleicht bin ich auch zu fokusiert darauf, dass es Fehler gibt die die normalen Überwachungssachen des AVR nicht abdecken. Hab jetzt kein konkretes Scenario im Kopf was ich bis zum Ende durchdacht habe. Aber erfahrungsgemäß passiert immer genau das, was man vergessenhat zu berücksichtigen.

Danke ihr zwei für eure Infos

Edit: @Jakob L wie ich gerade gesehen habe bestätigst du meine Vermutung. Na dann werd ich mal den Lötkolben schwingen.
sast

markusj
16.09.2010, 11:59
Noch ein Nachtrag: Die o.g. Schaltung wurde von mir bisher nur simuliert, allerdings sehe ich momentan nichts was Probleme bereiten könnte.
Wenn der Eingang mit den besagten 10kHz versorgt wird, geht der Ausgang auf "High" und der Transistor wird durchgesteuert. Für deine Zwecke würde es vermutlich auch reichen wenn du anstelle der Transistorbasis direkt "ENABLE" anschließt.
Auf jeden Fall ist ein Ein Pulldown-Widerstand erforderlich, um das ganze auf einen definierten Pegel zu ziehen wenn kein Eingangstakt vorhanden ist.
Durch umdrehen der Dioden und anschließen an VCC statt GND lässt sich der Aktivpegel auch auf "Low" ändern.

Ich empfehle auf jeden Fall eine Simulation mit SwCAD oder ähnlichen Werkzeugen, dort können die Widerstände und Kondensatoren auf die erwartete Last und gewünschte Toggle-Frequenz hin optimiert werden.

mfG
Markus

sast
16.09.2010, 12:40
Danke nochmal an Markus

Der erste Test mit einem BC547C und einer LED am Collector bei 6kHz sieht gut aus.
Das mit dem Pulldown ist mir nicht klar, wo soll der hin?

Jetzt muss ich mir überlegen, was ich damit schalten will ;o)
Werde es im LTSpice noch etwas optimieren. Aber Praxistests sind durch nichts zu ersetzen.

sast

markusj
16.09.2010, 13:41
Hallo sast,

Transistoren sind stromgesteuert, da ist kein Pulldown/-up erforderlich - Wenn du aber den Eingang des Moduls direkt anschließen möchtest, wirst du einen Pulldown parallel zu C8 einbauen wollen und dafür R7 und T2 weglassen.

Aber: Der Transistor "zieht" den Pegel nur in eine Richtung, du brauchst bei einem npn-Transistor also einen Pullup als Gegenspieler.

mfG
Markus

wkrug
16.09.2010, 22:23
Wenn der Controller jedoch aus irgendeinem Grund dauerhaft nicht mehr funktioniert (z.B. durch Erschütterungen defektes Quarz), dann hilft auch ein Watchdog nicht
Soweit ich weiß wird der Watchdog von einem internen RC Generator gespeist.

Zum anderen kann man während des hochlaufens des Controllers bestimmte Bits abfragen, was denn nun einen Reset ausgelöst hatte und dementsprechnde Routinen anfahren.

Die Funkstrecke kann man über Prüfbits absichern z.B. mit CRC.
Im Ersten Schritt werden dann Funkframes verworfen, im zweiten Schritt alles still gelegt. Beim Modellflug nennt man das "Fail Safe".

Das der Controller bei zu niedriger Spannung nicht hochläuft ist natürlich klar.
Dann sind aber auch alle Ausgänge TRISTATE und Du kannst über geeignete Pull UP/Down Widerstände für eine Abschaltung der Peripherie sorgen.

KlaRaw
17.09.2010, 09:19
Hallo,
Watchdog Timer sind in jeden Fall die erste Wahl. Aber nur so lange sich der Mircocontroller nicht selber aufhängt oder was auch immer. Jedenfalls habe ich in einer ähnlichen Situation einen einfachen, unabhängigen Timer spendiert mit entsprechender Zeitkonstante. Der wird dann periodisch per Ansteuerung zurückgesetzt. Es ist eigentlich ein externer Watchdog.
Gruss Klaus.

Richard
17.09.2010, 12:35
Für ganz wichtige Aufgaben nimmt man eigentlich 3 µC die auch noch unterschiedlich programmiert sind, aber das gleiche zur selben Zeit machen. die werden dann mittels Vergleicher IC's gekoppelt. nach dem Mehrheit Prinzip wird im Fehlerfall der µC abgeschaltet der fehlerhaft arbeitet.

Gruß Richard