OvidiuDorin Postat Aprilie 5, 2019 Partajează Postat Aprilie 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 spre comentariu
mihaicozac Postat Aprilie 5, 2019 Partajează Postat Aprilie 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 spre comentariu
Liviu M Postat Aprilie 7, 2019 Partajează Postat Aprilie 7, 2019 @generalulelectronistesti sigur c-ai legat bine optocuplorul? Link spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 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 spre comentariu
mihaicozac Postat Aprilie 7, 2019 Partajează Postat Aprilie 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 spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 7, 2019 Am modificat pinii, nu functioneaza. Link spre comentariu
mihaicozac Postat Aprilie 7, 2019 Partajează Postat Aprilie 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 spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 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 spre comentariu
mihaicozac Postat Aprilie 7, 2019 Partajează Postat Aprilie 7, 2019 (editat) Î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. Editat Aprilie 7, 2019 de mihaicozac Link spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 7, 2019 Am urmatoarea eroare Link spre comentariu
iop95 Postat Aprilie 7, 2019 Partajează Postat Aprilie 7, 2019 Care e logica acestei cerinte?! Link spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 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 spre comentariu
mihaicozac Postat Aprilie 7, 2019 Partajează Postat Aprilie 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 spre comentariu
OvidiuDorin Postat Aprilie 7, 2019 Autor Partajează Postat Aprilie 7, 2019 Am incercat diferite variante cu acolade, counter trebuie declarat? Link spre comentariu
mihaicozac Postat Aprilie 7, 2019 Partajează Postat Aprilie 7, 2019 ba da, chiar la început int counter = 0: Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum