rlodina Postat Septembrie 28, 2016 Partajează Postat Septembrie 28, 2016 (editat) Buna. Pentru un mic proiect am de facut o dimare (independenta) la 10 becuri - controlata de Arduino. Dupa un pic de research - s-a conturat urmatoarea schema : o rectificare: folosesc BT 137-600E si MOC3051M Logica de dimare este urmatoarea: - detectez trecerea prin zero a tensiunii retelei printr-o intrerupere - in rutina de intrerupere deschid triacul cu o temporizare (α - din desenul de mai jos) => dimare (http://www.pcbheaven.com/wikipages/Dimmer_Theory/) Problema-i ca pe output nu am decat max ~30% - chiar daca α = 0 Ce nu inteleg de ce codul: //Arduino NANO#define IN_A 5void setup(){ pinMode(IN_A, OUTPUT); attachInterrupt(0 /* PIN 2 */, onZeroCross, RISING); }void onZeroCross() { digitalWrite(IN_A, HIGH); delayMicroseconds(10); // wait for triac digitalWrite(IN_A, LOW); }void loop() {} Genereaza pe canalul IN_A - cate 2 sau 3 HI | LO (vezi zoom-urile din imaginea de mai jos). Ar trebui sa fie doar un HIGH urmat de un LOW. Nu ? Canalul Zero_cross = PIN 2 Canalul IN_A = PIN 5 Orice idee sau comentariu (chiar si o alta schema/abordare) este binevenit. Multumesc Radu Editat Septembrie 28, 2016 de rlodina Link spre comentariu
sesebe Postat Septembrie 28, 2016 Partajează Postat Septembrie 28, 2016 (editat) Dar un osciloscop ai pus sa masori si sa vezi ce se intimpla pe acolo? Nu gasesc date despre optocuplorul de detectie dar esti sigur ca ai ce te astepti sa ai la iesire? edit: screenshootul este dintr-un osciloscop pe usb? sau este un simulator? Editat Septembrie 28, 2016 de sesebe Link spre comentariu
rlodina Postat Septembrie 28, 2016 Autor Partajează Postat Septembrie 28, 2016 (editat) @sesebe: Dar un osciloscop ai pus sa masori si sa vezi ce se intimpla pe acolo? - nu-mi este acasa Nu gasesc date despre optocuplorul de detectie - HAA1X : http://www.tme.eu/ro/Document/9d740051576413a595b2de55776108d8/H11AAx-I.pdf dar esti sigur ca ai ce te astepti sa ai la iesire? - apoi ... acum nu mai sunt sigur de nimic screenshootul este dintr-un osciloscop pe usb? sau este un simulator? - analizor logic: (un canal este pus pe ZERO_CROSS si unul pe IN_A) Editat Septembrie 28, 2016 de rlodina Link spre comentariu
mars01 Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 Posibil ringing pe Zero Cross pe rising edge cand atinge palierul High. Incearca sa pui un condensator de cca 10nF la ground din Zero Cross ca sa actioneze cu rezistorul de pull up ca un FTJ. Link spre comentariu
Vizitator Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 (editat) nu prea e ok sa folosesti delay-uri in intreruperi. posibil de-asta sa faca re-trigering. pune in intrerupere un flag volatil (pentru ca il accesezi si din loop) si muta procedura de comanda in loop. ai ~30% pentru ca ai un impuls de ~14uS acum... a = ~0 , dar dureaza prea putin. ca sa fie cat mai aproape de zero, trebuie renuntat la digitalWrite(); pentru ca ai o latenta de 3+2 = 5uS; nu ar fi foarte semnificativ dar ... dupa schema, nu ar fi FALLING la intrerupere ? cred ca ar trebuii in in setup, sa activezi pull-up void setup(){ pinMode(IN_A, OUTPUT); pinMode(2, INPUT); digitalWrite(2, HIGH); attachInterrupt(0 /* PIN 2 */, onZeroCross, RISING); } Editat Septembrie 29, 2016 de Vizitator Link spre comentariu
UDAR Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 O observație suplimentară : impulsul de ZERO_CROSS este centrat pe trecerea efectivă prin zero și are o lățime destul de mare . Comanda de aprindere a triacului nu ar trebui să o dai pe RISING pentru că asta se întâmplă tocmai înainte de terminarea semialternaței în curs ci pe FALLING , când tocmai ce a început o nouă semialternanță . Link spre comentariu
Liviu M Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 (editat) HAA1 ala e "bidirectional"? Editat Septembrie 29, 2016 de Liviu M Link spre comentariu
rlodina Postat Septembrie 29, 2016 Autor Partajează Postat Septembrie 29, 2016 Ok - multumesc de raspunsuri - fac cateva teste si revin. @Liviu M : HAA1 ala e "bidirectional"? - da ma scuteste de o punte redresoare inainte (ex: la 4N25) Link spre comentariu
costi002 Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 MOC3031 pare sa aiba si cross 0 detection. a-ti incercat si cu unul fara detectie? eu am reusit sa fac asa ceva pe 4 canale si merge f bine. Link spre comentariu
rlodina Postat Septembrie 29, 2016 Autor Partajează Postat Septembrie 29, 2016 @costi002 : - "MOC3031 pare sa aiba si cross 0 .... " - folosesc MOC3051M care nu are zero cross (scuze: pe schema a ramas MOC3031 - ca pe asta l-am gasit in eagle). - "eu am reusit sa fac asa ceva pe 4 canale si merge f bine" - dacă poți să ne dai ceva detalii (schemă, cod) ar fi grozav. Am inclus in program sugestiilel: //Arduino NANO#define IN_A 5#define cbi(PORT, BIT) (_SFR_BYTE(PORT) &= ~_BV(BIT))// clear bit #define sbi(PORT, BIT) (_SFR_BYTE(PORT) |= _BV(BIT)) // set bit volatile boolean isZeroCross = 0;void setup(){ pinMode(IN_A, OUTPUT); pinMode(2, INPUT); digitalWrite(2, HIGH); attachInterrupt(0 /* PIN 2 */, onZeroCross, FALLING); }void onZeroCross() { isZeroCross = 1;}void loop() { if (isZeroCross){ isZeroCross = 0; sbi(PORTD, IN_A); delayMicroseconds(10); // wait for triac cbi(PORTD, IN_A); }} Comportamentl este acelasi. O observatie: cu ajutorul condensatorului (sugerat de colegul mars01) - am scapat de A (vezi imaginea de mai sus). Un alt lucru interesant este ca cele 2 leduri emitatoare din HAA1X nu lucrează la fel astfel incat exista o dif. de ~600 µs intre ele. Voi experimenta alte valori pentru rezistentele din zona de zero-cross-detection + nici nu stiu cate incredere sa am eu in acest analizor - este o clona de Saleae. Sunt cobză de răcit - și nu ies nici azi - dar mâine-mi aduc osciloscopul și poate-i dau de capăt. In esență va fi un modul I2C care-ti va permite sa controlezi dimarea pe cele 12 canale. Link spre comentariu
Liviu M Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 Prin data sheetul de la ATMega328 nu gasesc nici un indiciu despre tipul intrarilor (daca au Schmitt-Trigger sau nu). In conditiile in care nu au, atunci comportamentul e destul de normal. Ai pus si condensatorul sugerat de Marius? Stiu ca ti s-a spus sa nu folosesti delay in functia de servire a intreruperii, dar pentru teste poti sa revii la prima forma a functiei asteia si sa faci un mic debouncing. Eu as incerca cu un delay de vreo 100 - 150 us (cam atat pare sa oscileze, din ce vad eu un poze). Cu alte cuvinte, cand ajungi in intrerupere, astepti 100-150 us, verifici ca esti in 0 (detectie front cazator) si abia dupa aia treci la prelucrari (faci isZeroCross = 1;). Sau pui un bufer cu Schmitt Trigger la intrare sau un comparator (cu fereastra) intre H1AA1 si Arduino. Edit: Pacalit de nume, am batut cu eleganta campii. Am crezut ca IN_A e intrarea ta de detectie, dar pare iesire. Uita tot ce-am zis anterior, n-are probabil nici o treaba cu problema ta, intrarea (ZERO_CROSS) pare sa comute ferm. Edit la edit: Interesant e ca tie iesirea ti-o ia la plimbare inainte sa ai semnal la intrare. Link spre comentariu
costi002 Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 Am sa pun schema si codul cand ajung acasa. Link spre comentariu
digix Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 (editat) Dupa detectarea trecerii prin zero ar trebui sa intarzii deschiderea triacului cu "a" milisecunde unde faci asta ? a < 10 milisecunde Editat Septembrie 29, 2016 de digix Link spre comentariu
rlodina Postat Septembrie 29, 2016 Autor Partajează Postat Septembrie 29, 2016 @digix - codul de mai sus era un exemplu care sa ilustreze o nelămurire: de ce se la o detectare a trecerii in zero (ZERO_CROSS) sun generare mai multe impulsuri (IN_A). Voi posta și codul complet. Practic totul a început de la următoarea constatate: chiar dacă α = 0 (cel puțin teoretic) eu pe ieșire obțineam ~ 35%. Link spre comentariu
XAN77 Postat Septembrie 29, 2016 Partajează Postat Septembrie 29, 2016 (editat) Dar de ce ai pus opto bidirecțional pentru zerocross? Eu văd situația așa, cînd alternanța scade sub +1,2V ledul ce era comandat pînă atunci se dezactivează, detectînd zerocros, urmează un timp mort pînă alternanța atinge -1,2V cînd se activează celălalt led, și iar ai schimbare de stare deci detecție de zero cross. Acel opto este făcut să lucreze în AC. Dar tu puteai pune un PC817/123 banal. Eu am lucrat chiar recent cu așa ceva și nu am avut probleme. Editat Septembrie 29, 2016 de XAN77 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