Forum: Mikrocontroller und Digitale Elektronik Ermitteln eines Spannungseinbruches dsPIC30F6011A


von Johannes (Gast)


Lesenswert?

Hi,
ich habe mir ein Board mit einem dsPIC30F6011A erstellt. Dies 
Funktioniert auch ganz gut. Leider kann es dazu kommen, dass die 
Spannungsversorgung unter bestimmten Umständen (an denen ich keinen 
Einfluss habe) einbricht (nur sehr kurz, aber lang genug) und somti der 
Kontroller resettet.
Ist es irgenwie möglich, die Anzahl der Spannungseinbrüche (also wo der 
Mikrocontroller aus und wieder an geht) zu zählen und den Wert zu 
behalten? (Also den Wert behalten, obwohl der Kontroller aus war) Oder 
besser noch, ist es möglicht, dass ich bevor der Kontroller aus ist noch 
eine CAN-Botschaft rausschicken kann? (Also CAN an sich funktioniert)
zweiteres möglichkeit fände ich besser und wäre bestimmt durch einen 
Kondensator möglich, wobei ich aber nicht wüsste, wie der Kontroller 
unterscheiden kann, ob die Spannung von der Versorgungsspannung oder vom 
Transistor her kommt.
Spannungsversorgung (12V DC) -> Spannungsregler(7805) -> Kondensator -> 
Mikrocontroller
Also am Spannungsregler sind davor und dahinter Kondensatoren.

Johannes

von Guest (Gast)


Lesenswert?

Sehr kurz sollte sich mit einem Kondensator überbrücken lassen und wenn 
Du die 12Volt über einen Spannungsteiler an einen Eingangspin führst 
kannst Du die Aussetzer zählen.

von Frank K. (fchk)


Lesenswert?

Der 7805 hat eine Dropout-Spannung von 2V. Wenn Du einen Spannungsregler 
mit einer niedrigeren Dropout-Spannung von zB 0.5V nimmst, darf die 
Eingangsspannung um 1.5V tiefer abfallen, bevor es zu einem Ausfall 
kommt.

Dann kannst Du zur Überbrückung einen Kondensator mit beispielsweise 
22000uF/16V hinter den Spannungregler schalten. Damit solltest Du schon 
einige Zeit überbrücken können.

fchk

von Johannes (Gast)


Lesenswert?

Ja, einen Kondensator habe ich schon eingebaut. Damit funktioniert das 
auch. Mit dem Spannungsteiler von den 12V auf einem Interrupt-Pin hatte 
ich auch schon überlegt. Allerdings würde ich dann nicht erkennen, ob 
der µC wirklich ausgegangen ist, oder dieser durch den Kondensator doch 
noch verhindert wurde.
Möglich wäre, es durch einen reset-aufruf in der Interrupt-Routine, 
sodass dieser auf jeden fall zurückgesetzt wird.

Jetzt habe ich die Brown-out-Reset Funktion gefunden und probiere dies.
Dabei versuche ich irgendwie beim Einschalten herauszufinden, ob der µC 
durch den BOR zurückgesetzt worden ist und kann daraufhin eine Nachricht 
herausschicken.
Dabei ist mir noch unklar, woarn erkannt wird, ob es nur ein 
Spannungseinbruch war oder die Spannung abgeschaltet wurde.

von Michael K. (Gast)


Lesenswert?

Johannes schrieb:
> Dabei ist mir noch unklar, woarn erkannt wird, ob es nur ein
> Spannungseinbruch war oder die Spannung abgeschaltet wurde.

Garnicht, ist das gleiche für den BOR.
BOR sollte immer aktiviert sein damit die MCU nicht in einen Zustand 
kommt in dem die Spannung zum sicheren Betrieb nicht mehr ausreicht, um 
irgendwas zu tun, aber schon.

Diode + Elko um die VCC zu Puffern.
Diode weil sonst der Kondensator auch rückwärts die Quelle speist und 
damit fast unwirksam wird.
Nun hast Du eine riesen Zeitkonstante in der der PIC weiterläuft auch 
wenn die Spannung einbricht.
Alles was zum BOR führt ist dann kein glitch mehr.

Wozu Du die kurzen Spannungseinbrüche messen willst ist mir zwar unklar, 
aber Spannungsteiler (vor der Diode) + IRQ bei fallender Flanke ist ja 
nun nicht so das Ding.

Den Reset Grund (Watchdog, BOR etc.) kannst Du aus einem der vielen 
Register auslesen. Datenblatt durchforsten.

von WehOhWeh (Gast)


Lesenswert?

Ich könnte mir das vorstellen:
Man hat ja Startupcode und EEPROM-Emulation. Beim Hochlauf liest man 
einen Wert aus, zählt ihn hoch und schreibt ihn ins EEPROM zurück.

Es gibt glaube ich sogar ein eigenes FLAG, das den BOR anzeigt. Das 
könnte man noch separat auslesen.
Jeder Hochlauf ist aber automatisch auch ein Brown-Out, das kann nicht 
unterschieden werden.

Problem:
Flash Löschzyklen. Das dürften z.B. 10000 sein.

Zum Kondensator:
Der Kondensator muss VOR den Spannungsregler hin. Denn Q=C*U und U ist 
der Betrag, um den die Spannung einbrechen darf. Das ist VOR dem 7805 um 
die 5V, dahinter recht wenig.

Zu beachten wäre, dass der Kondensator vom 12V-Netz durch eine Diode 
getrennt werden muss, sonst saufen dir andere Verbraucher deinen 
Kondensator aus.

von Johannes (Gast)


Lesenswert?

Ah,
das mit dem Kondensator habe ich schon geändert.
Wieso ich das ganze machen möchte? Es gibt mehrere Boards, mit denen 
über CAN kommuniziert wird. Ab einem bestimmten Zustand wird 
Leistungselektronik eingeschaltet. Dies ist/war der Zeitpunkt wo sich 
mein Kontroller resettet hat. Wenn es zu diesem Vorfall gekommen wäre, 
hätte ich gerne eine Nachricht an den anderen Boards gesendet, dass mein 
Kontroller den Zustand verlassen hat und die nicht weiter arbeiten 
müssen. Andersrum, wäre es genau so doof, wenn mein kontroller es dohc 
noch geschafft hätte, ich den anderen aber mitgeteilt hätte, dass sich 
mein board resettet hat, die daruafhin ihren Zustand verlassen und ich 
mit der LEistungselektronik Leistung erstelle.

Jetzt versuche ich es mit dem EEPROM. Dazu möchte ich vor dem 
Einschalten ein Bit mit HIGH beschreiben und beim ende wieder auf LOW. 
Dieses Bit würde ich am Anfang vom Code immer überprüfen.

von Michael K. (Gast)


Lesenswert?

Du willst von einer unsicheren Komponente aus senden das die unsichere 
Komponente ausgefallen ist ?
Dann mußt Du mit dem Ableben aber auch warten bis die CAN Nachricht 
sicher übertragen wurde.
Die ist ja nicht angekommen nur weil Du sie an den Controller 
losgeworden bist.

Quatsch mit Soße !
Jeder Busteilnehmer muß selber mitbekommen das irgendein Ereigniss 
eingetreten ist das er mit wesentlichen Komponenten nicht mehr reden 
kann.

Das macht man z.B. mit 'keep alive' Nachrichten oder ähnlichen 
Mechanismen.

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