Controler PWM de joasă tensiune pe un microcontroler cu indicație. Regulator de putere pe microcontrolerul ATtiny2313 - Regulatoare de putere - Surse de alimentare

Sănătate tuturor cititorilor Muska!
Datorită acestui site minunat, am obținut o mulțime de lucruri și cunoștințe utile și, ca răspuns, am decis să scriu primul raport pe dispozitivul nou dezvoltat. În timpul dezvoltării dispozitivului, am întâmpinat o serie de probleme și le-am rezolvat cu succes. Poate că, pentru unii dintre colegii nou-veniți, descrierea unor soluții va ajuta la creativitate.
Pentru fabricarea plăcilor de circuite imprimate, el a achiziționat un micro-burghiu și un suport pentru acesta, care transformă burghiul într-o mașină de micro-găurit. Necesitatea acestui lucru a apărut după o grămadă de burghie rupte de 0,5-1 mm atunci când sunt utilizate într-o șurubelniță și un dremel chinezesc. Dar, după cum sa dovedit, este imposibil să utilizați un astfel de instrument fără un regulator de viteză. Autoritatea de reglementare a decis să o facă singur, dobândind noi cunoștințe pe parcurs.

Am puțină experiență în radioamatori. În copilărie, pe baza cărții lui Borisov, a asamblat mai multe receptoare și intermitente pe multivibratoare. Au urmat apoi alte hobby-uri și activități.
Și apoi, ocazional, am observat Arduino, modele sculptate faimos de stații meteo, roboți și am vrut să automatizez tot ce puteam ajunge cu ajutorul microcontrolerelor. Dimensiunile controlerelor au mers în ordine descrescătoare a dimensiunii și ușurinței de încorporare - Arduino UNO, Arduino Pro Mini, apoi o mână de ATMega328P, iar pentru cele mai mici și simple dispozitive, am achiziționat ATtiny85.
Tinky a cumpărat acum mai bine de un an și mințeau și își așteptau rândul.

Comanda captură de ecran


(a existat și o termocontractie în comandă, deoarece prețul total este mai mare)


MK a sosit ca de obicei într-un pachet cu un mic folie cu bule, ei înșiși într-o grămadă într-o pungă de plastic separată. Ar fi bine, desigur, într-o cutie tare sau în spumă, dar chiar și așa nimic nu a fost îndoit și toți muncitorii.

La început, am lipit schemele pe panouri, dar după ce am citit despre LUT, mi-am dat seama că era destul de realist și mult mai convenabil să asamblam totul pe plăci de circuite imprimate normale.
De asemenea, am început treptat să colectez o unealtă utilă, printre care se număra un microburghiu MD-3 cu mandrina și o mașină de găurit mici. Ar fi posibil, desigur, să cumpăr doar un colț și să aleg motorul de undeva, dar am decis să-l cumpăr gata făcut la un magazin local.

Tipărim pe o imprimantă laser un desen pe hârtie foto lucioasă Lomond pentru imprimare cu jet de cerneală. Dar a fost o prostie să pun hârtie care nu i-a fost deloc destinată într-o imprimantă nou-nouță. Am găsit avertismente pe net că finisajul lucios al hârtiei cu jet de cerneală se poate topi, se poate lipi de cuptor și strica imprimanta. Ca să fiu sigur, am făcut un experiment - am rulat un fier de lipit încălzit la 200C pe suprafața acestei hârtie (nu am găsit temperatura exactă a aragazului, dar cam atât), hârtia s-a deformat puțin, dar nimic nu s-a topit și nu s-a lipit - deci este posibil în imprimantă.

Am călcat desenul pe tablă, am spălat hârtia. Pe tablă au rămas un model de conductoare de foarte înaltă calitate și un strat lucios de hârtie lipit. Autorul tehnologiei a recomandat să-l îndepărtezi cu o bandă electrică nu foarte lipicioasă, dar oricât m-aș strădui, fie luciul nu a fost îndepărtat deloc, fie conductorii s-au desprins cu el. De asemenea, inscripțiile au trecut imediat la bandă electrică. După ce a suferit, a luat o punte și, după ce s-a zgâriat între conductori, a rupt aproape tot luciul. E un lucru delicat și plictisitor, trebuie să inventezi ceva. Apoi, la realizarea celei de-a doua și a treia plăci, am căutat o modalitate de a scăpa de luciul blestemat, dar tipărirea nici pe o pagină de revistă, nici pe bază de autoadeziv nu a dat o imagine atât de calitativă, urmele s-au încețoșat sau a cazut. Dar, pe de altă parte, mi-am dat seama că nu era necesar să curăț luciul hârtiei fotografice până la zero - a fost suficient să zgârieți măcar puțin între șine pentru ca soluția să acceseze cuprul, iar în unele locuri a fost gravat fara zgarieturi, prin luciu.

Am decis să muresc cuprul cu o soluție de peroxid de hidrogen și acid citric ca cea mai accesibilă compoziție. Opțiuni posibile pentru gravarea chimiei cu calcule pot fi vizualizate aici

Am luat peroxid din trusa de prim ajutor, a fost cumparata acum vreo 3 ani, a iesit data de expirare acum vreo 2 ani, am crezut ca este deja epuizata si nu va merge deloc. Cu toate acestea, m-am înșelat, tabla a fost murată foarte vesel - în aproximativ trei minute. Iată rezultatul:

O pistă a suferit zgârieturi cu o punte, a fost restaurată cu un terminal de rezistență mușcat. Plus găuri minore de la încercarea de a folosi bandă electrică. Este necesar să achiziționez un marker potrivit, dar deocamdată, unde am putut, l-am uns cu lac.

Am cositorit placa cu un fier de lipit folosind o împletitură. Am lipit detaliile.




Rafturile înalte din alamă înșurubate unul în celălalt pe ambele părți ale plăcii prin găurile de montare sunt un lucru la îndemână, puteți pune placa fără carcasă pe masă în timpul instalării și depanarea pe ambele părți, fără teama de a zdrobi sau scurtcircuita ceva.

Dintre cele mai consumatoare de timp, a fost să târâiți și să lipiți LED-urile de ieșire din partea conductorilor. Am decis să folosesc partea de lipire ca față, pentru că. pe el, înălțimea pieselor este mult mai mică, iar trecerea arborelui rezistor variabil prin placă reduce lungimea acestuia la cea dorită.

Condensatorul C2 din diagrama conectat la Reset nu s-a lipit, deoarece. deși crește fiabilitatea pornirii dispozitivului, se poate supăra atunci când aprinde MK.

Microcontrolerul a fost lipit ultimul, înainte de asta am conectat placa la PSU și m-am asigurat că nimic nu se va arde imediat și stabilizatorul va da 5V obișnuit. Nu a fumat nimic și prin urmare conectăm programatorul la pinii ICSP și completăm firmware-ul de testare.

Vom scrie firmware-ul dispozitivului în mediul de programare Arduino familiar pentru mulți, după ce îi vom adăuga suport pentru microcontrolere ATtiny, le vom descărca și despachetăm în folderul Arduino / hardware.

Schița de testare (nu văd rostul) a citit pur și simplu stările semnalelor de intrare și le-a afișat pe ieșirile disponibile cu LED-urile conectate. Deoarece avem 4 canale de intrare, si doar 2 canale de iesire, a trebuit sa verificam in mai multe etape.

Totul a funcționat conform așteptărilor, cu excepția unui singur lucru - butonul conectat la un canal cu un LED verde nu era lizibil, iar LED-ul era vizibil mai strălucitor decât roșu. Măsurătorile efectuate de tester au arătat că, în starea PB0, mai mult de 20 mA curge ca ieșire prin LED și doar 2,1 V cade pe acesta. Și în starea de intrare cu un pull-up intern pe picior, doar 1.74V când butonul este eliberat și 0.6V când este apăsat. Nu este surprinzător faptul că se citește în mod constant 0. LED-ul verde de joasă tensiune, fără măcar să aprindă când curgea un curent de microamperi, a risipit tensiunea pe picior. Acum este clar de ce în articolul original 2 LED-uri au fost conectate în serie.

Dar punerea unui al doilea LED care să strălucească prostesc în interiorul cutiei ca balast (și nici 2 identice pe panoul frontal nu sunt necesare) părea a fi o soluție oarecum strâmbă. M-am gândit cum altfel puteți crește tensiunea în circuitul LED și mi-am amintit CVC-ul diodei zener. Dacă conectăm în serie cu LED-ul opus acestuia o diodă zener de 2V (pentru a funcționa corect, pe ramura inversă a CVC-ului), atunci obținem exact ceea ce ne trebuie. Când LED-ul este aprins la un curent de 10 mA, dioda zener se sparge și nu interferează cu fluxul de curent, ci doar stabilizează tensiunea care cade pe el la un anumit nivel. Este necesar doar înlocuirea rezistenței de limitare a curentului, pe baza faptului că este deja necesară suprimarea tensiunii Ures=5V-2.1V-2.0V=0.9V cu 10mA, adică. R=90 Ohm. Și când piciorul este comutat la intrare cu un pull-up - din cauza abruptului ramificației CVC până la întreruperea tranziției, dioda zener este echivalentă cu un rezistor de înaltă rezistență și va scădea din nou aproximativ 2V, ridicând tensiunea de pe piciorul MK atunci când butonul este eliberat la 4V, care este deja citit ca TRUE. Când butonul este apăsat, piciorul va fi tras până la 5V de un rezistor intern cu o rezistență de aproximativ 40KΩ (după calculele mele), iar la sol de un rezistor de 5KΩ (care va deriva circuitul LED), adică. va avea aceeași 0,6V și este considerat FALS.
Am lipit dioda zener cu un baldachin în serie cu rezistența și butonul a funcționat așa cum trebuie.

Acum este rândul să verificăm funcționarea PWM-ului și și aici au apărut probleme. Comanda standard Arduino AnalogWrite (picior, umplutură) nu a vrut să funcționeze. Deci ceva nu este în regulă cu biblioteca Tinka. Fișă tehnică utilă pentru lână pe MK și pe Internet.

S-a dovedit interesant:
- 2 canale PWM (OC0A, OC0B) pot fi transmise la pinii 5, 6 (PB0, PB1), fiecare operand cu propria sa setare de umplere (dar aceeasi frecventa) de la Timer 0;
- al treilea canal PWM care operează de la Timer 1 poate fi scos la pinii 2, 3 (PB3, PB4), iar un semnal PWM direct (OC1B) poate fi transmis către partea 3, iar versiunea sa inversă (/OC1B) poate fi transmisă la piciorul 2. Dar ieșirea merge fie numai la al treilea picior, fie la ambele deodată. Și avem nevoie de PWM pe piciorul 2, cel puțin invers (o inversăm programatic înapoi), așa că va trebui să configuram ieșirea pentru 2 și 3 picioare, iar semnalul nu va merge la 3 doar pentru că este declarată intrare.

Deci, din câte am înțeles, în pachetul de asistență ATtiny pentru Arduino, canalul PWM de la Timer 1 poate fi scos doar la piciorul 3. Aparent, ieșirea versiunii sale inverse a fost considerată exagerată. Va trebui să configurați singur cronometrul și PWM (vezi codul, funcția PWM3_init), în loc să utilizați AnalogWrite.

Am observat, de asemenea, că atunci când reconfigurați Timer 1, munca funcției millis () este pierdută - se dovedește că Timer 1 este folosit implicit pentru ceasul intern.Dar puteți reconfigura ora la Timer 0 folosind definițiile macro din fișier Arduino\hardware\tiny\cores\tiny\core_build_options h
/* Din diverse motive, Timer 1 este o alegere mai bună pentru milis timer pe procesorul „85. */ #define TIMER_TO_USE_FOR_MILLIS 0
Pe care îl vom folosi, deoarece Timer 0 din acest proiect este complet gratuit.

A existat și o întrebare despre intervalul de setare a vitezei citit de la rezistența variabilă. Autorul circuitului original a adăugat un rezistor constant de 36K în serie cu variabila 10K, aparent pe baza că codul ADC s-ar încadra în intervalul 0-255. Chiar s-a dovedit 0-230, iar maximul a înotat. Și aș dori exact 0-255 pentru a se potrivi cu setarea de scară completă cu un PWM de 8 biți. Pentru a face acest lucru, am dezlipit constanta și am înlocuit-o cu un jumper + 5V, ADC-ul a început să citească întreaga gamă și am aruncat cei 4 biți mai puțin semnificativi în mod programatic. Și de ce a fost nevoie de detalii suplimentare?

După testarea canalelor de intrare/ieșire, încărcăm firmware-ul de luptă în microcontroler, scris în C în mediul Arduino pe baza surselor BASIC ale autorului circuitului original.

Textul programului

// Attiny85 la 1MHz // Nu uitați să setați temporizatorul 0 pentru milis etc! // Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0 #include // Conexiuni #define MODE_LED_PIN PIN_B0 #define MODE_BUT_PIN MODE_LED_PIN #define PWM_LED_PIN PIN_B3 #define AM_PIN PIN_B1 #define SP_PIN A1 #define CUR_PIN A2 // State #define MODE_MANUAL SET_2 #define MODE_MANUAL 0 #defini MODE_1_WA #defini MODE_1 _SETUP_MAX 3 #define MODE_START 4 #define MODE_DRILLING 5 #define MODE_STOP 6 // Variabile byte Mode = MODE_MANUAL; byte ModelLedVal = LOW; octet SetPoint = 0; int CurrentFiltered = 0; octet CurrentU8 = 0; byteAMBbutton; byteAMButtonFlt = LOW; octet static ModeButton; octet static ModeButtonFlt = HIGH; // valoarea inițială pentru octetul static ModeButtonOld = LOW; // declanșează excepții la pornire octet static SetupStep = false; BlinkFromMs lung nesemnat; nesemnat lung StartFromMs; ModeFromMs lung nesemnat; octet W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff; void PWM3_init() ( // Configurați PWM pe PB3 (pin 2) folosind Timer 1 TCCR1 = _BV (CS11) | _BV (CS10); // prescaler /4 GTCCR = _BV (COM1B0) | _BV (PWM1B); // ștergeți OC1B la comparație OCR1B = 255; // ciclu de lucru inițial 0% (utilizați ieșire inversată!) OCR1C = 255; // frecvența PWM = 1 kHz (1.000.000 /4 /256) ) void analogWrite_PB3(uint8_t duty_value) ( ​​​​// analogWrite on PIN_B3 OCR1B = 255-duty_value; // umplutură 0-255 (0-100%) (utilizați ieșire inversată!) octet ScanButton(void) ( // Buton de citire conectat la o ieșire cu LED // Versiune mai rapidă cu ieșire de restaurare și niciun PWM nu dezactivează valoarea octetului, port_bak; port_bak = PORTB; // salvează DDRB de ieșire &= ~(1<interval))( \ outvar = varname;\ )\ )\ else (\ __lastChange_##varname=millis();\ ) // Initialization void setup() ( pinMode(MODE_LED_PIN, OUTPUT); // starea principală - indicație pinMode (PWM_LED_PIN, OUTPUT); PWM3_init(); // restabilirea setărilor din EEPROM dacă acestea sunt acolo dacă (EEPROM.read(11)==0xAA) ( Wxx = EEPROM.read(0); Wmax = EEPROM.read(1) ; Uon = EEPROM.read(2); Uoff = EEPROM.read(3); ) else ( // valorile implicite ​​Wxx = 1; Wmax = 255; Uon = 255; // exclude startul înainte de reglarea Uoff = 0 ; ) // Accelerare lină la ralanti sau setare manuală dacă (digitalRead(AM_PIN)==HIGH) W0 = Wxx; altfel (W0 = 255- (analogRead(SP_PIN) >> 2); // 0-255, rezistor variabil avem invers) W1 = 0; pentru (W=0; W<=W0; W++) { analogWrite_PB3(W); W1 = W1 + 4; delay(W1); } delay(800); Mode = MODE_WAITING; } // Рабочий цикл void loop() { // Индикация текущего режима морганием switch (Mode) { case MODE_MANUAL: ModeLedVal = LOW; // выключено break; case MODE_WAITING: (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; // в полнакала break; case MODE_START: case MODE_DRILLING: case MODE_STOP: ModeLedVal = HIGH; // на полную break; case MODE_SETUP_XX: if ((millis()-BlinkFromMs >400)) ( // rar (ModeLedVal==HIGH) ? ModelLedVal=LOW: ModelLedVal=HIGH; BlinkFromMs = millis(); ) break; caz MODE_SETUP_MAX: if ((millis()-BlinkFromMs > 100)) ( // adesea (ModeLedVal==HIGH) ? ModelLedVal=LOW: ModelLedVal=HIGH; BlinkFromMs = millis(); ) break; ) digitalWrite(MODE_LED_PIN, ModelLedVal); // Comutator comutator Auto/Manual, se deschide în Auto și citește HIGH AMButton = digitalRead(AM_PIN); Debounce (AMButton, AMButtonFlt, 200); // Buton Setări, citit printr-o procedură specială deoarece combinat cu LED-ul, când este apăsat, se afișează LOW ModeButton = ScanButton(); Debounce(ModeButton, ModeButtonFlt, 200); SetupStep = (ModeButtonFlt==LOW) && (ModeButtonOld==HIGH); ModeButtonOld = ModeButtonFlt; // Spinner SetPoint = 255- (analogRead(SP_PIN) >> 2); // 0-255, rezistența noastră variabilă s-a dovedit a fi inversă // Curent motor // Filtru principal RC-chain 36K + 68nF (constantă de timp 2,5 ms, frecvență de tăiere 65 Hz) de ordinul y(i) = y(i-1) ) + alpha*(x(i)-y(i-1)) // (aka Exponential Moving Average, EMA) // în filtru, în loc de float, folosim precizie crescută int, pentru care deplasăm la stânga cu free 5 biți (semnul va fi în continuare util) // înlocuiți înmulțirea cu coeficientul fracțional alfa cu o deplasare la dreapta // (6 = /64 = *0,016) 100 de cicluri - 80% din valoare, 200 de cicluri - 96 % din valoare, 369 cicluri - valoare 99,6% // (5 = /32 = *0,031) 50 cicluri - valoare 80%, 100 cicluri - valoare 96%, 179 cicluri - valoare 99,6% // (4 = /16 = *0,063) 25 cicluri - valoare 80%, 50 cicluri - valoare 96%, 90 cicluri - valoare 99,6% // (3 = /8 = *0,125) 12 cicluri - valoare 80%, 25 cicluri - valoare 96%, 45 cicluri - 99,6% valoare // perioada de rulare = ADC 110µs + program = 0,2 ms // constantă de timp = 8 * 0,2 ms = 1,6 ms, frecvență de tăiere 625 Hz CurrentFiltered = CurrentFiltered + (((analogRead(CUR_PIN)<< 5) - CurrentFiltered) >> 3); // pentru ușurință în utilizare, aruncați la 0-255 // (deplasarea înapoi cu 5 biți și 2 biți înalți sunt aruncați pentru că totul este interesant (inactiv)<1В) CurrentU8 = byte (CurrentFiltered >> 5); // dacă >1В nu trebuie confundat cu cele mici dacă ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255; // Stați comutatorul mașinii (Mod) (cazul MODE_MANUAL: // Control manual cu o răsucire analogWrite_PB3(SetPoint); if (SetupStep) Mode = MODE_SETUP_XX; if (AMButtonFlt==HIGH) ( // Încetiniți când treceți la mașină analogWrite_PB3 (Wxx); StartFromMs = millis(); Mode = MODE_STOP; ) break; case MODE_WAITING: // Așteptați ca curentul să crească dacă (CurrentU8 > Uon) ( // Start StartFromMs = millis(); analogWrite_PB3(Wmax); Mode = MODE_START; ) if (SetupStep ) Mode = MODE_SETUP_XX; if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_START: // Se rotește dacă (millis()-StartFromMs > 300) Mode = MODE_DRILLING; dacă (AMButtonFlt== =LOW) Mod = MODE_MANUAL; break ; case MODE_DRILLING: // Foraj, așteptând scăderea curentului dacă (CurrentU8< Uoff) { // Тормозим analogWrite_PB3(Wxx); Mode = MODE_STOP; } if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_STOP: // Тормозим и ждем пока выйдем на ток ХХ if (CurrentU8 < Uon) { // Замедлились if (millis()-StartFromMs >300) // modul sigur = MODE_WAITING; ) else ( StartFromMs = millis(); ) if (AMButtonFlt==LOW) Mode = MODE_MANUAL; pauză; case MODE_SETUP_XX: // Setare inactiv Wxx = SetPoint; analogWrite_PB3(Wxx); if (SetupStep) ( Uon = byte(1.1 * CurrentU8); EEPROM.write(0,Wxx); EEPROM.write(2,Uon); Mode = MODE_SETUP_MAX; ) break; case MODE_SETUP_MAX: // Setarea RPM max Wmax = SetPoint; analogWrite_PB3(Wmax); if (SetupStep) ( Uoff = octet(1.1 * CurrentU8); EEPROM.write(1,Wmax); EEPROM.write(3,Uoff); EEPROM.write(11.0xAA); // Frână analogWrite_PB3(Wxx); StartFromMs = millis(); Mod = MODE_STOP; ) break; implicit: Mod = MODE_WAITING; întoarcere; ) )


Conectăm un rezistor de 5 wați și 2,2 ohmi ca șunt. Pentru a proteja circuitul de supratensiuni inductive pe marginea de fugă a PWM, conectăm o diodă Schottky SS34 în paralel cu motorul și pentru a suprima interferența de la înfășurările de comutare, un condensator de 100nF. Și începem să testăm pentru a controla motorul burghiului.

Scoate imediat urletul furios al PWM la 4KHz (1MHz / 256). Adăugăm setarea divizorului /4 - sa simțit imediat mai bine, deși scârțâitul nu a dispărut, dar din anumite motive 1KHz este mult mai ușor de tolerat chiar și cu funcționarea prelungită.

În modul manual, viteza motorului este reglată în mod normal cu 0-100%, iar în ADC automat al circuitului de feedback citește tot timpul valoarea MAX și nimic nu funcționează. Pe parcurs, observ că placa emite un bip puternic chiar și atunci când motorul este oprit. wtf?

Luăm un tester, scoatem un osciloscop și începem să studiem ce oferim și ce obținem. Și ne scăpăm fălcile. Pe șunt, în loc de undele de curent înclinate ușor prin inductanță la începutul impulsurilor PWM, vedem ace de zeci de volți. Aceasta înseamnă că un curent pulsat de zece amperi trece prin șunt! Și chiar și cu motorul oprit. Deloc surprinzător, bordul a sunat. Dar ce închide circuitul fără motor? Condensator mic de 100 nF! Poate și va suprima interferențele la comutarea înfășurărilor, dar deocamdată organizează un scurtcircuit pe termen scurt la fiecare perioadă PWM! Concluzie - condensatorul de suprimare a zgomotului nu este compatibil cu controlul și controlul PWM folosind un șunt, acesta trebuie îndepărtat.

Și apoi îmi dau seama că aceste supratensiuni de înaltă tensiune merg aproape direct la ADC-ul tinka (deoarece există un detector de amplitudine, condensatorul de pe picior este încărcat la tensiunea maximă din ac și îl stochează în siguranță, deoarece descărcarea se face doar printr-o scurgere de diodă). Tinka nu pare să moară încă, dar ce rămâne cu piciorul ei? Instrumentele arată o tensiune constantă pe picior de 5,2V, mai mare decât tensiunea de alimentare, dar restul unde s-a dus? Ne amintim că, pentru a combate supratensiunile, are diode special antrenate pentru sursele de alimentare „+” și „-”, care elimină excesul în PSU. Dar diodele încorporate sunt fragile și nu ar trebui să contați prea mult pe ele.

Scoatem nenorocitul de condensator, măsurăm tensiunea cu piciorul - funcționează! MK de încredere face Atmel! Se pare că a salvat că capacitatea condensatoarelor era scăzută, au pompat puțină încărcare.

Fără un condensator, acele au dispărut, placa a încetat să redea muzică, piciorul pare să măsoare cu adevărat amplitudinea curentului de impuls PWM. Începem procedura de configurare și încercăm să forăm. Se pare că totul este așa cum ar trebui - adaugă revoluții sub sarcină și îl resetează când iese burghiul. Dar nu numai - de câteva ori pe minut accelerează spontan și încetinește fără sarcină. De ce nu este clar, instrumentele nu arată nimic. Fie piciorul este ars, fie capacitatea firelor generează ace invizibile ca acel conder, fie interferența de la același colector urcă.

Apoi m-am hotărât să tratez problema în mod radical, pentru că am observat că detectorul de vârf nu este folosit în nicio altă schemă. Dimpotrivă, valoarea integrală a curentului trecut prin filtrele RC este controlată peste tot. Și astfel de măsurători sunt pur și simplu insensibile la interferențe sub formă de emisii unice. Schimbăm dioda într-un rezistor - iar detectorul de amplitudine se transformă într-un filtru trece-jos.

Tensiunea modificată de ADC a scăzut imediat cu un ordin de mărime - tensiunea de funcționare este mult mai mică decât amplitudinea în cazul unui semnal sub formă de unde blânde cu pauze între ele. A trebuit să prindem o tensiune de aproximativ 0,2 V. Desigur, a fost posibil să creștem rezistența șuntului, dar tocmai în acest scop am îngrădit PWM-ul pentru a încălzi atmosfera. Și cu o umplere mare PWM și o sarcină pe motor, puteți obține o supratensiune. Prin urmare, va trebui să lucrați cu U inactiv scăzut.

Răspunsul la sarcină pare să fi încetinit și el. Accelerația începe în aproximativ o jumătate de secundă, dar nu văd o mare problemă în asta - doar burghiul se va instala și trece prin cupru la viteze mici. Și nu mai există începuturi false. Poți lucra.

Schema finală a dispozitivului:


Dispozitivul a fost montat într-o carcasă, care era o instalație electrică închisă ermetic „Cutie de cabluri din plastic Tuso fără presetupe 120x80x50 mm, IP55 gri 67052 Ruvinil Rusia”. Am vrut să găsesc unul mai plat, dar nu am găsit nimic de genul 110 * 60 * 30. Pentru a nu planta ghirlande pe masă, am răsucit regulatorul cu alimentatorul într-un singur întreg. Cărămida s-a dovedit a fi nobilă, dar nici măcar nu o putem purta în buzunar. Și, deși după ce am făcut câteva zeci de găuri, nu a existat o încălzire vizibilă a câmpului de cheie, șunt și stabilizator, am forat puțină ventilație în partea de jos și a peretelui din spate.







De atunci, mașina cu regulator a participat la crearea a încă 2 plăci (puteți vedea câte a fost nevoie pentru a găuri conform cuvintelor "AVR Fusebit Doctor". Sunt foarte mulțumit de munca lui.

De asemenea, vreau să remarc că burghiele din carbură cu Ali au o tijă de 3,2 mm, iar clemele au fost doar 3,0 și 3,5 - nu se potrivesc într-un burghiu, dar nu se fixează în cealaltă. Am înfășurat sârmă de cupru pe burghiu și l-am introdus cumva în 3,5 mm, dar era urât. Daca cineva a intalnit o manta de 3,2 cu un diametru de 6 mm (pretutindeni, cu exceptia Dremel, cu o coada la sol pana la 5 mm), spune-mi.

La schimbarea burghiului, procedura de reglare trebuie repetată - aparent, momentul diferit de inerție al unui burghiu convențional „subțire” și al unui burghiu din carbură cu tijă îngroșată afectează curentul motorului. Dar acest lucru se face rapid și nu deranjează. Cei care doresc pot adăuga salvarea profilelor de foraj la firmware :)

Am întâlnit în mod repetat sfatul de a găuri scânduri sub un strat de apă, pentru a nu respira pilitura de sticlă. nu am putut obține. Poziționați cu precizie burghiul când este înalt, refracția în apă interferează, ochiul se înclină. Iar când burghiul intră în apă, încep să treacă ondulații și nu se vede deloc. Este necesar să setați burghiul oprit și apoi să îl porniți? Drept urmare, am pus pur și simplu un vas cu apă lângă el și am scufundat periodic placa în ea - pentru a umezi și spăla rumegușul. În acest caz, rumegușul este umed și nici nu zboară, se adună într-un con peste orificiu.

Și încă o digresiune lirică, despre elementele de fixare mici.

Am decis să pun un conector de alimentare de tipul „DS-225, priză de alimentare pe panou” în dispozitiv. Pentru fixarea acestuia au fost necesare șuruburi cu piulițe cu filet de 2,5 mm. Nu s-a găsit nimic potrivit în dulap și apoi mi-am amintit că la un alt articol erau necesare șuruburi de 2 mm. Deci, merită să completați colecția de elemente de fixare, astfel încât data viitoare să nu zburați în celălalt capăt al regiunii de dragul unei nuci. În magazinele de construcții s-a întâlnit nimic mai puțin decât M3-ul, așa că trebuie să cauți specialiști.

Primul magazin relativ convenabil a fost un lanț
Înăuntru, ochii au fugit de tot felul de lucruri utile, dar asta e ghinion - cele mai mici șuruburi erau doar M2,5 de aceeași lungime, dar nu există piulițe și șaibe pentru ele și nu se întâmplă niciodată! M-a impresionat vânzarea de nuci la bucată la 2r/buc și turnarea tot ce am cumpărat într-o singură geantă-cămașă (nu existau pungi mici pentru diferite dimensiuni). Din nou, este neprofitabil să luați în rezervă dimensiuni diferite.

Salvat de un alt magazin de elemente de fixare -
Aici există într-adevăr totul în stoc, de la M1.6, cu sloturi și capete diferite, vândute la bucată și la greutate, și la un preț cu un ordin de mărime mai mic decât concurentul anterior. Dar trebuie doar să mergi imediat la magazinul de pe strada Plekhanov, altfel am fost mai întâi la magazinul de lângă stația de metrou Perovo și am fost foarte surprins de prețul anunțat. Și s-a dovedit că au doar oțel inoxidabil, iar pentru elementele de fixare obișnuite trebuie să mergi în zona industrială de pe barele transversale.

Plănuiesc să cumpăr +67 Adauga la favorite Mi-a placut recenzia +76 +152

Există un număr imens de circuite clasice de control cu ​​tiristoare și triac, dar acest controler este realizat pe o bază de elemente moderne și, în plus, a fost unul de fază, adică. nu trece întreaga jumătate de undă a tensiunii de rețea, ci doar o parte din aceasta, limitând astfel puterea, deoarece deschiderea triacului are loc numai la unghiul de fază dorit.

Când circuitul este pornit pentru prima dată, pe indicatorul de segment se aprinde cifra 0. Pornirea și oprirea se efectuează prin apăsarea și menținerea simultană a două butoane ale microîntrerupatorului. Ajustare mai mult sau mai puțin - fiecare apăsare individual. Dacă nu apăsați niciunul dintre comutatoarele comutatoare, atunci după ultima apăsare, după două ore, regulatorul se va opri singur, indicatorul va clipi până atunci în stadiul ultimului nivel de lucru al consumului de energie.

În momentul în care dispozitivul este deconectat de la rețea, este stocat ultimul nivel de putere de ieșire, care va fi setat automat la următoarea pornire. Ajustarea este efectuată în intervalul de la 0 la 9 și mai departe de la A la F. Adică, există un total de 16 pași de ajustare.

Radiatorul din fotografia de mai sus este destul de mare, designul vă permite să puneți o opțiune mai mică, dar nu am avut alta. Când am pornit dispozitivul pentru prima dată, 0 a clipit pe display, circuitul nu a reacționat la apăsarea butoanelor. Înlocuind condensatorul de alimentare cu o valoare nominală de 1000 de microfaradi, problema a dispărut.

Placa de circuit imprimat în format și firmware-ul microcontrolerului sunt plasate într-o arhivă la linkul de mai sus.

Circuitul este utilizat pentru controlul lin al puterii în sarcină. Metoda de control se bazează pe metoda de control al fazei triac. Esența sa constă în omiterea unei părți a semiciclului de tensiune alternativă de rețea. Curentul furnizat sarcinii este proporțional cu integrala semnalului primit. Baza designului este microcontrolerul PIC16F1823.

Dispozitivul suportă sarcini active (lampă cu incandescență, încălzitor) și inductive. Microcontrolerul este tactat de la un oscilator intern. Semnalul de sincronizare cu rețeaua vine de la puntea redresorului la intrarea comparatorului intern al microcontrolerului printr-un filtru pe R10, C5, R9, R8, C3. Tensiunea de referință a comparatorului provine de la DAC-ul intern al microcontrolerului și este de aproximativ 0,6 V, care este setată în timpul configurației MK. Dioda D6 este utilizată pentru a elimina influența capacității C6 asupra sincronizării. Indicatia se face pe E30561 cu catod comun.

Din punct de vedere structural, dispozitivul este asamblat pe două plăci de circuite imprimate. Pe unul sunt butoanele indicator și control, iar pe celălalt MK, alimentare și triac. Plăcile sunt conectate cu un fir MGTF.

Cu radiatorul triac (HS-135-38), așa cum se arată în figură, puterea maximă de încărcare este de aproximativ 500W. În consecință, un loc pe placa de circuit imprimat este realizat pentru acest radiator.

Firmware-ul pentru MK este realizat în mediul MPLAB în limbajul C pentru compilatorul HI-TECH PICC 9.83. Puteți descărca plăci de circuite imprimate, firmware și proiectul MPLAB din linkul de mai sus.

Designul este reglementat folosind un triac tip BT138. Managementul căruia se realizează prin MC. Afișajul digital LED arată cât de procente este deschis triacul la ora curentă. Partea logică a circuitului este alimentată de o sursă de alimentare, a cărei bază este un regulator de tensiune DA1 7805.

Acest circuit este perfect pentru reglarea separată a puterii de ieșire pentru două sarcini diferite, de exemplu, încălzitoare, lămpi, motoare electrice. Puterea maximă de încărcare depinde de tipul de taste care o comută. În diagrama de mai jos, tranzistoarele KT819 acționează ca atare, dar pot exista și alte opțiuni, în funcție de puterea necesară a ambelor sarcini. Dispozitivul generează semnale de impuls care merg la oricare dintre comutatoarele de alimentare.

Dispozitivul generează semnale de impuls, lățimea impulsurilor acestora poate fi ajustată în 256 de grade egale. Pentru a controla circuitul, se folosesc rezistențe variabile, conectate la porturile RV3 și RV4 ale MK, care funcționează cu ADC. ATtiny13 măsoară valoarea rezistorului variabil și setează lățimea impulsului semnalului de impuls de ieșire după comutatorul care controlează sursa de alimentare la o sarcină specifică. Adică, rotind butonul de rezistență variabilă, puterea este reglată. O astfel de ajustare, în comparație cu setarea cu butoanele „mai puțin” și „mai mult”, este mai convenabil de utilizat, datorită vitezei sale. Există un conector ISP6 pentru programarea dispozitivului. La programare, setăm siguranțele implicit, lucrând cu un generator RC de ceas intern la o frecvență de 9,6 MHz. Arhiva cu codul sursă al firmware-ului, o luăm din linkul de mai sus.

Reglarea vitezei motoarelor electrice în tehnologia electronică modernă se realizează nu prin modificarea tensiunii de alimentare, așa cum se făcea înainte, ci prin aplicarea impulsurilor de curent cu durată diferită motorului electric. În aceste scopuri, ele servesc, care au devenit recent foarte populare - PWM ( modulat pe lățimea impulsului) regulatori. Circuitul este universal - este, de asemenea, un regulator de viteză a motorului și luminozitatea lămpilor și puterea curentului din încărcător.

Circuitul controlerului PWM

Schema specificată funcționează bine, atașată.

Fără a modifica circuitul, tensiunea poate fi ridicată la 16 volți. Setați tranzistorul în funcție de puterea de sarcină.

Poate fi asamblat Regulator PWMși conform unui astfel de circuit electric, cu un tranzistor bipolar convențional:

Și dacă este necesar, în locul tranzistorului compozit KT827, puneți câmpul IRFZ44N, cu un rezistor R1 - 47k. Polevik fără calorifer, cu o sarcină de până la 7 amperi, nu se încălzește.

Funcționarea controlerului PWM

Temporizatorul de pe cipul NE555 monitorizează tensiunea de pe condensatorul C1, care este scos din pinul THR. Imediat ce atinge un maxim, tranzistorul intern se deschide. Care scurtează pinul DIS la masă. În acest caz, la ieșirea OUT apare un zero logic. Condensatorul începe să se descarce prin DIS și atunci când tensiunea peste acesta devine zero, sistemul va trece la starea opusă - la ieșirea 1, tranzistorul este închis. Condensatorul începe să se încarce din nou și totul se repetă din nou.

Sarcina condensatorului C1 urmează calea: „R2->brațul superior R1 -> D2”, iar descărcarea de-a lungul căii: D1 -> brațul inferior R1 -> DIS. Când rotim rezistorul variabil R1, schimbăm raportul dintre rezistențele brațelor superioare și inferioare. Ceea ce, în consecință, schimbă raportul dintre lungimea pulsului și pauză. Frecvența este stabilită în principal de condensatorul C1 și depinde puțin și de valoarea rezistenței R1. Schimbând raportul rezistență încărcare/descărcare, schimbăm ciclul de funcționare. Rezistorul R3 oferă o ieșire pull-up la un nivel înalt - deci există o ieșire de colector deschis. Care nu este capabil să stabilească un nivel înalt de unul singur.

Puteți pune orice diode, condensatoare de aproximativ aceeași valoare ca în diagramă. Abaterile de un ordin de mărime nu afectează în mod semnificativ funcționarea dispozitivului. La 4,7 nanofarad setati in C1, de exemplu, frecventa scade la 18 kHz, dar este aproape inaudibila.

Dacă, după asamblarea circuitului, tranzistorul de control al cheii se încălzește, atunci cel mai probabil nu se deschide complet. Adică, tranzistorul are o cădere mare de tensiune (este parțial deschis) și curentul curge prin el. Ca rezultat, mai multă putere este disipată pentru încălzire. Este de dorit să puneți în paralel circuitul la ieșire cu condensatori mari, altfel va cânta și va regla prost. Pentru a nu fluiera - ridicați C1, fluierul vine adesea de la el. În general, domeniul de aplicare este foarte larg, mai ales promițătoare va fi utilizarea sa ca dimmer pentru lămpi LED de mare putere, benzi LED și spoturi, dar mai multe despre asta data viitoare. Articolul a fost scris cu sprijinul ear, ur5rnp, stalker68.

Foarte des este necesar să se poată regla curentul care curge prin lămpi sau elemente de încălzire. Deoarece au o sarcină rezistivă, cea mai ușoară soluție este asamblarea unui mic regulator PWM (din engleză PWM - pulse-width modulation). Deoarece circuitele simple bazate pe cronometre NE555 nu au fost de interes, s-a decis să dezvoltăm și să asamblam propriile noastre, oarecum similare cu.

Circuitul, în ciuda prezenței microcontrolerului PIC18LF2550, este foarte simplu de repetat și poate fi împărțit condiționat în 3 părți:

generator PWM

Microcontrolerul generează impulsuri clare cu forma dorită și ciclul de lucru, ceea ce simplifică foarte mult circuitul. Există două butoane pentru a crește și a reduce puterea. Acestea merg la pinii 3 și 5 ai cipul PIC18LF2550. În funcție de lățimea impulsului - LED-ul clipește mai lent sau mai repede, astfel încât să puteți evalua vizual ciclul de funcționare. Dacă LED-ul strălucește complet - puterea este de 100%, iar dacă se stinge, atunci ciclul de funcționare este de 0%.

sursa de alimentare pentru microcontroler

Stabilizatorul MK este de 3,3 volți, prin urmare, în funcție de tranzistorul de ieșire, puteți utiliza o sursă de alimentare de la 3,7 la 25 de volți. Frecvența de comutare este de 32 kHz, iar lățimea impulsului este împărțită în 256 de pași, inclusiv pornirea și oprirea completă.

Comutator de sarcină

Driverul pentru tranzistorul MOSFET este 2N3904 obișnuit. Tranzistorul de putere în sine poate fi orice MOSFET potrivit cu canal N, nu neapărat ca în circuitul 80NF55L.

Această versiune a controlerului PWM cu 4 canale și 8 biți este proiectată folosind microcontrolerul ATmega16. Dispozitivul conține o interfață RS232 pentru controlul computerului, o interfață pentru o tastatură cu 12 butoane și 4 canale analogice pe 10 biți pentru conectarea potențiometrelor. Pentru a afișa modurile și parametrii actuali de funcționare, există un afișaj LCD cu 4 linii. În plus, controlerul PWM are: 4 ieșiri LED pentru indicarea modurilor de control (pot fi utilizate ca ieșiri de uz general), 3 ieșiri de uz general.

Dispozitivul are setări foarte flexibile. De exemplu, parametrii canalelor PWM pot fi controlați prin comenzi de la un computer, prin intermediul controlerelor analogice (potențiometre) sau folosind o tastatură (cu o interfață cu utilizatorul afișată pe un indicator LCD). Indicatorul LCD în sine poate fi controlat și prin RS232, afișarea setărilor și modurilor curente este posibilă în format numeric sau grafic.

Principalele caracteristici ale dispozitivului:

  • PWM cu 4 canale, rezoluție 8 biți, frecvență PWM - 31 kHz;
  • Interfata RS232 pentru control si monitorizare PC;
  • design simplu de circuit cu un număr minim de elemente externe;
  • tastatura cu 12 butoane;
  • posibilitatea de reglare analogică;
  • până la 7 linii de ieșire de uz general;
  • display LCD cu 4 linii;
  • Control afișaj LCD prin interfață serială;
  • meniul utilizatorului;
  • setări flexibile;
  • implementare software a bufferelor FIFO pentru a accelera munca.

Ieșirile de uz general (inclusiv indicatoarele LED) sunt controlate de la un computer (RS232), utilizatorul are și capacitatea de a citi istoricul apăsărilor de taste de pe tastatură (ultimele 32 de apăsări de taste sau imediat după apăsarea oricărei taste).

Datorită unor astfel de setări flexibile, prin alegerea setării adecvate, controlerul PWM poate fi utilizat în diverse aplicații și ca dispozitiv de sine stătător. Designul folosește microcontrolerul ATmega16, numărul minim de elemente externe, deoarece tot controlul și managementul sunt efectuate de microcontrolerul însuși. Este posibil ca utilizatorul să folosească numai componentele necesare, de exemplu, indicatorul LCD, dacă nu este necesar, poate fi omis.

Schema logică a dispozitivului.

Schema schematică a dispozitivului

Designul circuitului este foarte simplu. A fost selectat un rezonator de cuarț de 8 MHz pentru tactarea microcontrolerului, o sursă de alimentare de +5,0 V a fost asamblată pe un stabilizator integrat LM7805, o inductanță de 10 μH și un condensator de 100 nF formează un filtru care împiedică pătrunderea interferențelor la comutarea în analog. circuite. Convertorul de nivel logic MAX232 este utilizat pentru implementarea interfeței seriale. Indicator LCD bazat pe chipset-ul Hitachi (HD44780) cu o rezoluție de 20x4 sau 40x2. Unitatea de control al luminii de fundal a indicatorului este implementată pe tranzistorul MJE3055T (este posibil să utilizați un analog mai ieftin). Matrice de tastatură, standard, 4×3.

După pornire, microcontrolerul setează ultimii parametri salvați în EEPROM: moduri de control al canalului PWM (control analogic, control al interfeței seriale, control al tastaturii), formatul de afișare a parametrilor pe indicator (controlul interfeței seriale, afișarea valorii PWM, afișarea valorii analogice), precum și starea liniilor de ieșire de uz general, starea luminii de fundal a afișajului.

Generarea PWM este întotdeauna prezentă pe toate cele patru canale după pornire. Utilizatorul poate seta toți parametrii controlerului PWM utilizând interfața serială prin trimiterea comenzilor de control și apoi poate salva toate setările efectuate în EEPROM-ul microcontrolerului. O listă completă de comenzi și valori este prezentată mai jos în anexă. Interfața serială poate fi folosită și pentru a trimite valorile curente ale canalelor de control analogice (la cerere).

Pe indicator, atunci când se aplică tensiunea de alimentare, este afișat un salut (utilizatorul poate schimba salutul), apoi, în conformitate cu setările curente, afișează parametrii și valorile curente ale ieșirilor PWM, valorile ​a canalelor analogice.

Pentru un exemplu de implementare practică a dispozitivului și control PWM a diferitelor dispozitive externe, este dată următoarea diagramă. Acest exemplu prezintă soluții de circuit pentru conectarea la 4 canale PWM ale unui motor de ventilator, un LED puternic al familiei, un convertor PWM la tensiune pe un amplificator operațional LM358. Și, de asemenea, pentru posibilitatea de a testa liniile de ieșire de uz general, LED-urile sunt conectate.

Un exemplu de implementare a etapelor de ieșire ale controlerului PWM

Se încarcă...Se încarcă...