UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETROTÉCNICA CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA TECNOLOGIA EM AUTOMAÇÃO INDUSTRIAL Sistemas Digitais e Microcontrolados Conversor Analógico para Digital - PIC16F877A amauriassef@utfpr.edu.br 1
Características do módulo A/D 10 bits de conversão 8 canais de entrada AN0 RA0 AN1 RA1 AN2 RA2 AN3 RA3 AN4 RA5 AN5 RE0 AN6 RE1 AN7 RE2 Tensões de referência config. Vref+ (superior) Vref- (inferior) 2
Diagrama em bloco do A/D CHS2:CHS0 PCFG3:PCFG0 PCFG3:PCFG0 3
Modelo da entrada analógica Amostragem e retenção sample and hold 4
Diagrama em blocos do tratamento do sinal analógico Grandeza física de processo (temperatura, umidade, pressão, etc.) Transdutor Sinal analógico convertido em tensão ou corrente Condicionamento do sinal Sinal analógico condicionado PIC16F877A A/D 5
Definições Conversor Analógico para Digital O módulo conversor analógico-digital (A/D) realiza a conversão de uma tensão analógica em valores digitais, isto é, números binários; Para o PIC16F877A a conversão do valor analógico em digital é realizada com comprimento de 10 bits; Quanto maior a quantidade de bits maior a resolução e precisão do A/D Por exemplo: supondo que a tensão aplicada ao pino de A/D varia entre 0 a 5V (tensão de fundo de escala), e o conversor possui 8 bits (N), a resolução é de: Alterando o conversor A/D para 10 bits, temos: 6
Conversão do sinal analógico em digital Parâmetros: A/D de 8 bits Níveis de Tensão (V) Representação binária + Vref = Vdd = 5V 0 B 0000 0000 - Vref = Vss = 0V 19,61m B 0000 0001 Resolução de 19,61mV/bit...... Parâmetros: A/D de 10 bits + Vref = Vdd = 5V - Vref = Vss = 0V Resolução de 4,88mV/bit 5 B 1111 1111 Níveis de Tensão (V) Representação binária 0 B 00 0000 0000 4,88m B 00 0000 0001...... 5 B 11 1111 1111 7
Exemplos de cálculo para conversão A/D Parâmetros: A/D de 8 bits + Vref = Vdd = 5V - Vref = Vss = 0V Resolução de 19,61mV/bit 2,5V =? 5V 255 2,5V X X = 127,5 128 Parâmetros: A/D de 10 bits + Vref = Vdd = 5V - Vref = Vss = 0V Resolução de 4,88mV/bit 2,5V =? 5V 1023 2,5V X X = 511,5 512 8
Registradores de 8 bits do módulo A/D ADCON0 (A/D Control Register 0): Controla a operação do módulo A/D ADCON1 (A/D Control Register 1): Configura as funções do PORTA e PORTE, e como o resultado será armazenado ADRESH (A/D Result High Register): Parte alta do resultado do A/D ADRESL (A/D Result Low Register): Parte baixa do resultado do A/D 9
Registrador ADCON0 (Endereço 1FH Banco 0) ADCS1:ADCS0: Seleção do clock de conversão do A/D em conjunto com o ADCON1 00 - Fosc/2 01 - Fosc/8 10 - Fosc/32 11 Frc (clock derivado do oscilador interno RC) CHS2:CHS0: Seleção do canal analógico 000 canal 0 (AN0) 001 canal 1 (AN1) 010 canal 2 (AN2) 011 canal 3 (AN3) 100 canal 4 (AN4) 101 canal 5 (AN5) 110 canal 6 (AN6) 111 canal 7 (AN7) GO//DONE: Bit de status da conversão A/D 0 conversor A/D em espera 1 conversão A/D em progresso (setar este bit para iniciar conversão) ADON: Bit para ligar o módulo A/D 0 conversão A/D desligado 1 conversor A/D ligado 10
Registrador ADCON1 (Endereço 9FH Banco 1) ADFM: Seleção do formato do resultado do A/D 0 justificado à esquerda 1 justificado à direita ADCS2: Seleção do clock em conjunto com os bits ADCS1: ADCS0 do registradoradcon0 11
Registrador ADCON1 (Endereço 9FH Banco 1) PCFG3:PCFG0: Bits de controle de configuração do PORTA e PORTE 12
Registrador ADCON1 (Endereço 9FH Banco 1) Resultado do A/D justificado 13
Exemplo: Conversor Analógico para Digital 1) Escrever o firmware para mostrar o valor de conversor A/D do canal 0 através dos LEDS conectados no PORTD. Utilizar Fosc/2 e dividir o valor lido por 4 para condicionar o resultado em 8 bits: 2) Escrever, simular e testar o firmware para ler o resultado da conversão do módulo AD, canal 0. Inicialmente piscar todos os LED do PORTD 5 vezes com atraso de 0,5 segundo. Na sequência, movimentar o motor de passo de acordo com o resultado da conversão (RC0,RC3,RC4 e RC5): Valor do ADC Descrição Sentido 1 Valor do ADC Descrição Sentido 2 <= 0,5V 4 passos de 4ms 2,5V < e <= 3,0V Motor parado 0,5V < e <= 1,0V 4 passos de 8ms 3,0V < e <= 3,5V 4 passos de 32ms 1,0V < e <= 1,5V 4 passos de 16ms 3,5V < e <= 4,0V 4 passos de 16ms 1,5V < e <= 2,0V 4 passos de 32ms 4,0V < e <= 4,5V 4 passos de 8ms 2,0V < e <= 2,5V Motor parado > 4,5V 4 passos de 4ms 3) Escrever o firmware para digitalizar o valor analógico do sensor de temperatura LM35 (10mV/ C) e apresentar a temperatura equivalente no LCD 16x2: 14
15 CH_1 CH_2 ADC_POT ADC_POT ADC_LM35 ADC_LM35 CH_1 CH_2 RA0/AN0 2 RA1/AN1 3 RA2/AN2/VREF-/CVREF 4 RA4/T0CKI/C1OUT 6 RA5/AN4/SS/C2OUT 7 RE0/AN5/RD 8 RE1/AN6/WR 9 RE2/AN7/CS 10 OSC1/CLKIN 13 OSC2/CLKOUT 14 RC1/T1OSI/CCP2 16 RC2/CCP1 17 RC3/SCK/SCL 18 RD0/PSP0 19 RD1/PSP1 20 RB7/PGD 40 RB6/PGC 39 RB5 38 RB4 37 RB3/PGM 36 RB2 35 RB1 34 RB0/INT 33 RD7/PSP7 30 RD6/PSP6 29 RD5/PSP5 28 RD4/PSP4 27 RD3/PSP3 22 RD2/PSP2 21 RC7/RX/DT 26 RC6/TX/CK 25 RC5/SDO 24 RC4/SDI/SDA 23 RA3/AN3/VREF+ 5 RC0/T1OSO/T1CKI 15 MCLR/Vpp/THV 1 U1 PIC16F877A R11 10k VDD X1 CRYSTAL C1 15pF C2 15pF R1 330 R2 330 R3 330 R4 330 R5 330 R6 330 R7 330 R8 330 D1 LED-RED D2 LED-RED D3 LED-RED D4 LED-RED D5 LED-RED D6 LED-RED D7 LED-RED D8 LED-RED R9 10k VDD R10 10k VDD 50% RV1 1k VDD 27.0 3 1 VOUT 2 U2 LM35 VDD
Exemplo: 1) unsigned int temp_res; void main() { TRISA = 0x01; TRISD = 0X00; while(1) { temp_res = ADC_Read(0); // Le valor de 10 bits da conversão PORTD = temp_res >> 2; // Normaliza em 8 bits } } 16