aula 4 conversor ad e pwm

75
AULA 4 Conversor AD e PWM Microcontroladores PIC Microcontroladores PIC Prof. Msc. Francisco Fambrini 27/06/2015 LAB 4L Intervalo para cooffe break 9:25hs a 9:40hs

Upload: chico-fambrini

Post on 04-Aug-2015

221 views

Category:

Engineering


1 download

TRANSCRIPT

Page 1: Aula 4   conversor ad e pwm

AULA 4Conversor AD e PWM

Microcontroladores PICMicrocontroladores PICProf. Msc. Francisco Fambrini

27/06/2015

LAB 4L

Intervalo para cooffe break 9:25hs a 9:40hs

Page 2: Aula 4   conversor ad e pwm

Conversor A/DO papel do Conversor Analógico/Digital (A/D) é converter valores de tensão analógicas para valores digitais.

O conversor analógico-digital converte tensão analógica para números binários.

Estes números binários podem ser de comprimento diferentes: 2, 4, 8, 10, 12 ou 16 bits.

Quanto mais bits o conversor AD tiver, maior será a resolução deste AD.

Por exemplo: Suponha que a tensão fornecida ao conversor A/D varia de 0 a 5 volt, e o conversor A/D converte a voltagem de entrada a um número binário de 2 bits apenas.

Com 2 bits nós podemos ter apenas 4 saídas diferentes:

Page 3: Aula 4   conversor ad e pwm

Conversor ADA linha azul descreve as mudanças na tensão de entrada analógica do

microcontrolador. A linha vermelha representa os níveis digitais na saída do conversor AD do microcontrolador.

Podemos ver que o sinal vermelho está longe de ser ideal, ou seja, não reproduz os valores de tensão de entrada analógica original.

Assim, podemos dizer que este AD de 2-bit possui baixa resolução e há uma grande diferença entre o valor real da tensão de entrada analógica e os valores representados por este A D.valores representados por este A D.

Agora, suponhamos que a tensão fornecida ao conversor A D varia de 0 a 5 volt, no entanto, o conversor A / D converte a voltagem de entrada a um número binário de 3-bits.

Com 3-bits podemos obter 8 opções diferentes:

Page 4: Aula 4   conversor ad e pwm

Conversor AD de 3 bits

Exemplo: Um hipotético AD de 3-bit de resolução

Page 5: Aula 4   conversor ad e pwm

Exemplo: Um hipotético AD de 3-bit de resolução

Neste exemplo, os valores de tensão analógico de 0V a 0.62v tem uma representação binária de 000; os valores de tensão analógica de 0,621 V até 1,25V tem uma representação binária de 001 assim por diante.

Page 6: Aula 4   conversor ad e pwm

Conversor AD interno dos PICs

O módulo de conversor de analógico para digital localizado dentro do microcontrolador PIC tem uma resolução de 10-bits.

Portanto, o conversor pode dividir a tensão de entrada analógica entre 0v e 5V para 2^10 níveis, ou seja, 1024 níveis distintos

Então, o valor lido pelo conversor AD será sempre um número no intervalo entre 0 e 1023 (em decimal) ou entre 0x00 e 0x3FF em hexadecimal.

Podemos usar a “regra de três” para calcular a representação binária de uma Podemos usar a “regra de três” para calcular a representação binária de uma tensão de entrada analógica. Por exemplo, vamos calculara representação binária de valor sobre a tensão analógica de 3,65 volts de entrada:

Page 7: Aula 4   conversor ad e pwm

A tensão analógica de 3.65V na entrada será representado pelo número decimal 748 ou pelo número binário 1011101100. De maneira semelhante, podemos encontrar uma representação binária para qualquer nível desejado de tensão de entrada analógica.

O Conversor A D tem quatro registradores 8 bits:

ADCON0 - determina o comportamento do conversor AD.

ADCON1 - determina a configuração do PORTA e PORTE e como o resultado da conversão AD será armazenado em ADRESH e ADRESL

ADRESH – armazena os bits mais significativos resultantes da conversão AD.

ADRESL - armazena os bits menos significativos resultantes da conversão AD.

Page 8: Aula 4   conversor ad e pwm

ADCON0

ADCS1, ADCS0 – Estes dois bits do registrador ADCON0 selecionam a freqüência declock usado para sincronização interna do conversor AD. Ele também afeta a duração de conversão.Ele também afeta a duração de conversão.

Se ambos os bits forem feitos iguais a 1, o clock será gerado por um oscilador RCinterno ao chip.

Page 9: Aula 4   conversor ad e pwm

Bits CHS3 até CHS0

- Analog Channel Select Bits

Selecionam um pino ou um canal analógico para conversão AD, para medição de tensão, de acordo com a seguinte tabela:

Page 10: Aula 4   conversor ad e pwm

Bits: GO/DONE e ADON

GO/DONE - A/D Conversion Status Bit

Determina o status atual de conversão:

1 - conversão A / D está em andamento.

0 - conversão A / D está completa. Este bit é automaticamente limpo por hardware quando a conversão AD está completa.limpo por hardware quando a conversão AD está completa.

ADON – Liga ou desliga o conversor AD.

1 - Uma conversão AD é ativada.

0 - Conversor AD está desativado.

Page 11: Aula 4   conversor ad e pwm

Registrador ADCON1 ( no PIC16F887, atenção! )

ADFM - AD Result Format Select Bit

1 - resultado da conversão é justificado à direita. 1 - resultado da conversão é justificado à direita. Seis bits mais significativos do ADRESH não são utilizados.

0 - resultado da conversão é justificado à esquerda. Seis bits menos significativos do ADRESL não são utilizados.

Page 12: Aula 4   conversor ad e pwm

Bits VCFG1 e VCFG0

• VCFG1 -Voltage Reference Bit -1Seleciona fonte de referência de tensão negativa necessária para a operação

do conversor AD.

1 - referência de tensão negativa é aplicada ao pino Vref-.0 - Tensão de alimentação Vss é usado como fonte de referência de tensão

negativa.

• VCFG0 - Voltage Reference Bit -0Seleciona fonte de referência de tensão positiva necessária para o

funcionamento do conversor AD.

1 - referência de tensão positiva é aplicada ao pino Vref+.0 - Tensão de alimentação Vdd é usado como fonte de referência de tensão

positiva.

Page 13: Aula 4   conversor ad e pwm

ADCON1 no PIC16F876 / 877

Os microcontroladores PIC16F87x (objeto deste curso) tem um registrador ADCON1 um pouco diferente do mostrado anteriormente

Page 14: Aula 4   conversor ad e pwm

Bits PCFGx

PCFG3 a PCFG0: A/D Port Configuration Control bits

Page 15: Aula 4   conversor ad e pwm

Resumo: Como fazer uma Leitura do conversor AD

A fim de medir a tensão num pino de entrada do conversor AD, o seguinte procedimento deve ser feito:

Passo 1 - Configuração de porta:

Faça uma lógica 1 a um bit do registrador TRIS, configurando assim o pino apropriado para uma entrada.Faça uma lógica 1 a um bit do registrador ANSEL, configurando assim o pino apropriado para uma

entrada analógica.

Passo 2 - configuração do módulo ADC:

Configurar referência de tensão no registrador ADCON1.Configurar referência de tensão no registrador ADCON1.Escolha um clock de conversão ADC no registrador ADCON0.Escolha um dos canais de entrada CH0-CH13 do registrador ADCON0.Escolha um formato de dados usando o bit ADFM do registrador ADCON1.Ativar conversor AD, definindo o bit ADON do registrador ADCON0.

Passo 3 - configuração de interrupção ADC (opcionalmente):

Limpar o bit ADIF.Defina a ADIE, PEIE e bits GIE.

Page 16: Aula 4   conversor ad e pwm

Resumo

Passo 4 - Aguarde o tempo de aquisição ( aproximadamente 20us ).

Passo 5 - Inicie a conversão, setando o bit GO/DONE do registrador ADCON0.

Passo 6 - Aguarde até que a conversão ADC esteja concluída.Passo 6 - Aguarde até que a conversão ADC esteja concluída.É necessário verificar no laço do programa se o bit GO/DONEseja limpo ou esperar por uma interrupção do AD (que deve ser

previamente habilitada).

Passo 7 - Leia resultados ADC:Leia os registradores ADRESH e ADRESL.

Page 17: Aula 4   conversor ad e pwm
Page 18: Aula 4   conversor ad e pwm

Modelo elétrico para a Entrada Analógica do PIC

Note a presença do Capacitor de Amostragem C- Hold, sua função é retera tensão que será amostrada pelo conversor AD.

Page 19: Aula 4   conversor ad e pwm

O tempo mínimo de amostragem depende do valor do capacitor C-Hold e do resistor Rss

Equação que permite calcular o tempo mínimo de amostragem para o PIC16F877. Depende fundamentalmente do tempo de carga do capacitor C-Hold

Page 20: Aula 4   conversor ad e pwm

IMPORTANTÍSSIMO !• O Tempo de Aquisição Tad depende fundamentalmente da impedância de

entrada do sinal colocado na entrada analógica !

• A impedância máxima da fonte de sinal analógico deve ser de 10 Kohms;

• O tempo mínimo de aquisição para uma impedância de 10K é de 19,72us

• O tempo mínimo de aquisição para uma impedância de entrada de 50 ohms é de 10,61us.

• Para usar fontes de entrada com impedância maior do que 10K, • Para usar fontes de entrada com impedância maior do que 10K, recomenda-se o uso de um buffer (conversor de impedância) externo ao microcontrolador:

Amplificador Operacional ligado como seguidor de tensão (buffer)

Page 21: Aula 4   conversor ad e pwm

A fim de permitir que o conversor AD possa ser executado sem problemas, bem como para evitar resultados indesejáveis, é necessário considerar:

a) Conversor AD não distingue entre sinais digitais e analógicos. b) Para evitar erros de medição ou danos no chip, pinos devem ser

configurados como entradas analógicas antes que o processo de conversão seja iniciado.

Os bits usados para este fim são armazenados nos registradores TRIS e ANSEL ( Obs: ANSEL não existe no PIC16F87x ) ;

Quando for feita a leitura da porta com entradas analógicas, o estado Quando for feita a leitura da porta com entradas analógicas, o estado dos bits correspondentes serão lidos com o valor zero (0);

A grosso modo a medição de tensão no conversor é baseado na comparação de tensão de entrada com escala interna, que tem 1.024 marcas ( 2^10 = 1024 ).

A marca de escala menor significa a tensão Vref-, enquanto que a sua maior marca significa a tensão Vref +.

A figura a seguir mostra referências de tensão selecionáveis, bem como seus valores mínimos e máximos.

Page 22: Aula 4   conversor ad e pwm

Valores mínimo e máximo da Tensão de referência Vref

Page 23: Aula 4   conversor ad e pwm

Valores mínimo e máximo da Tensão de referência Vref

• O valor mínimo de Vref+ é ( Vcc - 2.5V )

• O valor máximo de Vref+ é ( Vcc+0,3V )

• O valor mínimo de Vref- é ( GND - 0,3V )

• O valor máximo de Vref- é (Vref+ - 2V )

Page 24: Aula 4   conversor ad e pwm

Questão

a) Se a tensão de alimentação Vcc do PIC for de 5 volts, qual é o menor intervalo possível entre Vref- e Vref+ ?

b) Para este menor intervalo possível, qual é o menor valor de tensão que pode ser lido pelo conversor AD ?

Page 25: Aula 4   conversor ad e pwm

Período do clock do conversor AD

O tempo necessário para completar a conversão de um bit é definido como Tad.

É necessário esperar pelo menos 1,6 us para o PIC16F876 entre uma conversão e outra.

O menor tempo Tad varia conforme o modelo de microcontrolador, e os valores corretos podem ser obtidos nos datasheets.

Uma conversão AD de 10 bits é ligeiramente mais demorada do que o Uma conversão AD de 10 bits é ligeiramente mais demorada do que o esperado e dura 11,5 períodos Tad (para uma conversão de 10 bits).

Uma vez que tanto a frequência de clock quanto a fonte de conversão AD são especificados pelo firmware, é necessário selecionar uma das combinações de bits disponíveis em ADCS1 e ADCS0 antes da medição da tensão em algumas das entradas analógicas começar.

Estes bits são armazenados no registrador ADCON0.

Page 26: Aula 4   conversor ad e pwm

O tempo total que uma amostragem demora é...

Tempo Total = Tempo Aquisição + Tempo de Conversão

Page 27: Aula 4   conversor ad e pwm

O tempo total que demora uma conversão é...

Page 28: Aula 4   conversor ad e pwm

Teorema de Nyquist

O critério de Nyquist afirma que, para evitar o aliasing, devemos amostrar um sinal a uma taxa igual a pelo menos duas vezes sua largura de banda.

Em outras palavras:

“A Frequência de Amostragem deve ser 2 vezes maior que a frequencia que desejamos amostrar” (Teorema de Nyquist).de Nyquist).

Na minha experiência prática de desenvolvedor de sistemas embarcados, eu reescreveria o Teorema de Nyquist assim:

“A Frequência de Amostragem deve ser pelo menos 10 vezes maior que a frequencia que desejamos amostrar” (Teorema de Fambrini).

Page 29: Aula 4   conversor ad e pwm

Exemplo: Aplicando o Teorema de Nyquist

Problema: Deseja amostrar a senóide da rede elétrica, cuja frequencia é de 60 Hz.

a) Qual deve ser a menor frequencia de amostragem, de acordo com Nyquist ?

b) Qual é o maior tempo permitido entre amostras consecutivas ?

c) Na prática, qual deveria ser a frequencia de amostragem ?

d) Qual deve ser na prática o periodo entre as amostras ?

Page 30: Aula 4   conversor ad e pwm

Configuração dos bits ADCS01 e ADCS02

Page 31: Aula 4   conversor ad e pwm

11 ciclos da Conversão do AD

Page 32: Aula 4   conversor ad e pwm

IMPORTANTÍSSIMO !

1- O registrador ADCON1 está no Banco 1 da memória ( bsf STATUS,RP0) mas o registrador ADCON0 está no Banco 0 da RAM ( bcf STATUS,RP0). Uma opção é usar a diretiva BANKSEL para selecionar o banco de memória correto. Exemplo: banksel ADCON1.memória correto. Exemplo: banksel ADCON1.

Esquecer de chavear corretamente os bancos de memória acarreta o não funcionamento do programa

2 – Os microcontroladores PIC16F87x não possuem o registrador de configuração ANSEL. A configuração do AD é feita apenas nos registradores ADCON0 e ADCON1

Page 33: Aula 4   conversor ad e pwm

Exemplo de uso do AD em Assembly; configuração dos registradores

inicio:bsf STATUS,5movlw b'00000001' ;ajusta os pinos RA0 até RA4 como entradas e RA5 como saidamovwf TRISA

movlw b'00000000' ;ajusta o PORTD como saida (Leds)movwf TRISD

clrf INTCON ; desligas as interrupções

movlw b'10001110‘ ; fosc/2 = 2MHz clock do conversor ADmovwf ADCON1

bcf STATUS, 5

movlw b'00000101' ;Justificado à direita, a referencia é VDD=5 volts, AN0 é entrada analogmovwf ADCON0 ;Ajusta RA0 como entrada analógica

bsf PORTA,5 ; necessário para ligar os leds na Placa Abreu'sclrf PORTD ; inicialmente, leds do PORTD apagados

Page 34: Aula 4   conversor ad e pwm

Rotina principal – Uso do AD em Assembly

MAIN: call DELAY ; aguarda 20usbsf ADCON0,2 ; liga o bit GO do ADCON0

CHECK:btfsc ADCON0,2 ; Aguarda 12 Tad, aproximadamente 24us se clock= 4MHzgoto CHECK ; loop que aguarda o termino da conversão AD

bsf STATUS,RP0 ; muda para BANCO1 da memoriabsf STATUS,RP0 ; muda para BANCO1 da memoriamovf ADRESL,W ; transfere o registrador de Leitura do AD para o W

bcf STATUS,RP0 ; muda para o banco0 da memóriamovwf PORTD ; coloca o valor do W no PORTD, acendendo os LEDs correspondentes

nop ; desperdiça dois ciclos de maquinanop

goto MAIN ; retorna para o inicio deste loop

Page 35: Aula 4   conversor ad e pwm

Exemplo 1- Testando o Conversor AD em Assembly

Rode o Exemplo 1:

Teste_ADC_Assembly

Page 36: Aula 4   conversor ad e pwm

Exercício

No programa anterior, identifique todas as configurações atribuídas a cada bit dos registradores ADCON0 e ADCON1.

Explique cada uma delas, escrevendo-as no seu caderno.

ADCON0=00000101 e ADCON1=10001110

Page 37: Aula 4   conversor ad e pwm

Exemplo 2 – Conversor AD em Linguagem C

// Configuração do conversor AD

SETUP_ADC_PORTS(RA0_ANALOG);

setup_ADC(ADC_CLOCK_INTERNAL);setup_ADC(ADC_CLOCK_INTERNAL);

set_adc_channel(0);

Page 38: Aula 4   conversor ad e pwm

Exemplo 2 – Conversor AD em Linguagem C

while(true){

resultado = read_adc( );

output_D (resultado);

delay_us(20);delay_us(20);

}//while(true)

}//main

Page 39: Aula 4   conversor ad e pwm

Exemplo 2: Conversor AD em C

Abra e execute o Exemplo 2: Conversor AD em linguagem C – compilador CCS

Page 40: Aula 4   conversor ad e pwm

Exemplo 3 – Conversor AD e interrupções

• Neste exemplo, ilustraremos o uso do Conversor AD usando-se interrupção, em Linguagem Assembly.

Page 41: Aula 4   conversor ad e pwm

Rotina de interrupção do ADC

;------------------------------------------------------------AD_ISR: banksel ADRESLmovf ADRESL,W ; Lê o resultado do conversor ADmovwf PORTD ; escreve este resultado no PORTDbanksel PORTDbanksel PORTDcall DELAY ; Aguarda o tempo de aquisiçãobanksel ADCON0bsf ADCON0,2 ; Inicia a conversão AD (faz o bit GO=1 )BANKSEL PIR1bcf PIR1, ADIF ; Limpa o flag de interrupção do conversor ADretfie;----------------------------------------------------------

Page 42: Aula 4   conversor ad e pwm

Inicialização da Interrupção do ADC

;--------------------------------------------------------------------------------INICIA_IRQ:

bcf PIR1, ADIF ; Limpa o Flag ADIF (bit 6)bsf STATUS,RP0 ; Acessa o Bank1bsf PIE1, ADIE ; Habilita a interrupção do ADCbsf PIE1, ADIE ; Habilita a interrupção do ADCbcf STATUS, RP0 ; Acessa o Bank 0bsf INTCON, PEIE ; Habilita Interrupção de Perifericosbsf INTCON, GIE ; Habilita a chave geral das interrupçõescall DELAY ; espera pelo tempo de Aquisição TACQbsf ADCON0,2 ; Inicia conversão do AD (faz o bit GO=1 );----------------------------------------------------------------------------------

Page 43: Aula 4   conversor ad e pwm

Exemplo 4: Interrupções do Conversor AD em linguagem C

// Configuração do conversor AD

SETUP_ADC_PORTS(RA0_ANALOG);

setup_ADC(ADC_CLOCK_INTERNAL);

set_adc_channel(0);set_adc_channel(0);

//configura a Interrupção do AD

enable_interrupts(INT_AD );

enable_interrupts(GLOBAL);

Page 44: Aula 4   conversor ad e pwm

Rotina de Interrupção do AD em Linguagem C

//----------------------------------------------------------------

#INT_AD

void ADC_ISR( ){

output_D(resultado);output_D(resultado);

// delay_us(20); //AGUARDA PELO TEMPO DE AQUISIÇÃO

}

//---------------------------------------------------------------

Page 45: Aula 4   conversor ad e pwm

Loop Principal do programa em C

while(true){

//Quando termina a conversão, ocorre a // interrupção do ADC

resultado = read_adc( );resultado = read_adc( );

// Coloque aqui seu programa principal

}//while(true)

Page 46: Aula 4   conversor ad e pwm

PWM MODULAÇÃO POR LARGURA DE PULSOS

Page 47: Aula 4   conversor ad e pwm

PWMPWM é um acrônimo de Pulse Width Modulator (Modulação por Largura de Pulsos).Trata-se de uma técnica poderosa usada para gerar tensão analógica a partir de sinais

digitais. PWM tem uma ampla variedade de aplicações tais como controlar a potência média

fornecida a uma carga, gerando níveis de tensão analógica, geração de onda senoidal e controle de velocidade do motores.

Sinais PWM são sinais do tipo On-Off (daí o nome de pulso) cuja duração do tempo ligado "On" pode variar de acordo com nossas necessidades.

A fração do período de tempo durante o qual o sinal é ON dividida período de tempo total é A fração do período de tempo durante o qual o sinal é ON dividida período de tempo total é denominado Ciclo Ativo (em inglês, DutyCycle=DC ).

Os microcontroladrores PIC possuem os módulos CCP que podem ser usados para gerar ondas PWM.

CCP é uma sigla para para Capture/Compare/PWM.

O PIC 16F877A tem dois módulos CCP chamados de CCP1 e CCP2.

Neste curso estudaremos apenas o módulo PWM.Os PIC16F877 podem produzir PWM com resolução de até 10-bit (ou menos).

Page 48: Aula 4   conversor ad e pwm

Outra definição para PWM

• PWM são sinais digitais de frequência fixa e ciclo ativo variável.

O ciclo ativo (DC) pode ser calculado por:

Observe que o período total de cada pulso é t = t1+t2. Num sistema PWM, o período t é constante.

Page 49: Aula 4   conversor ad e pwm

Exemplo de sinais PWM com vários ciclos ativos diferentes

Page 50: Aula 4   conversor ad e pwm

Recuperando o nível DC de um sinal PWM

Para recuperar o nível DC de um sinal PWM, é necessário fazê-lo passar por um filtro passa-baixas (ou integrador) formado por um capacitor ligado em série e um capacitor ligado em paralelo com a saída.

A Frequencia de corte deste integrador é calculada por:

Para que este filtro passa-baixas se comporte como um integrador, é preciso que a frequencia de corte Fc seja pelo menos 10 vezes maior do que a frequencia do sinal PWM:frequencia do sinal PWM:

Page 51: Aula 4   conversor ad e pwm

Recuperando o Sinal DC é possivel sintetizar qualquer forma de onda – ver Exemplo 7

Pode-se gerar senóides, ondas quadradas, triangulares, enfim, qualquer forma de onda, simplesmente passando-se a saida do PWM por um integrador:

Ver o seguinte site: http://fdi-ffambrin.blogspot.com.br/2015/02/gerando-onda-senoidal-com.html

Page 52: Aula 4   conversor ad e pwm

Período do Sinal PWM

O período do sinal PWM gerado no pino RC2/CCP1 é definido pelo valor escrito no registrador PR2, pela Fosc e pelo fator de Prescaler aplicado ao TMR2. O valor exato do período é dado pela fórmula:

T(PWM) = Período do Sinal PWM

Tosc = 1 / Fosc

Prescaler do TMR2 = Fator de Prescaler aplicado ao TMR2

Page 53: Aula 4   conversor ad e pwm

Isolando-se PR2 na fórmula anterior

PR2= Valor necessário para gerar a frequencia F(pwm)

Fosc = Frequencia do oscilador principal (ver no próx. slide)

F(pwm)= Frequencia do sinal PWM

Prescaler do TMR2 = Fator de Prescaler aplicado ao TMR2

Page 54: Aula 4   conversor ad e pwm

O que significa Fosc ?

É a frequencia do oscilador de clock .

A velocidade de clock do processador é a velocidade do oscilador escalado para cima ou para baixo pela cadeia de divisores de osciladores e multiplicadores.

Por exemplo:

a) se você estiver usando um PIC com um oscilador externo (cristal) de 4 MHz e não possui PLL (ou o PLL está desativado), Fosc é igual a 4 MHz.

b) Se você estiver usando um PIC com um oscilador interno de 8 MHz e um PLL ativado na modalidade 4x PLL, Fosc será igual 32 MHz.

Page 55: Aula 4   conversor ad e pwm

Exercício

Qual é o valor que deve ser escrito no registrador PR2 para gerar um sinal PWM no pino RC2/CCP1 com uma frequência de 15625Hz, sendo a frequência do oscilador principal de 4MHz e o fator de Prescaler do oscilador principal de 4MHz e o fator de Prescaler do TMR2 de 1:1 ?

Page 56: Aula 4   conversor ad e pwm

Solução

PR2=63PR2=63

Page 57: Aula 4   conversor ad e pwm

Ciclo Ativo do Sinal PWM

O ciclo do sinal PWM se inicia quando TMR2=(PR2+1). Nesse momento, os seguinte eventos ocorrem:

a) O TMR2 é apagado dando início a um novo ciclo do sinal PWM.

b) O pino RC2/CCP1 é setado, dando inicio ao ciclo ativo (exceto se o duty cycle for de 0%)

c) O registrador CCPR1H é carregado com o conteudo do registrador CCPR1L, com a finalidade de atualizar a largura do ciclo ativo no ciclo do sinal que se inicia.

IMPORTANTÍSSIMO:

O tempo correspondente ao ciclo ativo é controlado por 10 bits, chamados bits de controle, os quais são compostos pelo registrador CCPR1L mais os bits 5 e 4 do registrador CCP1CON;quais são compostos pelo registrador CCPR1L mais os bits 5 e 4 do registrador CCP1CON;

O registrador CCPR1L contém os 8 bits mais significativos, enquanto que os bits 5 e 4 do registrador CCP1CON guarda os 2 bits menos significativos.

O ciclo ativo termina quando TMR2 :<Q1:Q0> = ( CCPR1L : CCP1CON<5:4> )

Tendo em vista que o TMR2 só possui 8 bits, ele é concatenado com 2 bits obtidos do Oscilador Principal ou do Prescaler do TMR2 que são aqui representados por <Q1:Q0>, para completar os 10 bits necessários para que seja feita a comparação com os bits de controle.

Page 58: Aula 4   conversor ad e pwm

Quando termina o Ciclo Ativo do PWM ?O ciclo ativo do PWM terminará exatamente quando:

TMR2:<Q1:Q0> == (CCPR1L : CCP1CON<5:4> )

A esquerda, diagrama de blocos simplificadodo PWM do PIC.

Os bits <Q1:Q0> pertencem ou ao oscilador principal ou ao Prescaler e não podem ser escritos pelo usuário.

Page 59: Aula 4   conversor ad e pwm

Período do Ciclo Ativo do PWM

É calculado pela seguinte fórmula:

PWM duty cycle =(CCPR1L:CCP1CON<5:4>) •Tosc • ( Prescaler do TMR2 )

Onde:

PWM duty cycle = Tempo correspondente ao ciclo ativo do sinal PWM

(CCPR1L:CCP1CON<5:4>) = Valor que definirá a largura do ciclo ativo

Tosc = 1 / Fosc

Prescaler do TMR2 = Fator de Prescaler aplicado por software ao Timer2

Page 60: Aula 4   conversor ad e pwm

Outra fórmula para o Período do Ciclo Ativo

PWM duty cycle = (CCPR1L:CCP1CON<5:4>) / (PR2 + 1) x 4

Para ver uma demonstração desta fórmula, ver o Livro:

Microcontroladores PIC – uma abordagem prática e objetiva , Autor: Wagner Zanco, editora Érica – 1 edição, 2005, páginas 241 e 242.

Page 61: Aula 4   conversor ad e pwm

Cálculo do Número de Passos de Controle

O controle do PWM é feito a partir da divisão do período do sinal de PWM em passos iguais de tempo, chamados de “Passos de Controle”.

O sinal PWM é dividido em Np passos tal que:

Np = (PR2 + 1) x 4

Np : número de passos em que será dividido o sinal PWM

PR2: valor que o usuário colocou via software no registrador PR2PR2: valor que o usuário colocou via software no registrador PR2

Por exemplo, se, PR2=63 (decimal), o sinal PWM será dividido em 256 partes iguais, podendo-se controlar em qual destas partes o sinal será colocado em nível 0 após o inicio do ciclo ativo.

Obs: Se escrevermos o valor PR2 = 255 (0xFF) não será possível obter um ciclo ativo de 100%, porque Np = 1024. Para obtermos um ciclo de 100% seria necessário escrever o valor 1024 nos bits de controle, mas isso não é possivel, pois só temos 10 bits de controle, então o maior valor possivel de ser escrito é 1023.

Page 62: Aula 4   conversor ad e pwm

Cálculo do tempo correspondente a cada Passo

Dividindo o período do sinal (Tpwm) pelo número de passos temos o tempo (Tp) correspondente a cada passo:

Tp= Tpwm / Np

Exercício:

Considere um sinal PWM de frequencia 15625Hz e o valor de PR2=63.

Calcule o tempo correspondente a cada passo. ( Resp: Tp= 250 ns )Calcule o tempo correspondente a cada passo. ( Resp: Tp= 250 ns )

O tempo correspondente a cada passo é também chamado RESOLUÇÃO TEMPORAL DO PWM, e nos informa qual é a variação mínima do ciclo ativo.

Page 63: Aula 4   conversor ad e pwm

Cálculo do tempo correspondente ao ciclo ativo

O tempo correspondente ao ciclo ativo pode ser calculado efetuando-se o produto entre Tp e o valor armazenado em CCPR1L : CCP1CON<5:4>

PWM duty cycle = Tp x CCPR1L : CCP1CON<5:4>

Sendo Tp um valor fixo, o ciclo ativo do PWM dependerá única e exclusivamente dos bits de controle CCPR1L : CCP1CON<5:4>, nos quais exclusivamente dos bits de controle CCPR1L : CCP1CON<5:4>, nos quais cada unidade equivale a 1x Tp

Page 64: Aula 4   conversor ad e pwm

RESUMO

Para ativar o modo PWM, aconselha-se seguir os seguintes passos:

1- Configurar o período do sinal PWM escrevendo o valor correto no registrador PR2;

2 – Configurar a largura do ciclo ativo escrevendo o valor correto nos bits de controle CCPR1L:CCP1CON<5:4>

3 – Configurar o pino RC2/CCP1 como saída, fazendo bcf TRISC, 2

4 – Ligar o TMR2 com o valor desejado no Prescaler (T2CON)

5 – Ativar o modo PWM fazendo CCP1CON <3:0> = 1100

Page 65: Aula 4   conversor ad e pwm

Afinal, para que serve o registrador CCPR1H ?

O CCPR1H é apenas um buffer e não pode ser escrito pelo usuário.

No modo de PWM, CCPR1H é um registrador que serve somente para leitura.

O registrador CCPR1L e os bits CCP1CON <5: 4> podem ser escritos a qualquer momento pelo usuário, mas o valor do ciclo ativo não será atualizado em CCPR1H até o momento em que PR2 e TMR2 se igualam (isto é, após um período completo). O registrador CCPR1H e mais um latch interno de 2 bits são usados como buffer para o ciclo ativo PWM. latch interno de 2 bits são usados como buffer para o ciclo ativo PWM.

Este duplo buffer é essencial para o funcionamento do PWM sem falhas. Quando o registrador CCPR1H concatenado com 2 bits internos se igualarem com TMR2 concatenado com 2 bits internos <Q1:Q0> do clock, ou 2 bits do Prescaler do TMR2, então o pino CCP1 será zerado e inicia o tempo desligado do PWM.

Veja novamente o diagrama de blocos no slide anterior chamado “Quando termina o Ciclo Ativo do PWM ?”

Page 66: Aula 4   conversor ad e pwm

Máxima Resolução (em bits) do PWM

Obs: Se o valor do ciclo ativo do PWM é mais longo do queo período do PWM, o pino CCP1 não será zerado.

Page 67: Aula 4   conversor ad e pwm

Explicação para a Fórmula do slide anterior

Na arquitetura dos PICs, a resolução (no tempo) do PWM é de 1 ciclo de máquina.

A resolução máxima em bits (base 2) será do número de ciclos de máquina que cabem no período escolhido para o PWM.

Vamos a um exemplo:

a) Para um PIC rodando com cristal de 20MHz, o ciclo de máquina será :(1/20.000000) * 4 = 0,2us;

Se escolhermos uma frequência de 20kHz para o PWM, o período deste PWM será 50us; e caberão 50/0,2 = 250 ciclos de máquina.50us; e caberão 50/0,2 = 250 ciclos de máquina.

A resolução do PWM será ; na prática 8 bits

b) Se a frequência do PWM fosse de 50kHz, a resolução seria de log2(100) = 6,64 bit.

Como é o registrador PR2 que controla o período do PWM, uma mudança de valor de PR2 afeta diretamente a resolução do PWM.

Page 68: Aula 4   conversor ad e pwm

Exercício

Calcule a máxima resolução (em bits) do ciclo ativo que pode ser obtida usando-se uma frequência de PWM de 78.125 kHz e oscilador de clock com cristal de 20 MHz.de clock com cristal de 20 MHz.

Dado: log(2) = 0,3010

(Resp: aprox. 8 bits )

Page 69: Aula 4   conversor ad e pwm

Exemplo de Frequências e Resoluções do PWM para oscilador de clock a 20 MHz

Conclusão:Pode-se ver claramente que o valor escolhido para o registrador PR2 afeta a resoluçãoem bits do PWM e consequentemente, o número de passos que podem ser obtidos.

Page 70: Aula 4   conversor ad e pwm

Registrador CCP1CON

Page 71: Aula 4   conversor ad e pwm

PROGRAMAS-EXEMPLOS: PWMPROGRAMAS-EXEMPLOS: PWM

Page 72: Aula 4   conversor ad e pwm

Exemplo 5: Gerando PWM em Assembly

; Oscilador de 4 MHz

; Gera um PWM de frequencia 10KHz com ciclo ativo de 50% no pino RC2/CCP1

MAIN

BCF STATUS,RP0

CLRF PORTA ; limpa o PORTA

CLRF PORTB ; limpa o PORTBCLRF PORTB ; limpa o PORTB

CLRF PORTC ; limpa o PORTC

BSF STATUS,RP0 ; muda para bank 1

MOVLW B'11111111'

MOVWF TRISA ; PORTA é entrada

CLRF TRISB ; PORTB é saida

CLRF TRISC

Page 73: Aula 4   conversor ad e pwm

Exemplo 5: Gerando PWM em Assembly

movlw B'01100011' ; periodo = 0.0001 secondsmovwf PR2bcf STATUS,RP0movlw B'00110010' ; ajusta o ciclo ativo para 50% ou 0.00005 secondsmovwf CCPR1L bcf CCP1CON,5bcf CCP1CON,4bsf STATUS,RP0bcf TRISC,2 ; pino RC2 do PORTC é saidabcf TRISC,2 ; pino RC2 do PORTC é saidabcf STATUS,RP0movlw B'00000100'movwf T2CON ; prescaler =1 , timer2 é ligadobsf CCP1CON,3 ; configura o modulo CCP1 para funcionar como PWMbsf CCP1CON,2

loop:goto loop

Page 74: Aula 4   conversor ad e pwm

Exemplo 6: Gerando PWM em Linguagem C

main( ) {// A saida do módulo CCP1 é o pino 17 do PIC16F877 e pino 13 do PIC16F876

long int ciclo=0;setup_timer_2 (T2_DIV_BY_16, 61, 1); // timer 2 = 1,008 khzsetup_ccp1 (ccp_pwm); // configura CCP1 para modo PWM

set_pwm1_duty ( 0 ); // configura o ciclo ativo em 0 (desligado)

while (true) {

for (ciclo=0; ciclo<1024; ciclo++){

set_pwm1_duty (ciclo); // configura o ciclo ativo

delay_ms(5);}

delay_ms(1000);}

}

Page 75: Aula 4   conversor ad e pwm

Avaliação 2

1) Considere um microcontrolador PIC16F876 com oscilador de clock a cristal de 20 MHz. A frequênciadesejada para o PWM é de 78125Hz e o prescaler do TMR2 é de 1:1. Calcular:

a) Qual é o valor que deve ser escrito no registrador PR2 ?

b) Número de passos

c) Tempo correspondente a cada passo

d) Calcule o ciclo ativo para CCPR1L:CCP1CON<5:4> = 180

e) Nível DC do sinal PWM para uma alimentação de 5 volts no PIC

f) Diagrama de tempo do sinal PWM

2) Escreva um programa para PIC16F876 com cristal de 4MHz que:2) Escreva um programa para PIC16F876 com cristal de 4MHz que:

a) Leia a tensão obtida a partir de um potenciômetro de 10K ligado ao pino AN0 (use o conversor A/D) fazendo uma leitura a cada 50 ms (use interrupção do timer0 ou timer 1 para pegar as amostras);

b) O valor lido pelo conversor AD deve ser um numero entre 0 e 255 ( 8 bits).

c) Ative o PWM com frequencia de 1KHz e utilize o valor lido pelo conversor AD para ajustar o ciclo ativo do

PWM de 0 até 100% conforme mexemos no potenciômetro. A resolução do PWM pode ser de 8 ou 10

bits, a sua escolha.

Resumo: Ao mexer no potenciometro, muda o ciclo ativo do PWM.

Fique a vontade para usar linguagem C ou Assembly para fazer este programa (ou ambas, se você quiser).

Simule no PROTEUS.