OHMETRO E MILLI-OHMETRO CON MICROCONTROLLORE

Schema per Realizzare un Ohmetro o Milli-Ohmetro per la Misura di Resistenza Elettrica con Microcontrollore e Display LCD…



INTRO

La misura della resistenza elettrica è molto semplice e sfrutta la legge di Ohm. Facendo scorrere una corrente di valore noto e misurando la tensione generata sulla resistenza è possibile conoscere il valore di resistenza secondo la relazione R=V/I.

Quindi serve un generatore di corrente costante e con il microcontrollore e in particolare grazie all’ADC interno si va a misurare la tensione sul resistore e si calcola il valore di resistenza con delle operazioni matematiche all’interno del microcontrollore. Sul display LCD viene infine visualizzato il valore della resistenza da testare. Il microcontrollore usato è un PIC18F della Microchip ma si può usare un altro microcontrollore sempre della famiglia PIC, l’importante che abbia un ADC interno.

Questo strumento permette di misurare resistenze di valore molto piccolo, da 0.02 Ohm a 1.9 Ohm, oppure tra 0.2 e 19 Ohm o per valori da 2 Ohm ad un massimo di 190 Ohm. Con una piccola modifica si può creare un sistema per variare il range dinamicamente, come un normale Ohmetro. Inoltre cambiando il sistema di generazione della corrente di riferimento ed usandone uno ad alta precisione si possono andare a misurare resistori con valori superiori ai 190 Ohm.




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;

const char character[] = {0,14,17,17,17,10,27,0};  //Simbolo di Ohm
unsigned int conversion;                           //Variabile valore convertito
long value;                                        //varibile valore tensione corrente
unsigned char cifra;                               //Variabile cifra dei valori
float kr = 0.6275;                                 //R4=100 resistenza misurabile da 0.2 a 160 ohm
float kr1 = 0.065;                                 //R4=1000 resistenza misurabile da 2 a 1600 ohm

void CustomChar(char pos_row, char pos_char) {     //Genera il simbolo di Ohm
  char i;
  Lcd_Cmd(64);
  for (i = 0; i<=7; i++) Lcd_Chr_CP(character[i]);
  Lcd_Cmd(_LCD_RETURN_HOME);
  Lcd_Chr(pos_row, pos_char, 0);
}

void main (){                               //Programma principale

TRISA = 0b00000001;                         //AN0 ingresso
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
        value = value/kr;                   //Moltiplico per la costante di Resistenza

        Lcd_Chr(1, 1, 'R');                 //Scrivo "Resistenza" sulla prima riga
        Lcd_Chr(1, 2, 'e');                 //partendo dalla posizione 1
        Lcd_Chr(1, 3, 's');
        Lcd_Chr(1, 4, 'i');
        Lcd_Chr(1, 5, 's');
        Lcd_Chr(1, 6, 't');
        Lcd_Chr(1, 7, 'e');
        Lcd_Chr(1, 8, 'n');                 //fino alla posizione 8
        Lcd_Chr(1, 9, 'z');
        Lcd_Chr(1, 10, 'a');
        Lcd_Chr(2, 2, ' ');                 //Vai alla seconda riga

        cifra = value / 10000;              //Cifra centinaia di OHM
        cifra = cifra + 48;                 //Trasformazione in codice ASCII
        Lcd_Chr_CP(cifra);                  //Scrivi le centinaia

        cifra = (value / 1000) % 10;        //Cifra decine di OHM
        cifra = cifra + 48;                 //Trasformazione in codice ASCII
        Lcd_Chr_CP(cifra);                  //Scrivi le unità

        cifra = (value / 100) % 10;         //Cifra unità di OHM
        cifra = cifra + 48;                 //Trasformazione in codice ASCII
        Lcd_Chr_CP(cifra);                  //Scrivi le unità
        
        Lcd_Chr_CP(46);                    //Scrivi punto

        cifra = (value / 10) % 10;          //Cifra decimi di OHM
        cifra = cifra + 48;                 //Trasformazione in codice ASCII
        Lcd_Chr_CP(cifra);                  //Scrivi i decimi
        
        CustomChar(2,8);

        Delay_ms(10);                       //Delay di 10mSec
    }
}

Prima di tutto si va a definire la connessione tra LCD e microcontrollore. Il display LCD sarà connesso alle PORTB del microcontrollore. Dopo di che vengono inizializzate alcune variabili che useremo all’interno del codice, come ad esempio il carattere che contiene il simbolo di Ohm, il valore convertito e le costanti di conversione tensione/resistenza calcolate in base al riferimento di corrente.

La funzione “CustomChar” viene generata da Mikroc e serve in questo caso per scrivere il simbolo di Ohm sul display LCD. Viene generato in automatico da Mikroc dalla funzione “LCD Custom Char Generator” nel menù a tendina “Tools”.

Nel programma principale si vanno ad inizializzare il display LCD e il convertitore analogico digitale ADC. Nel ciclo infinito invece si va a leggere il valore dell’ADC, si converte da binario a decimale e infine si va a dividere per la costante di resistenza opportuna per convertire il valore da tensione a resistenza.

Dopo di che si va a visualizzare sulla prima riga del display LCD la stringa “Resistenza”, si va a dividere in centinaia, decine, unità e decimi il valore di resistenza calcolato e si mostra una cifra alla volta con un punto tra unità e decimi. Infine si scrive il simbolo di Ohm e si inserisce un ritardo di 10mS.

I fuses in questo caso sono quelli di default della pagina di MIKROC.

SCHEMA

Lo schema è il seguente:

La tensione di alimentazione è 5V continui e stabilizzati a basso ripple, ad esempio un vecchio caricatore per cellulari. La tensione positiva è connessa al pin 20 del microcontrollore, all’alimentazione del display, ad R3 e all’ingresso del riferimento di corrente. La massa o terminale negativo è invece connessa a tutti i pin dove vi è il simbolo della massa e ai pin 8 e 19 del microcontrollore per alimentarlo.

Il cristallo di quarzo da 4MHz e i due condensatori da 22pF formano il circuito di oscillazione mentre R3 mantiene in funzione il microcontrollore.

Il display LCD è connesso alle PORTB come da figura, alimentato sempre con 5V e viene usata RV1 per la regolazione del contrasto. U3A forma un amplificatore non invertente con guadagno pari a G=2, in modo tale da amplificare la tensione generata sul resistore da testare e migliorare la lettura da parte dell’ADC.

Il riferimento di corrente è formato da un regolatore di tensione LM317 con apposita connessione in modo tale da generare una corrente che sarà I=(1.25/R4) + 0.0005, in questo caso 125.5mA, perché i 0.5mA che si sommano alla formula dipendono dai circuiti interni dell’integrato LM317. La costante di corrente usata nel codice dipende da questo valore di corrente e dall’amplificazione di U3A. in particolare Kr = ((I[mA])/(100*G)) dove I[mA] è la corrente espressa in milli-Ampere, 100 è una costante che dipende dalla divisione in cifre del codice e G è il guadagno dell’amplificatore. In questo caso Kr=125.5/(100*2)=0.6275.

Lo schema montato su breadboard ha il seguente aspetto:

DOWNLOAD

Potete scaricare la simulazione del circuito con PROTEUS e il codice scritto e compilato con MIKROC al seguente LINK!!!



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

6 pensieri su “OHMETRO E MILLI-OHMETRO CON MICROCONTROLLORE

  1. Come già segnalato, dal link è scaricabile un file .rar il cui contenuto
    fa riferimento ad un misuratore di livello liquidi (“indicatore livello
    liquidi.ms14”) che pare NON avere alcuna pertinenza con il milliohmetro
    oggetto del progetto (“ohmetro-milli-ohmetro-controllore”).
    In data 28 luglio mi è stato gentilmente indicato che il tutto sarebbe
    stato corretto l’indomani….
    Resto in attesa e ringrazio

    • Salve, gentilmente mi potrebbe girare il file exe. del progetto?
      Perchè, cliccando sul link, la pagina non si apre. Se per caso lei abbia il link o file rar o meglio ancora il file exe. me lo potrebbe gentilmente mandare alla seguente email luigi.gennuso@virgilio.it.
      grazie infinitamente
      buona giornata

      Luigi.

      • Il link sembra corretto da parte mia, l’unico problema è il browser.

        provi a cliccare sul link con tasto destro, apri in una finestra in incognito e poi aggiorni la pagina.

        riesco a scaricarlo con tutti i browser in questo modo e i file sono corretti

        • Buongiorno, sono riuscito a scaricare e a scrivere sul Pic.
          Leggendo non viene citato nessun settaggio da parte del Pic inerente ai Fuse, clock interno o esterno.
          Quindi deduco che non devo settare nulla.
          Vi aggiornerò a progetto finito.
          Vi ringrazio ancora una volta per avermi postato link exe.
          A presto!

          Luigi

        • Salve, leggendo attentamente sulla pagina dice :
          I FUSES in questo caso sono quelli di default della pagina di Mikroc.
          Ecco perché non mi funziona perché devo settare i fuses.
          Potrei avere fuses per settare i il Pic? Grazie buona giornata a tutti

Lascia un commento

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