SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
AULA 4
Conversor AD e PWM
Microcontroladores PICMicrocontroladores PIC
Prof. Msc. Francisco Fambrini
27/06/2015
LAB 4L
Intervalo para cooffe break 9:25hs a 9:40hs
Conversor A/D
O 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:
Conversor AD
A 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:
Conversor AD de 3 bits
Exemplo: Um hipotético AD de 3-bit de resolução
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.
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 umaPodemos 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:
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.
ADCON0
ADCS1, ADCS0 – Estes dois bits do registrador ADCON0 selecionam a freqüência de
clock 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 RC
interno ao chip.
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:
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.
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.
Bits VCFG1 e VCFG0
• VCFG1 -Voltage Reference Bit -1
Seleciona 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 -0
Seleciona 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.
ADCON1 no PIC16F876 / 877
Os microcontroladores PIC16F87x (objeto deste curso) tem um registrador
ADCON1 um pouco diferente do mostrado anteriormente
Bits PCFGx
PCFG3 a PCFG0: A/D Port Configuration Control bits
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.
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/DONE
seja 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.
Modelo elétrico para a Entrada Analógica do PIC
Note a presença do Capacitor de Amostragem C- Hold, sua função é reter
a tensão que será amostrada pelo conversor AD.
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
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)
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 estadoQuando 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.
Valores mínimo e máximo da Tensão de
referência Vref
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 )
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 ?
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 oUma 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.
O tempo total que uma amostragem demora
é...
Tempo Total = Tempo Aquisição + Tempo de Conversão
O tempo total que demora uma conversão é...
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).
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 ?
Configuração dos bits ADCS01 e ADCS02
11 ciclos da Conversão do AD
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
Exemplo de uso do AD em Assembly
; configuração dos registradores
inicio:
bsf STATUS,5
movlw b'00000001' ;ajusta os pinos RA0 até RA4 como entradas e RA5 como saida
movwf 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 AD
movwf ADCON1
bcf STATUS, 5
movlw b'00000101' ;Justificado à direita, a referencia é VDD=5 volts, AN0 é entrada analog
movwf ADCON0 ;Ajusta RA0 como entrada analógica
bsf PORTA,5 ; necessário para ligar os leds na Placa Abreu's
clrf PORTD ; inicialmente, leds do PORTD apagados
Rotina principal – Uso do AD em Assembly
MAIN:
call DELAY ; aguarda 20us
bsf ADCON0,2 ; liga o bit GO do ADCON0
CHECK:
btfsc ADCON0,2 ; Aguarda 12 Tad, aproximadamente 24us se clock= 4MHz
goto CHECK ; loop que aguarda o termino da conversão AD
bsf STATUS,RP0 ; muda para BANCO1 da memoriabsf STATUS,RP0 ; muda para BANCO1 da memoria
movf ADRESL,W ; transfere o registrador de Leitura do AD para o W
bcf STATUS,RP0 ; muda para o banco0 da memória
movwf PORTD ; coloca o valor do W no PORTD, acendendo os LEDs correspondentes
nop ; desperdiça dois ciclos de maquina
nop
goto MAIN ; retorna para o inicio deste loop
Exemplo 1- Testando o Conversor AD em
Assembly
Rode o Exemplo 1:
Teste_ADC_Assembly
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
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);
Exemplo 2 – Conversor AD em Linguagem C
while(true){
resultado = read_adc( );
output_D (resultado);
delay_us(20);delay_us(20);
}//while(true)
}//main
Exemplo 2: Conversor AD em C
Abra e execute o Exemplo 2: Conversor AD em
linguagem C – compilador CCS
Exemplo 3 – Conversor AD e interrupções
• Neste exemplo, ilustraremos o uso do
Conversor AD usando-se interrupção, em
Linguagem Assembly.
Rotina de interrupção do ADC
;------------------------------------------------------------
AD_ISR:
banksel ADRESL
movf ADRESL,W ; Lê o resultado do conversor AD
movwf PORTD ; escreve este resultado no PORTD
banksel PORTDbanksel PORTD
call DELAY ; Aguarda o tempo de aquisição
banksel ADCON0
bsf ADCON0,2 ; Inicia a conversão AD (faz o bit GO=1 )
BANKSEL PIR1
bcf PIR1, ADIF ; Limpa o flag de interrupção do conversor AD
retfie
;----------------------------------------------------------
Inicialização da Interrupção do ADC
;--------------------------------------------------------------------------------
INICIA_IRQ:
bcf PIR1, ADIF ; Limpa o Flag ADIF (bit 6)
bsf STATUS,RP0 ; Acessa o Bank1
bsf PIE1, ADIE ; Habilita a interrupção do ADCbsf PIE1, ADIE ; Habilita a interrupção do ADC
bcf STATUS, RP0 ; Acessa o Bank 0
bsf INTCON, PEIE ; Habilita Interrupção de Perifericos
bsf INTCON, GIE ; Habilita a chave geral das interrupções
call DELAY ; espera pelo tempo de Aquisição TACQ
bsf ADCON0,2 ; Inicia conversão do AD (faz o bit GO=1 )
;----------------------------------------------------------------------------------
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);
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
}
//---------------------------------------------------------------
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)
PWM
MODULAÇÃO POR LARGURA DE PULSOS
PWM
PWM é 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).
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.
Exemplo de sinais PWM com vários ciclos ativos diferentes
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:
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
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
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
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.
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 dooscilador principal de 4MHz e o fator de Prescaler do
TMR2 de 1:1 ?
Solução
PR2=63PR2=63
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.
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 simplificado
do PWM do PIC.
Os bits <Q1:Q0> pertencem ou ao oscilador
principal ou ao Prescaler e não podem ser
escritos pelo usuário.
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
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.
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.
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.
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 quaisexclusivamente dos bits de controle CCPR1L : CCP1CON<5:4>, nos quais
cada unidade equivale a 1x Tp
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
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 ?”
Máxima Resolução (em bits) do PWM
Obs: Se o valor do ciclo ativo do PWM é mais longo do que
o período do PWM, o pino CCP1 não será zerado.
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.
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 )
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ção
em bits do PWM e consequentemente, o número de passos que podem ser obtidos.
Registrador CCP1CON
PROGRAMAS-EXEMPLOS: PWMPROGRAMAS-EXEMPLOS: 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
Exemplo 5: Gerando PWM em Assembly
movlw B'01100011' ; periodo = 0.0001 seconds
movwf PR2
bcf STATUS,RP0
movlw B'00110010' ; ajusta o ciclo ativo para 50% ou 0.00005 seconds
movwf CCPR1L
bcf CCP1CON,5
bcf CCP1CON,4
bsf STATUS,RP0
bcf TRISC,2 ; pino RC2 do PORTC é saidabcf TRISC,2 ; pino RC2 do PORTC é saida
bcf STATUS,RP0
movlw B'00000100'
movwf T2CON ; prescaler =1 , timer2 é ligado
bsf CCP1CON,3 ; configura o modulo CCP1 para funcionar como PWM
bsf CCP1CON,2
loop:
goto loop
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 khz
setup_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);
}
}
Avaliação 2
1) Considere um microcontrolador PIC16F876 com oscilador de clock a cristal de 20 MHz. A frequência
desejada 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.

Mais conteúdo relacionado

Mais procurados

Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônicaFabio Souza
 
inversor de frequencia
inversor de frequenciainversor de frequencia
inversor de frequenciaRenato Amorim
 
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.Transformadores - Proteção de Equipamentos e Sistemas Elétricos.
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.Fred Pacheco
 
Apostila controladores ladder
Apostila controladores ladderApostila controladores ladder
Apostila controladores ladderCarlos Melo
 
Apostila de maquinas eletricas
Apostila de maquinas eletricasApostila de maquinas eletricas
Apostila de maquinas eletricasoeslle
 
Apostila de instrumentação_industrial_-_senai
Apostila de instrumentação_industrial_-_senaiApostila de instrumentação_industrial_-_senai
Apostila de instrumentação_industrial_-_senaijeff1989
 
Cap2 retificadores a diodo
Cap2 retificadores a diodoCap2 retificadores a diodo
Cap2 retificadores a diododiogenes werner
 
ELEMENTOS DE MAQUINAS REBITES
ELEMENTOS DE MAQUINAS REBITESELEMENTOS DE MAQUINAS REBITES
ELEMENTOS DE MAQUINAS REBITESordenaelbass
 
PROJETO DE FILTROS DIGITAIS E SIMULAÇÕES NO MATLAB
PROJETO DE FILTROS DIGITAIS  E SIMULAÇÕES NO MATLAB PROJETO DE FILTROS DIGITAIS  E SIMULAÇÕES NO MATLAB
PROJETO DE FILTROS DIGITAIS E SIMULAÇÕES NO MATLAB Ciro Marcus
 
Sequntial logic design
Sequntial logic designSequntial logic design
Sequntial logic designPavan Mukku
 
Arquitetura Interna do Computador
Arquitetura Interna do ComputadorArquitetura Interna do Computador
Arquitetura Interna do ComputadorSara Gonçalves
 
Synchronous generators
Synchronous generatorsSynchronous generators
Synchronous generatorsAngelo Hafner
 
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02jovemdance
 

Mais procurados (20)

Apresentação curso pic básico fbs eletrônica
Apresentação   curso pic básico fbs eletrônicaApresentação   curso pic básico fbs eletrônica
Apresentação curso pic básico fbs eletrônica
 
Eletronica 03
Eletronica 03Eletronica 03
Eletronica 03
 
inversor de frequencia
inversor de frequenciainversor de frequencia
inversor de frequencia
 
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.Transformadores - Proteção de Equipamentos e Sistemas Elétricos.
Transformadores - Proteção de Equipamentos e Sistemas Elétricos.
 
Apostila controladores ladder
Apostila controladores ladderApostila controladores ladder
Apostila controladores ladder
 
Apostila de maquinas eletricas
Apostila de maquinas eletricasApostila de maquinas eletricas
Apostila de maquinas eletricas
 
Apostila de instrumentação_industrial_-_senai
Apostila de instrumentação_industrial_-_senaiApostila de instrumentação_industrial_-_senai
Apostila de instrumentação_industrial_-_senai
 
Cap2 retificadores a diodo
Cap2 retificadores a diodoCap2 retificadores a diodo
Cap2 retificadores a diodo
 
ELEMENTOS DE MAQUINAS REBITES
ELEMENTOS DE MAQUINAS REBITESELEMENTOS DE MAQUINAS REBITES
ELEMENTOS DE MAQUINAS REBITES
 
Sinais senoidais
Sinais senoidaisSinais senoidais
Sinais senoidais
 
PROJETO DE FILTROS DIGITAIS E SIMULAÇÕES NO MATLAB
PROJETO DE FILTROS DIGITAIS  E SIMULAÇÕES NO MATLAB PROJETO DE FILTROS DIGITAIS  E SIMULAÇÕES NO MATLAB
PROJETO DE FILTROS DIGITAIS E SIMULAÇÕES NO MATLAB
 
Sequntial logic design
Sequntial logic designSequntial logic design
Sequntial logic design
 
Amplificador operacional
Amplificador operacionalAmplificador operacional
Amplificador operacional
 
Arquitetura Interna do Computador
Arquitetura Interna do ComputadorArquitetura Interna do Computador
Arquitetura Interna do Computador
 
Eletrônica digital aula 01
Eletrônica digital   aula 01Eletrônica digital   aula 01
Eletrônica digital aula 01
 
Synchronous generators
Synchronous generatorsSynchronous generators
Synchronous generators
 
Pipeline
PipelinePipeline
Pipeline
 
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02
Listadeexercicios1circuitoseltricos 141115104224-conversion-gate02
 
Clp
ClpClp
Clp
 
Transistor fet
Transistor fetTransistor fet
Transistor fet
 

Destaque

Pwm pic 18 f
Pwm pic 18 fPwm pic 18 f
Pwm pic 18 fIFPB
 
Acionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequenciaAcionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequenciaDouglas Roberto
 
Dissertacao mestrado-f fambrini
Dissertacao mestrado-f fambriniDissertacao mestrado-f fambrini
Dissertacao mestrado-f fambriniFrancisco Fambrini
 
EEP306: pulse width modulation
EEP306: pulse width modulation EEP306: pulse width modulation
EEP306: pulse width modulation Umang Gupta
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisFabio Souza
 
Ac matlab programs
Ac matlab programsAc matlab programs
Ac matlab programsRavi Teja
 
An9611
An9611An9611
An9611anfeco
 
Artefatos em ultrassonografia
Artefatos em ultrassonografiaArtefatos em ultrassonografia
Artefatos em ultrassonografiaMarcos Dias
 
Princípios de física aplicada à ultrassonografia
Princípios de física aplicada à ultrassonografiaPrincípios de física aplicada à ultrassonografia
Princípios de física aplicada à ultrassonografiaIared
 

Destaque (16)

Pwm pic 18 f
Pwm pic 18 fPwm pic 18 f
Pwm pic 18 f
 
Relatório final
Relatório finalRelatório final
Relatório final
 
Acionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequenciaAcionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequencia
 
Scotler pwm
Scotler pwmScotler pwm
Scotler pwm
 
Slides correção
Slides correçãoSlides correção
Slides correção
 
Dissertacao mestrado-f fambrini
Dissertacao mestrado-f fambriniDissertacao mestrado-f fambrini
Dissertacao mestrado-f fambrini
 
Existe vida após o Arduino?
Existe vida após o Arduino?Existe vida após o Arduino?
Existe vida após o Arduino?
 
Proteus anacom
Proteus anacomProteus anacom
Proteus anacom
 
EEP306: pulse width modulation
EEP306: pulse width modulation EEP306: pulse width modulation
EEP306: pulse width modulation
 
Microcontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas DigitaisMicrocontroladores PIC - Entradas e saídas Digitais
Microcontroladores PIC - Entradas e saídas Digitais
 
Ac matlab programs
Ac matlab programsAc matlab programs
Ac matlab programs
 
Ultrassom
UltrassomUltrassom
Ultrassom
 
ultrasom
ultrasomultrasom
ultrasom
 
An9611
An9611An9611
An9611
 
Artefatos em ultrassonografia
Artefatos em ultrassonografiaArtefatos em ultrassonografia
Artefatos em ultrassonografia
 
Princípios de física aplicada à ultrassonografia
Princípios de física aplicada à ultrassonografiaPrincípios de física aplicada à ultrassonografia
Princípios de física aplicada à ultrassonografia
 

Semelhante a Conversor AD e PWM

Arduino UNO.conversor AD.docx
Arduino UNO.conversor AD.docxArduino UNO.conversor AD.docx
Arduino UNO.conversor AD.docxRudnei Barbosa
 
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdf
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdfAula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdf
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdfCarlos Alexandre Ferri
 
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...Ciro Marcus
 
Guia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdfGuia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdfSilvanildoManoeldaSi
 
Aula 11 condicionadores e transmissores
Aula 11   condicionadores e transmissoresAula 11   condicionadores e transmissores
Aula 11 condicionadores e transmissoresJoao Pedro Turibio
 
Controlo Industrial - ADC
Controlo Industrial - ADCControlo Industrial - ADC
Controlo Industrial - ADCRicardo Antunes
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...Fabio Souza
 
Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051 Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051 SANTIAGO PABLO ALBERTO
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCPaulo Duarte
 
Projeto – Transmissão de voz digital
Projeto – Transmissão de voz digitalProjeto – Transmissão de voz digital
Projeto – Transmissão de voz digitalCiro Marcus
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Cláudio Alves
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicampFrancisco Fambrini
 
Inversor de frequencia
Inversor de frequenciaInversor de frequencia
Inversor de frequenciaAdemir Santos
 
Prova de aptidão tecnológica
Prova de aptidão tecnológicaProva de aptidão tecnológica
Prova de aptidão tecnológicaokashi24
 
Guia Geral Automação
Guia Geral AutomaçãoGuia Geral Automação
Guia Geral AutomaçãoDIEGO323752
 

Semelhante a Conversor AD e PWM (20)

Arduino UNO.conversor AD.docx
Arduino UNO.conversor AD.docxArduino UNO.conversor AD.docx
Arduino UNO.conversor AD.docx
 
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdf
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdfAula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdf
Aula 25-Teoria-ED2-Conversor_AD_Aluno_20161S.pdf
 
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
 
Conversores D/A
Conversores D/AConversores D/A
Conversores D/A
 
09 adc
09 adc09 adc
09 adc
 
09 adc (1)
09 adc (1)09 adc (1)
09 adc (1)
 
Guia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdfGuia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdf
 
Aula 11 condicionadores e transmissores
Aula 11   condicionadores e transmissoresAula 11   condicionadores e transmissores
Aula 11 condicionadores e transmissores
 
Controlo Industrial - ADC
Controlo Industrial - ADCControlo Industrial - ADC
Controlo Industrial - ADC
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados - Conversor ...
 
Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051 Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051
 
Capitulo ii
Capitulo iiCapitulo ii
Capitulo ii
 
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PCFrequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC
 
Projeto – Transmissão de voz digital
Projeto – Transmissão de voz digitalProjeto – Transmissão de voz digital
Projeto – Transmissão de voz digital
 
Medição Usando Cloud Computing
Medição Usando Cloud ComputingMedição Usando Cloud Computing
Medição Usando Cloud Computing
 
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Inversor de frequencia
Inversor de frequenciaInversor de frequencia
Inversor de frequencia
 
Prova de aptidão tecnológica
Prova de aptidão tecnológicaProva de aptidão tecnológica
Prova de aptidão tecnológica
 
Guia Geral Automação
Guia Geral AutomaçãoGuia Geral Automação
Guia Geral Automação
 

Conversor AD e PWM

  • 1. AULA 4 Conversor AD e PWM Microcontroladores PICMicrocontroladores PIC Prof. Msc. Francisco Fambrini 27/06/2015 LAB 4L Intervalo para cooffe break 9:25hs a 9:40hs
  • 2. Conversor A/D O 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:
  • 3. Conversor AD A 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:
  • 4. Conversor AD de 3 bits Exemplo: Um hipotético AD de 3-bit de resolução
  • 5. 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.
  • 6. 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 umaPodemos 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:
  • 7. 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.
  • 8. ADCON0 ADCS1, ADCS0 – Estes dois bits do registrador ADCON0 selecionam a freqüência de clock 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 RC interno ao chip.
  • 9. 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:
  • 10. 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.
  • 11. 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.
  • 12. Bits VCFG1 e VCFG0 • VCFG1 -Voltage Reference Bit -1 Seleciona 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 -0 Seleciona 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.
  • 13. ADCON1 no PIC16F876 / 877 Os microcontroladores PIC16F87x (objeto deste curso) tem um registrador ADCON1 um pouco diferente do mostrado anteriormente
  • 14. Bits PCFGx PCFG3 a PCFG0: A/D Port Configuration Control bits
  • 15. 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.
  • 16. 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/DONE seja 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.
  • 17.
  • 18. Modelo elétrico para a Entrada Analógica do PIC Note a presença do Capacitor de Amostragem C- Hold, sua função é reter a tensão que será amostrada pelo conversor AD.
  • 19. 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
  • 20. 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)
  • 21. 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 estadoQuando 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.
  • 22. Valores mínimo e máximo da Tensão de referência Vref
  • 23. 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 )
  • 24. 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 ?
  • 25. 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 oUma 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.
  • 26. O tempo total que uma amostragem demora é... Tempo Total = Tempo Aquisição + Tempo de Conversão
  • 27. O tempo total que demora uma conversão é...
  • 28. 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).
  • 29. 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 ?
  • 30. Configuração dos bits ADCS01 e ADCS02
  • 31. 11 ciclos da Conversão do AD
  • 32. 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
  • 33. Exemplo de uso do AD em Assembly ; configuração dos registradores inicio: bsf STATUS,5 movlw b'00000001' ;ajusta os pinos RA0 até RA4 como entradas e RA5 como saida movwf 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 AD movwf ADCON1 bcf STATUS, 5 movlw b'00000101' ;Justificado à direita, a referencia é VDD=5 volts, AN0 é entrada analog movwf ADCON0 ;Ajusta RA0 como entrada analógica bsf PORTA,5 ; necessário para ligar os leds na Placa Abreu's clrf PORTD ; inicialmente, leds do PORTD apagados
  • 34. Rotina principal – Uso do AD em Assembly MAIN: call DELAY ; aguarda 20us bsf ADCON0,2 ; liga o bit GO do ADCON0 CHECK: btfsc ADCON0,2 ; Aguarda 12 Tad, aproximadamente 24us se clock= 4MHz goto CHECK ; loop que aguarda o termino da conversão AD bsf STATUS,RP0 ; muda para BANCO1 da memoriabsf STATUS,RP0 ; muda para BANCO1 da memoria movf ADRESL,W ; transfere o registrador de Leitura do AD para o W bcf STATUS,RP0 ; muda para o banco0 da memória movwf PORTD ; coloca o valor do W no PORTD, acendendo os LEDs correspondentes nop ; desperdiça dois ciclos de maquina nop goto MAIN ; retorna para o inicio deste loop
  • 35. Exemplo 1- Testando o Conversor AD em Assembly Rode o Exemplo 1: Teste_ADC_Assembly
  • 36. 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
  • 37. 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);
  • 38. Exemplo 2 – Conversor AD em Linguagem C while(true){ resultado = read_adc( ); output_D (resultado); delay_us(20);delay_us(20); }//while(true) }//main
  • 39. Exemplo 2: Conversor AD em C Abra e execute o Exemplo 2: Conversor AD em linguagem C – compilador CCS
  • 40. Exemplo 3 – Conversor AD e interrupções • Neste exemplo, ilustraremos o uso do Conversor AD usando-se interrupção, em Linguagem Assembly.
  • 41. Rotina de interrupção do ADC ;------------------------------------------------------------ AD_ISR: banksel ADRESL movf ADRESL,W ; Lê o resultado do conversor AD movwf PORTD ; escreve este resultado no PORTD banksel PORTDbanksel PORTD call DELAY ; Aguarda o tempo de aquisição banksel ADCON0 bsf ADCON0,2 ; Inicia a conversão AD (faz o bit GO=1 ) BANKSEL PIR1 bcf PIR1, ADIF ; Limpa o flag de interrupção do conversor AD retfie ;----------------------------------------------------------
  • 42. Inicialização da Interrupção do ADC ;-------------------------------------------------------------------------------- INICIA_IRQ: bcf PIR1, ADIF ; Limpa o Flag ADIF (bit 6) bsf STATUS,RP0 ; Acessa o Bank1 bsf PIE1, ADIE ; Habilita a interrupção do ADCbsf PIE1, ADIE ; Habilita a interrupção do ADC bcf STATUS, RP0 ; Acessa o Bank 0 bsf INTCON, PEIE ; Habilita Interrupção de Perifericos bsf INTCON, GIE ; Habilita a chave geral das interrupções call DELAY ; espera pelo tempo de Aquisição TACQ bsf ADCON0,2 ; Inicia conversão do AD (faz o bit GO=1 ) ;----------------------------------------------------------------------------------
  • 43. 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);
  • 44. 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 } //---------------------------------------------------------------
  • 45. 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)
  • 47. PWM PWM é 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).
  • 48. 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.
  • 49. Exemplo de sinais PWM com vários ciclos ativos diferentes
  • 50. 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:
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. 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.
  • 55. 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 dooscilador principal de 4MHz e o fator de Prescaler do TMR2 de 1:1 ?
  • 57. 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.
  • 58. 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 simplificado do PWM do PIC. Os bits <Q1:Q0> pertencem ou ao oscilador principal ou ao Prescaler e não podem ser escritos pelo usuário.
  • 59. 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
  • 60. 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.
  • 61. 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.
  • 62. 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.
  • 63. 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 quaisexclusivamente dos bits de controle CCPR1L : CCP1CON<5:4>, nos quais cada unidade equivale a 1x Tp
  • 64. 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
  • 65. 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 ?”
  • 66. Máxima Resolução (em bits) do PWM Obs: Se o valor do ciclo ativo do PWM é mais longo do que o período do PWM, o pino CCP1 não será zerado.
  • 67. 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.
  • 68. 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 )
  • 69. 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ção em bits do PWM e consequentemente, o número de passos que podem ser obtidos.
  • 72. 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
  • 73. Exemplo 5: Gerando PWM em Assembly movlw B'01100011' ; periodo = 0.0001 seconds movwf PR2 bcf STATUS,RP0 movlw B'00110010' ; ajusta o ciclo ativo para 50% ou 0.00005 seconds movwf CCPR1L bcf CCP1CON,5 bcf CCP1CON,4 bsf STATUS,RP0 bcf TRISC,2 ; pino RC2 do PORTC é saidabcf TRISC,2 ; pino RC2 do PORTC é saida bcf STATUS,RP0 movlw B'00000100' movwf T2CON ; prescaler =1 , timer2 é ligado bsf CCP1CON,3 ; configura o modulo CCP1 para funcionar como PWM bsf CCP1CON,2 loop: goto loop
  • 74. 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 khz setup_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); } }
  • 75. Avaliação 2 1) Considere um microcontrolador PIC16F876 com oscilador de clock a cristal de 20 MHz. A frequência desejada 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.