VOLTMETRO PER ALIMENTATORE ATX

Schema per Realizzare un Misuratore di Tensione o Voltmetro con Display LCD per le Uscite degli Alimentatori ATX del Computer…

 

 
 
 




 

INTRO

Nei computer ad alte prestazioni risulta interessante monitorare le prestazioni dell’alimentatore visto che da esso dipendono le prestazioni di tutti gli altri componenti. Quindi risulta interessante conoscere tutte le tensioni di uscita in modo tale da monitorare come si comporta l’alimentatore sotto sforzo. In ogni caso, anche se non si ha un computer ad alte prestazioni è interessante e anche molto bello mostrare su display LCD i valori di tensione delle uscite dell’alimentatore ATX.

Per il seguente progetto si usa un microcontrollore PIC18F252 che serve come convertitore i valori logici, ad elaborarli e infine a mostrarli su display LCD. Il circuito è pensato per avere una misura con la massima precisione, inoltre utilizza uno stabilizzatore di tensione per generarsi una tensione priva di rumore e con un valore che non dipende dalla tensione erogata dall’ATX.

Il circuito misura le principali tensioni che vengono usate all’interno del PC e le mostra a due a due ogni secondo. In particolare si vanno a misurare i 5V positivi e negativi, i 3.3V e i 12V e in particolare la tensione di alimentazione del circuito di misura si ottiene con un l7805 a partire dai 12V.

 




 

CODICE

Il codice è il seguente:

sbit LCD_RS at RB0_bit; //Configurazione Pin LCD sbit LCD_EN at RB1_bit; //RB0 -> RS sbit LCD_D4 at RB2_bit; //RB1 -> EN sbit LCD_D5 at RB3_bit; //RB2 -> D4 sbit LCD_D6 at RB4_bit; //RB3 -> D5 sbit LCD_D7 at RB5_bit; //RB4 -> D6  //RB5 -> D7 sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB4_bit; sbit LCD_D7_Direction at TRISB5_bit; unsigned char cifra; //Variabile cifra dei valori unsigned int conversion; //Variabile valore convertito long value; //varibile valore tensione corrente unsigned short int kv533 = 2; //Costante conversione tensione unsigned short int kv12 = 3; //Costante conversione tensione bit high, low; void visualizza (long value){  cifra = value / 10000; //Cifra decine di Volt  cifra = cifra + 48; //Trasformazione in codice ASCII  Lcd_Chr_CP(cifra); //Scrivi le centinaia  cifra = (value / 1000) % 10; //Cifra unità di Volt  cifra = cifra + 48; //Trasformazione in codice ASCII  Lcd_Chr_CP(cifra); //Scrivi le centinaia  Lcd_Chr_CP('.'); //Scrivi "."  cifra = (value / 100) % 10; //Cifra centinaia di mV  cifra = cifra + 48; //Trasformazione in codice ASCII  Lcd_Chr_CP(cifra); //Scrivi le centinaia  cifra = (value / 10) % 10; //Cifra decine di mV  cifra = cifra + 48; //Trasformazione in codice ASCII  Lcd_Chr_CP(cifra); //Scrivi le centinaia  Lcd_Chr_CP('V'); //Scrivi "V" } void main (){ //Programma principale  TRISA = 0b00011111; //AN0-AN4 ingressi  Lcd_Init(); //Inizializza LCD  Lcd_Cmd(_LCD_CURSOR_OFF); //Cursore non visibile  Lcd_Cmd(_LCD_CLEAR); //Pulisci LCD  while (1) { //Ciclo infinito  conversion = ADC_Read(0); //Converti AN0  value = (long)conversion * 5000; //*(5000/1023) = * 4.8876  value = value / 1023; //Trasformo il valore da binario a decimale  Lcd_Chr(1, 1, 'O'); //Scrivo "OUT 3.3 =" sulla prima  Lcd_Chr(1, 2, 'U'); //partendo dalla posizione 1  Lcd_Chr(1, 3, 'T');  Lcd_Chr(1, 4, ' ');  Lcd_Chr(1, 5, '3');  Lcd_Chr(1, 6, '.');  Lcd_Chr(1, 7, '3');  Lcd_Chr(1, 8, ' '); //Lascio uno spazio vuoto  Lcd_Chr(1, 9, '='); //Lascio uno spazio vuoto  Lcd_Chr(1, 10, ' '); //Lascio uno spazio vuoto  Visualizza(value); //Mostro valore di tensione  conversion = ADC_Read(1); //Converti AN1  value = (long)conversion * 5000; //*(5000/1023) = * 4.8876  value = value / 1023; //Trasformo il valore da binario a decimale  value = value * kv533; //Moltiplico per la costante di tensione  Lcd_Chr(2, 1, 'O'); //Scrivo "OUT +5" sulla seconda riga  Lcd_Chr(2, 2, 'U'); //partendo dalla posizione 1  Lcd_Chr(2, 3, 'T');  Lcd_Chr(2, 4, ' ');  Lcd_Chr(2, 5, '+');  Lcd_Chr(2, 6, '5'); //Lascio uno spazio vuoto  Lcd_Chr(2, 7, ' '); //Lascio uno spazio vuoto  Lcd_Chr(2, 8, '='); //Lascio uno spazio vuoto  Lcd_Chr(2, 9, ' ');  Lcd_Chr(2, 10, ' ');  Visualizza(value); //Visualizza valore  Delay_ms(1500); //Delay di 1.5Sec  conversion = ADC_Read(2); //Converti AN2  value = (long)conversion * 5000; //*(5000/1023) = * 4.8876  value = value / 1023; //Trasformo il valore da binario a decimale  value = value * kv533; //Moltiplico per la costante di tensione  Lcd_Chr(1, 1, 'O'); //Scrivo "OUT -5" sulla prima riga  Lcd_Chr(1, 2, 'U'); //partendo dalla posizione 1  Lcd_Chr(1, 3, 'T');  Lcd_Chr(1, 4, ' ');  Lcd_Chr(1, 5, '-');  Lcd_Chr(1, 6, '5');  Lcd_Chr(1, 7, ' ');  Lcd_Chr(1, 8, '='); //Lascio uno spazio vuoto  Lcd_Chr(1, 9, ' '); //Lascio uno spazio vuoto  Lcd_Chr(1, 10, '-'); //Lascio uno spazio vuoto  Visualizza(value);  conversion = ADC_Read(3); //Converti AN3  value = (long)conversion * 5000; //*(5000/1023) = * 4.8876  value = value / 1023; //Trasformo il valore da binario a decimale  value = value * kv12; //Moltiplico per la costante di tensione  Lcd_Chr(2, 1, 'O'); //Scrivo "OUT +12" sulla prima riga  Lcd_Chr(2, 2, 'U'); //partendo dalla posizione 1  Lcd_Chr(2, 3, 'T');  Lcd_Chr(2, 4, ' ');  Lcd_Chr(2, 5, '+');  Lcd_Chr(2, 6, '1'); //Lascio uno spazio vuoto  Lcd_Chr(2, 7, '2'); //Lascio uno spazio vuoto  Lcd_Chr(2, 8, ' '); //Lascio uno spazio vuoto  Lcd_Chr(2, 9, '=');  Lcd_Chr(2, 10, ' ');  Visualizza(value);  Delay_ms(1500); //Delay di 2Sec  } } 

Prima di tutto si inizializzano le connessioni con il display LCD e si inizializzano le variabili utili per il codice.

Il primo segmento di codice è un subroutine usata per visualizzare il valore di tensione; si va a scomporre il valore in decine, unità, decimi e centesimi e va a visualizzare una cifra alla volta seguita infine dalla lettera V che indica Volt.

Nel programma principale si inizializza LCD e ADC, poi si legge uno per volta l’ingressi analogici, si converte il valore letto in valore di tensione, si visualizza la stringa che indica cosa si sta leggendo e infine sulla stessa riga il valore letto. Stessa cosa succede per la seconda riga del display, poi si attendono 1.5 secondi e si vanno a visualizzare altri due valori di tensione.

Le operazioni di lettura e visualizzazione continuano finchè l’alimentazione fornisce una tensione opportuna.
 

SCHEMA

Lo schema è il seguente:

Le 4 tensioni ovvero 3.3V, 5V, -5V e 12V entrano nel circuito e la tensione a 12V viene portata a 5V grazie ad un L7805 che stabilizza la tensione e fa si che l’ADC interno al PIC riceva una tensione costante. La tensione di alimentazione esce dal 7805 e giunge al pin 20 del microcontrollore e al display oltre che alla retroilluminazione del display con una resistenza da 470 Ohm. Il contatto negativo invece è in comune per tutti gli elementi.

Il circuito di oscillazione è formato da un quarzo a 4MHz X1 e dai condensatori C1 e C2 mentre R1 mantiene in funzione il microcontrollore. RV1 Serve a regolare il contrasto del display.

Gli ingressi analogici del microcontrollore supportano una tensione massima di 5V, quindi solo la tensione a 3.3V giunge direttamente al microcontrollore, la tensione a 5V viene divisa per 2 con due resistenze identiche da 1kOhm mentre la tensione a 12V viene divisa per da 3 resistenze da 1kOhm.

Per quanto riguarda la tensione negativa, questa deve essere invertita ed essendo vicina a 5V divisa per due come fatto per la tensione positiva +5V. Si usa quindi U2A, R8 ed R7 per realizzare un amplificatore invertente con guadagno 0.5 per passare da -5V a una tensione di 2.5V che verrà letta in modo corretto dal microcontrollore e poi convertita in valore di tensione grazie alle costanti. Il circuito su breadboard è così realizzato:

Per quanto riguarda i collegamenti, per sicurezza prima si consiglia di usare un voltmetro e testare le tensioni in uscita dall’ATX in modo tale da trovare i fili giusti delle uscite che si vogliono misurare.

Per avere un sistema più preciso si consiglia di utilizzare un regolatore diverso dal 7805 e in particolare uno stabilizzatore a maggiore precisione o regolabile in modo tale da tarare il circuito.

 

DOWNLOAD

Potete scaricare la simulazione del circuito con PROTEUS e i codici scritti con MIKROC 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 *