16
Fatec Santo André – Faculdade de Tecnologia Cód. da Disciplina SCSC Discip lina Sistema de Carga e Partida R.A Aluno Fábio Gomes Data 11/06/20 12 Prof. Edson DISPOSITIVO DETECTOR DE CURTO

Detector de curto

Embed Size (px)

DESCRIPTION

Simples descrição de um circuito utilizando microcontrolador PIC para detectar resistencias de condutores.

Citation preview

Page 1: Detector de curto

Fatec Santo André – Faculdade de TecnologiaCód. da Disciplina SCSC Disciplina Sistema de Carga e Partida

R.A Aluno Fábio Gomes

Data 11/06/2012 Prof. Edson

DISPOSITIVO DETECTOR DE CURTO

SANTO ANDRÉ11 DE JUNHO DE 2012.

Page 2: Detector de curto

Índice

Resumo Pág 3Introdução Pág 3Metodologia Pág 3Levantamentos Experimentais Pág 3Dados de solicitação do projeto Pág 3Compra de materiais Pág 3Montagem do protótipo Pág 3Programação do Microcontrolador Pág 4Testes funcionais Pág 4Dificuldades Pág 4Solução Proposta Pág 4Conclusão Pág 5Referencias Pág 5Anexo I – Diagrama Elétrico Pág 6Anexo II – Lista de materiais Pág 7Anexo III – Fluxograma Pág 8Anexo III – Código fonte do programa do microcontrolador Pág 9

2

Page 3: Detector de curto

DESENVOLVIMENTO DE UM DISPOSITIVO ELETRÔNICO DENOMINADO “DETECTOR DE CURTO”.

RESUMO

Este trabalho mostra detalhadamente, as etapas de desenvol-vimento e montagem de um dispositivo eletrônico capaz de testar um condutor denominado “Detector de Curto”.O sistema foi desenvolvido através de um microcontrolador da família PIC e a indicação do estado do condutor se dará através de leds e um display de 16x2.

INTRODUÇÃO

O objetivo deste trabalho é apresentar o desenvolvimento do dispositivo eletrônico denominado, Detector de Curto, no qual se pode medir a faixa de resistência de um condutor. As medidas do foram dividas em três níveis nos quais indicam:

1º Nível: Indica que o estado do condutor se encontra em curto ou com resistência até que 10ῼ.

2º Nível: Indica se o condutor está rompido (com circuito aberto) ou com resistência superior a 10kῼ.

3º Nível: Indica que o condutor está com valor resistivo entre 11 ῼ e 10kῼ.

O desenvolvimento do sistema possui uma interface simples para que a pessoa que irá utilizar, possa ter agilidade no processo de teste, mas com precisão. A indicação do estado do condutor se dará através de leds, indicados na cor vermelha para o condutor em curto (1º Nível), verde para o sistema aberto (2º Nível) e amarelo para a resistência entre 11 ῼ e 10kῼ (3º Nível), além da indicação efetuada através do display 16x2, onde será mostrado:

- Estado do condutor (Ex.: “RES MENOR DE 10R” );

- Valor de tensão em cima do condutor;

- E o valor da resolução que se refere a cada valor de tensão convertido pelo conversor A/D do PIC.

METODOLOGIA

Com base no trabalho realizado no inicio do primeiro semestre de 2012, no qual, foi realizado somente a parte escrita do projeto, não sendo efetuada a montagem do mesmo, algumas melhorias no projeto foram acrescentadas como:

- Uma fonte com um regulador de tensão;

- Um display que na primeira versão não tinha.

O processo de desenvolvimento se deu através das seguintes etapas:

- Levantamentos experimentais;

- Montagem do protótipo;

- Testes funcionais.

LEVANTAMENTOS EXPERIMENTAIS

Nesta etapa foram adquiridas as especificações necessárias para a montagem inicial do projeto, elaboração e definição das melhorias com relação á primeira versão do projeto citada anteriormente.

DADOS DE SOLICITAÇÃO DO PROJETO

Adquiriu-se informações técnicas sobre alguns componentes do sistema, como os datasheets do Microcontrolador utilizado que é PIC da família 16F877A e construção da fonte para alimentação do mesmo, além dos dados para o display de 16x2.O diagrama elétrico foi feito e simulado no software ISIS Professional versão 7.8 release SP2. E a programação do microcontrolador feita através do MPlab IDE V8.76.

MONTAGEM DO PROTÓTIPO

Com o material todo em mãos, ficou resolvido fazer a parte da fonte para regulagem da tensão de 12 Volts para 5 Volts em uma placa de circuito impresso, devido à dissipação de calor do CI regulador de tensão LM 7805 que poderia danificar a protoboard.Este circuito permite que se tenha uma tensão estabilizada de 5 Volts para alimentar todo o circuito, onde uma variação de tensão poderia comprometer a confiabilidade do teste.A figura 1 nos mostra o circuito de regulagem da tensão.

Figura 1- Circuito regulador de tensão

A alimentação de 12V foi provida de uma fonte externa com entrada AC de 100-240 volts de 60/50Hz e 0,45A, com saída DC de +12 volts e 1,25A.O próximo passo foi definir a melhor posição para a montagem do microcontrolador PIC 16F877A e o LCD de 16x2, na protoboard EIC-108 de 3220 pontos. Além do circuito ligado ao MCLR\VPP responsável pelo funcio-namento e modo gravação de dados no PIC “in-circuit”, e do circuito de clock do microcontrolador formado pelo cristal de 4 MHz e dois capacitores de 15pF.

3

Page 4: Detector de curto

Todas as ligações entre os componentes deste projeto foram efetuadas através de um kit de jumpers fornecido com a própria protoboard.As figuras 2 e 3 mostram as ligações desses componentes.

Figura 2 – Circuito do Microcontrolador PIC 16F877A.

Figura 3 – Circuito do Display de LCD 16x2.

Na seqüência partiu-se para a montagem dos circuitos de entrada, onde será conectado o condutor a ser testado, utilizou-se um divisor de tensão com uma resistência de referencia de 1 kῼ identificada na figura 4 como R5, o resistor R6 de 10 kῼ substitui o condutor e o resistor R4 de 10k serve como um limitador de corrente para aumentar o tempo de descarga do capacitor C7.O MCLR ilustrado na figura 5, sendo formado por um resistor de 10 kῼ ligado diretamente ao VDD (+5V) e uma botão ligado ao VSS(-) caso seja necessário efetuar um reset no microcontrolador.O circuito de saída mostrado na figura 6, são os leds, vermelho (RED) para circuito aberto e resistência acima de 10kῼ, amarelo (YELLOW) para resistência entre 11ῼ e 10kῼ, verde (GREEN) para resistência até 10ῼ.

Estes circuitos são ilustrados nas figuras 4, 5 e 6 respectivamente.

Figura 4 – Circuito de entrada formado por um divisor de tensão.

Figura 5 – Circuito de reset ligado ao pino MCLR do Microcontrolador.

Figura 6 – Circuito de indicação feito por leds.

PROGRAMAÇÃO DO MICROCONTROLADOR

Os programas PCWH versão 4.078 e o MPLAB IDE Versão 8.76, foram utilizados para edição e compilação e o progra-mador e debugger USB PKburner 2 R3 da Carelle, compatível com o software MPLAB e o PICkit2 que contém um soquete ZIF para microcontroladores de até 40 pinos família PIC, além da opção ICSP que permite a gravação do microcontrolador no próprio circuito.

Na estrutura de decisão do software, utilizou-se os parâmetros que serão mostrados a seguir, baseados nos cálculos, que resultam a queda de tensão em cima do condutor, que será testado no divisor de tensão, que é dado pela equação:

VR6 = R5.VDD / R5+R6

Na qual:

VR6 = Queda de tensão em cima do condutor ou resistência a ser testada;R5 = Resistor de referencia;VDD = tensão de entrada do divisor;R6 = Condutor ou resistência a ser testada.

A estratégia utiliza os valores de VR6, como faixas limites para cada nível, no qual cada nível tem suas saídas determinada.Para valores de resistência de até 10ῼ, empregou-se uma faixa de valor de 4,95 até 5 Volts, indicado no circuito de saída pelo led verde (GREEN) e no display “RES MENOR DE 10R”, além dos valores de tensão respectivos para cada valor resistivo e a resolução de conversão do A/D, sendo esse dois últimos itens, válidos para todos os níveis não sendo mencionados nas próximas faixas.

4

Page 5: Detector de curto

É importante salientar que essa pequena faixa de valores tensão se deve a estreita faixa de resistência para esse nível, não apresentando durante os testes instabilidade ou erros de leitura.

Para valores de resistência entre 11ῼ e 10kῼ, foi definida uma faixa de 4,94 a 0,451 Volts, sendo mostrado no circuito de saída através do led amarelo (YELLOW) e com a mensagem no display RES 11 A 10k .E para valores resistivos superiores a 10kῼ ou circuito aberto valores menores ou iguais a 0,45 Volts, sendo visualizado através do led vermelho (RED) e com a mensagem no display ACIMA DE 10K.

TESTES FUNCIONAIS

Finalizado a montagem, executou-se a verificação ponto a ponto do circuito com um multímetro digital, certificando a perfeita ligação entre os componentes em seguida, foi realizado a gravação do PIC 16F877A.Conduziu-se a placa para a bancada onde foram realizados os testes finais com diversos resistores verificando o funcionamento do circuito.

DIFICULDADES

A maior dificuldade encontrada foi fazer os ajustes para retirada das oscilações dos leds e a correta amostragem do display.Na qual, em avaliação do circuito na bancada foi revisado o software em busca das soluções para os problemas da visualização dos caracteres no display e as oscilações dos leds, onde foi acrescentado uma função para limpar o display, corrigindo o problema da amostragem do display.Colocou-se uma maior precisão na estrutura de decisão do software que pode ser visualizado através do fluxograma no Anexo III, no qual é responsáveis pela para ativação dos leds e o capacitor C7 em paralelo na entrada da porta de leitura do microcontrolador sendo sua descarga limitada pelo resistor R4 de 10kῼ, possibilitando um maior tempo para leitura.

RESULTADOS OBTIDOS

Os resultados obtidos no desenvolvimento atendeu as espe-cificações solicitadas. Acreditamos que as etapas de mon-tagem do projeto desenvolvido atendeu aos requisitos propostos, ressaltando apenas as falhas ocorridas devido às oscilações sendo estas corrigidas antes da entrega do projeto.Embora seja um sistema simples requeriu um tempo grande para desenvolvimento do software e montagem do sistema.Mas foi gratificante, pois mais uma vez podemos praticar a arte da eletrônica e programação do microcontrolador.

CONCLUSÃO

Neste trabalho foi detalhado o desenvolvimento de um dis-positivo capaz de medir resistência de um condutor, possibilitando um teste rápido, fácil e preciso sem a necessidade de equipamentos especiais para se efetuar a medição. Com uma interface simples e fácil de montar.Este projeto apresenta etapas da montagem com conceitos básicos sobre eletrônica e programação de micro-

controladores além de software e equipamentos utilizados para simulação, gravação e medição de circuitos e compo-nentes.Esperamos que esse projeto ajude pessoas que queiram desenvolver um teste de condutor servindo de base para projetos futuros com suas devidas melhorias.

REFERÊNCIAS

Antonio, Prof. Marco (2006) – Apostila de programação de microcontroladores PIC usando linguagem C –- CEFETES.

Pereira, Fábio (2010) – Livro Microcontroladores PIC programação em C – 7ªEd – São Paulo – Editora Érica.

Microchip, Pic16F87xA Datasheet. USA: Microchip, 2001.

Ramos, Eduardo Souza (2005) – Apostila de comunicação de LCD em 4 vias – Fonte no site abaixo. site:www.mecatronicadegaragem.blogspot.com – Palavra chave: Tutorial LCD em 4 Vias.

5

Page 6: Detector de curto

ANEXO I – DIAGRAMA ELÉTRICO

6

Page 7: Detector de curto

ANEXO II – LISTA DE MATERIAIS

6 Resistors Quantity: References Valu e Order Code

2 R1, R4 10k3 R2, R8, R9 3301 R3 1k

7 Capacitors Quantity: References Value Order Code

2 C1, C2 15pF2 C3, C4 1000uF2 C5, C6 100nF1 C7 10nF

2 Integrated Circuits Quantity: References Value Order Code

1 U1 PIC16F877A1 U2 7805

6 Diodes Quantity: References Value Order Code

2 D1, D5 LED-RED1 D2 LED-GREEN1 D3 LED-YELLOW2 D4, D6 1N4007

4 Miscellaneous Quantity: References Value Order Code

1 LCD1 LM016L1 RV1 100k1 S11 X1 CRYSTAL

7

Page 8: Detector de curto

ANEXO III – FLUXOGRAMA

INICIO

INIT_HARD

INIT_LCD

FLAG >=4,95 && FLAG <=5

FLAG >=0.451 && FLAG <=4.94

FLAG <=0.45

ACENDE LED GREEN

ESCREVE_LCDRES MENOR DE 10R

ACENDE LED YELLOW

ACENDE LED RED

ESCREVE_LCDRES 11 A 10k

ESCREVE_LCDRES. ACIMA DE 10k

S

S

S

N

N

N

8

Page 9: Detector de curto

ANEXO IV – CÓDIGO FONTE DO PROGRAMA DO MICROCONTROLADOR

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** SOFTWARE DO PROJETO DE CARGA E PARTIDA ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#include <16f877A.h>#device adc=10#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt#use delay(clock=400000)#zero_ram

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIÇÃO E INICIALIZAÇÃO DE VARIÁVEIS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

float ent, valor;

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** DEFINIÇÃO E INICIALIZAÇÃO DAS PORTAS ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */#use fast_io(a)#use fast_io(b)#use fast_io(c)#use fast_io(d)#use fast_io(e)

#byte porta = 0x05#byte portb = 0x06#byte portc = 0x07#byte portd = 0x08#byte porte = 0x09

/******************** Definições Iniciais do LCD ******************************/#define lcd_enable pin_e1 // pino enable do LCD#define lcd_rs pin_e0 // pino rs do LCD#define lcd_db4 pin_d4 // pino de dados d4 do LCD#define lcd_db5 pin_d5 // pino de dados d5 do LCD#define lcd_db6 pin_d6 // pino de dados d6 do LCD#define lcd_db7 pin_d7 // pino de dados d7 do LCD

/****************************** Rotinas para o LCD ****************************/

/**** Esta rotina lê o "Nibble" inferior de uma variável e envia para o LCD****/void envia_nibble_lcd(int dado){/**** Carrega as vias de dados (pinos) do LCD de acordo com o nibble lido ****/output_bit(lcd_db4, bit_test(dado,0)); //Carrega DB4 do LCD com o bit DADO<0>output_bit(lcd_db5, bit_test(dado,1)); //Carrega DB5 do LCD com o bit DADO<1>output_bit(lcd_db6, bit_test(dado,2)); //Carrega DB6 do LCD com o bit DADO<2>output_bit(lcd_db7, bit_test(dado,3)); //Carrega DB7 do LCD com o bit DADO<3>output_high(lcd_enable); //Gera um pulso de enable ENABLE = 1delay_us(1); // Recomendado para estabilizar o LCDoutput_low(lcd_enable); // ENABLE = 0return; // Retorna ao ponto de chamada da função

}

9

Page 10: Detector de curto

/************************* Envio de Byte para o LCD **************************/

/** Esta rotina irá enviar um dado ou um comando para o LCD conforme abaixo:**/

// ENDEREÇO = 0 -> a variável DADO será uma instrução// ENDEREÇO = 1 -> a variável DADO será um caractere

void envia_byte_lcd(boolean endereco, int dado){output_bit(lcd_rs,endereco); // Seta o bit RS para instrução ou caracteredelay_us(100); // Aguarda 100 us para estabilizar o pino do LCDoutput_low(lcd_enable); // Desativa a linha ENABLEenvia_nibble_lcd(dado>>4); // Envia a parte ALTA do dado/comandoenvia_nibble_lcd(dado & 0x0f);// Limpa a parte ALTA e envia a parte BAIXA do dado/comandodelay_us(40); // Aguarda 40us para estabilizar o LCDreturn; // Retorna ao ponto de chamada da função}

/*********************** Envio de caractere para o LCD ************************/

/* Esta rotina serve apenas como uma forma mais fácil de escrever um caractereno display. Ela pode ser eliminada e ao invés dela usaremos diretamente a função

envia_byte_lcd(1,"<caractere a ser mostrado no lcd>");envia_byte_lcd(1,<codigo do caractere a ser mostrado no lcd>);*/

void escreve_lcd(char c){envia_byte_lcd(2,c); // envia caractere para o display}

/************************ Função para limpar o LCD ****************************//* Como esta operação pode ser muito utilizada, transformando-a em função faz com que o código compilado seja menor.*/void limpa_lcd(){envia_byte_lcd(0,0x01); // Envia instrução para limpar o LCDdelay_ms(5); // Aguarda 2ms para estabilizar o LCDreturn; // Retorna ao ponto de chamada da função}

/*************************** Inicializa o LCD ********************************/void inicializa_lcd(){output_low(lcd_db4); // Garante que o pino DB4 estão em 0 (low)output_low(lcd_db5); // Garante que o pino DB5 estão em 0 (low)output_low(lcd_db6); // Garante que o pino DB6 estão em 0 (low)output_low(lcd_db7); // Garante que o pino DB7 estão em 0 (low)output_low(lcd_rs); // Garante que o pino RS estão em 0 (low)output_low(lcd_enable);// Garante que o pino ENABLE estão em 0 (low)delay_ms(15); // Aguarda 15ms para estabilizar o LCDenvia_nibble_lcd(0x03);// Envia comando para inicializar o displaydelay_ms(5); // Aguarda 5ms para estabilizar o LCDenvia_nibble_lcd(0x03);// Envia comando para inicializar o displaydelay_ms(5); // Aguarda 5ms para estabilizar o LCDenvia_nibble_lcd(0x03);// Envia comando para inicializar o displaydelay_ms(5); // Aguarda 5ms para estabilizar o LCDenvia_nibble_lcd(0x02);// CURSOR HOME - Envia comando para zerar o contador de caracteres e retornar à posição inicial (0x80).delay_ms(1); // Aguarda 1ms para estabilizar o LCDenvia_byte_lcd(0,0x28);// FUNCTION SET - Configura o LCD para 4 bits, 2 linhas, fonte 5X7.envia_byte_lcd(0,0x0c);// DISPLAY CONTROL - Display ligado, com cursor ligado e piscandolimpa_lcd(); // Limpa o LCD

10

Page 11: Detector de curto

envia_byte_lcd(0,0x06);// ENTRY MODE SET - Desloca o cursor para a direitareturn; // Retorna ao ponto de chamada da função}void teste_lcd(){envia_byte_lcd(0,0xc0);// posicionamento do cursorprintf(escreve_lcd, "F");envia_byte_lcd(0,0xc1);// posicionamento do cursorprintf(escreve_lcd, "A");envia_byte_lcd(0,0xc2);// posicionamento do cursorprintf(escreve_lcd, "B");envia_byte_lcd(0,0xc3);// posicionamento do cursorprintf(escreve_lcd, "I");envia_byte_lcd(0,0xc4);// posicionamento do cursorprintf(escreve_lcd, "O");envia_byte_lcd(0,0xc6);// posicionamento do cursorprintf(escreve_lcd, "GOMES");envia_byte_lcd(0,0x80);// posicionamento do cursorprintf(escreve_lcd, "FATEC 2012");}void tela_principal(){envia_byte_lcd(0,0x80);printf(escreve_lcd,"TESTE CONDUTOR");envia_byte_lcd(0,0xC0);printf(escreve_lcd,"FATEC STO ANDRE");}void conversao(){setup_adc (ADC_CLOCK_INTERNAL);set_adc_channel (0);delay_us(100);ent = read_adc();valor= (ent*0.004887585);}

void le_tensao(){limpa_lcd();envia_byte_lcd(0,0xc0);printf(escreve_lcd,"%f %f", valor,ent);}/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** CONFIGURAÇÕES DO MICROCONTROLADOR ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */void inicializa_micro(){setup_adc_ports (RA0_analog);set_tris_a(0b11011111);set_tris_b(0b11111000); set_tris_c(0b11111111);set_tris_d(0b00000000);set_tris_e(0b00000000);

porta=0x00;portb=0x00;portc=0x00;portd=0x00;porte=0x00;}/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** LOOP PRINCIPAL ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */void main()

11

Page 12: Detector de curto

{inicializa_micro();inicializa_lcd();limpa_lcd();

while(TRUE){conversao(); le_tensao();

if (valor<=0.45){output_high(pin_b0);//LED VERMELHOoutput_low(pin_b1);output_low(pin_b2);limpa_lcd();envia_byte_lcd(0,0x80);printf(escreve_lcd,"RES. ACIMA DE 10k");}else {output_low(pin_b0);delay_ms(100);}

if ((valor<=4.94)&&(valor>=0.451)){output_high(pin_b1);//LED AMARELOoutput_low(pin_b0);output_low(pin_b2);limpa_lcd();envia_byte_lcd(0,0x80);printf(escreve_lcd," RES 11 A 10k ");}else{output_low(pin_b1);delay_ms(500);}

if ((valor<=5)&&(valor>=4.95)){output_high(pin_b2);//LED VERDEoutput_low(pin_b0);output_low(pin_b1);limpa_lcd();envia_byte_lcd(0,0x80);printf(escreve_lcd,"RES MENOR DE 10R");}else{output_low(pin_b2);delay_ms(100);}}}

12