DC-DC Converter Step-Down Con Microcontrollore PIC

Guida alla Programmazione in C del PIC, 4° PARTE Semplice DC-DC Converter con Tensione D’uscita Mantenuta Stabile Grazie al Controllo Effettuato dal Microcontrollore. Utilissimo Schema per Ottenere Tensioni Minori di Quelle disponibili con la Massima Efficienza…

 
 
 
 




 

INTRO

Un DC-DC converter è un circuito necessario per ottenere una tensione più basse di quella presente sull’alimentazione. Il circuito è molto semplice, in particolare si basa sul fornire energia al circuito per brevi istanti e affidarsi all’energia immagazzinata in elementi passivi nei restanti intervalli temporali.

Segnale PWM

Se si ha un circuito come in figura, con il pulsante controllato con una forma d’onda quadra, la forma d’onda d’uscita coincide con la forma d’onda di controllo ma con una ampiezza data da V1. La tensione media Vo sarà data dal valore di V1 per il valore del duty cycle, quindi variando il duty cycle si varia la tensione media in uscita.

Una forma d’onda quadra però contiene molte armoniche, quindi serve un filtro per isolare solo la componente media e fornire energia anche durante il periodo di off, in particolare si utilizza un filtro LC.

Step DownIl filtro LC è formato da L1 e C1, il diodo D1 è necessario per il ricircolo della corrente nell’induttore quando lo switch è aperto. Lo switch è formato dal transistor Q1, ma può essere sostituito da un mosfet di tipo P. La resistenza R1 rappresenta il carico mentre la resistenza RV1 serve per la retroazione del segnale d’uscita.

 




 

DIMENSIONAMENTO DEI COMPONENTI E FUSES

Per il dimensionamento dei componenti bisogna considerare che il DC-DC converter può lavorare in due condizioni, la prima è detta continuos conduction, la seconda discontinuos conduction, nel primo caso ola corrente nell’induttore non è mai nulla, nel secondo caso si. La differenza tra le due regioni di funzionamento oltre alla corrente sta nelle formule di analisi del circuito.

Il valore della capacità va scelto in modo opportuno per evitare che vi sia un ripple elevato, usiamo un condensatore da 470µF.

L’induttore più piccolo è, più probabilità di essere in regione di discontinuos conduction ci sono, si consiglia di avere induttanze più grandi di 10µH.

Per quanto riguarda la corrente massima del diodo e dello switch bisogna considerare una corrente media circa uguale alla corrente di uscita con picchi massimi di almeno 20 volte maggiori. La resistenza serie del condensatore inoltre deve essere piccola per avere un ripple vicino a quello desiderato.

Vcc è la tensione di alimentazione, in questo circuito 5V, la frequenza è la frequenza del segnale PWM ovvero 20KHz e la Iout è la corrente d’uscita. Per il calcolo della capacità compare il termine r che rappresenta il ripple, per i circuiti switching questo valore deve essere intorno a 0,03 ovvero 3% di ripple.

Per quanto riguarda lo switch bisogna ricordare che utilizzando un transistor PNP o un mosfet di tipo P esso è acceso quando sulla base o sul gate nel caso del mosfet bisogna avere una tensione di 0V, quindi aumentando il ton in ingresso si riduce il ton in uscita.

Per avere una buona risoluzione del PWM e una buona frequenza in uscita si usa un cristallo di quarzo come oscillatore da 20 MHz.

I Fuses del microcontrollore sono così configurati:

CONFIGURAZIONE FUSES

 




 

ALGORITMO

L’algoritmo è molto semplice; parte della tensione di uscita viene prelevata dal resistore RV1 e viene inviato all’ADC del microcontrollore  che ne converte il valore da analogico a digitale. Questo valore convertito viene confrontato con un valore di riferimento e se è minore si riduce il duty cycle in uscita dal PIC (aumentando il duty cycle visto dal filtro) se è maggiore si fa l’operazione contraria. Questo confronto viene fatto di continuo così che la tensione in uscita non vari.

Il codice è il seguente:

char value = 0b11111111;              //valore per variare il pwm
unsigned int valuec = 0b0010000000;   //valore di confronto (1/8)VCC
unsigned int conversion;              //valore convertito

void main() {

TRISC.F2 = 0;               //uscita pwm portc 2
PORTC.F2 = 1;               //uscita pwm attiva (bjt spento)

PR2 = 255;                  //valore per garantire una frequenza di 20KHZ del pwm

T2CON = 0b00000100;         //setting tmr2: postascaler 1:1, tmr2 on, prescaler 1:1

CCPR1L = value;             //valore affinchè DC=1 ccpr1l=0001100 ccp1con=0011...

CCP1CON = 0b00111100;       //utilizza pwm e setta il valore di comparazione con i due lsb = 11

adc_INIT();                 //inizializza l'ADC



   while(1){

   conversion = ADC_Read(0);      //Converti la partizione dell'uscita
   
   //ricordare che il duty cycle visto dal filtro è opposto al duty cycle in uscita


   if(value>0b00000000 && conversion<valuec) value--;    //se il DC  non è massimo e il valore convertito
                                                         //è minore del valore di confronto aumenta il DC

   if(value<0b11111111 && conversion>valuec) value++;    //se il DC non è minimo e il valore convertito
                                                        //è maggiore del valore di confronto riduce il DC
   CCPR1L = value;    //inserisci il valore per variare il DC

   }


}

 

Prima di tutto si inizializzano 3 variabili, una che contiene il valore per variare il duty cycle che inizialmente viene posto al 100% in modo tale che lo switch sia chiuso, la seconda variabile è il valore ci confronto che viene confrontata con la terza variabile ovvero il valore convertito in digitale della partizione dell’uscita.

Il valore di confronto è fissato ad 1/8 del valore massimo.

Poi nel programma viene inizializzato il pwm e il registro PR2 viene inizializzato a 249 in modo tale da avere una frequenza di 20KHz utilizzando un postscaler e un prescaler del timer2. Viene attivato il timer2 e viene settato un valore dello 0% del duty cycle infine viene attivato l’ADC.

Nel ciclo infinito viene convertito il valore della partizione di Vo e viene confrontato con il valore di comparazione. Se la partizione è più piccola del valore convertito il duty cycle diminuisce (aumentando quello visto dal filtro) se invece il valore di comparazione è più grande del valore partizionato allora il duty cycle aumenta (diminuendo quello visto dal filtro).

In questo modo la tensione in uscita è data dal valore di comparazione diviso il valore di partizione: usando un valore di comparazione di 1/8 di Vcc e un valore di partizione di 0,5Vo allora l’uscita sarà 1/4 di Vcc ovvero 1.25V.
 
 
SCHEMA E RISULTATI

Supponiamo di voler creare un DC-DC converter per ottenere 2V in uscita con una corrente di 10mA a partire da una tensione di 5V. La frequenza come visto prima è fissata a 20KHz, con un induttore da 10µH e un condensatore da 470µF. Visto che il valore di comparazione è 1/8 di 5V allora per avere 2V in uscita il blocco di partizione deve avere un valore di 0,3125 valore che si può ottenere utilizzando un trimmer. Lo schema è il seguente:

schema DC-DC CONVERTERLo schema montato su breadboard ha la seguente forma:

breadboard1Il condensatore evidenziato in giallo è necessario per filtrare la tensione di alimentazione in modo tale da non avere oscillazioni dovute al rumore del segnale PWM. Questo condensatore va inserito il più vicino possibile ai pin di alimentazione 20 e 19 facendo attenzione alla polarità. Il suo valore deve essere intorno i 220µF per correnti di uscite basse (1mA-100mA), più grande per correnti maggiori.

La tensione di uscita (di colore verde nel grafico) e il segnale PWM (di colore giallo nel grafico) hanno il seguente andamento temporale.
 
 

waveform DC-DC converterDownload file .HEX, File MikroC e simulazione con Proteus al seguente LINK!!!







 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *