PWM - Pulse Width Modulation

Il PWM o modulazione a larghezza d’impulso, rappresenta i segnali che variano il proprio livello logico nel tempo, passando dal livello logico 0 al livello logico 1, per la durata di un periodo (ciclo di lavoro).

 Il rapporto tra il tempo in cui il livello logico si trova a 1 e 0, si chiama Duty Cycle.

Un Duty Cycle al 50% significa che il tempo in cui la tensione si trova a 1, è la metà del tempo in cui il segnale è a Zero.

Il segnale può essere modulato in modo che il rapporto possa variare dallo 0% al 100%.

Con un rapporto allo 0%, l’uscita sarà a zero volt, mentre con il rapporto 100%, l’uscita sarà al livello logico 1; il ciclo successivo inizia quando termina il ciclo precedente.

Alcuni utilizzi.

Il PWM è utile per controllare la potenza erogata come per il Varilight che regola la luminosità di una lampadina, il dimmer che controlla la luminosità di un led o il regolatore di velocità di un trapano.

Altri utilizzi nei servocontrolli a distanza come, il controllo di un servocomando che controlla il posizionamento degli alettoni di un aereo modello, o la chiusura  e apertura parziale di elettrovalvole pilotate da remoto utilizzando una frequenza che serve da portante per il segnale modulato in ampiezza di impulso.

Il segnale PWM è utilizzato anche per convertire un segnale digitale in analogico, integrando gli impulsi del Duty Cycle con un filtro Resistenza/Condensatore.

Anche gli amplificatori sonori in classe D, utilizzano la modulazione PWM.

Arduino UNO ha 6 pins utilizzabili come uscite PWM; sono contrassegnati da una piccola onda serigrafata sul circuito stampato, sul lato sinistro della scheda; in ordine dal basso: PD3,PD5,PD6, PB1, PB2 e PB3 .

PWM Channel
pins PWM

La libreria PWM(internal), selezionabile dal menu “Outputs”, permette di visualizzzare l’andamento interno del segnale PWM evidenziando i parametri Mark- Space , la frequenza e il periodo.

PWM parametri

Parametri per PWM(internal)

ChangePeriod

Imposta il Periodo e il prescaler della uscita PWM

Parametri

  • UINT Periodo: il numero impostabile è compreso tra 0 e 255.
  • INT Prescaler : è il numero usato per diminuire la frequenza di clock .

  • Return value : non necessario

Disable: disabilita l’uscita PWM ripristinando la disponibilità di utilizzo del pin come I/O

Enable : Abilita l’uscita PWM disabilitando la possibilità di utilizzo del pin come I/O.

SetDutyCycle:Imposta il Duty Cycle del segnale PWM; esempio un Duty Cycle di 128 equivale ad un segnale 50% on e 50% off

Parameters

  • BYTE : imposta il rapporto Mark/Space con valori compresi tra 0 e 255.

SetDutyCycle10Bit: Imposta il rapporto Mark/Space con valori compresi tra 0 e 1023

Se il periodo è = 255 , il duty Cycle di 512 sarà uguale al 50%

Parameters

  • UINT Duty : compreso tra 0 e 1023
PWM properties

PWM(internal)  Properties - visualizzazione DIGITALE

    • Channel: ci sono 6 canali, corrispondenti alle 6 uscite configurabili come PWM.
    • Alternative pin: riferito alla variabile “altpin” che può essere True o false; seleziona un pin alternativo per l’uscita PWM.
    • PWM Pin: riferito alla variabile “PWM_pin”, specifica il pin cui indirizzare il segnale PWM.
    • PWM Timer: seleziona il Timer interno per generare la frequenza per il PWM.

    Tutte le uscite PWM che utilizzano lo stesso Timer condividono anche il Periodo e il Prescaler.

    • Period Overflow: associato alla variabile “period”, con valore compreso tra 0 e 255 .
    • Prescaler: associato alla variabile “prescale”, determina la frequenza del segnale PWM.
    • Period (us): associato alla variabile “period_calc”, mostra la lunghezza del tempo necessario per completare un ciclo PWM.
    • Frequency (Hz): associato alla variabile “frequency_calc2”,  espresso in cicli per secondo.
    • Frequency (KHz): associato alla variabile “frequency_calc”, mostra la frequenza del segnale PWM.
    • Required Frequency (Hz): associato alla variabile “Req_Freq”; digitando il valore, calcolerà automaticamente il risultato.
    • Calculated Period: associato alla variabile”Calc_period”; calcola automaticamente il valore per la frequenza desiderata per il PWM.
    • Calculated Prescaler : associato alla variabile”Calc_Scaler”; calcola automaticamente il valore per la frequenza voluta per il PWM.
    • Representation : associato alla variabile”Sim_rep”; riferito a come il segnale PWM è visualizzato nella simulazione.

la rappresentazione dell’uscita PWM nella simulazione, può essere digitale o Analogica

PWM analogue

PWM(internal)  Properties - visualizzazione ANALOGICA

PWM barra analogica
PWM oscilloscopio analogue

tensione di uscita PWM, visualizzata sull’oscilloscopio virtuale di Flowcode

visualizzazione dell barra analogica nella DashBoard.

PWM led

l’uscita PWM analogica può essere utilizzata per controllare la luminosità di un led; lo schema indica come collegare l’uscita a un transistor per avere una corrente di pilotaggio maggiore.

PWM VU Meter

L’uscita PWM analogica può essere collegata anche a un VU meter analogico.

Pilotaggio di carichi ad alto assorbimento.

L’uscita digitale che varia tra lo zero logico e, l’uno logico, permette di dosare la potenza necessaria per accendere una lampada o un motore; quando il segnale è zero 0, la potenza erogata è nulla, quando è 1, la potenza erogata è massima.

Quanto più tempo il segnale rimarrà al livello logico 1, maggiore sarà la potenza che arriverà al carico.

La frequenza di controllo del ciclo dipende dall’isteresi del carico.

Per un motore in corrente alternata, una lampada a 220 V, una resistenza per riscaldare un fluido, la frequenza di rete di 50 Hz, determina la durata del ciclo.

Per il controllo dei motori Brushless, la frequenza del ciclo determina la velocità di rotazione.

Per carichi con isteresi molto bassa, come una barra a diodi led, la frequenza del ciclo deve essere tale da evitare il fastidio dello sfarfallio dovuto al battimento con la frequenza di rete, in ogni caso superiore a 60 Hz.

E’ possibile pilotare un carico a 220 volt AC, inserendo un foto accoppiatore, con integrato un circuito di  “Zero crossing” ,tra l’uscita di Arduino e un triac.

Lo “Zero Crossing Switch” (ZC), sincronizza il segnale di controllo con la frequenza di rete AC 220 v, in modo da evitare la generazione di impulsi  che generano disturbi sulla rete stessa.

PWM zero crossing

Interrupts

  • TRM0: utilizzato per delay/millisecondi; anche per PWM pins 5 e 6.
  • TRM1: PWM sui pins 0 e 10; utilizzato anche per gestire le librerie  “Servo”.
  • TRM2: PWM sui pins 3 e 11.

Riccardo Monti