Brown Out Reset este o funcție importantă pentru creșterea fiabilității unui microcontroler după pornire. Folosit în mod normal pentru rezolvarea problemelor cu sursa de alimentare, acest articol arată cum Brown Out Reset poate preveni o altă problemă.

Revizuirea Brown Out Reset

O „oprire” a unui microcontroler reprezintă o reducere parțială și temporară a tensiunii de alimentare sub nivelul necesar pentru o funcționare fiabilă. Multe microcontrolere au un circuit de protecție care detectează când tensiunea de alimentare scade sub acest nivel și pune dispozitivul într-o stare de resetare pentru a asigura pornirea corectă la revenirea puterii. Această acțiune se numește „Brown Out Reset” sau BOR. O caracteristică similară se numește Low Voltage Detect (LVD), care este mai complexă și adaugă detectarea nivelurilor multiple de tensiune și poate produce o întrerupere înainte de declanșarea resetării.

BOR este adesea activat de un pic într-un registru de control. De obicei, un bit de stare este setat atunci când BOR provoacă o resetare. Acest bit de stare supraviețuiește resetării (dacă puterea nu scade prea mult!) Și permite programului să detecteze problema și să efectueze recuperări suplimentare sau să înregistreze evenimentul.

Ce se întâmplă dacă BOR este dezactivat? Iată o descriere a tensiunii de alimentare cu scădere constantă. Poate că aceasta este o sursă de alimentare deteriorată sau o baterie care se descarcă.

microcontrolere

V1 este tensiunea normală de alimentare. V2 este punctul în care este posibil ca microcontrolerul să nu funcționeze în mod fiabil. Arăt V3 ca un punct în care operația se oprește complet. Între V2 și V3 este o „zonă de pericol” în care lucrurile pot merge prost și funcționarea este nesigură. Dispozitivul ar putea funcționa corect ani de zile, în timp ce sursa de alimentare intră și iese din zona de pericol și apoi, bam!, Există o defecțiune. Nivelul BOR este setat peste V2 și înlocuiește zona de pericol cu ​​o resetare a dispozitivului. Resetarea nu este bună, dar (de obicei) mai bună decât incertă.

Apoi, relatez o situație în care sursa de alimentare a funcționat normal, dar BOR a fost folosit pentru a rezolva o altă problemă.

Găsirea unei alte utilizări pentru resetarea Brown Out (The Hard Way)

Am proiectat un circuit care conține un microcontroler PIC și 18 regulatoare de tensiune într-un modul care controlează + 5V putere la 18 senzori de lumină. Douăsprezece module au controlat cei 204 de senzori dintr-o matrice. Modulele fac parte dintr-un sistem de optică adaptivă la un telescop astronomic mare de pe Mauna Kea din Hawaii. Iată interiorul unui modul.

Fotografii oferite de Telescopul Subaru

Microcontrolerul este aproape de centrul plăcii, iar cele 18 regulatoare de tensiune liniare sunt montate pe pereții incintei. Modulele și senzorii sunt montați pe plăci răcite cu apă pentru a îndepărta căldura de banca optică care se află deasupra gamei de senzori. Impulsurile de la senzorii de lumină intră în modul unde sunt convertite în semnale diferențiale, RS-485 și ieșite pe conectorul din mijlocul superior al imaginii. În plus, există semnale de control RS-485 care intră în modul. Toate semnalele RS-485 se conectează la circuite dintr-un șasiu la aproximativ 10 metri distanță. Un punct important este că toate circuitele dintr-un modul rulează pe aceeași sursă de + 5V.


Iată un detaliu al microcontrolerului și al driverelor și receptoarelor de linie RS-485, care sunt esențiale pentru problemă. Mufa neagră modulară este o interfață serială asincronă care adaugă încă două semnale RS-485 I/O.

Modulele au trecut prin teste extinse pe bancă. Fără probleme! Au trecut luni de teste de sistem în laborator. Perfect! Marele eveniment a fost primul test la telescop. Nu reușesc! Comunicarea a fost pierdută la aproximativ jumătate din module atunci când alimentarea a fost oprită și repornită. Am conectat debuggerul și am găsit microcontrolerul rulând și executând codul, dar au existat variabile corupte, iar interfața serială nu funcționa. Foarte ciudat.

În primul rând, vreau să spun că depanarea în mijlocul nopții la o altitudine de 4.138 metri (13.589 picioare) cu o temperatură a aerului de 4 ° C (40 ° F) nu este distractivă. Cu toate acestea, să mergem mai departe. Iată o diagramă care arată problema.

În partea dreaptă este modulul cu receptoare de linie RS-485 conectate la microcontroler și alimentarea + 5V. În partea stângă sunt driverele de linie de la celălalt capăt al cablului, care sunt întotdeauna pornite. De fapt, există șoferi și receptoare care merg în ambele direcții, dar simplific. Când alimentarea modulului (VCC) a fost oprită, driverele și receptoarele de linie la distanță erau încă pornite (VDD). Semnalele au acționat ca surse de alimentare și și-au găsit drumul prin dispozitivele de interfață ale modulului și direct către puterea + 5V sau prin circuitele de protecție ESD de pe pinii microcontrolerului. Era suficientă putere pentru a împiedica oprirea completă a microcontrolerului și dispozitivul se afla în zona de pericol.

Când modulul de alimentare a fost pornit, microcontrolerul nu a pornit cu o secvență normală de resetare a pornirii. A început să ruleze, dar cu probleme. De ce nu a apărut acest lucru în timpul testelor anterioare? Vă amintiți plăcile răcite cu apă? Lichidul de răcire de la telescop a fost destul de puțin mai rece decât lichidul de răcire din laborator. Teoria mea este că temperatura scăzută a fost suficientă pentru a expune problema în unele module.

Remedierea a fost ușoară. Am adăugat o declarație în cod pentru a activa BOR și problema a fost rezolvată. Apropo, mi-a luat mult mai mult să scriu raportul și să-l conving pe managerul de proiect că totul a fost în regulă decât a fost nevoie pentru a remedia problema.

False Power-Down

Iată o diagramă care prezintă problema generală.

Când sursa de alimentare este oprită, tensiunea nu scade până la capăt. În schimb, alte surse de alimentare mențin tensiunea de alimentare în zona de pericol. O descriere a acestei tensiuni este „False Power”. Nu există BOR pentru a detecta această condiție și pentru a provoca o resetare. Este posibil ca dispozitivul să nu treacă prin secvența normală de pornire când este pornită din nou, deoarece este posibil ca circuitele de resetare la pornire să nu fie declanșate. Funcționarea ulterioară este incertă, deoarece sursa de alimentare a coborât sub minim și nu există resetare.

În cazul meu, microcontrolerul era un Microchip PIC16F877-20I/L. Această parte este versiunea industrială cu un interval de temperatură de funcționare de la -40 ° C la + 85 ° C. Cu un ceas de 16 MHz, gama de alimentare este de + 4,0 V până la + 5,5 V. Tensiunea de funcționare din interiorul modulului (V1) a fost o rocă solidă + 5V. Tensiunea de falsă putere la microcontroler (V2) a fost de aproximativ + 1,5 V când funcționa la telescop. Nu l-am măsurat în laborator pentru că nu a existat nicio problemă și nu am știut să îl verific. Mai mult decât atât, nu am avut niciodată șansa să o verific cu condițiile de laborator, deoarece sistemul nu a coborât niciodată din telescop.

Există alte două specificații relevante. „Tensiunea de reținere a datelor RAM” (\ [V_ \]) este de + 1,5 V, „tipic”. „Tensiunea de pornire VDD” (\ [V_ \]) pentru a asigura o resetare internă la pornire este 0V, „tipic”. Împăturind toate acestea îmi spune că dispozitivul se afla bine în zona de pericol. Nu s-ar putea aștepta nicio resetare la pornire, deoarece tensiunea a fost cu mult peste \ [V_ \]. De asemenea, nu exista nicio așteptare ca False Power să mențină dispozitivul în viață, deoarece False Power se afla la tensiunea de reținere a RAM (\ [V_ \]). Cine știe ce făcea restul dispozitivului?

De ce pornirea BOR a remediat problema? Specificația declanșatorului Brown Out Reset (\ [V_ \]) este un interval de la + 3,7 V la + 4,35 V cu tipic de + 4,0 V. Nivelul de putere falsă este cu mult sub tensiunea de declanșare pentru BOR. Problema rezolvata. Cu toate acestea, există încă misterul de ce microcontrolerele au funcționat în laborator și au funcționat normal cu multe, multe cicluri de alimentare.

Concluzie

Am găsit o descriere a acestei situații la sfârșitul unei note de aplicație Microchip (AN607) care o numește „False Power-Down”. Nu l-am găsit documentat nicăieri altundeva.

Puterea falsă poate proveni din surse precum:

  • Semnalele externe (cazul meu)
  • Mai multe surse de alimentare într-un circuit
  • Condensatorii au nevoie de timp pentru a descărca complet

Se pare că o sursă de alimentare falsă suficient de mare aplicată direct pe un pin GPIO și care intră în dispozitiv prin circuitul de protecție ESD ar putea cauza probleme, chiar și atunci când BOR este activat. De asemenea, pentru modelele cu putere foarte mică, există un motiv pentru care nu se folosește deloc BOR, deoarece consumă o cantitate semnificativă de energie în comparație cu modurile de somn profund ale unor dispozitive. Concluzia mea este BOR și succesorul său, LVD, devine din ce în ce mai complicat, iar False Power le oferă designerilor încă un lucru de luat în considerare în această parte dificilă a proiectelor lor.