Regulator triac Arduino. Dimmer de lumină controlat de Arduino. Dezvoltarea structurii generale a dispozitivului

Continuarea dezvoltării controlerului a început în lecția 36. Să scriem un program pentru un controler de putere bazat pe un element Peltier. Să aflăm ce este un regulator integral.

Capacitatea de răcire a unui element Peltier (puterea de răcire) este legată de puterea electrică la element. Prin urmare, temperatura din cameră trebuie ajustată prin schimbarea puterii electrice pe modulul Peltier. Acestea. Avem nevoie de un regulator nici de tensiune, nici de curent, ci de putere.

Vom dezvolta un regulator de putere, dar mai întâi vom afla informații minime despre regulatori.

Informații generale despre autoritățile de reglementare.

Un regulator este un dispozitiv care menține anumiți parametri ai unui obiect la un anumit nivel. Regulatorul monitorizează starea obiectului și dezvoltă acțiuni de control pentru a asigura stabilitatea parametrului de control.

Îmi amintesc bine că primul sistem de reglementare pe care ni l-a prezentat profesorul TAU la institut (teorie control automat) exista un mecanism de menținere a nivelului apei al cisternei. Când nivelul apei atinge o valoare prestabilită, plutitorul se ridică și supapa asociată pârghiei sale oprește curgerea apei. Dacă nivelul apei scade, plutitorul va coborî și supapa va deschide apa.

În orice regulator, este necesar să identificăm clar ce reglementăm și cu ce reglementăm. Acestea.

  • parametru reglabil;
  • și un element de reglare.

Într-un sistem de control al nivelului apei, parametrul controlat este nivelul apei, iar elementul de control este o supapă conectată la pârghia plutitoare. Orice altceva dintre flotor și supapă este implementat de algoritmul de control.

Pentru regulatorul nostru de putere:

  • parametru reglabil – puterea electrică la sarcină;
  • elementul de reglare este un modulator de lățime de impuls.

Cineva se va întreba care este elementul de reglare din sistemul nostru - ciclul de lucru PWM sau tranzistorul cheie circuit electronic. Implementăm algoritmul controlerului în mod programatic. Pentru program, elementul de reglare este ciclul de lucru PWM.

Marea majoritate a regulatorilor folosesc feedback-ul pentru a afla starea parametrului controlat și pentru a compensa perturbațiile externe.

În cazul nostru, controlerul primește puterea măsurată de la ieșirea sistemului și valoarea setată a puterii. Folosind un anumit algoritm, controlerul calculează valoarea ciclului de lucru PWM, datorită căruia puterea la sarcină se modifică.

Ca orice altceva, autoritatea de reglementare are criterii de evaluare a calității. Acest:

  • Viteza de reglare (viteza de raspuns) – timpul necesar pentru a reduce eroarea de reglare la o valoare data.
  • Precizia controlului este eroarea parametrului de control în stare staționară.
  • Stabilitatea regulatorului – absența fluctuațiilor parametrului de control.

Și mai departe. Implementăm algoritmul de control în software. Aceasta înseamnă că vom avea un controlor de timp discret. Managementul va avea loc în momente separate în timp. În programul controlerului, am definit discreția de timp a controlerului de putere la 20 ms.

Regulator integral.

Ne vom uita la alte legi de control în lecția următoare, când vom dezvolta un regulator de temperatură PID (proporțional-integral-derivat). Acum vorbim doar de legea integrală a reglementării.

Deci, trebuie să menținem valoarea puterii de ieșire prin schimbarea PWM. Cea mai simplă și intuitivă modalitate este:

  • comparați puterea specificată cu cea măsurată;
  • dacă valoarea specificată este mai mare decât cea reală, atunci crește PWM cu 1;
  • dacă valoarea specificată este mai mică decât valoarea reală, atunci reduceți PWM cu 1.

Un regulator cu un astfel de algoritm de control va funcționa, dar criteriile sale de calitate a controlului nu sunt la egalitate. Și absolut totul.

Pentru o mai bună reglare, este necesar să adăugați la valoarea curentă PWM o valoare care depinde de eroarea parametrului de reglare.

Matematic, legea de control a regulatorului integral arată astfel

  • Kw – ciclu de lucru PWM;
  • Ki – coeficient integral;
  • e(t) – eroare de nepotrivire, i.e. diferența dintre valorile setate și cele reale ale parametrului controlat.

Funcția de ieșire a regulatorului integral este proporțională cu integrala de timp a abaterii parametrului controlat.

Controlerul integral este un controler de aproximare succesiv. Mare greșeală– schimbă PWM-ul în pași mari. O mică greșeală pe care o compensează încet. Eroarea se acumulează în integrator și oricât de mică ar fi, în timp va avea în continuare impact asupra elementului de control.

Într-o formă mai înțeleasă, aproape de o implementare discretă, circuitul controlerului integrat arată astfel.

  • Eroarea de nepotrivire e este calculată ca diferență între puterea specificată Pset și ieșirea măsurată Preal: e = Pset – Preal.
  • Eroarea de nepotrivire e este înmulțită cu coeficientul integral Ki și acumulată în registrul integrator RgI.
  • Biți întregi ai registrului sunt trimiși către modulatorul de lățime a impulsului.

De regulă, integratorul are o adâncime de biți destul de mare cu partea fracțională. Și PWM poate accepta doar valori întregi. Nu există nicio contradicție aici. Valorile mai mici de unu se acumulează treptat în integrator și se deplasează în întreaga parte și, prin urmare, în PWM. Acest lucru permite mici erori de nepotrivire sau valori Ki scăzute pentru a reduce viteza controlerului. Valorile mici vor dura mult timp pentru a se transforma într-o parte întreagă.

Regulatoarele integrale au:

  • precizie ridicată;
  • viteză redusă de reglare;
  • stabilitate mediocră, în funcție de viteza de reglare.

De ce am ales legea de control integral pentru regulatorul de putere bazat pe elementul Peltier?

  • Elementul Peltier își modifică parametrii în funcție de temperatură. Dar acest lucru se întâmplă extrem de lent. Pur și simplu nu avem nevoie de un regulator rapid.
  • Mai mult, o schimbare bruscă a puterii pe elementul Peltier duce la degradarea cristalelor semiconductoare ale modulului. Din cauza schimbărilor bruște de temperatură, la joncțiunile semiconductorilor apar tensiuni mecanice, ceea ce duce la o scădere a eficienței elementului și chiar la defecțiunea acestuia. Prin urmare, indiferent cât de repede controlerul de temperatură modifică valoarea setată pentru controlerul de putere, este necesar ca schimbarea puterii pe elementul Peltier să aibă loc fără probleme.
  • Există, de asemenea, un condensator mare la ieșirea regulatorului, care este, de asemenea, mai bine să se încarce încet.

De exemplu, când porniți alimentarea când compartimentul frigiderului nu este răcit, regulatorul de temperatură ar trebui să pornească elementul la putere maximă. Este necesar ca acest lucru să nu se întâmple instantaneu, ci în câteva secunde.

Regulatorul integral este ideal pentru toate aceste cerințe. Mai mult, vom reduce în mod specific coeficientul Ki pentru a asigura o schimbare lentă a puterii la sarcină.

Programul de reglare a puterii.

Să adăugăm regulatorul la programul din lecția anterioară. Permiteți-mi să vă reamintesc că în el am creat structura programului controlerului și am implementat măsurarea tensiunii, curentului și puterii pe sarcină.

Avem nevoie de următoarele variabile și constante:

măsura plutitoareP; // puterea de sarcină măsurată, W – această variabilă există deja în program.

float setPower; // setați puterea
float regPwrInt=0; //
#define koeffRegPwrInt 0.05 //

Regulatorul în sine se potrivește într-o singură linie:

Și, de asemenea, trebuie să supraîncărcați întreaga parte de la integrator la PWM:

analogWrite(9, (unsigned int) regPwrInt); // PWM

În principiu, acest program funcționează deja. Puteți seta temporar puterea la, de exemplu, 5 W:

setPower = 5; // setați temporar puterea 5 W

introduceți regulatorul într-un ciclu de 20 ms și verificați. Dar mai lipsesc unele operațiuni.

Limitarea integratorului.

Lucrăm cu un circuit real. Să presupunem că este setată o putere pe care regulatorul nu este capabil să furnizeze, de exemplu, 50 W. Regulatorul trebuie să genereze PWM maxim. Dar partea integrantă a autorității noastre de reglementare va continua să crească. Când depășește valoarea maximă admisă PWM (pentru noi este 255), PWM-ul nu va mai funcționa corect. Mai degrabă, se va reseta la 0 și va începe să crească din nou. Acestea. este necesar să se introducă restricţii asupra legăturii integrale. Nu trebuie să fie mai mare decât valoarea maximă PWM și nu trebuie lăsată să devină negativă.

dacă (regPwrInt< 0) regPwrInt=0; // limita inferioara
dacă (regPwrInt > Limita superioară

PWM „Timp mort”.

Mai există o subtilitate în lucrul cu PWM. Impulsurile de la ieșirea PWM comută comutatorul real. Când ciclul de lucru scade, impulsurile de pornire pot deveni foarte scurte. Pentru PWM-ul nostru, o valoare de 1 corespunde unei durate a impulsului de 62,5 ns. Într-un timp atât de scurt, cheia nu va avea timp să se deschidă complet și nu va funcționa normal. Cel mai probabil, cu sursa noastră de alimentare de joasă tensiune (12 V), problemele nu vor apărea. Dar în circuitele de înaltă tensiune ale surselor de alimentare (300 V sau mai mult), o astfel de comutare duce la consecințe catastrofale. Prin urmare, un stil bun de control PWM este de a interzice impulsurile de control care sunt prea scurte.

Să introducem două perioade de timp în care vom interzice funcționarea PWM. Un segment este aproape de zero, al doilea este aproape de valoarea maximă. Este în general acceptat să se numească durata acestor segmente „timp mort” PWM (timp mort). Algoritmul este simplu:

  • Dacă valoarea PWM este mai mică decât „timpul mort”, atunci PWM este 0.
  • Dacă valoarea PWM mai multa diferenta PWM maxim și „timp mort”, atunci PWM este egal cu valoarea maximă.

Implementarea acestui algoritm în program arată astfel:


dacă(pwm< DEAD_TIME) pwm=0;
dacă (pwm >
analogWrite(9, pwm); // PWM

Am setat „timpul mort” la 500 ns:

#define DEAD_TIME 8 // Timp mort PWM (* 62,5 ns)

Oprirea regulatorului.

Ultimul lucru de adăugat este o oprire rapidă a regulatorului. Am spus că regulatorul ar trebui să schimbe încet puterea elementului Peltier. Dar asta nu se referă închidere de urgență. Cu setPower=0 vom opri regulatorul instantaneu.

Blocul software complet al regulatorului de putere integrat arată astfel:

//------------------ regulator putere
dacă (setPower != 0) (
regPwrInt = regPwrInt + (setPower - măsuraP) * koeffRegPwrInt;
dacă (regPwrInt< 0) regPwrInt=0; // limita inferioara
dacă (regPwrInt > MAX_PWM) regPwrInt=MAX_PWM; // Limita superioară
// Timp mort PWM
unsigned int pwm = (unsigned int)regPwrInt; // transfer la PWM
dacă(pwm< DEAD_TIME) pwm=0;
dacă (pwm > (MAX_PWM - DEAD_TIME)) pwm=MAX_PWM;
analogWrite(9, pwm); // PWM
}
else ( // oprire
regPwrInt=0;
analogWrite(9, 0); // PWM
}

Serial.print(" p="); Serial.print(regPwrInt, 2); // legătură cu regulatorul de putere integrat

Și plătește. Doar 40 de ruble. pe lună pentru acces la toate resursele site-ului!

Verificarea si reglarea regulatorului.

Acum să verificăm funcționarea regulatorului la o sarcină reală și să determinăm coeficientul integral.

Vom folosi un monitor cu port serial ca mijloc de monitorizare a funcționării regulatorului. Nu uitați să setați rata baud la 19200.

Mai întâi am stabilit coeficientul integral la 0,1.

#define koeffRegPwrInt 0.1 // coeficientul integral al regulatorului de putere

Am lansat monitorul portului serial și am văzut această poză.

Regulatorul funcționează. Setează puterea specificată (5 W) în 14-15 secunde.

Un rezistor este scurtcircuitat. Puterea s-a schimbat brusc, dar regulatorul a readus-o la normal în 5-6 secunde.

Funcționează în mod constant. Stabilitatea trebuie judecată după modificarea întregii părți a legăturii integrale, adică PWM Într-un controler ideal, PWM-ul ar trebui să se schimbe cu 1. Curentul și, prin urmare, puterea „sare” din cauza eșantionării nu foarte precise a ADC-ului la valori scăzute. În principiu, acest coeficient (0,1) ni se potrivește. Dar este mai bine să vedeți limitele funcționării stabile a regulatorului și să îl setați cu o marjă.

Am stabilit coeficientul integral la 1 și am văzut următoarele.

Puterea este setată la nivelul setat în aproximativ 1 secundă și regulatorul continuă să funcționeze stabil.

Acum șansele sunt 10.

Funcționează și mai repede, dar PWM-ul a început să „sare” cu 2-5 unități. Regulatorul este instabil. Acest coeficient nu poate fi utilizat.

În scopuri pur demonstrative, am stabilit coeficientul la 20.

Fluctuațiile au ajuns la 30 de unități PWM. Iată o oscilogramă a tensiunii de ieșire. Totul s-a făcut bucăți.

Alegeți singur coeficientul. Cred că nu ar trebui să depășească 0,5. Am setat factorul lent la 0,05 pentru moment.

Regulatorul setează puterea specificată la 5 W în 30 de secunde. La mai multă putere va funcționa și mai lent. Dar cu atât mai bine pentru elementul Peltier. Da, iar coeficientul poate fi schimbat oricând.

Rezumat.

Conținut video: (când dați clic pe o linie, videoclipul se va deschide în locul potrivit.)

Putem începe să instalăm firmware care va menține viteza dată. Dar mai întâi, să ne uităm la problema senzorului Hall.

Înlocuirea tahogeneratorului cu un senzor Hall nu este deloc dificilă. Vorbesc despre asta în detaliu în videoclipul de la 5:48. Dar pe care să-l pun? Avem nevoie de un senzor Hall digital, de preferință bipolar. Deoarece va produce de 2 ori mai multe semnale. Și acest lucru este foarte important pentru viteze mici. Acesta este cel din motorul meu SS441 .

Ne uităm la pinout și îl lipim la loc.

Prin plasarea unui astfel de senzor lângă magnet, care se află pe arborele motorului, Arduino va primi informații despre viteza motorului nostru. După ce umplem microcontrolerul cu firmware-ul nr. 4, numărăm câte impulsuri dă senzorul la 10 rotații ale motorului sau arborelui mașinii. Vom avea nevoie de acest număr mai târziu.

Dar acum putem începe să instalăm firmware-ul. Există 3 dintre ele în folderul „PID_12”, „_16”, „_18”.

Sa luam in considerare PID_12:

La începutul schiței avem linii în care trebuie să introducem valorile de care avem nevoie:

int obMax = 6000; //introduceți viteza maximă

float kImp = 120; //introduceți numărul de impulsuri la 10 rotații

În prima linie introducem numărul de rotații maxime de care avem nevoie. În al doilea - minim. În a treia linie punem numărul de impulsuri ale senzorului nostru la 10 rotații ale arborelui. În a patra linie trebuie să introduceți un număr care va limita curentul de viteză minimă. Va depinde de numărul de rotații minime și de sarcinile aplicate. Și în al cincilea - numărul la care motorul începe să se rotească pe firmware-ul nr. 6 (am acordat atenție acestui lucru).

PID myPID(&Intrare, &Ieșire, &Punctul de referință,0.01 , 0.2 , 0 , DIRECT);

Căutarea oferă mai multe metode de configurare, puteți folosi oricare. Dar, să fiu sincer, nu mi-a plăcut acest regulator. Sau poate că nu am avut răbdarea să-l pun la punct.

Sa luam in considerare _16:

Principalele variabile ale schiței sunt aceleași ca și în controlerul PID:

int obMin = 200; //introduceți viteza minimă

int minzn = 115; // valoarea minimă a triacului la care începe rotația.

int ogrmin = 70 ; // limitând triacul la viteza minimă.

int mindimming = 80; //valoare triac când mașina este blocată (impuls inițial)

Și sunt instalate în același mod. Dar s-au adăugat 2 sensuri. Acest valoarea triac atunci când mașina este blocată (impuls inițial) Se alege asa. Pe firmware-ul nr. 6 punem o sarcină mică pe arbore, minimă, atâta timp cât arborele nu este inactiv. Și începem să rotim regulatorul. Este necesar să se noteze numărul la care arborele începe să se rotească. Avem nevoie de această valoare pentru a da un impuls inițial mașinii noastre. Numărul este foarte arbitrar și permite anumite toleranțe. Iar variabila principală care va necesita configurare și selecție este toleranță de viteză în minus și plus. Înseamnă în ce limite se vor stabiliza revoluțiile motorului nostru. Găsim valoarea minimă la care motorul se va învârti fără smucitură atât la ralanti, cât și la sarcină la turații diferite. Acest firmware oferă deja o bună stabilizare a vitezei în limitele specificate și poate că acest lucru va fi deja suficient. Dacă este necesară o stabilizare precisă a vitezei, atunci trecem la următoarea coasere.

Sa luam in considerare _18:

Toate valorile sunt transferate din firmware-ul anterior:

int obMin = 200; //introduceți viteza minimă

int obMax = 9000; //introduceți viteza maximă

int kImp = 120; //introduceți numărul de impulsuri la 10 rotații

int minzn = 115; // valoarea minimă a triacului la care începe rotația.

int ogrmin = 70 ; // limitând triacul la viteza minimă.

int mindimming = 80; //valoare triac când mașina este blocată (impuls inițial)

int admitere = 200 ; //alocația de rotații în minus și plus

int razgon = 50; //variabila de accelerație 1 - 100

S-a adăugat doar valoarea accelerației sau netezimea. Cu o valoare de 1, stabilizarea are loc fără probleme cu valori în creștere, accelerația este mai severă. Limita superioară este foarte mare, dar după 100 (în cazul meu) nu există modificări.

Dezvoltare paralela: http://www.motor-r.i...og-page_19.html

Opțiunea de reglare a producătorului de cipuri:

O mulțime de întrebări despre detalii, unde se comandă. Am comandat un set pentru mine și îl împărtășesc cu voi.

Și am comandat un bloc de relee pentru inversare și protecție. Vom adăuga mai multe.

Pe baza întrebărilor dumneavoastră, articolul va fi completat. Așa că întrebăm.

Deci, să continuăm reglarea și perfecționarea controlerului nostru de viteză în buclă închisă.

Cei care au făcut deja acest regulator au întâmpinat o problemă: este foarte dificil să selectezi o toleranță variabilă. Metoda forței brute este lungă și incomodă. Și s-a dovedit că toleranța la viteze mici și mari poate diferi. Prin urmare, a fost scris firmware care ajută la selectarea foarte precisă a acestei valori atât la viteze minime, cât și la viteze maxime simultan.

Pentru a face acest lucru, trebuie să lipim temporar o rezistență variabilă de 10 kOhm cu contactul central la pinul A3, Arduino nostru. Ca întotdeauna, lipim contactele extreme ale rezistenței la + și -.

Acum, după încărcarea firmware-ului nastroyka_dopuska , în care vom introduce mai întâi toate variabilele referitoare la mașina sau motorul nostru. Principalele vor fi vitezele minime și maxime necesare pe mașină, precum și numărul de impulsuri la 10 rotații ale axului.

Selectăm toleranța așa cum se arată în videoclip. După aceasta, putem introduce datele primite în firmware-ul 18 și le putem folosi. Acest firmware îmbunătățește afișajul afișajului. Exact cum ai întrebat.

Următoarea problemă pe care am avut-o a fost că la anumite turații ale motorului au apărut „smucituri”. Pentru a înțelege motivul, a fost realizat un firmware care a trimis valoarea variabilei tic către computer. Acesta este numărul de cicluri de ceas care trece între semnalele de la senzorul Hall. Datele au fost afișate în programul SerialPortPlotter sub formă grafică.

În urma consultărilor, s-a dovedit că defecțiunile apar dacă semnalul de la senzor sosește simultan cu depășirea contorului, care are loc după 65535 cicluri de ceas. Mi-au spus și cum să evit astfel de eșecuri, pentru care sunt foarte recunoscător.

Sarcina suplimentară cu care ne-am confruntat a fost să implementăm protecția împotriva defecțiunii triacului folosind un releu. Astfel încât dacă viteza depășește valoarea setată cu un anumit număr, releul va funcționa și va opri motorul.

Vom folosi un bloc de relee din 4 piese, deoarece în viitor vom implementa inversarea motorului prin ele. Dar dacă nu aveți nevoie de marșarier, atunci vă puteți descurca cu un singur releu.

Aplicăm minus la contactele GND, aplicăm plus 5 volți la VCC, conectăm IN3 și IN4 la contactul A1 al arduino, acesta este pentru invers, și IN2 la contactul A2. Acest contact va fi responsabil pentru deconectarea plăcii de alimentare. Încărcarea firmware-ului proverka_rele , iar releele noastre ar trebui să pornească și să se oprească alternativ timp de 1 secundă. Două perechi și unul separat. Dacă totul funcționează corect, atunci puteți rula firul care merge la placa de alimentare prin acest singur releu și puteți încărca firmware-ul roos_zashita_1 și folosiți regulatorul. Smuciturile au fost eliminate aici și a fost implementată protecția.

De asemenea, putem instala și conecta imediat un comutator basculant pentru marșarier în 3 poziții și un comutator basculant care ne va împărți intervalul de viteză așa cum ne dorim. Pentru mașina mea am făcut prima turație pentru strunjire, de la 100 rpm la 2000 rpm, iar a doua pentru șlefuit, de la 1500 rpm la 5000 rpm. Le conectăm conform acestei scheme:

Pentru a verifica, încărcați schița proverka_tumblerov iar când schimbați poziția comutatoarelor comutatoare, numerele de pe ecran se vor schimba. Dacă apar modificări, puteți încărca firmware-ul roos_zashita_2skorosti si foloseste-l.

Nu uitați că pe tot firmware-ul trebuie să introduceți valorile de care aveți nevoie.

2. Frânare invers - releu invers pe A1 Comutator inversare pe A7

Schiță: https://drive.google...iew?usp=sharing

2a. Puteți modifica frânarea în variabile

Opțiuni pentru semne

Signet ----- fără releu https://wdfiles.ru/drgO

Signet ----- cu 1 releu de protecție https://wdfiles.ru/dr2l

Signet ---- cu două relee pentru marșarier și frânare https://wdfiles.ru/dr8k

Signet ---- cu componente SMD și blocarea pulsului sursă de alimentare pentru carcasa D6MG https://drive.google...T0JOd2pFZjI3SmM

Pentru releele de 12 V, mutați jumperul la marcajul 12

Pentru relee 5v este deja la marcajul 5

Lipiți diodele de pe relee direct pe placă din partea conductorului.

Pentru plăcile cu ULN2003, diodele de pe releu nu sunt necesare.

Lista de componentevariază în funcție de sigila pe care o alegeți.

rezistență 10k 0,25W-2buc

rezistență 4.7k 0.25W - 1 bucată

rezistență 2k 0,25W - 1 bucată

rezistență 470 0,25W-1 bucată

rezistență 100 2W-1buc

rezistență 360 0,25w-2buc

rezistență 5k 0,25W-1 bucată (buton invers)

rezistență de tăiere 10k-1 buc (pentru afișaj LCD)

rezistor variabil 10k-1 buc (sucitoare de rotație)

rezistență de tăiere 10k (pe picior A3)

dioda RL205 1buc

condensator 100n 600V-1buc C4

condensator 0,05 MF - 1 bucată C3

triac BTA24-600 (BTA16-600) Pe calorifer

PC817C-1buc

MOC3021-1 buc (MOC3023)

L7805CV-1buc

punte de diode, cum ar fi pe placa GBL04-E3/51 (KBL04), punte de diode 4A 400V

blocuri terminale pe placă - duble - 7 buc.,

releu JS1-12V 2buc, 5V posibil

condensatori electrolitici 100 uF *25V -2 buc (C1 și C2)

cip ULN2003A - 1 bucată

transformator - orice ai găsi (1,5-3W)

comutator cu trei poziții - 1 bucată

priză pentru Arduino - 1 bucată

Pe tablă, nu pe listă

Rezistorul de pe circuitul de sub Arduino este de 10k (este pe marginea pistelor sau nu are nicio diferență?) Pe placă pe partea conductorilor, dar poate fi plasat și deasupra. Și este necesar pentru cei care vor împărți intervalul de control al vitezei în două sub-domeni.

Pentru sistem" Casa inteligentă„Sarcina principală este de a controla aparatele de uz casnic de la un dispozitiv de control, fie că acesta este un microcontroler de tip Arduino, sau un microcomputer de tip Raspberry PI, sau orice altul. Dar nu veți putea face acest lucru direct, să ne dăm seama cum să controlăm o sarcină de 220 V cu Arduino.

Un microcontroler nu este suficient pentru a controla circuitele AC din două motive:

1. La ieșire microcontroler se generează un semnal de tensiune constantă.

2. Curentul prin pinul microcontrolerului este de obicei limitat la 20-40 mA.

Avem două opțiuni de comutare folosind un releu sau folosind un triac. Triac-ul poate fi înlocuit cu două tiristoare conectate spate la spate (aceasta este structura internă a triacului). Să aruncăm o privire mai atentă la asta.

Controlul unei sarcini de 220 V folosind un triac și un microcontroler

Structura internă a triacului este prezentată în imaginea de mai jos.

Tiristorul funcționează după cum urmează: atunci când tiristorului este aplicată o tensiune de polarizare directă (plus anod și minus catod), niciun curent nu va trece prin el până când nu aplicați un impuls de control electrodului de control.

Am scris impuls cu un motiv. Spre deosebire de un tranzistor, un tiristor este un comutator semiconductor SEMI-CONTROLAT. Aceasta înseamnă că atunci când semnalul de control este eliminat, curentul prin tiristor va continua să curgă, adică. va rămâne deschis. Pentru ca acesta să se închidă, trebuie să întrerupeți curentul din circuit sau să schimbați polaritatea tensiunii aplicate.

Aceasta înseamnă că, în timp ce menține un impuls pozitiv pe electrodul de control, tiristorul din circuitul de curent alternativ va transmite doar semiunda pozitivă. Un triac poate trece curent în ambele sensuri, dar din moment ce este alcătuit din două tiristoare conectate între ele.

Polaritatea impulsurilor de control pentru fiecare dintre tiristoarele interne trebuie să corespundă polarității semi-undei corespunzătoare numai dacă această condiție este îndeplinită, curentul alternativ va curge prin triac; În practică, o astfel de schemă este implementată în comun.

După cum am spus deja, microcontrolerul produce un semnal de o singură polaritate pentru a se potrivi cu semnalul, trebuie să utilizați un driver construit pe un optosimistor.

Astfel, semnalul aprinde LED-ul intern al optocuplerului, deschide triacul, care furnizează semnalul de control triacului de putere T1. MOC3063 și altele similare pot fi folosite ca optodriver, de exemplu, fotografia de mai jos arată MOC3041.

Circuit de trecere cu zero - circuitul detector de tranziție de fază prin zero. Este necesară implementarea diferitelor tipuri de regulatoare triac pe un microcontroler.

Dacă circuitul nu are un optodriver, unde potrivirea este organizată printr-o punte de diode, dar, spre deosebire de versiunea anterioară, nu există izolație galvanică. Aceasta înseamnă că la prima supratensiune puntea se poate rupe și tensiunea înaltă va ajunge la pinul microcontrolerului, ceea ce este rău.

La pornirea/oprirea unei sarcini puternice, în special una inductivă, cum ar fi motoarele și electromagneții, apar supratensiuni, deci paralele cu toate dispozitive semiconductoare trebuie să instalați un circuit RC snubber.

Releu și Arduino

Pentru a controla un releu cu un Arduino, trebuie să utilizați un tranzistor suplimentar pentru a amplifica curentul.

Vă rugăm să rețineți că se folosește un tranzistor bipolar cu conducție inversă (structură NPN), acesta poate fi KT315 domestic (iubit și cunoscut de toată lumea). Este necesară o diodă pentru a atenua exploziile EMF de auto-inducție în inductanță, astfel încât tranzistorul să nu se defecteze de la tensiunea înaltă aplicată. De ce se întâmplă acest lucru va fi explicat prin legea de comutație: „Curentul într-o inductanță nu se poate schimba instantaneu”.

Și când tranzistorul este închis (pulsul de control este îndepărtat), energia câmpului magnetic acumulat în bobina releului trebuie să meargă undeva, motiv pentru care este instalată o diodă inversă. Încă o dată, observ că dioda este conectată în sens invers, adică. catodul la pozitiv, anodul la negativ.

Puteți asambla un astfel de circuit cu propriile mâini, ceea ce este mult mai ieftin, plus că puteți utiliza unul conceput pentru orice tensiune de curent continuu.

Sau cumpărați un modul gata făcut sau un scut întreg cu un releu pentru Arduino:

Fotografia arată un scut de casă, apropo, folosește KT315G pentru a amplifica curentul, iar mai jos vezi același scut fabricat din fabrică:

Concluzie

Controlul în siguranță al unei sarcini AC implică, în primul rând, toate informațiile descrise mai sus sunt valabile pentru orice microcontroler, nu doar placa Arduino.

Sarcina principală este de a furniza tensiunea și curentul necesar pentru a controla triacul sau releul și izolarea galvanică a circuitelor de control și a circuitului de alimentare CA.

Pe lângă siguranța pentru microcontroler, în acest fel vă protejați astfel încât să nu suferiți răni electrice în timpul întreținerii. Când lucrezi cu tensiune înaltă Trebuie să respectați toate regulile de siguranță, să respectați PUE și PTEEP.

Aceste scheme pot fi, de asemenea, folosite. Triacurile și releele în acest caz acționează ca un amplificator intermediar și un potrivire de semnal. La dispozitivele de comutare puternice, curenții de control al bobinei sunt mari și depind direct de puterea contactorului sau a demarorului.

Alexey Bartosh

Arduino face posibilă implementarea cu ușurință a multor diverse dispozitiveși funcții, inclusiv comutarea sarcinilor AC folosind un releu mecanic sau cu stare solidă. Situația este însă puțin mai complicată atunci când trebuie să reglați luminozitatea lămpilor folosind un program, deoarece nu mai este posibil să limitați puterea curentului cu un triac.

Dimmer(din engleză dim - a întuneca, în rusă - dimmer, în franceză - variator) - dispozitiv electronic, conceput pentru schimbarea puterii electrice (regulator de putere). Utilizat de obicei pentru a regla luminozitatea luminii emise de lămpile cu incandescență sau cu LED-uri.

În acest caz, va fi mai eficient să folosiți un dimmer Arduino, a cărui eficiență este mult mai mare în această sarcină decât cea a aceluiași triac, ținând cont de necesitatea de a disipa un numar mare de căldură. Să ne dăm seama cum să creăm un dimmer, ce trebuie scris în software și de ce materiale veți avea nevoie.

Opțiunea 1

Dimmerul Arduino 220 V este proiectat în așa fel încât să intre în el sinusoide simple din prize, iar cele deja tăiate să iasă. Astfel, nu va transmite o parte din sinusoide, în funcție de dimensiunea căreia se va modifica tensiunea medie pe dispozitiv. Prin urmare, prin schimbarea golurilor cu tensiune zero, este posibil să se regleze curentul de ieșire folosind același triac.

Este important să o alegeți pe cea potrivită, deoarece acestea diferă în funcție de dimensiunea cazului și curentul primit, de exemplu, cele mai mari trec o tensiune de 800 volți, echivalent cu 30 kW.

Vom avea două variante. Alternativa teoretica si concreta, scuze pentru analogii.

În prima variantă, pentru ca proiectul să fie controlabil, veți avea nevoie de un pachet de materiale libere, precum și de o pereche de rezistențe și mai multe optocuple. Majoritatea componentelor lista plina pe care le vom descrie mai jos, se vând cu bănuți în orice magazin de echipamente radio, așa că nu vă va fi greu să aduneți tot ce aveți nevoie.

Pentru a face mai convenabil conectarea triac-ului Arduino, veți avea nevoie de mai multe terminale, dar vă puteți descurca fără ele. Și pentru a asambla întregul circuit, trebuie să proiectați și să faceți o placă. Cel mai convenabil este să utilizați o imprimantă 3-D, dar o puteți crea folosind vechea metodă chimică.

Ca urmare, vom obține un dimmer Arduino de 220 V, care va rupe rețeaua corespunzătoare și vom controla totul folosind un optocupler, pentru care vom avea nevoie de un flasher standard. Astfel, se dovedește că placa în sine va rămâne decuplată folosind tensiunea de rețea, ceea ce va contribui la siguranța inginerului și a viitorilor utilizatori.

Dar pentru deschiderea în timp util a triacului, dispozitivul va trebui să recunoască când tensiunea trece prin zero, pentru care este util al doilea optocupler, pe care îl vom conecta la partea opusă.

Folosind un astfel de circuit simplu, vom obține un dispozitiv care ne va trimite un semnal de fiecare dată când tensiunea trece prin 0 în rețea, iar triacul va fi controlat cu ajutorul optocuplerului superior.

Vom vorbi despre ce fel de algoritm de operare va trebui să scrieți în programul de mai jos, dar mai întâi să ne dăm seama de ce instrumente și componente veți avea nevoie pentru a asambla hardware-ul proiectului. După cum am menționat deja, le puteți cumpăra pe toate de pe piață sau într-un magazin de echipamente radio fără dificultate.

Opțiunea 2

În a doua opțiune, vom regla luminozitatea lămpii conectate la circuit printr-un port serial. Luminozitatea poate fi modificată conform comenzilor pe care le oferim pentru portul serial. Vom folosi aceste comenzi specifice în acest proiect de dimmer Arduino:

  • 0 pentru OFF
  • 1 pentru luminozitate 25%
  • 2 pentru 50% luminozitate
  • 3 pentru 75% luminozitate
  • 4 pentru 100% luminozitate

Vom proiecta un circuit de dimmer modulat cu undă de impuls (PWM) care va folosi IRF830A într-o punte de diode care este utilizată pentru a controla tensiunea la o lampă modulată cu undă de impuls (PWM). Tensiunea de alimentare pentru controlul porții este furnizată cu tensiunea la tranzistor cu efect de câmp cu efect de câmp de oxid de metal (MOSFET).

Materiale

Opțiunea 1

Pentru comoditate, ar trebui să vă împărțiți lista de cumpărături în mai multe articole principale, în funcție de ceea ce vom folosi anumite instrumente. Deci, va trebui să colectați:

  1. Detector pentru urmărirea trecerilor cu zero. Pentru această parte a proiectului veți avea nevoie de un H11AA11 cu o pereche de rezistențe de 10k ohmi, precum și un redresor în punte de 400 volți și o altă pereche de rezistențe de 30k ohmi. Pentru comoditate, merită să cumpărați 1 conector, precum și un stabilizator de 5,1 volți.
  2. Driver pentru lampă. Va fi suficient aici LED simplu, precum și MOC3021 cu un rezistor de 220 Ohm (este posibil mai mult), precum și un rezistor de 470 Ohm și 1 kOhm și un triac, versiunea TIC este potrivită. De asemenea, puteți cumpăra un alt conector.
  3. Elemente auxiliare. Desigur, atunci când lipiți, nu puteți face fără fire și o bucată de PCB de 6 pe 3 cm.

Când ați adunat toate elementele necesare, va veni și momentul lipirii, prin urmare, pe lângă cele de mai sus, veți avea nevoie și de fier de lipit și colofoniu cu lipit. Puteți desena și realiza tabla singur sau puteți folosi o imprimantă specială, dacă este disponibilă. Opțiuni pentru amplasarea potecilor se găsesc pe site-ul nostru sau poți proiecta totul singur, conform dorințelor tale.

Opțiunea 2

Pentru al doilea nostru varianta alternativa noi vom avea nevoie:

1x - rezistor de 330 Ohm
2x - 33K rezistență
1x - rezistor de 22K
1x-220 Ohm rezistență
4x - 1N4508 diode
1x - 1N4007 diode
1x - Dioda Zener 10V.4W
1x - Condensator 2.2uF/63V
1x - Condensator 220nF/275V
1x - Arduino / Arduino
1x - Optocupler: 4N35
1x - MOSFET: IRF830A
1x - Lampa: 100 W
1x - Alimentare 230 V
1x - priză
1x - Placă de lipit și kit de lipit

Crearea unei table

Vom lua în considerare opțiunea cea mai bugetară - gravarea plăcii într-o soluție de sare, dar mai întâi va trebui să lipiți un proiect pe ea, pe care îl puteți crea în program dacă doriți. Asamblarea ulterioară nu implică dificultăți sau secrete, va trebui să utilizați prize pentru optocuple și redresoare în punte. De asemenea, atunci când scrieți text pentru a marca un element, acesta ar trebui să fie oglindit, deoarece cu LUT, imaginea imprimată va arăta vedere corectă pe miere, și va fi transferat astfel încât să puteți citi toate datele necesare fără probleme.

O alegere bună ar fi TIC206, care va oferi o putere solidă de 6 amperi. Dar aici merită să luați în considerare faptul că acei conductori care sunt instalați pe placă pur și simplu nu pot rezista la un astfel de curent, așa că în plus, merită să lipiți un fir la conductorul triac de la conectori, iar a doua parte la alți conectori.

De asemenea, dacă aveți optocuplerul H11AA11, nu trebuie să utilizați un redresor în punte, deoarece are deja două diode neparalele, precum și capacitatea de a lucra cu curenți alternativi. Compatibilitatea cu pinii 4N25 vă permite să îl introduceți pur și simplu în lipire cu doi jumperi situati între rezistența 5 și 7 din diagrama noastră.

În a doua opțiune, diagrama va arăta astfel:

Ce program este necesar pentru dispozitiv?

Puteți descărca cod gata făcut cu biblioteci de pe site sau îl puteți scrie singur. Din fericire, programul pentru dimmer-ul de pe Arduino nu este foarte dificil și este suficient să țineți cont de faptul că semnalul zero va fi generat în întreruperi, care sunt comutate în triac pentru un anumit timp.

Singurul lucru care merită luat în considerare este utilizarea unei variabile bucle, valoarea sa de pornire ar trebui setată nu la 0, ci la 1, iar treapta maximă variază de la 1 la 5. Astfel, două tipuri de intervale de măsurare ne vor potrivi - de la 2 la 126 și de la 0 la 128.

Codul pentru opțiunea alternativă este următorul:

intledPin = 3; void setup() ( Serial.begin(9600); Serial.println(„Conexiune serială a începută, se așteaptă instrucțiuni…n0 = Offn1 = 25%n2 =50%n3 = 75%n4 = 100%”); ) void loop ( ) ( dacă (Serial.available()) ( char ser = Serial.read(); //citește serialul ca caracter //NOTĂ deoarece serialul este citit ca „char” și nu „int”, cititul valoarea trebuie comparată cu numerele de caractere //de aici ghilimelele din jurul numerelor din instrucțiunea case switch (ser) (case '0': analogWrite(ledPin, 0); break; case '1': analogWrite(ledPin, 64); break;

proces de asamblare

Flasher-ul Arduino poate fi asamblat cu ușurință pe o placă și nu există caracteristici speciale în lipirea unei plăci gata făcute. Singurul lucru pe care nu trebuie să-l uitați despre notele date mai sus cu privire la lipirea unui fir la triac, pentru a nu arde pistele de pe placă prin construirea întreruperii corecte. În caz contrar, chiar și un începător va putea să monteze proiectul final fără probleme, datorită simplității sale.

Cum arată în formă reală:

Configurarea și testarea dispozitivului

A doua opțiune funcționează astfel (videoclipul arată cum este adusă o lanternă pe dispozitiv):

Conectați variatorul Arduino deja cablat la Arduino și mutați potențiometrul până ajungeți la incandescența maximă și minimă a becului. Pentru a vedea imaginea reală a undei, este suficient să folosiți un osciloscop capabil să măsoare tensiuni de până la 12 volți.

Dar nu vă puteți conecta direct nici un divizor de tensiune în raport de 1 la 20 este util aici; Pentru a nu supraîncălzi rezistențele, este potrivită o valoare de două sute zece kiloohmi. După o conectare atentă, dispozitivul poate fi conectat la rețea și, în sfârșit, poate vedea rezultatele muncii tale.

Dimmer activat Bazat pe Arduino este unul dintre sutele de simple și dispozitive interesante, cu care puteți schimba fără probleme tensiunea rețelei de la 0 la valoarea nominală. Fiecare utilizator Arduino va găsi o utilizare pentru aceasta produs de casă util, iar experiența dobândită în timpul asamblarii bricolaj se va adăuga la baza dvs. de cunoștințe.

Schema și principiul funcționării acestuia

La fel ca majoritatea variatoarelor ieftine, acest circuit funcționează datorită reglării tensiunii de fază, care se realizează prin forțarea deschiderii unui întrerupător de alimentare - un triac. Principiul de funcționare al circuitului este următorul. Arduino pornit nivelul programului generează impulsuri, a căror frecvență este reglată de rezistența potențiometrului. Impulsul de control de la pinul P1 trece prin optocuplerul MOC3021 și ajunge la electrodul de control al triacului. Se deschide și trece curent până când o jumătate de undă din tensiunea rețelei trece prin zero, după care se închide. Apoi vine următorul impuls și ciclul se repetă. Datorită deplasării impulsurilor de control, în sarcină se formează o parte frontală a sinusoidei.

Pentru ca triacul să se deschidă în conformitate cu un algoritm dat, rata de repetiție a impulsului trebuie să fie sincronizată cu tensiunea de rețea de 220 V Cu alte cuvinte, Arduino trebuie să știe în ce punct trece unda sinusoidă a tensiunii de rețea. În acest scop, este implementat un circuit în dimmer pe elementele R3, R4 și PC814 părere, semnalul de la care este trimis la pinul P2 și analizat de microcontroler. Un rezistor de 10 kOhm R5 a fost adăugat la circuitul detector zero, care este necesar pentru alimentarea tranzistorului de ieșire al optocuplerului.

O ieșire de putere a triacului este conectată la firul de fază, iar sarcina este conectată la al doilea. Firul neutru al rețelei de 220 V merge direct de la blocul de borne J1 la J2 și apoi la sarcină. Utilizarea optocuplelor este necesară pentru izolarea galvanică a părților de putere și de joasă tensiune ale circuitului dimmerului. Potențiometrul (neprezentat în diagramă) este conectat cu pinul din mijloc la orice intrare analogică a Arduino, iar cei doi pini extremi sunt conectați la +5 V și „comun”.

Placă de circuit imprimat și piese de asamblare

Un minim de radioelemente vă permite să proiectați o singură față placă de circuit imprimat, a căror dimensiune nu depășește 20x35 mm. După cum se poate vedea din figură, nu există un rezistor variabil pe acesta, astfel încât un radioamator poate selecta independent un potențiometru cu un factor de formă adecvat și poate determina locația atașării acestuia la corpul dimmer-ului finit. Conexiunea la Arduino se face prin fire care sunt lipite în găurile corespunzătoare de pe placă.

Pentru a asambla un dimmer controlat de Arduino cu propriile mâini, veți avea nevoie de următoarele elemente radio și piese:

  1. Triac BT136-600D, capabil să reziste tensiune inversă până la 600 V și trece un curent de până la 4 A în sarcină (desigur cu instalare prealabilă pe un radiator). Un triac cu o capacitate de sarcină mai mare poate fi utilizat în circuit. Principalul lucru este să asigurați îndepărtarea căldurii din corpul său și să selectați corect curentul către electrodul de control (parametru de referință). Când conectați un aparat electric de mare putere la o sarcină, lățimea conductoarelor imprimate din partea de putere a circuitului va trebui să fie recalculată. Alternativ, urmele de putere pot fi duplicate pe cealaltă parte a plăcii.
  2. Optocupler MOC3021 cu ieșire triac.
  3. Optocupler PC814 cu iesire tranzistor.
  4. Rezistoare cu o valoare nominală de 1 kOhm, 220 Ohm, 10 kOhm cu o putere de 0,25 W și 2 rezistențe de 51 kOhm cu o putere de 0,5 W.
  5. Rezistor variabil de 10 kOhm.
  6. Blocuri terminale – 2 buc., cu doi conectori si pas de 5 mm.

Toate fisierele necesare pentru proiect sunt în arhiva ZIP: dimmer-arduino.zip

Algoritm de control Arduino

Programul de control triac este creat pe baza temporizatorului Timer1 și a bibliotecii Cyber.Lib, datorită cărora nu există nicio influență asupra funcționării altor coduri de program. Principiul funcționării sale este următorul. Când tensiunea de la rețea trece prin zero „de jos în sus”, temporizatorul este reconfigurat la tranziția inversă „de sus în jos” și începe numărarea timpului în conformitate cu valoarea variabilei „Dimmer”. Când temporizatorul se declanșează, Arduino generează un impuls de control și triacul se deschide. La următoarea tranziție prin zero, triacul nu mai trece curent și așteaptă ca următorul temporizator să se declanșeze. Și așa de 50 de ori pe secundă. Variabila „Dimmer” este responsabilă pentru reglarea întârzierii pentru deschiderea triacului. Citește și procesează semnalul de la potențiometru și poate lua o valoare de la 0 la 255.

Domeniul de aplicare al unui dimmer pe Arduino

Desigur, utilizați un Arduino scump pentru a controla luminozitatea lămpi cu halogen– redundant. În acest scop, este mai bine să înlocuiți un comutator convențional cu un dimmer industrial. Un dimmer pe Arduino este capabil să rezolve probleme mai grave:

  • controlează orice tip de sarcină activă (temperatura de încălzire a unui fier de lipit, încălzitor instantaneu de apă etc.) cu reținerea precisă a unui parametru dat;
  • efectuează mai multe funcții simultan. De exemplu, asigurați aprinderea lină a luminii dimineața (stingerea seara), precum și controlați temperatura și umiditatea terariului.

Puteți vedea cum se modifică tensiunea în sarcină folosind un osciloscop. Pentru a face acest lucru, un divizor rezistiv este lipit la bornele de ieșire ale variatorului, datorită căruia semnalul la punctul de control ar trebui să scadă de aproximativ 20 de ori. După aceasta, sondele osciloscopului sunt conectate la divizor și alimentarea circuitului este furnizată. Schimbând poziția butonului potențiometrului, puteți vedea pe ecranul osciloscopului cât de ușor controlează Arduino triacul și dacă există interferențe de înaltă frecvență.

Citeste si