Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

Projeto 17: CapMeter (Capacímetro Digital)

Share:

CapMeter




Este é um capacímetro simples que irá medir capacitâncias facilmente. Há alguns métodos para medir capacitância, neste caso eu utilizei um comparador de tensão, o LM339, funcionando como um oscilador. A frequência desse oscilador depende de C (que será o capacitor a ser medido). Não há a necessidade de calibrar.

A frequência desse oscilador foi utilizado como a entrada de clock externo para o TIMER1 do microcontrolador. O TIMER1 como foi explicado num post anterior, possui um contador de 16 bits(0 - 65536) obtendo assim uma maior faixa de capacitância e uma maior precisão.

O valor máximo aceitável que esse capacímetro mede é de 10uF, nesse caso o valor da freqûencia atinge aproximadamente 5Hz. Acima de 10uF a precisão é muito baixa, pois a frequência tende a diminuir.

Esse capacímetro irá ser utilizado principalmente para medir capacitâncias de componentes SMD, no qual seu valor não é indicado no corpo do componente.

DOWNLOAD:
Firmware: CapMeter.hex;
Arquivo de simulação do Proteus: CapMeter.DSN;


CÓDIGO-FONTE:
// LCD module connections
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

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;
// End LCD module connections


int freq;
char capacitance[16];

void main()
{
T1CON=0b00110111; //prescaler 1:8, clock externo, timer1 ligado
TRISC.F0 = 1;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);               
Lcd_Cmd(_LCD_CURSOR_OFF);          
lCD_Out( 1, 3, "Microcontrolandos" );
Lcd_Out( 2, 7, "Cap Meter" );
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR);

 while(1)
 {
 TMR1L = 0;
 TMR1H = 0;
 Delay_ms( 1000 );
 freq = (TMR1H << 8) | TMR1L;
 Lcd_Out( 1, 7, "Cap Meter" );
 
 if( freq <= 0)
 {
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out( 2, 5, "NO CAPACITOR!" );
 }
 else
 {
      freq = 27050/freq; //Formula do oscilador
      IntToStr( freq, capacitance );
      Lcd_Cmd(_LCD_CLEAR);
      Lcd_Out( 2, 1, "CAPACITANCE=" );
      Lcd_Out_CP( capacitance );
      LCD_Out_CP( "nF" );
 }
 Delay_ms(1);
}
}

10 comentários:

  1. ola conheço muito de eletrônica analógica. você tem certeza que este circuito ira funcionar. pois bem já trabalhei bastante com circuitos de osciladores nesta configuração que voce esta usando .acho meio difícil que iria funcionar com uma fonte simples.
    estou a disposiçao.

    ResponderExcluir
    Respostas
    1. Olá!
      Segundo o datasheet do LM339, não ha necessidade de utilizar uma fonte simetrica, e ate mesmo mostra um esquema de um oscilador.

      Muito obrigado pela sua ajuda!
      Abraços, Tiago Henrique.

      Excluir
  2. a mais uma coisa parabéns de verdade pelo blog muito tem coisa muito interessante .
    um abraço

    ResponderExcluir
  3. Alguien me podria decir, en programa fueron compilados los archivos de programacion del PIC????????????

    ResponderExcluir
  4. Gostaria de criar um capacímetro para medir até aproximadamente uns 10000uF.
    Será que seria possível se eu usasse um PIC com temporizador de 32bits? Se é que existe.
    Obrigado

    ResponderExcluir
  5. Parabéns pelas excelentes matérias que você oferece em seu site.
    por favor, explique-me o comando:
    freq = 27050/freq;
    Muito obrigado e até breve.

    ResponderExcluir
  6. pq quando eu coloco um capacitor nao funciona no proteus? coloquei um de 1uF 50V eletrolitico e nao funcionou

    ResponderExcluir
  7. Qual a quantia máxima de Farads mede esse capacímetro?

    ResponderExcluir
  8. por que que nada que estou baixando funciona corretamente ?

    ResponderExcluir