Ir ao conteúdo
  • Cadastre-se

PIC12F675 utilizado como medidor de capacitância por CVD


Posts recomendados

Olá,

 

Estou usando como base o PIC12F675

 

Estou para fins de aprendizado construir um medidor de capacitância me baseando no AppNote AN1298

 

A ideia é utilizar o capacitor interno do ADC de 120pF em paralelo com um capacitor na entrada desse pino, formando um divisor capacitivo. Fazendo em seguida a conversão da tensão que sai nesse divisor.

 

Na imagem abaixo ilustra um pouco a ideia:

 

2b8MiMF.jpg

 

 

Utilizo o MikroC, abaixo o codigo que estou a tentar:

    unsigned int  ADC_Result, backup=0;    char *temp = "0000", error;    int i;        void main(void)    {        OSCCAL = 0x80;        GPIO = 0;        CMCON  = 7;        ADCON0.ADFM = 1;        ADCON0.VCFG = 0;        ADCON0.CHS1 = 0;        ADCON0.CHS0 = 0;                ADCON0.GO_DONE = 0;         ADCON0.ADON = 0;         ANSEL.ADCS2 = 0;        ANSEL.ADCS1 = 0;        ANSEL.ADCS0 = 1;        ANSEL.ANS0 = 1;        ANSEL.ANS1 = 0;        ANSEL.ANS2 = 0;        ANSEL.ANS3 = 0;                INTCON = 0;        Soft_UART_Init(GPIO,3, 5, 9600, 0 );        while(1)        {          TRISIO.GP1 = 0;          GPIO.GP1 = 0;  //LOW          ANSEL.ANS0 = 1;          ANSEL.ANS1 = 0;                    TRISIO.GP0 = 0; //output          GPIO.GP0 = 1;  //HIGH                  ADCON0.CHS1 = 0;          ADCON0.CHS0 = 0;                  delay_us(500);                            TRISIO.GP1 = 1; //input          ANSEL.ANS0 = 0;          ANSEL.ANS1 = 1;                  ADCON0.CHS1 = 0;          ADCON0.CHS0 = 1;                  ADCON0.ADON =             delay_us(50);            ADCON0.GO_DONE = 1;             while(ADCON0.GO_DONE);              ADC_Result = ((ADRESH << 8)+(ADRESL));                         ADCON0.ADON = 0;                            if(ADC_Result != backup)            {              if (ADC_Result/1000)              {               temp[0] = ADC_Result/1000 + 48;              }              else              {               temp[0] = '0';              }              temp[1] = (ADC_Result/100)%10 + 48;              temp[2] = (ADC_Result/10)%10 + 48;              temp[3] = ADC_Result%10 + 48;              backup = ADC_Result;                            for (i=0; i<= 3; i++)              {                Soft_UART_Write(temp[i]);               }               Soft_UART_Write(10);                Soft_UART_Write(13);             }              }    }

Ele compila ok. Adicionei um SoftUART para receber os valores via terminal. Mas quando tento simular no Proteus. Não funciona nada.

 

Minha duvida é:

 

- A lógica nesse código que fiz está correta?

- O Proteus pode não ter esse capacitor interno para simulação e por isso pode não funcionar em simulação?

 

Agradecido

 

Link para o comentário
Compartilhar em outros sites

Olá

 

É interessante a ideia, mas note que os capacímetros precisam fazer um sinal alternado pois depois que o capacitor se carrega, teóricamente, se não existissem fugas (imperfeições) ele, o capacitor, não se descarregaria, e desta forma fica difícil fazer um divisor capacitivo para tensão contínua.

 

Note que assim como em fontes simétricas, com terra flutuante, geralmente é colocado resistores para assim formar um divisor.

 

Eu já encontrei na net algums circuitos com o PIC16F628A, no qual ele faz uma oscilação que gera uma frequencia de acordo com o valor do capacitor, então conta-se a frequencia e depois de calcular a capacitancia ela é exibida em um display.

 

Para que você possa fazer uma simulação de carga esqueça o PIC por enquanto, coloque capacitores maiores de uns 10.000uF com um resistor de 1k e a chave, assim como no seu circuito, assim o tempo de carga vai ficar visivel, pois um capacitor de pF é muito rápido para se carregar e fica difícil de analisar.

 

Boa sorte.

Link para o comentário
Compartilhar em outros sites

Essa AN da Microchip não informa, em momento algum, sobre a medição do valor da capacitância. Ela trata da comparação da tensão sobre o sensor capacitivo em duas situações. Uma sem tocar o sensor, que vai fornecer uma tensão V1. Outra tocando o sensor, que faz aumentar a capacitância do sensor, provocando uma tensão V2 MENOR que V1. Esse é o diferencial para identificar que o sensor foi tocado.

Note que não há quase precisaão na medida, apenas que vai haver uma diferença entre V1 e V2.

O valor do capacitor interno C_hold não possui precisaão e deve alterar com a temperatura. Como não foi projetado para medir capacitância, não lhe foi dada a capacidade de ser fixo e de valor perfeitamente conhecido.

Há pelo menos outros dois métodos para se medir o valor do capacitor.

1 - Utilizando a equação da carga ou da descarga de um capacitor em um resistor de valor conhecido.

2 - Fazendo um circuito oscilador LC com o valor de L conhecido. A equação (2 x pi x f) ao quadrado = 1 / (L x C), então:

C = 1 / ((2 x pi x f) ao quadrado x L).

O primeiro método é muito usado por ser mais simples.

Há na net muitos circuitos bem simples com apenas um CI, normalmente com a tecnologia Cmos. Pesquise no Google por capacitance meter e clique em Imagens de capacitance meter. Deve aparecer cerca de 100 figuras com circuitos e seus endereços.

MOR_AL

Link para o comentário
Compartilhar em outros sites

Olá,

 

Com certeza não informa no Note sobre medir capacitâncias.

 

A minha intenção é ver na pratica essas mudanças adicionando um capacitor em paralelo.

 

Por isso estou partindo primeiro para montar esses circuito touch.

 

O ponto é que como não tenho ainda esses PIC estou indo para simulação no Proteus.

 

Mas não tenho certeza se o código que pus acima é funcional na prática, para checar essa alteração de tensão como um sensor de toque capacitivo.

 

Agradecido

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...