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