Aula 4 conversor ad e pwm

1.337 visualizações

Publicada em

Trata-se de um conjunto de 72 slides de uma aula de 4 horas de duração na pós-graduação da Unisal_Campinas, sobre o Tema Conversor A/D e PWM dos microcontroladores PIC16F87x.

Publicada em: Engenharia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.337
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
60
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula 4 conversor ad e pwm

  1. 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. 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. 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. 4. Conversor AD de 3 bits Exemplo: Um hipotético AD de 3-bit de resolução
  5. 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. 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. 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. 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. 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. 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. 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. 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. 13. ADCON1 no PIC16F876 / 877 Os microcontroladores PIC16F87x (objeto deste curso) tem um registrador ADCON1 um pouco diferente do mostrado anteriormente
  14. 14. Bits PCFGx PCFG3 a PCFG0: A/D Port Configuration Control bits
  15. 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. 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. 17. 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.
  18. 18. 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
  19. 19. 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)
  20. 20. 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.
  21. 21. Valores mínimo e máximo da Tensão de referência Vref
  22. 22. 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 )
  23. 23. 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 ?
  24. 24. 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.
  25. 25. O tempo total que uma amostragem demora é... Tempo Total = Tempo Aquisição + Tempo de Conversão
  26. 26. O tempo total que demora uma conversão é...
  27. 27. 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).
  28. 28. 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 ?
  29. 29. Configuração dos bits ADCS01 e ADCS02
  30. 30. 11 ciclos da Conversão do AD
  31. 31. 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
  32. 32. 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
  33. 33. 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
  34. 34. Exemplo 1- Testando o Conversor AD em Assembly Rode o Exemplo 1: Teste_ADC_Assembly
  35. 35. 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
  36. 36. 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);
  37. 37. Exemplo 2 – Conversor AD em Linguagem C while(true){ resultado = read_adc( ); output_D (resultado); delay_us(20);delay_us(20); }//while(true) }//main
  38. 38. Exemplo 2: Conversor AD em C Abra e execute o Exemplo 2: Conversor AD em linguagem C – compilador CCS
  39. 39. Exemplo 3 – Conversor AD e interrupções • Neste exemplo, ilustraremos o uso do Conversor AD usando-se interrupção, em Linguagem Assembly.
  40. 40. 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 ;----------------------------------------------------------
  41. 41. 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 ) ;----------------------------------------------------------------------------------
  42. 42. 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);
  43. 43. 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 } //---------------------------------------------------------------
  44. 44. 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)
  45. 45. PWM MODULAÇÃO POR LARGURA DE PULSOS
  46. 46. 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).
  47. 47. 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.
  48. 48. Exemplo de sinais PWM com vários ciclos ativos diferentes
  49. 49. 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:
  50. 50. 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
  51. 51. 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
  52. 52. 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
  53. 53. 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.
  54. 54. 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 ?
  55. 55. Solução PR2=63PR2=63
  56. 56. 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.
  57. 57. 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.
  58. 58. 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
  59. 59. 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.
  60. 60. 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.
  61. 61. 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.
  62. 62. 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
  63. 63. 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
  64. 64. 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 ?”
  65. 65. 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.
  66. 66. 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.
  67. 67. 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 )
  68. 68. 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.
  69. 69. Registrador CCP1CON
  70. 70. PROGRAMAS-EXEMPLOS: PWMPROGRAMAS-EXEMPLOS: PWM
  71. 71. 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
  72. 72. 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
  73. 73. 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); } }
  74. 74. 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.

×