OvidiuDorin Posted April 5, 2019 Share Posted April 5, 2019 Salutare dragi electronisti. Doresc sa realizez un modul de comanda pentru disiparea energie electrice (energie in plus fata de energia consumata in locuinta) generata de invertorul ON-GRID, dar nu reusesc sa realizez programul. Rolul acestui modul este de a impiedica injectia de energie electrica, catre reteaua nationala, prin redirectionarea acesteia catre un consumator, in acest caz un rezistor. Detectarea sensului energiei electrice, se face cu un traductor optic montat pe un contor , contorul isi schimba sensul de rotatie atunci cand energia este injectata catre retea. Aici intervine modulul, acesta trebuie sa sesizeze sensul de rotatie si sa genereze la iesire un semnal dreptunghiular de frecventa fixa, (semnalul sa fie activ doar cand contorul se invarte intr-o directie, pentru a nu conecta consumatorul cand energia este preluata din reateaua nationala), dar sa se modifice factorul de umplere (la iesirea semnalului=>intrarea in mosfet) in functie de turatia contorului, turatie mai mare -> factor de umplere mai mare. Contorul se roteste mult mai repede decat unul obijnuit, deoarece am anulat magnetii, prin aceasta am o precizie de citire mai buna a energie electrice (la 2KW am in jur de 3 rotatii pe secunda). Rezistorul R2 disipa energia. Vă mulțumesc! Link to comment
mihaicozac Posted April 5, 2019 Share Posted April 5, 2019 Treaba asta se realizează în mod normal cu un transformator de curent cu 2 primare şi un secundar. Sistemul reglează în aşa fel încât suma curenţilor prin transformator să fie cât mi aproape de zero. Eu am realizat un detector de sens de rotaţie pt. encoder cu ATTiny13 care înlocuieşte 2 butoane separate UP şi DOWN. Poţi folosi schiţa asta ca punct de plecare. Impulsurile de pe ieşiri sunt mai dese dacă rotaţia este mai rapidă deci le poţi folosi pt. modularea sarcinii. Rotary_Encoder.rar Link to comment
Liviu M Posted April 7, 2019 Share Posted April 7, 2019 @generalulelectronistesti sigur c-ai legat bine optocuplorul? Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 mihaicozac - multumesc pentru program, dar nu am reusit sa il fac sa functioneze. Cum ai realiza transformatorul ? Poti da mai multe detalii? Liviu M - ai dreptate, trebuia legat invers. Link to comment
mihaicozac Posted April 7, 2019 Share Posted April 7, 2019 Eu am folosit un encoder chinezesc montat pe plăcuţă, cu rezistenţe gata conectat spre alimentare pe ea. Iar pinoutul este pt. ATTiny13, trebuie să modifici pinii pt. Nano. Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 Am modificat pinii, nu functioneaza. Link to comment
mihaicozac Posted April 7, 2019 Share Posted April 7, 2019 Mie îmi merge... Intrările sunt inversate faţă de normal, în sensul că atunci când encodeul se învârte ele sunt trase la masă şi stau în 1 logic în repaus. Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 Am reusit sa il fac sa mearga, acum, cum pot modifica in cod, sa am o frecventa fixa pe iesire de aproximativ 20KHz, si sa varieze doar factorul de umplere. Link to comment
mihaicozac Posted April 7, 2019 Share Posted April 7, 2019 (edited) În prima fază poţi încerca aşa să legi la ieşire direct comanda sarcinii. Dacă discul se învârte mai repede şi impulsurile vor fi mai dese iar sarcina va consuma mai mult, în final se ajunge la stabilizare. Dacă nu e suficient aşa cum e poţi crea o variabilă "counter" care la fiecare impuls de intrare să fie iniţializată cu o valoare oarecare care apoi să fie numărată spre zero, astfel se lăţeşte impulsul de ieşire: deci în loop în loc de : if (!last && actual != last) { if(!digitalRead(4)) digitalWrite(0, HIGH); else digitalWrite(1, HIGH); } scrii if (!last && actual != last) { if (digitalRead(4) counter = 10; } counter--; counter = min (counter, 0); if (counter > 0) digitalWrite(pinIesire, HIGH); else digitalWrite(pinIesire, LOW); apoi jonglezi cu valoarea iniţială counter în aşa fel încât la turaţia maximă să nu mai ai impulsuri la ieşire ci un nivel logic 1 permanent. Ar mai trebui un lucru, ca impulsurile să fie cumva sincronizate cu reţeaua, dar asta e mai dificil de realizat. Edited April 7, 2019 by mihaicozac Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 Am urmatoarea eroare Link to comment
iop95 Posted April 7, 2019 Share Posted April 7, 2019 Care e logica acestei cerinte?! Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 Daca incerci sa injectezi energie in retea, contorul o va contoriza ca si cum ai consuma. Exemplu ,daca produc 1,5kw din panouri si consum 1kw, 500w ajunge in retea, 1-nu este legal pentru ca nu sunt prosumator, 2- daca injectez acesti 500w, contorul o va inregistra ca si consum. Vreau sa disip acest surplus de energie in rezistori. Link to comment
mihaicozac Posted April 7, 2019 Share Posted April 7, 2019 Poate are ceva compilatorul... încearcă şi cu acolade la if... else, deşi dacă e vorba de o singură linie n-ar fi necesar Link to comment
OvidiuDorin Posted April 7, 2019 Author Share Posted April 7, 2019 Am incercat diferite variante cu acolade, counter trebuie declarat? Link to comment
mihaicozac Posted April 7, 2019 Share Posted April 7, 2019 ba da, chiar la început int counter = 0: Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now