Sari la conținut
ELFORUM - Forumul electronistilor

implementare analog comparator pentru pauze scurte de curent


vlad2005

Postări Recomandate

Salut!

Lucrez la un proiect personal de realizare a unei automatizari pentru porti.

Deoarece pozitionarea motoarelor se face contorizand pulsurile trimise de senzorii Hall de pe fiecare motor, trebuie sa implementez o solutie de gestionarea pauzelor de curent care se produc cand motoarele funționează sau poarta este în poziție deschisă.

M-am oprit asupra optiunii Analog Comparator (folosesc atmega 328p).

Ideea originala este asa (nu discutam de partea electronica): se detecteaza pauza de curent si in implementarea ISR se salveaza in eeprom pozitia curenta a motoarelor. Dupa ce revine curentul, la reinitializarea uC-ului, acesta citeste din eeprom si dacă gaseste valori diferite de zero porneste procedura de readucere a motoarelor la pozitia inchis.

Toate bune si frumoase însă mă gândesc că pot avea și pauze foarte scurte de curent, adică situații în care uC salveaza în eeprom pozitia motoarelor, dar curentul revine înainte ca uC-ul să se închidă. Astfel el nu citește eeprom-ul și porțile rămân deschise. Mai rau, dacă sunt închise și se închide curentul va încerca la revenirea curentului să le închidă.

 

La ce soluție mă gândesc: după ce se salvează în eeprom, să setez în ACSR să declanșeze ISR-ul pe rissing edge (scuze că amestec româna cu engleza dar îmi vine mai ușor așa).

Mai exact: verific în ISR dacă este invocat pe FALLING sau RISING. Dacă e pe Falling, salvez în eeprom, motoarele trec pe stop și reconfigurez ASCR pentru Rising. Dacă pauza de curent e scurtă și uC nu s-a închis, la revenirea curentului, Analog Comparatorul fiind pe Rising va chema ISR-ul (din nou). Se comanda motoarele pentru a continua mișcarea inițială și fac clear la ce s-a salvat în eeprom (pentru că evident înainte de Rising a fost un Falling și s-a salvat în eeprom poziția motoarelor).

Dacă pauza este lungă și uC-ul restartează, la inițializare citește eeprom și tot restul descris mai înainte.

Deci comparatorul va fi setat tot timpul pe falling. Singura dată când va fi pe rising va fi într-un interval foarte scurt de timp dacă avem îndeplinite simultan condițiile: o pauză de curent și uC-ul nu s-a închis.Ce părere aveți de această soluție? E prea mult pentru ISR?

Alimentarea uC-ului pe durata pauzei va fi produsă de un condensator de 1000uF plus ceva condesatoare de filtraj de la alimentarea de 5V.

Editat de vlad2005
Link spre comentariu
  • Răspunsuri 51
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • vlad2005

    22

  • UDAR

    5

  • digix

    4

  • Liviu M

    3

Top autori în acest subiect

Pe de o parte nu inteleg de ce ramane fara curent. Sau ce inseamna pauza de curent

Pe de alta, nu inteleg de unde stie controllerul ca a fost pauza lunga sau scurta, ca sa reporneasca in stari diferite (cu si fara citire de EEPROM).

Link spre comentariu

Deci pauza de curent (m-am exprimat popular) înseamna lipsa de tensiune la rețeaua de alimentare a locuinței, de unde se alimentează și comanda porții (unitatea de comandă + motoare). Toată bătaia de cap este pentru că nu vreau să folosesc un UPS.

 

Microcontrolerul nu știe că a fost pauză lungă sau scurtă, el detectează mai întâi oprirea alimentării. Salvează în eeprom, schimbă modul de declanșare al intreruperii pentru analog comparator pe RISING și așteaptă. Dacă alimentarea revine înainte de a se închide microcontrolerul atunci avem RISING, se executa intreruptul și se continuă procedura existentă înaintea opririi alimentării deoarece parametrii nu s-au pierdut. Dacă alimentarea revine după ce uC-ul s-a închis, atunci râmâne salvat în eeprom poziția motorului, iar la rebotare citeste din eeprom acea pozitie ca să ”știe” cum să aduca motorul la pozitia închis.

Editat de vlad2005
Link spre comentariu

Un mic acumulator care sa tina atmega328 in viata la o pana scurta/lunga. Prezenta/lipsa retelei monitorizata ca intrerupere si tratata ca atare.

Este o solutie mult mai sigura, poti avea o rafala de intreruperi scurte de curent pe care cei 1000uF nu le pot sustine.

 

O celula li-ion 18650 (daca mergi cu atmega328 la 3V) ar trebui sa fie suficienta.

Editat de digix
Link spre comentariu

Întreruperile în rafală pot complica într-adevăr problema. Dar întreruperile în rafală de durată foarte scurtă sunt foarte rare, cel puțin eu nu am trecut prin așa ceva. În plus folosesc atmega328 la 5V. Când e pe baterie ar trebui să implementez un deep sleep, ceea ce una peste alta nu mă conduce la mari avantaje nici ca simplificare a aplicației, nici pe parte de implementare electronică.

Încerc să rezolv problema fără baterii.

Link spre comentariu

E suficient sa "uite" odata poarta deschisa si compromiti toata munca ta.

 

Eu as folosi ambele intreruperi ale lui atmega328 una care sa detecteze disparitia retelei si cealalta aparitia.

Dupa salvarea pozitiei il poti trece in SLEEP_MODE_PWR_DOWN : 0.36mA din care il scoate o noua aparitie de intrerupere.

In acest mod economisesti energia din condensator in caz de intrerupere in rafala.

 

In functie de timpul scurs intre aparitia lor poti lua o decizie corecta, pe langa faza cu salvarea pozitiei motoarelor ar trebui sa

te gandesti ca la reaparitia retelei n-ar trebui sa actionezi imediat motoarele, poate pica iar reteaua...

 

Am inteles ca nu vrei baterii dar tot ai nevoie de putina autonomie in alimentare, poate te ajuta un supercondensator dar trebuie

precautie la incarcarea lui.

 

Uite aici un model de 1F / 5.5V

 

http://www.tme.eu/ro/details/buc-1f/supercondensatoare/panasonic/eecf5r5u105/

Editat de digix
Link spre comentariu

Nu pot folosi ambele intreruperi externe deoarece una este alocata receptorului radio pentru care folosesc o librarie (RCSwitch) care merge numai cu intrerupt extern.

Nu asta ar fi problema, nu ma deranjeaza sa folosesc analog comparatorul si sa verific in ISR ce am (Falling sau Rising) si în functie de situatie sa procedez cum trebuie. Nu ia mult timp o conditie in plus.

Nu ma intereseaza sa economisesc prea mult energie deoarece nu are logica. Să economisesc pentru ce? Este suficient sa scrie în eeprom. Îmi este indiferent dacă se închide sau nu microcontrolerul. Important este sa am o situatie clara in logica aplicatiei la revenirea curentului. Oricum, mergând la absurd, se poate întâmpla orice dacă se potrivesc factorii nefavorabili.

Problema am ridicat-o pentru ca la mine s-a mai întâmplat să am fluctuație rapidă de tensiune care determina declansarea releului de la UPS (așa îmi dădeam seama că a existat). Nu mai stiu exact daca la unele se închidea complet curentul (era zi, nu aveam becuri aprinse), sau era doar o cădere de tensiune fără oprirea completă.

Link spre comentariu

Si pe mine ma batea gandul la folosirea unor senzori Hall pentru citirea pozitiei portilor, dar am renuntat pentru moment. Deocamdata folosesc limitatoare mecanice si nu au nici o problema. Toata instalatia este facuta la 12V tocmai pentru a evita astfel de probleme. In caz de descarcare a bateriei, se pot inchide manual fara nici o problema.

Din punctul meu de vedere, te complici prea mult.

Link spre comentariu

Eu am acum portile functionale cu o punte cu relee. Dar e un frankestein acolo de fire pe o placuta breadbord pentru lipit. Vreau sa fac acuma pe mosfeti si vreau sa o fac pe un pcb ca sa fie mai ok partea electrică și vizuală. Daca tot fac pcb mai adaug niste chestii, care într-adevăr complică un pic, dar dacă e bal ..... :).

Spre exemplu eu am implementată o soluție de recover la o pauză de alimentare, am gasit pe internet solutia, citesc ADCL si ADCH. Ce nu îmi place este că citesc în main, si nu mi se pare eficient mai ales ca in main este asteptat si semnalul de la comanda radio. De aceea vreau sa implementez solutie cu intrerupt.

Link spre comentariu

https://lh3.googleusercontent.com/qCmn4CoGU_YjIvPM2JTRtAJC82ADoiqMTTMA_kCSiycsN8xtoDteb4WEVIeR7NuFgW4LCS6OtsuuJ77ChpItXRe0nqjsqKm0RYmq3n04nSN6jx9dzboJdCH7MBrTLO-g3FnzPKvtuqqSBkqz_7fMut3zexmRqXUVX-cetuANSZ7BoMZ2TTbQNQyJZH5v5Mr6haIIud9tzGMZLDZiVpJR4VnR1kE2Hl-RMxCHxs8Aj7n4LB8qrHFWGNAoghYSkw2GXpMLTTJkY9qNrDNtH8RsJOBlzh8bwNAKxU7lMDr8HVadWvIxOehFrRAFDBrEm6dpQLcFTdkWS2EXDFFnML1kNTvbBOyIVtnX8GFlL6uLmhRYOSJCyQj8yx1a92taUpvjhewfKhWg0bPYxNfXrde4d4NC9Ks9hLZhBsfj51P5-ITH0_1Vwv3YgQp7vHdquPamJKctzLyYY7vaQZFC-24mn7YjzXJ5T9w_flwTeTeZy3_LYDenS1eVm_LJJlmQE5G7a1li8P-tvU34NaZQOox78q5kKn-0t7fZGfJNhjmpBfDE9Z_9Ln8ucg1rvLexpiXPQ09ccswC=s1366-w1366-h768-rw-no

 

https://lh3.googleusercontent.com/CqcqxVbwAhvHzNkakIDBzT2BAR8-HFncuIZgGWquOR0UdOt8HmdfcpNOric0_oY6y5QD3O0uRLhg9zXq-6eYxIcM7ticpZ69KcJrORr7BYRPMWudicA_PDZbZeYSa3WmosRkxb9kS4yzc9zCoftAjuNch386v_MMbMWTf8yB799eZuFwnDlzJVz6dzHEr6UemgLpMloTL_kFkXzDIuNnb1-vw2lxYvkGPLSk1VDE9tY_ip5uPNa2R8WNPMS-LRS0SdwKvrWYMKIF7TiknuRrHRyaEfaNdqteHxK3Ra8NPjobm9h_pcwYlc9Zui5dzB_JclIpy48gnhbfNiS-LKS2iwgxN5A5wRcc6UUmrst13Wvpbt-e35Fnw1jH6nC-I_jm18jdEUxVtRAmuL9IlApNvqNBCvrHKXAWdnnouEy6fr96KlFXpdPRL6lfcfz9xHhaoC7XV5UDgkkp3jPJUulpeLCA1yBBUw9Zxbc9zzw230fpw3PWpTo9BkwwaK0uQkEorAHRNJUthRtLxCuAJWSU-FOj3WhyxBLbl2tVwnCelkwcGLMDEMgnl7OgOErDqjEE9NfdQXVI=s1366-w1366-h768-rw-no

 

Chiar daca e un "frankenstein" functioneaza fara probleme. In primavara, este posibil sa il modific pentru a lega niste senzori de distanta. Momentan nu am chef sa stau in frig. Singura problema ar fi cu panoul solar care vad ca nu isi face treaba cum trebuie pe timpul asta.

Link spre comentariu

Nu pot sa vad ce ai postat, nu am acces.Și la mine funcționează ”frankenstein-ul”, dar suspectez niște contacte imperfecte la firele care vin de la senzorii Hall pentru ca dupa un timp porțile nu se mai inchid exact în aceeași poziție. În plus am o problemă pentru ca fiecare motor da peste 300 de pulsuri pe secunda, deci 600 în total. Contorizarea o fac intr-un ISR (pentru PIN CHANGE INTERRUPT) unde sunt obligat sa verific niste conditii ceea ce nu este ideal. În plus semnalele vin aleatoriu de la motoare, deci este posibil sa se mai suprapuna și automat mai scapă din ele. Nici nu știu cum aș putea să gestionez acest aspect, dar acesta este alt subiect. Eventual încă un microcontroler, să contorizeze independent fiecare motor, dar se complică multe. Limit switch nu prea am cum să folosesc la actuatoare (motive estetice și practice), deci ....., nu prea am idei.

Oricum pentru un DIY este absolut ok. Next step este să folosesc punte cu mosfeti, montaj pe pcb mai solid, implementare analog comparator și să folosesc un smith inverter ca să elimin eventualele probleme de histerezis pe semnalul de la senzorii Hall. Apoi mai vad eu.

Link spre comentariu

Nu înțeleg la ce mi-ar folosi un modul RTC. Banuiesc ca te referi aici la modul Real Time Clock.

Ce sa fac cu el? Nu îmi dau seama.

Daca vreau sa folosesc durata pentru a controla timpul de deschidere, as folosi direct millis() din arduino sau timere daca vreau mai direct. Dar utilizarea duratei creeaza o alta problema. Daca spre exemplu, într-un context oarecare (sa spunem ca bate vantul), portile se misca mai greoi. Este logic ca vor avea viteza un pic mai mica, dar durata de deschidere fiind acceasi va avea ca efect o inchidere într-o alta pozitie decat cea dorita.

Portile mele au foaie de policarbonat iar rezistenta devine semnificativa la vant puternic.

Link spre comentariu

Nu înțeleg la ce mi-ar folosi un modul RTC. Banuiesc ca te referi aici la modul Real Time Clock.

.....

Probabil a vrut sa scrie supravegherea uC cu circuit tip "watchdog" si supraveghere alimentare din seria MAX......

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări