0367: PWM Sinusoidale con i Timer di Arduino

  Рет қаралды 14,441

Pier Aisa

Pier Aisa

6 жыл бұрын

Forum: mylothehack.altervista.org/forum/
Sito: mylothehack.altervista.org/
Sorgenti: mylothehack.altervista.org/ope...
Banggood: www.banggood.com/it/ATmega328...
Codice sconto Coupon: Elec
Per ottenere un controllo PWM sinusoidale a 50Hz alla massima risoluzione possibile con Arduino uso i due timer a 8 bit, TIMER0 e TIMER1. La frequenza di switching massima ottenibile per il PWM è pari a 31.372KHz generata da TIMER1, in modalità CTC con un interrupt ad ogni impulso PWM per TIMER0, il quale imposta il valore della durata dell'impulso PWM. Un periodo di sinusoide a 50Hz ha 628 impulsi PWM. Per ricostruire i valori degli impulsi PWM della sinusoide a 50Hz utilizzo un programma sempre su Arduino che calcola il primo quarto della sinusoide, lo moltiplica per il range a 250. I valori vengono tabulati su un vettore, che viene poi usato a runtime per la modifica del valore di conteggio del TIMER0. Visualizzo i segnali con l'oscilloscopio e tramite due filtri passabasso RC ricostruisco effettivamente la sinusoide a 50Hz.

Пікірлер: 52
@michelelupi2614
@michelelupi2614 6 жыл бұрын
ti ringrazio per i tuoi utilissimi tutorial, ammiro la tua profonda conoscenza degli argomenti :)
@giuseppecolombo4701
@giuseppecolombo4701 6 жыл бұрын
Ottima spiegazione come sempre
@GianniLaschi
@GianniLaschi 6 жыл бұрын
Grande Pier, le funzioni hardware/registri/clock di Arduino non sono immediate da usare, ma questi tuoi video sono molto chiari, aiutano molto, Grazie!
@PierAisa
@PierAisa 6 жыл бұрын
Grazie Gianni. Mi sarebbe piaciuto anche commentare i registri di dettaglio con il datasheet alla mano, ma dopo il video rischiava di diventare anche un po' noioso ....
@lemonfriz
@lemonfriz 6 жыл бұрын
molto interessante, non avevo pensato a questa soluzione con due forme d'onda opposte. Attendiamo la prova con i componenti di potenza!!!
@PierAisa
@PierAisa 6 жыл бұрын
Leo IT9GUR se si fa così si ha la cancellazione armonica e la prima armonica da sopprimere è 2 x f switching. Vedi kzbin.info/www/bejne/e5TMpZWNZbSDfdk
@Olavotemrazaodenovo
@Olavotemrazaodenovo 4 жыл бұрын
Obrigado, do Brasil.
@PierAisa
@PierAisa 4 жыл бұрын
Grazie! L'ultima volta che venni in Brasile fun nel 96
@MarcoRizzinelli
@MarcoRizzinelli 4 жыл бұрын
Grazie, ogni giorno si impara qlcs
@g4vrv
@g4vrv Жыл бұрын
Ciao Pier, ho da poco scoperto i tuoi video è davvero complimenti anche per la semplicità con cui le spieghi. Tra i tuoi codici sorgente per caso hai anche una funzione che riesce a gestire i timer interni di arduino nano every? Attualmente uso una funzione su arduino uno per gestire il timer legato ai pin 9 e 10 per aumentare la frequenza ma mi è stato detto che la stessa non va bene in quanto il processore dei due è diverso. Grazie in anticipo
@PierAisa
@PierAisa Жыл бұрын
grazie se ti può fare comodo ecco la mia videolist www.pieraisa.it. Sui timer puoi prendere spunto da questo video dove avevo spinto a massima velocità Arduino Uno kzbin.info/www/bejne/mmHclHZ4Zq-rd5Y
@NicozStrat
@NicozStrat 6 жыл бұрын
Ciao Pier! Come sempre un ottimo video! Volevo chiederti in base alla tua esperienza: se voglio ricreare un segnale es sinusoide ad un certa frequenza, e per esempio a 8 bit, è necessario che il numero di step con cui aggiornare il duty cycle sia multiplo del numero di bit? Per esempio, posso costruire una sinusoide a 16 bit, disponendo di 254 step? (Ovviamente con un mcu che abbia una pwm con quella risoluzione come per esempio un xmega). Sarebbe inoltre interessante lo stesso progetto con la possibilità di variare ampiezza e frequenza: io infatti non sono riuscito a ottenere questo risultato con un at328p perché il tempo necessario all'adc per finire la conversione su uno dei due controlli è più lungo di quello messo a disposizione dall'isr
@PierAisa
@PierAisa 6 жыл бұрын
Abbiamo due tipi di quantizzazione. La prima sull'asse delle ascisse, ossia sul tempo. In questo caso la durata dello step di aggiornamento del PWM deve rispettare un rapporto fra frequenza di switching e frequenza del segnale da ricostruire che sia sufficientemente alto, rispetto alla applicazione che devi sviluppare. Ad esempio se devi pilotare un carico come un motore forse puoi permetterti di usare pochio punti per ciclo. Questo aumenta la distorsione e le armoniche ma sul motore magari non ti interessa più di tanto. Viceversa in una applicazione audio cove magari vuoi poca distorsione devi usare molti step, per fare in modo che il contenuto armonico indesiderato sia basso. Rispetto alla seconda quantizzazione quella sull'oerdinate, qui sei lefato alla base 2, il numero di livelli che vuoi è uguale a 2 elevato al numero di bit che userai e ti devi chiedere anche in questo caso che risouzione ti serve. In un prossimo video posso generalizzare il codie introducendo il controllo di frequenza, ampiezza e fase a run-time. Tanto in fin dei conti è ..... trigonometria ....... Se devi fare i conti con la lentezza dell'adc di arduino forse vale la pena pensare ad un adc esterno
@michelevuerich8952
@michelevuerich8952 4 жыл бұрын
ciao Pier molto interessante e chiaro come spiegazione, non riesco però atrovare il link del sorgente per arduino, puoi indicarmi il link per sacricarlo grazie Michele
@PierAisa
@PierAisa 4 жыл бұрын
Il link lo trovi in descrizione del video sotto la voce sorgenti ma per aver accesso a quel file bisogna sottoscrivere almeno per una volta il livello medio del mio programma patreon così ti crea un account a vita per scaricare tutti i sorgenti.
@maurospagnoletti4787
@maurospagnoletti4787 4 жыл бұрын
Ciao, ottimo lavoro visto le prospettive che ha il fotovoltaico dove l'inverter è il componente fondamentale. Io possiedo l'inverter di Nuova Elettronica (LX1640) che uso quotidianamente nel mio impianto fotovoltaico. Esso non è un inverter gridline ma grazie alle connessioni da me elaborate (brevetto n. 0001416091 del 22/05/2015) puô asservire la mia abitazione. Sarei curioso di sapere se Arduino con il programma da te elaborato puô sostituire il microprocessore dell'LX1640 (EP1640), se non altro per il fatto che non è reperibile il ricambio nella malaugurata eventualità di un guasto ad esso. Grazie
@PierAisa
@PierAisa 4 жыл бұрын
Assolutamente sì, infatti l'inverter di Nuova Elettronica lavora a 256 punti quindi completamente compatibili con Arduino e il firmware che ho proposto si tratta di arrangiare un po' I pin per vedere Una piccola interfaccia di collegamento ed il gioco è fatto.
@reimundolopez1198
@reimundolopez1198 5 жыл бұрын
Esas 2 salidas del arduino puedo conectar a un puente H directamente ? Otra pregunta, como puedo variar la frecuencia de 0 hasta 140 hz ? Quiero variar la frecuencia con step/dir para un motor monofásico
@PierAisa
@PierAisa 5 жыл бұрын
Hello, you shall use dedicated drivers to be able to drive the H bridge mosfet or igbts, in order to have the right current sink and source for the gate diacharge/charge. For example a UCC37321 driver (see my video kzbin.info/www/bejne/fJetm6iiqrifm5ates) you can change the frequency by changing the code.
@marcofestini4459
@marcofestini4459 3 жыл бұрын
Ciao Pier, ho aggiunto lo stadio finale di potenza con 2 mosfet driver, 2 mosfet in push-pull collegati ad un trasformatore 12v a presa centrale 100VA...La tensione RMS massima della sinusoide a vuoto però è 180V partendo dai 13v in ingresso...Come mai? c'è una spiegazione "teorica"? grazie mille
@PierAisa
@PierAisa 3 жыл бұрын
Probabilmente il duty cycle non copre gli estremi 0-100%, ma ha un duty minimo , duty massimo; in altre parole copre solo una parte del range completo e questo si traduce in una tensione minore
@marcofestini4459
@marcofestini4459 3 жыл бұрын
@@PierAisa ma è un problema del codice? dello stadio di pilotaggio/mosfet? del trasformatore? Secondo te è possibile risolverlo? Mi piacerebbe creare un piccolo inverter per quando va via la luce in casa, giusto per accendere 3-4 lampadine. grazie ancora
@PierAisa
@PierAisa 3 жыл бұрын
@@marcofestini4459 il codice lo si puo' modificare per fare lavorare il PWM con duty massimo, senza rischiare di non portare in cross conduction i MOSFET. Varrebbe la pena aumentare il rapporto spire del trasformatore se si vuole stare in sicurezza
@michelevuerich8952
@michelevuerich8952 4 жыл бұрын
ciao Pier ho provato a selezionare il livello medio come mi hai detto ma il sito va in loop e non mi far andare avanti
@PierAisa
@PierAisa 4 жыл бұрын
Ti ho iscritto e mandato il tuo login via patreon, devi inserire le credenziali che ti ho mndato, Fammi sapere a pieraisaforum@gmail.com
@MrTega1975
@MrTega1975 6 жыл бұрын
si può usare per quel vettore un tipo di dato più piccolo di int
@PierAisa
@PierAisa 6 жыл бұрын
Esatto ! Soprattutto lavorando su Arduino che ha le risorse limitate sempre meglio risparmiare. Potrebbe andare bene byte o char per coprire i valori che possono andare da 0 a 255
@MrTega1975
@MrTega1975 6 жыл бұрын
Complimenti comunque, ottimo lavoro, molto chiaro, come sempre. Grazie!
@MarcoFranceschini1971
@MarcoFranceschini1971 5 жыл бұрын
Sera Pier...mi sembra che ci sia un piccolo refuso nella scrittura di "elapsed"...
@PierAisa
@PierAisa 5 жыл бұрын
A che minuto Marco ? grazie
@MarcoFranceschini1971
@MarcoFranceschini1971 5 жыл бұрын
Prova a 2:34 Pier...mi sembra se la vista non mi inganna...di leggere "ellapserd"....
@PierAisa
@PierAisa 5 жыл бұрын
@@MarcoFranceschini1971 Ops .... già già , brutto errorino. Grazie.
@MarcoFranceschini1971
@MarcoFranceschini1971 5 жыл бұрын
Eehehehehe...don't worry...we are humans...
@fralam7791
@fralam7791 3 жыл бұрын
Grazie per i tanti tutorial e la grande competenza, chiedo un consiglio su come sistemare il dispositivo di accensione di una caldaia elettronica che continua ad emettere scintille fino a quando non raggiunge la temperatura impostata nel termostato, cioe allo spegnimento della fiamma, probabilmente non funziona il circuito dell elettrodo di rilevazione fiamma, ci puo essere qualche componente guasto. Grazie
@PierAisa
@PierAisa 3 жыл бұрын
grazie esattamente.. molto probabilmente è un problema del sensore...
@fralam7791
@fralam7791 3 жыл бұрын
@@PierAisa sa dove poso trovare lo schema di funzionamento generico di un dispositivo di accensione e rilevazione fiamma? grazie
@PierAisa
@PierAisa 3 жыл бұрын
Ciao per la mia esperienza ho sempre visto questo flame sensor nel mondo Arduino come un sensore che fornisce un segnale alto/basso e necessita di una alimentazione 5V
@fralam7791
@fralam7791 3 жыл бұрын
@@PierAisa grazie per la dritta....
@francomaggiori1935
@francomaggiori1935 3 жыл бұрын
Chiedo scusa se sono fuori tema ma, vista la conoscenza profonda che ha e la mia infinita ignoranza in materia, vorrei proporle un progetto che riscontrerà sicuramente gratitudine e benedizioni da molti appassionati di HiFi. Il progetto è quello di un alimentatore AC a 50Hz per alimentare il motore sincrono del giradischi. Dovrà avere la regolazione della frequenza (per variare il numero di giri). La tensione in uscita di 180-220V. Potenza del motore 10W max. Il costo di questi alimentatori (se ben fatti) è molto alto (anche 500 e più euro). Che altro dire...grazie dell'attenzione e saluti.
@PierAisa
@PierAisa 3 жыл бұрын
Ciao Franco, scrivimi a pieraisaforum@gmail.com.
@MarcoFranceschini1971
@MarcoFranceschini1971 5 жыл бұрын
Una sorta di generazione tramite lookup table...
@PierAisa
@PierAisa 5 жыл бұрын
Esatto. Le tabelle. Lookup sono una soluzione versatile e facilmente configurabile. Inoltre per il tono sinolusoidalennenbasta un quarto....
@giancarlovolpe445
@giancarlovolpe445 4 жыл бұрын
Complimenti, Video ben fatto, come al solito. Siccome avevo sotto mano, due inverter trifase, di cui uno l'ho riparato a discapito dei condensatori dell'altro, il realtà funziona anche il resto ma non è l'oggetto di quanto voglio ottenere come finale. Su questo che mi è rimasto ci faccio un po di esperimenti. Il lato potenza e pilotaggio è tutto funzionante, ho già individuato tutti i contatti con cui appoggirmi per pilotare gli IGBT. Volevo pilotarlo con un arduino, ho una domanda a riguardo. Quando con la parte iniziale del vidio dici di copiare l'output della sinusoide per poi costruirci il vettore nel codice definitivo noto che la seguenza è diversa, mi piacerebbe sapere perche la seguenza del vettore sinPWM è stata costruita proprio in quel modo.
@PierAisa
@PierAisa 4 жыл бұрын
Mi riesci a dire il minuto a cui ti riferisci,?
@giancarlovolpe2755
@giancarlovolpe2755 4 жыл бұрын
Pier Aisa Ciao, ti scrivo da altro account, cosi magari se ti va puoi vedere qualche video che ho fatto io, niente a che fare con i tuoi però. riguardo alla costruzione dell'array al minuto 6:09 (dove dici che copi i numeri per incollarli nell'array. Poi al minuto 10:10 si vede l'array ma le sequenza é diversa.
@PierAisa
@PierAisa 4 жыл бұрын
Hai ragione probabilmente ho adottato un altro file per generarla con risoluzione diversa non sono esattamente identici
@giancarlovolpe2755
@giancarlovolpe2755 4 жыл бұрын
Pier Aisa Che pensi di implementare il vettore con una retroazione dipendente da una misura di tensione sulla uscita di un eventuale inverter?
@PierAisa
@PierAisa 4 жыл бұрын
@@giancarlovolpe2755 Il vettore rappresenta la sinusoide normalizzata (ampiezza = percentuale della massima tensione del DC bus), poi la sinusoide deve essere moltiplicata per una ampiezza in digitale, che verrà calcolata in modo da azzerare l'errore rispetto a quella impostata. Quindi servirà come hai detto una retroazione, dal valore letto in uscita al coefficiente moltiplicativo in digitale, che andrà a modificare il valore del duty cycle del PWM corrente
PierAisa #361: Segnale PWM con Arduino NANO
9:12
Pier Aisa
Рет қаралды 3,5 М.
SPWM sine INVERTER with Arduino
11:10
Electronoobs
Рет қаралды 115 М.
Жайдарман | Туған күн 2024 | Алматы
2:22:55
Jaidarman OFFICIAL / JCI
Рет қаралды 1 МЛН
Must-have gadget for every toilet! 🤩 #gadget
00:27
GiGaZoom
Рет қаралды 11 МЛН
0546: Tutorial Stabilità Amplificatori Operazionali
30:02
Pier Aisa
Рет қаралды 11 М.
Timer interni di Arduino UNO - Video 782
18:17
paolo aliverti
Рет қаралды 3,7 М.
Ponte a radio frequenza (RF bridge), come usarlo.
24:29
Renzo Mondaini
Рет қаралды 9 М.
Arduino controlla la macchina? 🤯🚗  - Auto Domotica Ep.2
22:56
【For Beginner】How to start electronics and what item is needed
18:16
Breadboarding tips
20:16
Ben Eater
Рет қаралды 421 М.
How to Make Inverter Without Transformer / DIY Transformerless Inverter
7:01
Mousa - Simple Projects
Рет қаралды 33 М.
PWM con Arduino per controllo velocità motore CC • Progetto 1000
31:52
Progetti con Emanuele Frisoni
Рет қаралды 4,6 М.