Sommario:
- Passaggio 1: generazione del segnale Pwm per 50Hz
- Passaggio 2: programma Arduino per ciclo di lavoro variabile
- Passaggio 3: alternare i pin Arduino a 50Hz
- Passaggio 4: pilotare un ponte H e filtrare il segnale Pwm
Video: Arduino Sinewave per inverter: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
In questo progetto ho generato un segnale SPWM (sine wave pulse wide modulated) da due uscite digitali pwm di arduino.
Perché per fare un programma del genere devo parlare di molte altre funzioni e proprietà dell'arduino il progetto completo comprese le immagini dell'oscilloscopio e per diverse frequenze visita il mio sito web:
eprojectszone
Passaggio 1: generazione del segnale Pwm per 50Hz
Per generare un segnale a 50Hz a frequenza maggiore è necessario fare alcuni calcoli. Le frequenze da arduino possono essere a 8MHz, ma vogliamo un segnale con duty cycle variabile.
Per capire i tipi di cicli di lavoro variabili di arduino puoi leggere queste 3 parti dello stesso post 1, 2 e 3.
Supponiamo che la nostra frequenza sia 50Hz, il che significa che il periodo di tempo è 20 ms. Quindi 10 ms è il periodo di metà ciclo. In quei 10ms abbiamo bisogno di avere molti impulsi con diversi duty cycle che iniziano con piccoli duty cycle, nel mezzo del segnale abbiamo duty cycle massimi e finiamo anche con duty cycle piccoli. Per generare un'onda sinusoidale useremo due pin uno per semiciclo positivo e uno per semiciclo negativo. Nel nostro post per questo usiamo i pin 5 e 6 che significa Timer 0.
Per un segnale uniforme scegliamo pwm con correzione di fase a una frequenza 31372 Hz-vedi post precedente. Uno dei problemi più grandi è il modo in cui calcoliamo il ciclo di lavoro necessario per ogni impulso. Quindi, poiché la nostra frequenza è f=31372Hz, il periodo per ogni impulso è T=1/31372=31,8 us, quindi il numero di impulsi per un semiciclo è N=10ms/31.8us=314 impulsi. Ora per calcolare il ciclo di lavoro per ogni impulso abbiamo y=sinx, ma in questa equazione abbiamo bisogno di gradi, quindi il mezzo ciclo ha 180 gradi per 314 impulsi. Per ogni impulso abbiamo 180/314=0,57deg/pulse. Ciò significa che per ogni impulso avanziamo di 0,57 gradi.
y è il ciclo di lavoro e x il valore della posizione a metà ciclo di lavoro. all'inizio x è 0, dopo x=0,57, x=1,14 e così via fino a x= 180.
se calcoliamo tutti i 314 valori otteniamo un array di 314 elementi (digita "int" per essere calcolato più facilmente da arduino).
Tale matrice è:
int sinPWM={1, 2, 5, 7, 10, 12, 15, 17, 19, 22, 24, 27, 30, 32, 34, 37, 39, 42, 44, 47, 49, 52, 54, 57, 59, 61, 64, 66, 69, 71, 73, 76, 78, 80, 83, 85, 88, 90, 92, 94, 97, 99, 101, 103, 106, 108, 110, 113, 115, 117, 119, 121, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 169, 171, 173, 175, 177, 178, 180, 182, 184, 185, 187, 188, 190, 192, 193, 195, 196, 198, 199, 201, 202, 204, 205, 207, 208, 209, 211, 212, 213, 215, 216, 217, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 239, 240, 240, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 249, 249, 249, 249, 249, 248, 248, 248, 248, 247, 247, 247, 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, 241, 240, 240, 239, 238, 237, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217, 21 6, 215, 213, 212, 211, 209, 208, 207, 205, 204, 202, 201, 199, 198, 196, 195, 193, 192, 190, 188, 187, 185, 184, 182, 180, 178, 177, 175, 173, 171, 169, 168, 166, 164, 162, 160, 158, 156, 154, 152, 150, 148, 146, 144, 142, 140, 138, 136, 134, 132, 130, 128, 126, 124, 121, 119, 117, 115, 113, 110, 108, 106, 103, 101, 99, 97, 94, 92, 90, 88, 85, 83, 80, 78, 76, 73, 71, 69, 66, 64, 61, 59, 57, 54, 52, 49, 47, 44, 42, 39, 37, 34, 32, 30, 27, 24, 22, 19, 17, 15, 12, 10, 7, 5, 2, 1};
Puoi vedere che, come un'onda sinusoidale, il ciclo di lavoro è più basso nel primo e nell'ultimo elemento e più alto nel mezzo.
Passaggio 2: programma Arduino per ciclo di lavoro variabile
Nell'immagine sopra abbiamo segnali di duty cycle variabili con valori dall'array.
Ma come fare tale segnale??
la parte del programma sottostante utilizza gli interrupt per modificare i valori dei duty cycle
sei();// abilita gli interrupt
}
ISR(TIMER1_COMPA_vect){// interrompe quando il timer 1 corrisponde al valore OCR1A
if(i>313 && OK==0){// valore finale dal vettore per il pin 6
i=0;// va al primo valore di vector(array)
OK=1;//abilita pin 5
}
x=sinPWM;// x prende il valore dal vettore corrispondente alla posizione i(i è zero indicizzato)-valore del duty cycle
i=i+1;// vai alla posizione successiva
}
Passaggio 3: alternare i pin Arduino a 50Hz
Poiché ogni pin genera solo un mezzo ciclo di lavoro per creare un'onda sinusoidale completa, utilizziamo due pin che si alternano uno dopo l'altro dopo 10 ms esatti (per 50 Hz). Questo cambio di pin viene effettuato alla fine dell'array, dopo che diciamo che il pin 5 ha generato 314 impulsi, questo pin viene spento e abilitato il pin 6 che fa la stessa cosa ma per il ciclo di lavoro negativo.
Poiché arduino può generare solo segnali positivi, il duty cycle negativo è realizzato in h bridge, puoi leggere qui a riguardo
Il programma per cambiare i pin:
sei();// abilita gli interrupt
}
ISR(TIMER1_COMPA_vect){// interrompe quando il timer 1 corrisponde al valore OCR1A
if(i>313 && OK==0){// valore finale dal vettore per il pin 6
i=0;// vai al primo valore del vettore
OK=1;//abilita pin 5
}
if(i>313 && OK==1){// valore finale dal vettore per il pin 5
i=0;//vai al primo valore del vettore
OK=0;//abilita pin 6
}
x=sinPWM;// x prende il valore dal vettore corrispondente alla posizione i(i è indicizzato a zero)
i=i+1;// vai alla posizione successiva
if(OK==0){
OCR0B=0;//crea pin 5 0
OCR0A=x;//abilita il pin 6 al corrispondente ciclo di lavoro
if(OK==1){
OCR0A=0;//fare pin 6 0
OCR0B=x;//abilita il pin 5 al corrispondente ciclo di lavoro
}
}
Passaggio 4: pilotare un ponte H e filtrare il segnale Pwm
I segnali ottenuti da arduino sono la parte di controllo per applicazioni inverter perché entrambi sono positivi. Per realizzare un'onda sinusoidale completa e un pratico inverter dobbiamo utilizzare un ponte h e per azzerare il pwm un filtro passa basso.
Il ponte H è presentato qui.
Il filtro passa-basso testato con piccoli motori a corrente alternata, qui.
Consigliato:
Un fantastico trucco per touchpad per laptop per progetti Arduino!: 18 passaggi (con immagini)
Un fantastico trucco per touchpad per laptop per progetti Arduino!: Tempo fa, quando stavo armeggiando con un touchpad PS/2 con un microcontrollore Arduino, ho scoperto che due delle sue connessioni integrate possono essere utilizzate come ingressi digitali. In questo Instructable, impariamo come possiamo utilizzare l'aggiunta di un touchpad PS/2
Controller per strisce LED Arduino per luci fantastiche per PC: 5 passaggi
Arduino Led Strip Controller per fantastiche luci per PC: ho questa fantastica striscia led RGB di aliexpress e voglio usarla per le luci del PC. Il primo problema è caldo per controllarlo, quindi come accenderlo. Questo istruibile mostra come per farlo con il codice github arduino, video del progetto funzionante e passo-passo
Circuito di gate driver per inverter trifase: 9 passaggi
Circuito di pilotaggio del cancello per inverter trifase: questo progetto è fondamentalmente un circuito di pilotaggio per un'apparecchiatura chiamata SemiTeach che abbiamo recentemente acquistato per il nostro dipartimento. Viene mostrata l'immagine del dispositivo. Il collegamento di questo circuito driver a 6 mosfet genera tre tensioni CA spostate di 120 gradi. RA
Convinciti a usare solo un inverter da 12V a linea AC per stringhe luminose a LED invece di ricablarle per 12V.: 3 passaggi
Convinciti a utilizzare solo un inverter da 12V a linea CA per stringhe luminose a LED invece di ricablarle per 12V.: Il mio piano era semplice. Volevo tagliare in pezzi una stringa di luci a LED alimentata a parete e poi ricablarla per farla funzionare a 12 volt. L'alternativa era usare un inverter di potenza, ma sappiamo tutti che sono terribilmente inefficienti, giusto? Destra? O lo sono?
Come riparare un inverter di potenza con retroilluminazione LCD Utilizzando un Fujiplus FP-988D. per $ 0: 9 passaggi
Come riparare un inverter di potenza con retroilluminazione LCD Utilizzando un Fujiplus FP-988D. per $ 0: In questo tutorial ti guiderò attraverso la riparazione di un inverter di potenza con retroilluminazione LCD guasto utilizzando le parti che hai. Puoi capire se hai una retroilluminazione morta eliminando prima altre possibilità. Controlla il monitor su più computer. Assicurati che