curso pic modulo4

10

Click here to load reader

Upload: txukahamae

Post on 25-Jul-2015

78 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Curso PIC Modulo4

Prof. Msc. Tácio Luiz de Souza Barbeiro

Fundamentos e Programação Básica de Microcontroladores PIC

MÓDULO 4

Page 2: Curso PIC Modulo4

Conteúdo■ Módulo de Conversão A/D■ A/D de Aproximações Sucessivas■ Especificações de um A/D■ Leitura de tensões Analógicas■ Características■ Circuito Exemplo■ Programa Exemplo

Page 3: Curso PIC Modulo4

Módulo de Conversão A/D■ 8 canais de conversão (16F877)■ Conversor de Aproximação Sucessiva■ Número digital de 10 bits■ Tensões de Referência : VDD, Vss, RA2 e RA3

(Selecionáveis via software)■ 4 Registradores:

• A/D Result High Register (ADRESH)• A/D Result Low Register (ADRESL)• A/D Control Register0 (ADCON0)• A/D Control Register1 (ADCON1)

Page 4: Curso PIC Modulo4

A/D de Aproximações Sucessivas

■ Analisando o diagrama anterior, vamos supor que a saída do conversor DA varie de 0V a 15V, quando sua entrada binária tem uma faixa de 0000 a 1111, com 0000 produzindo 0V e 0001 produzindo 1V, e assim por diante. Suponha que uma entrada analógica de 13V seja aplicada. No primeiro pulso do relógio , o registrador de saída é carregado com 1000, que é convertido pelo conversor AD em 8V. O comparador determina que 8V é menor que a entrada analógica (13V), de modo que no próximo pulso do relógio o circuito de controle faz com que a saída do registrador seja carregada com 1100. A saída do conversor DA é agora de 12V, e o comparador determina novamente que é menor que a entrada analógica. Então o registrador é carregado com 1110 no próximo pulso do relógio. A saída do conversor DA será de 14V, e o comparador determina agora que é maior que a entrada analógica de 13V. Portanto o ultimo 1 carregado no registrador é substituído por 0, e 1 é carregado no LSB. Desta vez, a saída do conversor DA é de 13V, que é igual ao valor da entrada analógica, de modo que a conversão está completa. A saída do registrador contém 1101.

Page 5: Curso PIC Modulo4

Especificações de um A/D■ A resolução de um conversor AD é a menor variação que pode ser identificada em

uma escala analógica. Nos conversores AD, a resolução depende diretamente do número de bits.

■ O tempo necessário para converter uma entrada analógica simples em uma saída digital é chamado de tempo de conversão de um conversor AD.

■ O teorema da amostragem de Shannon declara que o dado amostrado pode ser usado para reproduzir fielmente um sinal que varia no tempo, desde que a taxa de amostragem seja pelo menos o dobro da freqüência da componente de maior freqüência do sinal.

■ Exemplo: Qual é o tempo máximo de conversão que um conversor AD pode ter se ele for usado para converter sinais de entrada de áudioA faixa de freqüência de áudio considerada é de 20 Hz a 20 kHz.Como a maior freqüência na entrada pode ser de 20 kHz, as conversõesdevem ser executadas em uma taxa de pelo menos 40 x 103 conversões/s. O tempo máximo de conversões permitidas é, portanto, igual a:

s2510401

3

Page 6: Curso PIC Modulo4

Leitura de Tensões Analógicas■ SETUP_COMPARATOR(): Configura o funcionamento do módulo comparador interno.■ SETUP_VREF(): Configura a referência interna de tensão.■ SETUP_ADC(): Configura o conversor AD interno.■ SETUP_ADC_PORTS(): Configura as entradas analógicas do conversor A/D interno.

OBS: Ver tabela.■ SET_ADC_CHANEL: Seleciona um canal de entrada para o módulo AD interno.■ READ_ADC: Efetua conversão A/D.

■ Normalmente, utilizam-se sensores especiais para converter a grandeza desejada em um nível de tensão proporcional.

■ Podemos efetuar a leitura dessa tensão por intermédio de um conversos analógico/digital, cuja função é converter a tensão analógica em um número binário, proporcional à tensão analógica.

Comandos Relacionados:

Aplicações:

Page 7: Curso PIC Modulo4

Características■ Nos conversores A/D, utiliza-se uma tensão de referência (normalmente chamada de Vref) que

serve de fundo de escala para o sinal de saída do conversor, ou seja, as saídas do conversor estarão todas em nível “1” quando a tensão de entrada do conversor for igual ou maior que a tensão Vref.

■ Como a saída do conversor é um número binário proporcional à tensão medida e não o próprio valor binário da tensão, é necessário utilizar técnicas conhecidas como escalonamento, de forma a calcular o valor equivalente à saída do conversor.

■ O ideal seria usar valores de Vref que facilitem a tarefa de escalonamento, os mais comuns são 1,024; 2,048 e 4,096 Volts. No entanto, como a obtenção de tais valores de tensão é complicada e muitas vezes cara(apesar de existirem muitos CIS de referência precisa de tensão), normalmente opta-se pela utilização da própria tensão de alimentação como referência para o conversor.

■ Para entender o funcionamento do escalonamento, suponha um conversor A/D com resolução de 10 bits e referência de 5V. Podemos facilmente concluir que o valor de cada bit será igual a 5/(210 - 1)=4,8876 mV, ou seja, para um resultado igual a 100 (decimal), teremos uma tensão de 100* 4,8876 mV = 0,48876 V.

■ Quando trabalhamos com os conversores A/D internos do PIC devemos lembrar que a impedância máxima da fonte de sinal analógico deve ser de 10 Kohms e o tempo mínimo de aquisição é de 19,72µs.

Page 8: Curso PIC Modulo4

Circuito Exemplo

Simulação de um Sensor

Page 9: Curso PIC Modulo4

Programa Exemplo#include <16f877.h>// Configura o compilador para conversor A/D de 10 bits#device adc=10#use delay(clock=4000000)#fuses HS,NOWDT,PUT

#include <regs_16f87x.h>#include <mod_lcd.c>

main(){

long int valor;int32 val32;lcd_ini();setup_ADC_ports (RA0_analog);setup_adc(ADC_CLOCK_INTERNAL );set_adc_channel(0);

Page 10: Curso PIC Modulo4

Programa Exemplowhile (true){

lcd_escreve ('\f'); // apaga o display// O escalonamento é realizado da seguinte forma:// resultado = (5000 * valor lido) / 1023// Para facilitar os cálculos, somamos um ao// valor lido:// resultado = (5000 * (valor + 1)) / 1024// simplificando:// resultado = ((valor + 1) * 4) + ((valor + 1) * 113) / 128// Repare que é necessário converter a segunda parte da// equação para 32 bits para que o compilador efetue o// cálculo corretamentevalor = read_adc(); // efetua a conversão A/D// Se o valor é > 0, soma 1 ao valor lidoif (valor) valor += 1;val32 = valor * 4 + ((int32)valor * 113)/128;// imprime o valor da tensão no display// 5000 = 5,000 Volts ou 5000 milivoltsprintf (lcd_escreve,"Tensao = %lu mV",val32);

delay_ms (250); // aguarda 250 ms}

}