Controller PWM a bassa tensione su un microcontrollore con indicazione. Regolatore di potenza sul microcontrollore ATtiny2313 - Regolatori di potenza - Alimentatori

Salute a tutti i lettori di Muska!
Grazie a questo meraviglioso sito ho ricevuto molte cose e conoscenze utili e in risposta ho deciso di scrivere il primo rapporto sul dispositivo appena sviluppato. Durante lo sviluppo del dispositivo, ho riscontrato una serie di problemi e li ho risolti con successo. Forse, per alcuni colleghi nuovi arrivati, la descrizione di alcune soluzioni aiuterà nella creatività.
Per la produzione di circuiti stampati ha acquistato un microtrapano e un relativo supporto, che trasforma il trapano in una microforatrice. La necessità di ciò è nata dopo un mucchio di punte da 0,5-1 mm rotte quando utilizzate in un cacciavite e un dremel cinese. Ma, come si è scoperto, è impossibile utilizzare uno strumento del genere senza un regolatore di velocità. Il regolatore ha deciso di farlo da solo, acquisendo nuove conoscenze lungo il percorso.

Ho poca esperienza in ambito radioamatoriale. Da bambino, basandosi sul libro di Borisov, ha assemblato diversi ricevitori e lampeggiatori su multivibratori. Poi sono arrivati ​​altri hobby e attività.
E poi, a volte, ho notato Arduino, modelli notoriamente scolpiti di stazioni meteorologiche, robot e volevo automatizzare tutto ciò che potevo raggiungere con l'aiuto dei microcontrollori. Le dimensioni dei controller erano in ordine decrescente di dimensioni e facilità di incorporamento: Arduino UNO, Arduino Pro Mini, poi una manciata di ATMega328P e, per i dispositivi più piccoli e semplici, ho acquistato ATtiny85.
Tinky ha acquistato più di un anno fa e loro mentivano e aspettavano il loro turno.

Schermata dell'ordine


(nell'ordine c'era anche un termoretraibile, perché il prezzo totale è più alto)


Gli MK sono arrivati ​​come al solito in un pacco con un po' di pluriball, a loro volta raggruppati in un sacchetto di plastica separato. Sarebbe stato meglio, ovviamente, in una scatola rigida o in schiuma, ma anche così non si è piegato nulla e tutti gli operai.

All'inizio saldavo gli schemi sulle breadboard, ma dopo aver letto della LUT, mi sono reso conto che era abbastanza realistico e molto più conveniente assemblare tutto su normali circuiti stampati.
A poco a poco ho anche iniziato a collezionare uno strumento utile, tra cui un microtrapano MD-3 con pinza di serraggio e una macchina per praticare piccoli fori. Sarebbe possibile, ovviamente, acquistare solo una pinza e prendere il motore da qualche parte, ma ho deciso di acquistarlo già pronto in un negozio locale.

Stampiamo su una stampante laser un disegno su carta fotografica lucida Lomond per la stampa a getto d'inchiostro. Ma era stupido mettere carta che non era destinata a questo scopo in una stampante nuova di zecca. Trovate avvertenze in rete che la finitura lucida della carta inkjet può sciogliersi, attaccarsi al forno e rovinare la stampante. A dire il vero, ho condotto un esperimento: ho fatto rotolare un saldatore riscaldato a 200°C sulla superficie di questa carta (non ho trovato la temperatura esatta del fornello, ma a questo proposito), la carta si è leggermente deformata, ma non si è sciolto nulla e non si è attaccato, quindi è possibile nella stampante.

Ho stirato il disegno sulla lavagna, ho lavato via la carta. Sulla scheda è rimasto uno schema di conduttori di altissima qualità e uno strato di carta lucida aderito. L'autore della tecnologia ha consigliato di rimuoverlo con un nastro isolante non molto appiccicoso, ma non importa quanto ci provassi, o la lucentezza non è stata rimossa affatto, oppure i conduttori si sono staccati. Anche le iscrizioni passarono immediatamente al nastro isolante. Dopo aver sofferto, prese un punteruolo e, dopo aver graffiato tra i conduttori, strappò quasi tutta la lucentezza. E' una cosa delicata e noiosa, bisogna inventarsi qualcosa. Poi, quando ho realizzato il secondo e il terzo pannello, stavo cercando un modo per sbarazzarmi della dannata lucentezza, ma la stampa né su una pagina di rivista né su base autoadesiva non ha dato un'immagine di tale qualità, le tracce sono sfocate o caduto. Ma d'altra parte, mi sono reso conto che non era necessario pulire a zero la lucentezza della carta fotografica: bastava grattare almeno un po' tra le tracce affinché la soluzione potesse accedere al rame, e in alcuni punti era inciso senza graffi, attraverso la lucentezza.

Ho deciso di decapare il rame con una soluzione di perossido di idrogeno e acido citrico come composizione più accessibile. Le possibili opzioni per incidere la chimica con i calcoli possono essere visualizzate qui

Ho preso il perossido dal kit di pronto soccorso, è stato acquistato circa 3 anni fa, la data di scadenza è uscita circa 2 anni fa, pensavo fosse già esaurito e non funzionerà affatto. Tuttavia, mi sbagliavo, la tavola è stata marinata molto allegramente - in circa tre minuti. Ecco il risultato:

Una traccia ha subito graffi con un punteruolo, è stata restaurata con un terminale del resistore staccato. Inoltre piccoli fori dovuti al tentativo di utilizzare il nastro isolante. È necessario acquisire un pennarello adatto, ma per ora, dove ho potuto, l'ho imbrattato di vernice.

Ho stagnato la scheda con un saldatore utilizzando una treccia. Saldati i dettagli.




Gli alti rack in ottone avvitati tra loro su entrambi i lati della scheda attraverso i fori di montaggio sono una cosa pratica, puoi mettere la scheda senza custodia sul tavolo durante l'installazione e il debug su entrambi i lati senza timore di schiacciare o mandare in corto qualcosa.

Una delle operazioni più dispendiose in termini di tempo è stata quella di strisciare e saldare i LED di uscita dal lato dei conduttori. Ho deciso di utilizzare il lato di saldatura come lato anteriore, perché. su di esso l'altezza delle parti è molto inferiore e il passaggio dell'albero del resistore variabile attraverso la scheda ne riduce la lunghezza a quella desiderata.

Il condensatore C2 nello schema collegato a Reset non è stato saldato, perché. sebbene aumenti l'affidabilità dell'avvio del dispositivo, può arrabbiarsi durante il flashing dell'MK.

Il microcontrollore è stato saldato per ultimo, dopo aver collegato la scheda all'alimentatore e essersi assicurati che nulla si bruciasse subito e che lo stabilizzatore fornisse 5 V regolari. Niente di fumato e quindi colleghiamo il programmatore ai pin ICSP e compiliamo il firmware di test.

Scriveremo il firmware per il dispositivo nell'ambiente di programmazione Arduino, familiare a molti, dopo aver aggiunto il supporto per i microcontrollori ATtiny, scaricandoli e decomprimendoli nella cartella Arduino / hardware.

Lo sketch di test (non ne vedo il motivo) leggeva semplicemente gli stati dei segnali in ingresso e li visualizzava sulle uscite disponibili con i LED collegati. Perché abbiamo 4 canali di ingresso e solo 2 canali di uscita, abbiamo dovuto verificarli in più fasi.

Tutto ha funzionato come previsto, tranne una cosa: il pulsante collegato a un canale con un LED verde non era leggibile e il LED era notevolmente più luminoso del rosso. Le misurazioni effettuate dal tester hanno mostrato che nello stato PB0, più di 20 mA fluiscono in uscita attraverso il LED e su di esso cadono solo 2,1 V. E nello stato di input con pull-up interno sulla gamba, solo 1,74 V quando il pulsante viene rilasciato e 0,6 V quando viene premuto. Non sorprende che venga letto costantemente lo 0. Il LED verde a bassa tensione, senza nemmeno accendersi quando scorreva una corrente di microampere, sprecava la tensione sulla gamba. Ora è chiaro il motivo per cui nell’articolo originale 2 LED erano collegati in serie.

Ma mettere stupidamente un secondo LED che brilli all'interno della scatola come alimentatore (e non sono necessari nemmeno 2 identici sul pannello frontale) sembrava essere una soluzione un po' storta. Ho pensato a come altrimenti puoi aumentare la tensione nel circuito LED e mi sono ricordato del CVC del diodo zener. Se colleghiamo in serie al LED opposto un diodo zener da 2V (per funzionare correttamente, sul ramo inverso del CVC), allora otteniamo esattamente ciò di cui abbiamo bisogno. Quando il LED è acceso con una corrente di 10 mA, il diodo zener sfonda e non interferisce con il flusso di corrente, ma stabilizza solo la tensione che cade su di esso ad un determinato livello. È necessario solo sostituire la resistenza di limitazione della corrente, in quanto è già necessario sopprimere la tensione Ures=5V-2.1V-2.0V=0.9V di 10mA, cioè R=90 Ohm. E quando la gamba viene commutata sull'ingresso con un pull-up - a causa della ripidezza del ramo CVC fino alla rottura della transizione, il diodo Zener equivale a un resistore ad alta resistenza e scenderà di nuovo di circa 2 V, aumentando la tensione sulla gamba MK quando il pulsante viene rilasciato a 4 V, che viene già letto come TRUE. Quando si preme il pulsante, la gamba verrà portata a 5 V da un resistore interno con una resistenza di circa 40 KΩ (secondo i miei calcoli) e a terra da un resistore da 5 KΩ (che devierà il circuito LED), cioè avrà gli stessi 0,6 V ed è considerato FALSO.
Ho saldato il diodo zener con un rosone in serie al resistore e il pulsante ha funzionato come dovrebbe.

Adesso tocca a verificare il funzionamento del PWM, e anche qui sono sorti problemi. Il comando standard di Arduino AnalogWrite(leg, padding) non voleva funzionare. Quindi c'è qualcosa che non va nella biblioteca Tinka. Scheda tecnica utile sulla lana su MK e su Internet.

Si è rivelato interessante:
- sui pin 5, 6 (PB0, PB1) possono essere emessi 2 canali PWM (OC0A, OC0B), ciascuno funzionante con la propria impostazione di riempimento (ma la stessa frequenza) dal Timer 0;
- il terzo canale PWM che opera dal timer 1 può essere inviato ai pin 2, 3 (PB3, PB4) e un segnale PWM diretto (OC1B) può essere inviato al ramo 3 e la sua versione inversa (/OC1B) può essere inviata a gamba 2. Ma l'output va solo alla 3a tappa o a entrambe contemporaneamente. E abbiamo bisogno del PWM sulla 2a gamba, almeno inversa (lo invertiamo di nuovo a livello di programmazione), quindi dovremo configurare l'uscita per 2 e 3 gambe, e il segnale non andrà a 3 solo perché è dichiarato ingresso.

Quindi, per quanto ho capito, nel pacchetto di supporto ATtiny per Arduino, il canale PWM del timer 1 può essere inviato solo alla gamba 3. Apparentemente, l'output della sua versione inversa è stato considerato eccessivo. Dovrai configurare tu stesso il timer e il PWM (vedi codice, funzione PWM3_init), invece di utilizzare AnalogWrite.

Ho anche notato che quando si riconfigura il timer 1, il lavoro della funzione millis () viene perso: si scopre che il timer 1 viene utilizzato per impostazione predefinita per l'orologio interno. Ma puoi riconfigurare l'ora sul timer 0 utilizzando le definizioni macro nel file Arduino\hardware\tiny\cores\tiny\core_build_options.h
/* Per vari motivi, il timer 1 è una scelta migliore per il timer in millis sul processore "85. */ #define TIMER_TO_USE_FOR_MILLIS 0
Che useremo, poiché il timer 0 in questo progetto è completamente gratuito.

C'era anche una domanda sull'intervallo di impostazione della velocità letto dal resistore variabile. L'autore del circuito originale ha aggiunto un resistore costante da 36K in serie con la variabile da 10K, apparentemente sulla base del fatto che il codice ADC rientra nell'intervallo 0-255. Si è scoperto davvero 0-230 e il massimo ha nuotato. E vorrei che esattamente 0-255 corrispondesse all'impostazione di fondo scala con un PWM a 8 bit. Per fare ciò, ho dissaldato la costante e l'ho sostituita con un ponticello + 5V, l'ADC ha iniziato a leggere l'intero intervallo e abbiamo scartato a livello di programmazione i 4 bit meno significativi. E perché erano necessari dettagli aggiuntivi?

Dopo aver testato i canali di ingresso/uscita, carichiamo nel microcontrollore il firmware di combattimento, scritto in C in ambiente Arduino sulla base dei sorgenti BASIC dell'autore del circuito originale.

Testo del programma

// Attiny85 a 1 MHz // Non dimenticare di impostare il timer a 0 per i milli, ecc.! // Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0 #include // Connessioni #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 // Stati #define MODE_MANUAL 0 #define MODE_WAITINGSET 1 #define MODE_UP_XX 2 #define MODE_SETUP_MAX 3 # definire MODE_START 4 #define MODE_DRILLING 5 #define MODE_STOP 6 // Variabili byte Modalità = MODE_MANUAL; byte ModeLedVal = BASSO; byte SetPoint = 0; int CurrentFiltered = 0; byte CorrenteU8 = 0; byteAMButton; byteAMButtonFlt = BASSO; byte statico ModeButton; byte statico ModeButtonFlt = ALTO; // valore iniziale per il byte statico ModeButtonOld = LOW; // attiva eccezioni all'avvio static byte SetupStep = false; BlinkFromMs lungo non firmato; StartFromMs lungo senza segno; ModeFromMs lungo senza segno; byte W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff; void PWM3_init() ( // Imposta PWM su PB3 (pin 2) utilizzando il timer 1 TCCR1 = _BV (CS11) | _BV (CS10); // prescaler /4 GTCCR = _BV (COM1B0) | _BV (PWM1B); // cancella OC1B al confronto OCR1B = 255; // ciclo di lavoro iniziale 0% (usa uscita invertita!) OCR1C = 255; // frequenza PWM = 1kHz (1.000.000 /4 /256) ) void analogWrite_PB3(uint8_t duty_value) ( ​​// analogWrite su PIN_B3 OCR1B = 255-duty_value; // riempimento 0-255 (0-100%) (usa uscita invertita!) byte ScanButton(void) ( // Pulsante di lettura collegato a un'uscita con LED // Versione più veloce con uscita di ripristino e nessun PWM disabilita il valore del byte, port_bak; port_bak = PORTB; // salva l'output DDRB &= ~(1<interval))( \ outvar = varname;\ )\ )\ else (\ __lastChange_##varname=millis();\ ) // Inizializzazione void setup() ( pinMode(MODE_LED_PIN, OUTPUT); // stato principale - indicazione pinMode (PWM_LED_PIN, OUTPUT); PWM3_init(); // ripristina le impostazioni dalla EEPROM se sono presenti if (EEPROM.read(11)==0xAA) ( Wxx = EEPROM.read(0); Wmax = EEPROM.read(1) ; Uon = EEPROM.read(2); Uoff = EEPROM.read(3); ) else ( // valori predefiniti Wxx = 1; Wmax = 255; Uon = 255; // esclude l'avvio prima della sintonizzazione Uoff = 0 ; ) // Accelerazione graduale al minimo o impostazione manuale if (digitalRead(AM_PIN)==HIGH) W0 = Wxx; else ( W0 = 255- (analogRead(SP_PIN) >> 2); // 0-255, resistenza variabile ottenuta inverso ) W1 = 0; for(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)) ( // raramente (ModeLedVal==ALTA) ? ModeLedVal=BASSO: ModeLedVal=ALTA; BlinkFromMs = millis(); ) break; case MODE_SETUP_MAX: if ((millis()-BlinkFromMs > 100)) ( // spesso (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; BlinkFromMs = millis(); ) break; ) digitalWrite(MODE_LED_PIN, ModeLedVal); // Commutatore automatico/manuale, si apre in automatico e legge ALTO AMButton = digitalRead(AM_PIN); Antirimbalzo(AMButton, AMButtonFlt, 200); // Pulsante Impostazioni, letto con una procedura speciale perché abbinato al LED, quando premuto, si legge LOW ModeButton = ScanButton(); Antirimbalzo(ModeButton, ModeButtonFlt, 200); SetupStep = (ModeButtonFlt==BASSO) && (ModeButtonOld==ALTO); ModeButtonOld = ModeButtonFlt; // SetPoint spinner = 255- (analogRead(SP_PIN) >> 2); // 0-255, il nostro resistore variabile si è rivelato inverso // Corrente motore // Filtro principale catena RC 36K + 68nF (costante di tempo 2,5 ms, frequenza di taglio 65 Hz) di ordine y(i) = y(i-1 ) + alpha*(x(i)-y(i-1)) // (noto anche come media mobile esponenziale, EMA) // nel filtro, invece di float, utilizziamo una maggiore precisione int, per cui ci spostiamo a sinistra con free 5 bit (il segno sarà comunque utile) // sostituisci la moltiplicazione per il coefficiente frazionario alfa con uno spostamento a destra // (6 = /64 = *0,016) 100 cicli - 80% del valore, 200 cicli - 96 % del valore, 369 cicli - valore 99,6% // (5 = /32 = *0,031) 50 cicli - valore 80%, 100 cicli - valore 96%, 179 cicli - valore 99,6% // (4 = /16 = *0,063) 25 cicli - valore 80%, 50 cicli - valore 96%, 90 cicli - valore 99,6% // (3 = /8 = *0,125) 12 cicli - valore 80%, 25 cicli - valore 96%, 45 cicli - Valore 99,6% // periodo di esecuzione = ADC 110 µs + programma = 0,2 ms // costante di tempo = 8 * 0,2 ms = 1,6 ms, frequenza di taglio 625 Hz CurrentFiltered = CurrentFiltered + (((analogRead(CUR_PIN)<< 5) - CurrentFiltered) >> 3); // per facilità d'uso, imposta su 0-255 // (sposta indietro di 5 bit e 2 bit alti vengono scartati perché tutto ciò che è interessante (inattivo)<1В) CurrentU8 = byte (CurrentFiltered >> 5); // if >1В da non confondere con quelli piccoli if ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255; // Cambio macchina a stati (Mode) ( case MODE_MANUAL: // Controllo manuale con una rotazione analogWrite_PB3(SetPoint); if (SetupStep) Mode = MODE_SETUP_XX; if (AMButtonFlt==HIGH) ( // Rallentamento quando si passa alla macchina analogWrite_PB3 (Wxx); StartFromMs = millis(); Mode = MODE_STOP; ) break; case MODE_WAITING: // Attende che la corrente salga if (CurrentU8 > Uon) ( // Start StartFromMs = millis(); analogWrite_PB3(Wmax); Mode = MODE_START; ) if (SetupStep ) Modalità = MODE_SETUP_XX; if (AMButtonFlt==LOW) Modalità = MODE_MANUAL; break; case MODE_START: // Gira su if (millis()-StartFromMs > 300) Modalità = MODE_DRILLING; if (AMButtonFlt= =LOW) Modalità = MODE_MANUAL; break ; case MODE_DRILLING: // Foratura, in attesa che la corrente diminuisca se (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) // Modalità sicura = MODE_WAITING; ) else ( StartFromMs = millis(); ) if (AMButtonFlt==LOW) Modalità = MODE_MANUAL; rottura; case MODE_SETUP_XX: // Impostazione del minimo 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: // Impostazione del numero di giri massimo Wmax = SetPoint; analogWrite_PB3(Wmax); if (SetupStep) ( Uoff = byte(1.1 * CurrentU8); EEPROM.write(1,Wmax); EEPROM.write(3,Uoff); EEPROM.write(11.0xAA); // Freno analogWrite_PB3(Wxx); StartFromMs = millis(); Modalità = MODE_STOP; ) break; impostazione predefinita: Modalità = MODE_WAITING; ritorno; ) )


Colleghiamo una resistenza da 5 watt 2,2 ohm come shunt. Per proteggere il circuito da picchi di tensione induttivi sul bordo di uscita del PWM, colleghiamo un diodo Schottky SS34 in parallelo al motore e per sopprimere le interferenze derivanti dagli avvolgimenti di commutazione, un condensatore da 100 nF. E iniziamo i test per controllare il motore del trapano.

Tira subito fuori l'ululato furioso del PWM a 4KHz (1MHz/256). Aggiungiamo l'impostazione del divisore /4: mi è sembrato immediatamente migliore, anche se il cigolio non è scomparso, ma per qualche motivo 1KHz è molto più facile da tollerare anche durante un funzionamento prolungato.

In modalità manuale, la velocità del motore è normalmente regolata da 0-100% e nell'ADC automatico del circuito di feedback legge sempre il valore MAX e non funziona nulla. Lungo il percorso noto che la scheda emette un forte segnale acustico anche a motore spento. che cavolo?

Prendiamo un tester, tiriamo fuori un oscilloscopio e iniziamo a studiare cosa diamo e cosa otteniamo. E rimaniamo a bocca aperta. Sullo shunt, invece di onde di corrente leggermente inclinate attraverso l'induttanza all'inizio degli impulsi PWM, vediamo aghi di decine di volt. Ciò significa che attraverso lo shunt scorre una corrente pulsata di dieci A! E anche a motore spento. Non sorprende che la scheda abbia suonato. Ma cosa chiude il circuito senza motore? Piccolo condensatore da 100nF! Può e sopprimerà le interferenze durante la commutazione degli avvolgimenti, ma per ora organizza un cortocircuito a breve termine ad ogni periodo PWM! Conclusione: il condensatore di soppressione del rumore non è compatibile con il controllo PWM e il controllo tramite shunt, deve essere rimosso.

E poi mi viene in mente che queste sovratensioni ad alta tensione vanno quasi direttamente all'ADC del tinka (poiché c'è un rilevatore di ampiezza, il condensatore sulla gamba viene caricato alla massima tensione nell'ago e lo immagazzina in modo sicuro, perché il lo scarico avviene solo attraverso una perdita del diodo). Sembra che Tinka non stia per morire ancora, ma che dire della sua gamba? Gli strumenti mostrano una tensione costante sulla gamba di 5,2V, superiore alla tensione di alimentazione, ma il resto dove è finito? Ricordiamo che per combattere le sovratensioni, dispone di diodi appositamente addestrati per gli alimentatori “+” e “-”, che scaricano l'eccesso nell'alimentatore. Ma i diodi integrati sono fragili e non dovresti contare molto su di loro.

Rimuoviamo il maledetto condensatore, misuriamo la tensione con il piede: funziona! MK affidabile produce Atmel! A quanto pare ha risparmiato il fatto che la capacità dei condensatori era bassa, pompavano poca carica.

Senza condensatore, gli aghi sono scomparsi, la scheda ha smesso di riprodurre musica, la gamba sembra misurare davvero l'ampiezza della corrente impulsiva PWM. Iniziamo la procedura di installazione e proviamo a perforare. Sembra che tutto sia come dovrebbe: aggiunge giri sotto carico e lo ripristina quando esce il trapano. Ma non solo: più volte al minuto accelera e rallenta spontaneamente senza carico. Perché non è chiaro, gli strumenti non mostrano nulla. O la gamba è bruciata, oppure la capacità dei fili genera aghi invisibili come quello del conder, oppure si arrampicano interferenze dallo stesso collettore.

Allora ho deciso di affrontare il problema in modo radicale, perché ho notato che il rilevatore di picco non viene utilizzato in nessun altro schema. Al contrario, il valore integrale della corrente che passa attraverso i filtri RC è controllato ovunque. E tali misurazioni sono semplicemente insensibili alle interferenze sotto forma di singole emissioni. Sostituiamo il diodo con un resistore e il rilevatore di ampiezza si trasforma in un filtro passa-basso.

La tensione modificata dall'ADC è diminuita immediatamente di un ordine di grandezza: la tensione operativa è molto inferiore all'ampiezza nel caso di un segnale sotto forma di onde dolci con pause tra di loro. Abbiamo dovuto prendere una tensione di circa 0,2 V. Naturalmente, era possibile aumentare la resistenza dello shunt, ma è stato per questo scopo che abbiamo recintato il PWM per riscaldare l'atmosfera. E con un elevato riempimento PWM e un carico sul motore, è possibile ottenere una sovratensione. Pertanto, dovrai lavorare con un minimo U basso.

Anche la risposta al carico sembra essere rallentata. L'accelerazione inizia in circa mezzo secondo, ma non vedo un grosso problema in questo: semplicemente il trapano si posizionerà e passerà attraverso il rame a bassa velocità. E niente più false partenze. Puoi lavorare.

Lo schema finale del dispositivo:


Il dispositivo era montato in un alloggiamento, che era un impianto elettrico ermeticamente sigillato “Scatola di cablaggio in plastica Tuso senza pressacavi 120x80x50 mm, IP55 grigio 67052 Ruvinil Russia”. Volevo trovarne uno più piatto, ma non ho trovato niente come 110 * 60 * 30. Per non piantare ghirlande sul tavolo, ho attorcigliato il regolatore con l'alimentatore in un unico insieme. Il mattone si è rivelato nobile, ma non possiamo nemmeno portarlo in tasca. E sebbene dopo aver praticato un paio di dozzine di fori, non si sia verificato alcun riscaldamento evidente del campo chiave, dello shunt e dello stabilizzatore, ho praticato una piccola ventilazione sul fondo e sulla parete posteriore.







Da allora, la macchina con il regolatore ha partecipato alla creazione di altre 2 schede (potete vedere quante ne sono servite per forare secondo la scritta "AVR Fusebit Doctor". Sono molto soddisfatto del suo lavoro.

Voglio anche notare che le punte in metallo duro con Ali hanno un gambo di 3,2 mm e le pinze erano solo 3,0 e 3,5: non si adattano a una punta, ma non si fissano all'altra. Ho avvolto il filo di rame sul trapano e in qualche modo l'ho inserito in 3,5 mm, ma era brutto. Se qualcuno ha incontrato una pinza da 3,2 con un diametro di 6 mm (ovunque tranne Dremel, con la coda rettificata fino a 5 mm), ditemelo.

Quando si cambiano le punte, la procedura di regolazione deve essere ripetuta: a quanto pare, il diverso momento di inerzia di una punta convenzionale "magra" e di una punta in metallo duro con gambo ispessito influisce sulla corrente del motore. Ma questo viene fatto rapidamente e non disturba. Chi lo desidera può aggiungere al firmware il salvataggio dei profili di foratura :)

Ho più volte seguito il consiglio di forare le tavole sotto uno strato d'acqua, in modo da non respirare la limatura di vetro. Non ho potuto ottenere. Posizionare con precisione il trapano quando è alto, la rifrazione nell'acqua interferisce, l'occhio si inclina. E quando il trapano entra nell'acqua, le increspature iniziano ad andare e non si vede nulla. È necessario impostare il trapano fermo e poi accenderlo? Di conseguenza, metto semplicemente una ciotola d'acqua accanto ad essa e vi immergo periodicamente la tavola, per inumidire e lavare via la segatura. In questo caso la segatura è umida e non vola neanche, viene raccolta in un cono sopra il buco.

E un'altra digressione lirica, sui piccoli elementi di fissaggio.

Ho deciso di inserire nel dispositivo un connettore di alimentazione del tipo “DS-225, Presa di alimentazione sul pannello”. Per il suo fissaggio erano necessarie viti con dadi con filettatura di 2,5 mm. Nell'armadio non è stato trovato nulla di adatto e poi mi sono ricordato che in un altro oggetto erano necessarie viti da 2 mm. Quindi vale la pena ricostituire la collezione di elementi di fissaggio in modo che la prossima volta non volerai dall'altra parte della regione per il bene di una noce. Nei negozi di costruzioni si è imbattuto niente meno che M3, quindi è necessario cercare quelli specializzati.

Il primo negozio relativamente conveniente era una catena
All'interno, gli occhi sono fuggiti da ogni sorta di cose utili, ma questa è sfortuna: le viti più piccole erano solo M2,5 della stessa lunghezza, ma non ci sono dadi e rondelle per loro e non succede mai! Sono rimasto colpito dalla vendita di noci al pezzo per 2r / pezzo e dal versare tutto ciò che ho acquistato in una borsa-camicia (non c'erano bustine per dimensioni diverse). Ancora una volta, non è redditizio prendere in riserva dimensioni diverse.

Salvato da un altro negozio di elementi di fissaggio -
Qui c'è davvero di tutto in stock, dall'M1.6, con diversi slot e testine, venduto al pezzo e a peso, e ad un prezzo di un ordine di grandezza inferiore rispetto al precedente concorrente. Ma devi solo andare subito al magazzino in via Plekhanov, altrimenti sono andato prima al negozio vicino alla stazione della metropolitana Perovo e sono rimasto molto sorpreso dal prezzo annunciato. E si è scoperto che hanno solo acciaio inossidabile e per i soliti elementi di fissaggio bisogna andare nella zona industriale sulle traverse.

Ho intenzione di acquistare +67 Aggiungi ai preferiti Mi è piaciuta la recensione +76 +152

Esistono numerosi circuiti classici di controller a tiristori e triac, ma questo controller è realizzato su una base di elementi moderna e, inoltre, era di fase uno, ad es. non lascia passare tutta la semionda della tensione di rete, ma solo una parte di essa, limitando così la potenza, perché l'apertura del triac avviene solo all'angolo di fase desiderato.

Quando il circuito viene acceso per la prima volta, sull'indicatore a segmenti si accende la cifra 0. L'accensione e lo spegnimento si effettuano tenendo premuti contemporaneamente due pulsanti di microinterruttore. Regolazione più o meno: ogni pressione individualmente. Se non si preme nessuno degli interruttori a levetta, dopo l'ultima pressione, dopo due ore, il regolatore si spegnerà da solo, l'indicatore lampeggerà fino ad allora nella fase dell'ultimo livello di consumo energetico operativo.

Nel momento in cui il dispositivo viene disconnesso dalla rete, viene memorizzato l'ultimo livello di potenza in uscita, che verrà impostato automaticamente alla successiva accensione. La regolazione viene eseguita nell'intervallo da 0 a 9 e poi da A a F. In totale ci sono 16 passaggi di regolazione.

Il radiatore nella foto sopra è piuttosto grande, il design ti consente di inserire un'opzione più piccola, ma non ne avevo un'altra. Quando ho acceso il dispositivo per la prima volta, 0 ha lampeggiato sul mio display, il circuito non ha reagito alla pressione dei pulsanti. Sostituendo il condensatore di alimentazione con un valore nominale di 1000 microfarad, il problema è scomparso.

Il circuito stampato nel formato e il firmware del microcontrollore sono inseriti in un archivio al collegamento sopra.

Il circuito viene utilizzato per un controllo uniforme della potenza nel carico. Il metodo di controllo si basa sul metodo di controllo di fase triac. La sua essenza sta nel saltare parte del semiciclo della tensione di rete alternata. La corrente fornita al carico è proporzionale all'integrale del segnale ricevuto. La base del progetto è il microcontrollore PIC16F1823.

Il dispositivo supporta carichi attivi (lampada a incandescenza, riscaldatore) e carichi induttivi. Il microcontrollore è sincronizzato da un oscillatore interno. Il segnale di sincronizzazione con la rete arriva dal ponte raddrizzatore all'ingresso del comparatore interno del microcontrollore attraverso un filtro su R10, C5, R9, R8, C3. La tensione di riferimento del comparatore proviene dal DAC interno del microcontrollore ed è di circa 0,6 V, che viene impostata durante la configurazione MK. Il diodo D6 viene utilizzato per eliminare l'influenza della capacità C6 sulla sincronizzazione. L'indicazione è fatta sull'E30561 a catodo comune.

Strutturalmente, il dispositivo è assemblato su due circuiti stampati. Su uno ci sono i pulsanti indicatori e di controllo, sull'altro MK, alimentatore e triac. Le schede sono collegate con cavo MGTF.

Con il dissipatore di calore triac (HS-135-38) come mostrato in figura, la potenza di carico massima è di circa 500 W. Di conseguenza, per questo radiatore è realizzato un sedile sul circuito stampato.

Il firmware per MK è realizzato nell'ambiente MPLAB in linguaggio C per il compilatore HI-TECH PICC 9.83. Puoi scaricare i circuiti stampati, il firmware e il progetto MPLAB dal link qui sopra.

Il design è regolato utilizzando un triac tipo BT138. La cui gestione viene effettuata tramite il MC. Il display LED digitale mostra la percentuale di apertura del triac in quel momento. La parte logica del circuito è alimentata da un alimentatore, la cui base è il regolatore di tensione DA1 7805.

Questo circuito è perfetto per regolare separatamente la potenza di uscita per due carichi diversi, ad esempio riscaldatori, lampade, motori elettrici. La potenza massima del carico dipende dal tipo di tasti che lo commutano. Nello schema seguente, i transistor KT819 si comportano come tali, ma potrebbero esserci altre opzioni, a seconda della potenza richiesta da entrambi i carichi. Il dispositivo genera segnali di impulso che vanno a uno qualsiasi degli interruttori di alimentazione.

Il dispositivo genera segnali di impulsi, la larghezza degli impulsi può essere regolata su 256 gradi uguali. Per controllare il circuito vengono utilizzate resistenze variabili, collegate alle porte RV3 e RV4 del MK, che funzionano con l'ADC. L'ATtiny13 misura il valore del resistore variabile e imposta l'ampiezza dell'impulso del segnale di impulso in uscita seguendo l'interruttore che controlla l'alimentazione a un carico specifico. Cioè, ruotando la manopola della resistenza variabile, la potenza viene regolata. Tale regolazione, rispetto all'impostazione con i pulsanti "meno" e "più", è più comoda da usare grazie alla sua velocità. È presente un connettore ISP6 per programmare il dispositivo. Durante la programmazione, impostiamo i fusibili per impostazione predefinita, lavorando con un generatore RC di clock interno ad una frequenza di 9,6 MHz. L'archivio con il codice sorgente del firmware, lo prendiamo dal link sopra.

La regolazione della velocità dei motori elettrici nella moderna tecnologia elettronica si ottiene non modificando la tensione di alimentazione, come veniva fatto prima, ma applicando impulsi di corrente di diversa durata al motore elettrico. Per questi scopi servono, che recentemente sono diventati molto popolari: PWM ( modulato in larghezza di impulso) regolatori. Il circuito è universale: regola anche la velocità del motore, la luminosità delle lampade e la potenza attuale nel caricabatterie.

Circuito di controllo PWM

Lo schema specificato funziona bene, allegato.

Senza alterare il circuito, la tensione può essere aumentata a 16 volt. Impostare il transistor in base alla potenza del carico.

Può essere assemblato Regolatore PWM e secondo tale circuito elettrico, con un transistor bipolare convenzionale:

E se necessario, invece del transistor composito KT827, metti il ​​​​campo IRFZ44N, con un resistore R1 - 47k. Polevik senza radiatore, con un carico fino a 7 ampere, non si riscalda.

Funzionamento del controller PWM

Il timer sul chip NE555 monitora la tensione sul condensatore C1, che viene rimosso dal pin THR. Non appena raggiunge il massimo, il transistor interno si apre. Che mette in cortocircuito il pin DIS a terra. In questo caso sull'uscita OUT appare uno zero logico. Il condensatore inizia a scaricarsi attraverso il DIS e quando la tensione ai suoi capi diventa zero, il sistema passerà allo stato opposto: all'uscita 1 il transistor è chiuso. Il condensatore ricomincia a caricarsi e tutto si ripete di nuovo.

La carica del condensatore C1 segue il percorso: “R2->braccio superiore R1 -> D2”, e la scarica lungo il percorso: D1 -> braccio inferiore R1 -> DIS. Quando ruotiamo il resistore variabile R1, modifichiamo il rapporto tra le resistenze del braccio superiore e inferiore. Il che, di conseguenza, modifica il rapporto tra la durata dell'impulso e la pausa. La frequenza è fissata principalmente dal condensatore C1 e dipende anche leggermente dal valore della resistenza R1. Modificando il rapporto resistenza carica/scarica, modifichiamo il ciclo di lavoro. Il resistore R3 fornisce un'uscita pull-up ad alto livello, quindi è presente un'uscita a collettore aperto. Che da solo non è in grado di stabilire un livello elevato.

Puoi inserire qualsiasi diodi, condensatori di circa lo stesso valore del diagramma. Le deviazioni entro un ordine di grandezza non influiscono in modo significativo sul funzionamento del dispositivo. A 4,7 nanofarad impostati in C1, ad esempio, la frequenza scende a 18 kHz, ma è quasi impercettibile.

Se, dopo aver assemblato il circuito, il transistor di controllo della chiave si riscalda, molto probabilmente non si apre completamente. Cioè, il transistor ha una grande caduta di tensione (è parzialmente aperto) e la corrente lo attraversa. Di conseguenza, viene dissipata più potenza per il riscaldamento. È preferibile collegare in parallelo il circuito in uscita con condensatori di grandi dimensioni, altrimenti canterà e si regolerà male. Per non fischiare, prendi C1, il fischio spesso viene da lui. In generale, il campo di applicazione è molto ampio, particolarmente promettente sarà il suo utilizzo come dimmer per lampade LED ad alta potenza, strisce LED e faretti, ma ne parleremo la prossima volta. L'articolo è stato scritto con il supporto di ear, ur5rnp, stalker68.

Molto spesso è necessario poter regolare la corrente che scorre attraverso lampade o elementi riscaldanti. Poiché hanno un carico resistivo, la soluzione più semplice è assemblare un piccolo regolatore PWM (dall'inglese PWM - modulazione della larghezza di impulso). Poiché i circuiti semplici basati sui timer NE555 non erano interessanti, si è deciso di sviluppare e assemblarne uno proprio, in qualche modo simile a.

Il circuito, nonostante la presenza del microcontrollore PIC18LF2550, è molto semplice da ripetere e può essere suddiviso condizionatamente in 3 parti:

Generatore PWM

Il microcontrollore genera impulsi chiari della forma e del ciclo di lavoro desiderati, il che semplifica notevolmente il circuito. Sono presenti due pulsanti per aumentare e diminuire la potenza. Vanno ai pin 3 e 5 del chip PIC18LF2550. A seconda dell'ampiezza dell'impulso, il LED lampeggia più lentamente o più velocemente, in modo da poter valutare visivamente il ciclo di lavoro. Se il LED si illumina completamente, la potenza è al 100% e se si spegne, il ciclo di lavoro è allo 0%.

alimentazione del microcontrollore

Lo stabilizzatore MK è di 3,3 volt, quindi, a seconda del transistor di uscita, è possibile utilizzare una fonte di alimentazione da 3,7 a 25 volt. La frequenza di commutazione è di 32 kHz e l'ampiezza dell'impulso è divisa in 256 passaggi, inclusa l'accensione e lo spegnimento completi.

Interruttore di carico

Il driver per il transistor MOSFET è il solito 2N3904. Il transistor di potenza stesso può essere un qualsiasi MOSFET a canale N adatto, non necessariamente come nel circuito 80NF55L.

Questa versione del controller PWM a 4 canali e 8 bit è progettata utilizzando il microcontrollore ATmega16. Il dispositivo contiene un'interfaccia RS232 per il controllo tramite computer, un'interfaccia per una tastiera a 12 pulsanti e 4 canali analogici a 10 bit per il collegamento di potenziometri. Per visualizzare le modalità operative e i parametri attuali, è presente un display LCD a 4 righe. Inoltre, il controller PWM dispone di: 4 uscite LED per indicare le modalità di controllo (possono essere utilizzate come uscite per uso generale), 3 uscite per uso generale.

Il dispositivo ha impostazioni molto flessibili. Ad esempio, i parametri dei canali PWM possono essere controllati tramite comandi da un computer, tramite controller analogici (potenziometri) o utilizzando una tastiera (con un'interfaccia utente visualizzata su un indicatore LCD). L'indicatore LCD stesso può anche essere controllato tramite RS232, la visualizzazione delle impostazioni e delle modalità correnti è possibile in formato numerico o grafico.

Le principali caratteristiche del dispositivo:

  • PWM a 4 canali, risoluzione 8 bit, frequenza PWM - 31 kHz;
  • Interfaccia RS232 per controllo e monitoraggio da PC;
  • progettazione circuitale semplice con un numero minimo di elementi esterni;
  • Tastiera a 12 pulsanti;
  • la possibilità di regolazione analogica;
  • fino a 7 linee di uscita per uso generale;
  • Display LCD a 4 righe;
  • Controllo display LCD tramite interfaccia seriale;
  • Menu utente;
  • impostazioni flessibili;
  • implementazione software dei buffer FIFO per velocizzare il lavoro.

Le uscite per uso generale (inclusi gli indicatori LED) sono controllate da un computer (RS232), l'utente ha anche la possibilità di leggere la cronologia delle sequenze di tasti sulla tastiera (le ultime 32 sequenze di tasti o immediatamente dopo aver premuto qualsiasi tasto).

Grazie a impostazioni così flessibili, scegliendo l'impostazione appropriata, il controller PWM può essere utilizzato in varie applicazioni e come dispositivo autonomo. Il design utilizza il microcontrollore ATmega16, il numero minimo di elementi esterni, poiché tutto il controllo e la gestione vengono eseguiti dal microcontrollore stesso. L'utente può utilizzare solo i componenti necessari, ad esempio l'indicatore LCD, se non è necessario, può essere omesso.

Lo schema logico del dispositivo.

Schema schematico del dispositivo

Il design del circuito è molto semplice. Per il clock del microcontrollore è stato selezionato un risonatore al quarzo da 8 MHz, un alimentatore da +5,0 V è stato assemblato su uno stabilizzatore integrato LM7805, un'induttanza di 10 μH e un condensatore da 100 nF formano un filtro che impedisce la penetrazione di interferenze durante la commutazione in analogico circuiti. Il convertitore di livello logico MAX232 viene utilizzato per implementare l'interfaccia seriale. Indicatore LCD basato sul chipset Hitachi (HD44780) con una risoluzione di 20x4 o 40x2. L'unità di controllo della retroilluminazione dell'indicatore è implementata sul transistor MJE3055T (è possibile utilizzare un analogo più economico). Matrice della tastiera, standard, 4×3.

Dopo l'accensione, il microcontrollore imposta gli ultimi parametri salvati nella EEPROM: modalità di controllo del canale PWM (controllo analogico, controllo dell'interfaccia seriale, controllo della tastiera), formato di visualizzazione dei parametri sull'indicatore (controllo dell'interfaccia seriale, visualizzazione del valore PWM, visualizzazione del valore analogico), così come lo stato delle linee di uscita generiche, lo stato della retroilluminazione del display.

La generazione PWM è sempre presente su tutti e quattro i canali dopo l'accensione. L'utente può impostare tutti i parametri del controller PWM utilizzando l'interfaccia seriale inviando comandi di controllo, quindi salvare tutte le impostazioni effettuate nella EEPROM del microcontrollore. Un elenco completo dei comandi e dei valori è riportato di seguito in appendice. L'interfaccia seriale può essere utilizzata anche per inviare i valori attuali dei canali di controllo analogici (su richiesta).

Sull'indicatore, quando viene applicata la tensione di alimentazione, viene visualizzato un saluto (l'utente può modificare il saluto) e quindi, in base alle impostazioni correnti, visualizza i parametri e i valori attuali delle uscite PWM, i valori ​​dei canali analogici.

Per un esempio dell'implementazione pratica del dispositivo e del controllo PWM di vari dispositivi esterni, viene fornito lo schema seguente. Questo esempio mostra soluzioni circuitali per il collegamento a 4 canali PWM di un motore del ventilatore, un potente LED della famiglia, un convertitore PWM-tensione su un amplificatore operazionale LM358. Inoltre, per poter testare linee di uscita generiche, sono collegati dei LED.

Un esempio di implementazione degli stadi di uscita del controller PWM

Caricamento...Caricamento...