Fatec Santo André – Faculdade de Tecnologia
Cód. da Disciplina SCSC Disciplina Sistema de Carga e Partida
R.A Aluno Fábio ...
11 DE JUNHO DE 2012.
2
Índice
Resumo Pág 3
Introdução Pág 3
Metodologia Pág 3
Levantamentos Experimentais Pág 3
Dados de solicitação do projeto P...
DESENVOLVIMENTO DE UM DISPOSITIVO ELETRÔNICO DENOMINADO
“DETECTOR DE CURTO”.
RESUMO
Este trabalho mostra detalhadamente, a...
Todas as ligações entre os componentes deste projeto foram
efetuadas através de um kit de jumpers fornecido com a
própria ...
É importante salientar que essa pequena faixa de valores
tensão se deve a estreita faixa de resistência para esse nível,
n...
ANEXO I – DIAGRAMA ELÉTRICO
7
ANEXO II – LISTA DE MATERIAIS
6 Resistors
Quantity: References Value Order Code
2 R1, R4 10k
3 R2, R8, R9 330
1 R3 1k
7 Ca...
ANEXO III – FLUXOGRAMA
INICIO
INIT_HARD
INIT_LCD
FLAG >=4,95 &&
FLAG <=5
FLAG >=0.451 &&
FLAG <=4.94
FLAG <=0.45
ACENDE LE...
ANEXO IV – CÓDIGO FONTE DO PROGRAMA DO MICROCONTROLADOR
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *...
/************************* Envio de Byte para o LCD **************************/
/** Esta rotina irá enviar um dado ou um c...
envia_byte_lcd(0,0x06);// ENTRY MODE SET - Desloca o cursor para a direita
return; // Retorna ao ponto de chamada da funçã...
{
inicializa_micro();
inicializa_lcd();
limpa_lcd();
while(TRUE)
{
conversao();
le_tensao();
if (valor<=0.45)
{
output_hig...
Upcoming SlideShare
Loading in …5
×

Detector de curto

458 views

Published on

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

Published in: Automotive
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
458
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
40
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Detector de curto

  1. 1. Fatec Santo André – Faculdade de Tecnologia Có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É
  2. 2. 11 DE JUNHO DE 2012. 2
  3. 3. Índice Resumo Pág 3 Introdução Pág 3 Metodologia Pág 3 Levantamentos Experimentais Pág 3 Dados de solicitação do projeto Pág 3 Compra de materiais Pág 3 Montagem do protótipo Pág 3 Programação do Microcontrolador Pág 4 Testes funcionais Pág 4 Dificuldades Pág 4 Solução Proposta Pág 4 Conclusão Pág 5 Referencias Pág 5 Anexo I – Diagrama Elétrico Pág 6 Anexo II – Lista de materiais Pág 7 Anexo III – Fluxograma Pág 8 Anexo III – Código fonte do programa do microcontrolador Pág 9 3
  4. 4. 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 MCLRVPP 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. 4
  5. 5. 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. 5
  6. 6. É 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. 6
  7. 7. ANEXO I – DIAGRAMA ELÉTRICO 7
  8. 8. ANEXO II – LISTA DE MATERIAIS 6 Resistors Quantity: References Value Order Code 2 R1, R4 10k 3 R2, R8, R9 330 1 R3 1k 7 Capacitors Quantity: References Value Order Code 2 C1, C2 15pF 2 C3, C4 1000uF 2 C5, C6 100nF 1 C7 10nF 2 Integrated Circuits Quantity: References Value Order Code 1 U1 PIC16F877A 1 U2 7805 6 Diodes Quantity: References Value Order Code 2 D1, D5 LED-RED 1 D2 LED-GREEN 1 D3 LED-YELLOW 2 D4, D6 1N4007 4 Miscellaneous Quantity: References Value Order Code 1 LCD1 LM016L 1 RV1 100k 1 S1 1 X1 CRYSTAL 8
  9. 9. 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_LCD RES MENOR DE 10R ACENDE LED YELLOW ACENDE LED RED ESCREVE_LCD RES 11 A 10k ESCREVE_LCD RES. ACIMA DE 10k S S S N N N 9
  10. 10. 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 = 1 delay_us(1); // Recomendado para estabilizar o LCD output_low(lcd_enable); // ENABLE = 0 return; // Retorna ao ponto de chamada da função } 10
  11. 11. /************************* 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 caractere delay_us(100); // Aguarda 100 us para estabilizar o pino do LCD output_low(lcd_enable); // Desativa a linha ENABLE envia_nibble_lcd(dado>>4); // Envia a parte ALTA do dado/comando envia_nibble_lcd(dado & 0x0f);// Limpa a parte ALTA e envia a parte BAIXA do dado/comando delay_us(40); // Aguarda 40us para estabilizar o LCD return; // 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 caractere no 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 LCD delay_ms(5); // Aguarda 2ms para estabilizar o LCD return; // 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 LCD envia_nibble_lcd(0x03);// Envia comando para inicializar o display delay_ms(5); // Aguarda 5ms para estabilizar o LCD envia_nibble_lcd(0x03);// Envia comando para inicializar o display delay_ms(5); // Aguarda 5ms para estabilizar o LCD envia_nibble_lcd(0x03);// Envia comando para inicializar o display delay_ms(5); // Aguarda 5ms para estabilizar o LCD envia_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 LCD envia_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 piscando limpa_lcd(); // Limpa o LCD 11
  12. 12. envia_byte_lcd(0,0x06);// ENTRY MODE SET - Desloca o cursor para a direita return; // Retorna ao ponto de chamada da função } void teste_lcd() { envia_byte_lcd(0,0xc0);// posicionamento do cursor printf(escreve_lcd, "F"); envia_byte_lcd(0,0xc1);// posicionamento do cursor printf(escreve_lcd, "A"); envia_byte_lcd(0,0xc2);// posicionamento do cursor printf(escreve_lcd, "B"); envia_byte_lcd(0,0xc3);// posicionamento do cursor printf(escreve_lcd, "I"); envia_byte_lcd(0,0xc4);// posicionamento do cursor printf(escreve_lcd, "O"); envia_byte_lcd(0,0xc6);// posicionamento do cursor printf(escreve_lcd, "GOMES"); envia_byte_lcd(0,0x80);// posicionamento do cursor printf(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() 12
  13. 13. { inicializa_micro(); inicializa_lcd(); limpa_lcd(); while(TRUE) { conversao(); le_tensao(); if (valor<=0.45) { output_high(pin_b0);//LED VERMELHO output_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 AMARELO output_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 VERDE output_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); } } } 13

×