COMO GERAR TENSÕES DE 0 A 5 VOLTS USANDO MODULO PWM INTERNO DO PIC

0

Em algumas ocasiões, necessitamos controlar algum dispositivo com uma tensão variável. Quando queremos controlar usando um microcontrolador, podemos fazer uso do módulo CCP(Capture,Compare,Pwm) do PIC. Como podemos fazer isto?

Vamos supor que queiramos usar uma tensão de 0 a 5 volts, para controlar um circuito integrado de volume (TDA8199, por ex.). Poderiamos usar o circuito abaixo:

Nele notamos o uso do PIC 16F628a, um display de 7 seguimentos de anodo comum, e 3 botões, sendo um para UP (incrementar volume), o outro Down (decrementar o volume) e o Reset geral (opcional).
No pino 9, ficaria disponível a tensão PWM, após passar por um filtro RC (r5 e c1), pronta para uso na entrada de controle do ‘ci’.
Foi usado um único resistor no display por comodidade (mas poderia ser um individual para cada seguimento e o ânodo direto no +Vcc).

O módulo CCP (Capture,Compare,Pwm) é habilitado por definir valores corretos no registrador CCP1CON (colocando o valor ‘00001100’ entra em modo PWM). A frequência de operação é definida pela carga do registrador PR2 e o Duty Cicle (ou seja, o tempo que a saída PWM ficará em ‘1’) será carregado no registrador CCP1L (os 8 bits mais significativos e os 2 menos significativos em CCPCON, bits 4 e 5).
Em uso, definimos a frequência no programa e apenas mudamos a carga do registrador CCP1L.
A fórmula para o periodo do PWM é : (PR2 + 1) X 4 Tosc TMR2 X VALOR DO PRESCALE (Veja datasheet 16F628a, seção 9.3)
O módulo PWM faz uso do timer 2 (que deverá ser ligado pela rotina). Quando sua contagem se iguala com o valor do registrador PR2, sua contagem é zerada e o pino RB3 (saída Pwm) é setado (tempo ‘on’). Quando a contagem se iguala ao do registrador CCP1L( na realidade, CCP1H, que é uma cópia’ do CCP1L), então a saída RB3 é zerada. O timer continua contando até ser zerado (tempo ‘off’).
Quando apertamos ‘UP’ , este gerará um incremento no registrador ‘CONTL’ que incrementa de 0 a 3 e ao chegar em 4, é resetado , e também, nesta ocasião, irá incrementar o registrador ‘CONTH’. O registrador ‘CONTL’ irá dar o valor para os digitos menos significativos de comparação, presentes no registrador CCPCON, bits 4 e 5. Isto porque o módulo trabalha com 10 bits. Ao apertar ‘DOWN’ ocorrerá o decremento dos registradores ‘CONTL’ e ‘CONTH’. Estes são carregados no registrador ‘CCP1L’ e ‘CCPCON’ (2 bits) na sequência de programa. Para apresentação no display, o valor de ‘CONTH’ foi dividido por 25, gerando números de 0 a 9 (incluido o ‘H'(high) no máximo do valor). A conversão para 7 seguimentos é feita por uma tabela e ‘salto goto’.
Foi implementado uma função ‘rápida’ de ajuste, que opera após insistir em manter o botão apertado, quer para aumentar, quer para abaixar a tensão de saída. Faz uso do contador Z1 e o flag de controle ‘AJ_RAP’. Após uma certa quantidade de tempo de acionamento, a carga de ‘Z1’ chega a zero, setando o bit ‘AJ_RAP’. Quando a rotina entra em operação de ‘delay’, a carga do tempo será escolhida em função do flag ‘AJ_RAP’ (se setado = rápido, se zerado= normal). Esta rotina pode ser usada em outros modelos de PIC (que tenham módulo CCP, apenas), e a utilidade será proporcional a criatividade do usuário. Pode-se controlar lampadas, pequenos motores eletricos (com uso de transistor de potência na saída), brilho de backlight de displays, controlar um fonte de alimentação de bancada, controlar volume de som,etc. Use a sua imaginação e …. mãos a obra!!!

Segue o arquivo ASM:

PWM_0_5V_ASM

Segue o arquivo HEX:

PWM_0_5V_HEX

Datasheet para Pic 16F628a aqui.

ERRATA: Coloque um resistor de pull up de 10k ao vcc no pino 15 e outro no pino 18 (esquecido no esquema) ou acione o pull up interno do PIC.
Até o próximo artigo!!!

0

22 comments

  1. 0

    ❗ Olá claudio. eu estava pensando em uma forma de colocar este pwm no esquema que vc fez, NOVO RECEPTOR GENERICO COM PIC 16F628A ,para acionar a luz do lcd, ou seja, em repouso ficaria com 50% de luz para nao estragar o lcd com o passar do tempo, e quando recebece um tx ou for acionado qualquer tecla ficaria os 100% da luz do lcd, seria possivel??? 😐

      1. 0

        ❗ Olá Claudio, vc teria uma forma de gerar duas saidas de pwm por software. para ser usado em pic que não o tenha, estas saidas seria aumentado por botões, que no caso seria quatro, duas para cada saida, seria para usar na luz do display como comentei acima,obrigado ai pela atenção ok.

  2. 0

    eu imagino como é dificil ter tempo nem sei como vc consegue responder a muitos , mas tudo bem pro futuro , pois seja no seu tempo só foi uma sujestão ok , muito obrigado e vou fazer uma montagem ai te falo sobre o digito 8 , não precisa montar deixa comigo que te falo ok , abraço

  3. 0

    outra duvida , sobre comunicação i2c é possivel fazer uma sintonia de canal pelo i2c tipo um tuner de receptor de parabolica , um pic bem simples , um display de 2 digitos , mostrando o canal selecionado , sabendo que por exemplo a frequencia do canal da globo é de 1430 mhz , teria como colocar esta frequencia na memoria do pic e sintonizala no tuner atraves do i2c em que posso utilizar este tipo de comunicação pois ja vi aparelhos que usam componentes que são interligados atraves de apenas 2 fios e fazem muitas coisas , não vi nenhum projeto seu ainda usando i2c nem serial , até agora rrsrsr

  4. 0

    amigo e sobre o numero 8 que não aparece no display , seria no endereçamento dos seguementos ou no proteus mesmo mas acho dificil pois os outros numeros aparecem , outra sugestão um sequencial de vairos canais porem com ajuste de velocidade via potenciometro não sei se seria possivel ajustar o tempo de on e o tempo de off , me ajuda na parte do digito 8 , obrigado e otimo dia

    1. 0

      Olá Liliano! Tira uma dúvida? Você montou o circuito fisico no protoboard? Ou só rodou no Proteus? Eu sinceramente não percebi esta questão do n. 8 não aparecer. Terei que montar o circuito de novo no protoboard para analizar. Quanto a idéia de um sequencial, ou mesmo o uso de i2c, vai ficar para um futuro, pois não estou dispondo de muito tempo para me dedicar a projetos novos. Digamos que vai para o ‘caderninho de idéias’!
      Cláudio

  5. 0

    na parte dos sensores pode colocar 8 chaves tactil com terra ou 5 volts na entrada do pic( tanto faz ) , eu mesmo adaptarei a parte externa de acordo com as aplicações .

    no caso da paginação , seria interessante modificar no circuito mesmo, no caso poderia ter 2 botões de configurações , um botão com função de paginação automática ( definindo o tempo de parada em cada página no .asm )e não automática – e o outro botão com a função de passar a página uma de cada vez se estiver na opção não automática .

    o conteúdo escrito poderia ser alterado somente no .asm ( para o circuito não ficar muito complicado de mexer – e minimizando o arquivo .asm ).

    e a função de alarme iria ficar bem legal ( no caso de alertar algo errado nos equipamentos monitorados – não tinha pensado nisso , muito legal ) . poderia colocar essa função somente nos 2 últimos sensores ( no caso as 2 últimas chaves tactil ) .

    se quiser colocar outras funções , fique a vontade , rsrs .
    jé deu a idéia do alarme que gostei muito .

    um abraço .

    1. 0

      Olá Michael! Entendi a idéia. Mas no momento, não disponho de tempo para ‘bolar’ o programa e o hardware. Vai para o ‘caderninho’ de idéias, ok!
      Claudio

  6. 0

    a principio poderia colocar num carro e monitorar por exemplo portas abertas , motor em funcionamento , freio de mão ativado entre outros .

    poderia também monitorar luzes em um sítio , portão trancado ,sei lá muitas coisas .

    colocar juntos com seus receptores e monitorar quais saídas estão ativados .

    1. 0

      Olá Michael!
      E a questão dos níveis de tensão dos interruptores? Tem equipamentos que operam com 5 volts, outras com 12 v (carros) e ainda com 110,220,380 volts. Seria por fotoacoplador? rele? interruptores duplos? Simples resistor de queda com zener de proteção? Percebe que a dificuldade maior será na ‘interface’ com os equipamentos. Para cada equipamento deverá ter uma diferente ou tentar uma ‘universal’. Haverá um interruptor de paginação, ou a tela fica ‘rodando em loop’ entre as telas seguintes e voltando a inicial? O conteúdo escrito poderá ser alterado ou será função do arquivo asm? Haverá alguma função ‘alarme’?
      Claudio

  7. 0

    ola claudio fiz uma montagem no proteus mesmo do projeto testando a principio funcionou perfeitamente porem o digito 8 não aparece no dislay pulando logo para o 9 e acrecentei dois resistores de 10K nos botões ao +5v pois ficou alterando o pwm sozinho ai resolvel , e o pwm ficou muito bom alterou certinho porem tem que ficar pressionando o botão por muito tempo ,mas acho que isso na pratica não vai acontecer agora so falta montagem na pratica fiquei pensando em outros projetos seu em vc disponibiliza no asm opções de mudar o pic neste modelo teria com muda-lo para usar em um pic12f675 sem o display isso seria interessante logo sabendo que ao ouvir o som vc saberia o volume que iria querer , agora gostei muito da ideia de poder controlar um motor e fazer uma referencia de velocidade pelo display
    obrigado mais uma vez . e que Deus seja na sua vida e dos seus visitantes .

    1. 0

      Olá Liliano!
      Voce pode migrar para o 12f675 alterando os arquivos ‘include’ do 16f628a para 12f675. Terá que modificar o trisA e trisB para trisio e as portA e B para Gpio. Terá que desligar o conversor analógico/digital escrevendo 0x00 no registrador Ansel . Terá que alterar as definições de portas e excluir tudo relacionado com o display de 7 seguimentos.
      Claudio

  8. 0

    Parabéns novamente, pelo novo projecto.

    Obrigado pelas informações que sao sempre bem vindas.

    E que Deus continue ti abençoando.

  9. 0

    amigo não tenho nem palavra este aqui ja é o suficiente para o que eu quero mas bvai pensando no modo por rf que te falei , fico grato pelo seu projeto precisando de mim é so falar , vendo algumas coisas nomercado livre e tenho uma loja virtual caso queira uma parceria ou disponibilizar uma area de propagando me fala ok , abraço e obs tenho alguns projetos que posso estar disbonibilizando caso vc queira entre em contato ok

    1. 0

      Olá Liliano!
      Agradeço a sua disposição em ajudar, mas me contento com o seu comentário . Se tiver projetos que sejam utéis para outros colegas, serão bem recebidos.
      Cláudio

  10. 0

    olá claudio , aproveitando que você está usando display nos projetos , estava querendo monitorar 8 chaves ou sensores ( mostrando ON ou OFF )usando um display 2×16 com ” 4 páginas ” .

    por exemplo: botão1 em cima e botão2 embaixo e dos lados mostrando os estados ( ON ou OFF ) , ai aperta uma chave no circuito e passa para próxima página contendo botão3 em cima e botão4 embaixo e assim por diante . e com opção de ir trocando de página automaticamente .

    você pode fazer para mim ?? agradeço deste já .

    1. 0

      Olá michaelerdan, este esquema que vc necessita pode ser feito em uma tela só de display 16×2, sem ter a necessidade de ficar pulando entre as paginas, com a permissão ai do claudio.
      💡

      1. 0

        Olá Agnaldo! Obrigado pelo comentário. Fique a vontade para dar dicas e se desejar, enviar suas sugestões direto para o Michael ou por meio deste blog.
        Cláudio

Comments are closed.