FAÇA UM CONTROLE REMOTO PWM 8 CANAIS (1MS A 2MS) – COM PIC 16F628A (REF110)

Seria possível contruir um controle remoto PWM de 8 canais e com 5 botões on/off (modo Pulso) com um PIC 16f628a? Veja esta proposta didática testada…

Muitos hobistas gostam de usar o conhecimento de programação de microcontroladores para controlar dispositivos a distância, como por exemplo, carrinhos de controle remoto. Logicamente, com os servos apropriados ao trabalho, muita coisa pode ser feita. Alguns usam também para controlar antenas de PX/PY (rotação da antena), ajuste de posicionamento de parabólicas para sintonizar satélites diferentes ( de forma pré-programada), acionamento de câmeras de vigilância a distância,etc.
A proposta aqui apresentada, se baseia no controle de servos pelo padrão PWM, em que um pulso de 1ms corresponde a posição inicial do servo (veja figura 3a). Se for colocado 1,5 ms de pulso, o servo se deslocará para a posição central (veja figura 3b) e com 2ms irá para o extremo oposto (veja figura 3c). Valores intermediários irão resultar em posições proporcionais.

Veja o esquema abaixo do transmissor:

Se resume em um módulo comercial de transmissão, cuja frequencia deverá ser escolhida para a aplicação desejada (27mhz, 49mhz, 72mhz, etc). Para meus testes, usei um tx de 433mhz do tipo parecido com controle remoto de portão. Foi escolhido um cristal de 20 mhz para diminuir o tempo de cada instrução a 200 nanosegundos. No portA recebe os 5 interruptores em modo on/off e o portB, os niveis de controle proporcionais.

Como obtemos os valores da posição do potenciometros, visto que o PIC16F628A não dispões de conversor Analógico/Digital? Pelo tempo que demora a descarga de um capacitor. Observe estes passos:

1) Carregar os capacitores por um tempo suficiente, tornando o portB como saída em nivel ‘1’ em todos os bits.
2) Após a carga, tornamos o portB como entrada em todos os seus bits e testamos em sequência, cada pino.
3) Depois de testar os 8 bits, incrementamos o contador ‘valor’ e voltamos a testar todos os 8 bits em loop, por 256 vezes.
4) Se na ocasião do teste, encontramos nivel ‘0’ no pino testado, carregamos o conteudo de ‘valor’ no registrador de transferência do referido pino, e setamos um flag que impede a captura deste valor novamente. Lembre que o potenciometro está em paralelo com o capacitor e quanto menor o valor regulado, mais rápido ocorrerá a descarga deste.
5) Finalizando as 256 verificações, a rotina vai transmitir os valores capturados para o receptor.

Por testes realizados, chegou-se ao valor do capacitor por volta de 22 nF e 100k para o potenciometro (linear). Outros valores de potenciometros podem ser usados, mas tem que ser acertado o valor do capacitor para corresponder a constante de tempo necessária (ex. potenciometro de 47k e capacitor de 47nF ou potenciometro de 4k7 e capacitor de 470nF).

Abaixo vemos as formas de onda no controle de servos por PWM (1ms a 2ms):

Abaixo vemos as formas de onda para obtenção do valor da posição dos potenciometros:

Que dizer do receptor?
Veja o esquema abaixo:

Também mostra ser bem simples, utilizando outro PIC16F628A, com um cristal de 4mhz, sendo as saídas para os servos no portB e as saídas de botão on/off no portA. Os resistores nas saídas foram colocados para proteção ao manusear, mas podem ser omitidos. O receptor tem que ser na mesma frequencia do transmissor. No teste, usei um receptor de 433mhz (comercial), mas, em uso, deverá ser usada as faixas legais permitidas para isto (consulte a legislação do seu país, quanto a potências e frequencias, bem como de licensas de uso).
Em uma recepção completa são recebidos 11 bytes na sequência: byte de conferência (valida a transmissão), byte dos botões, byte pwm canal 7,byte do canal 6, byte do canal 5, byte do canal 4, byte do canal 3, byte do canal 2, byte do canal 1 e byte do serial number (sempre recebe o bit LSB de cada byte primeiro). Somando-se todos os bytes de dados tem que ter o mesmo valor do byte de conferência. Isto assegura a qualidade da transmissão. Quando ocorre um interrupção de sinal, o receptor mantém os valores anteriores nas saidas (tanto proporcionais como botões).
As saídas são acionadas sequencialmente, usando o periodo de delay da rotina de recepção para fazer o ‘refresh’, chamando a rotina ‘multi_saida’.
O protocolo de transmissão é o adotado nos receptores de HT6p20B, por já estar disponivel com mais facilidade nos projetos deste blog.

Atenção: É importante separar a alimentação do PIC e também do receptor 433 mhz da alimentação dos servos controles. Estes, ao acionarem, geram picos de corrente que podem ‘resetar’ o PIC, ou mesmo, atrapalhar a recepção do sinal momentaneamente.

Obs. Esta montagem foi montada e testada em placa de protoboard apenas, sujeito a bugs ainda não identificados. Esta sendo fornecido o arquivo ASM e HEX que poderão ser alterados segundo as necessidades do hobista. A versão 1 para o receptor, apresentava vibrações e mau funcionamento. Foi substituida pela versão 2, que usa os timers 0 e 1, em modo de interrupção, para gerar os sinais de 1 a 2 mseg nas saídas, com mais precisão e estabilidade. O código para o TX continua o mesmo.

Segue o arquivo ASM do TX:

TX_PWM8C_5B_ASM

Segue o arquivo HEX do TX:

TX_PWM8C_5B_HEX

Segue o novo arquivo ASM do RX (versão 2 com uso de interrupção do timer0 e 1, mais estável e preciso):

RX_CR_8C_5B_V2_ASM

Segue o novo arquivo HEX do RX(versão 2 com uso de interrupção do timer0 e 1, mais estável e preciso):

RX_CR_8C_5B_V2_HEX

Adicionalmente, segue pasta com versão que usa infravermelho como meio de transmissão, logicamente mais limitado ao foco do feixe de luz do emissor, mas que em certas aplicações pode ser útil. O software foi mantido o mesmo tanto no TX como no RX. Apenas foi incluído um ci 555 para obter a portadora de 38khz para o TSOP1738, isto no transmissor. No receptor foi necessário inverter o sinal usando um transistor de uso geral NPN, no caso, um BC458.

RX_TX_8C_INFRA

Se você necessita de uma montagem compacta, com apenas 2 canais PWM e 3 canais on/off, veja este outro artigo ‘FAÇA UM PEQUENO CONTROLE REMOTO PWM DE 2 CANAIS (1MS A 2MS) – COM PIC 12F675’ , bem como o artigo adicional ‘FAÇA UM ‘VERSÁTIL’ CONTROLE REMOTO REMOTO – COM PIC12F675’.

Manuais:
Pic16f628a
Servo-motor
Outros esquemas curiosos

Curiosidades:
Será que toda vida tem um ancestral em comum?
Alguns mitos a respeito da morte examinados mais de perto
Quem projetou primeiro? -Asas da gaivota
O passado e o presente dos brinquedos
Como estimular o desejo de aprender
O abuso do álcool e a saúde
Projetado com a capacidade de aprender sempre
O amor de Deus expresso no amor de uma mãe
Sono: supérfluo ou necessário?
Os custos das minas terrestres
Um universo cheio de surpresas
O som da neve
O que estamos fazendo com nosso alimento?
Mestres medievais da astonomia

Outros assuntos:
Como ser feliz no casamento?
Como se sair bem na escola — seja organizado
Como conversar com seu filho sobre sexting
Aprenda a perdoar
Como criar filhos responsáveis
Como administrar o seu dinheiro
Ensine valores morais a seus filhos
Ensine seus filhos bons principios com atividades de colorir
Como posso ter ânimo para exercitar
Como posso controlar meu peso?
Entrevista com um bioquímico
Adolescentes- O que fazer se estou sofrendo bullying?
Como evitar ferir com palavras?
Como tratar seu cônjuge com respeito?
Perguntas bíblicas respondidas

Até o próximo artigo!!!

70 comments on “FAÇA UM CONTROLE REMOTO PWM 8 CANAIS (1MS A 2MS) – COM PIC 16F628A (REF110)

  1. Bom dia Lário. Seu projeto é muito interessante. Parabéns pela sua competência. Gostaria de saber se, ao invés de utilizar um único controle remoto de 8 botões, utilizando o PIC16F628A, poderia utilizar controles padrões de portões de garagem compatível com o módulo receptor para cada canal? Um abraço e fica com Deus.

    1. Olá Xuguinho!
      Agradeço seu comentário e seus elogios. Para fazer o que deseja não será possível com esta montagem. Ela usa um valor fixo de serial number. Para poder usar vários controles comerciais teria que ‘aprender’ oito diferentes ‘seriais number’ para depois poder usar suas transmissões para controlar cada canal PWM. Não é impossível fazer, mas seria um novo projeto. Deste projeto ficaria somente o conceito da saída em PWM ao invés de on/off dos receptores tradicionais. Poderia compartilhar qual seria o uso fazendo desta forma?
      Cláudio

  2. Bom dia Lário. Seu projeto é muito interessante. Parabéns pela sua competência. Gostaria de saber ao invés de utilizar um único controle remoto com o PIC16F628Ase esse projeto funciona com controles padrões de portões de garagem compatível

  3. Olá Lário, Primeiramente gostaria de agradecer a sua dedicação em manter o website e o respeito pelos hobistas. Gostaria de saber Lário se é possível com este esquema que disponibilizou aqui transmitir dados para serem apresentados em um LCD 16×2.
    Tenho a seguinte situação. Possuo um medidor de temperatura que fica a distância. Mas gostaria que essa informação fosse me apresentada a uma distancia de 50m. Sabendo a sua temperatura gostaria de tomar uma ação, como abrir e fechar um registro, ou seja ter a função de emissor e recepitor a distância mas apresentar os dados em um display LCD.
    Estive pensando precisarei de 4 pic´s, dois para receber e dois para transmitir, não? Essas transferencias não causarão interferência uma a outra? A solução seria utilizar um em 433 e outro 315 ou você possui outra solução?
    Desde já agradeço. Caso possa entrar em contato comigo meu face é SAMIR EL HALABI de Umauarama, Curitiba. Email: sa.mir.xd@hotmail.com.

    Atenciosamente,

    Samir.

    1. Olá Samir!
      Obrigado por seu comentário apreciativo. Antes de dar algum ‘palpite’ ( pois é apenas o que posso dar com ‘hobista’ em microcontroladores ), que tipo de válvulas irá fechar/abrir? São operadas com simples on/off (tipo eletrovávulas)? Ou são válvulas proporcionais que realmente necessitam de sinal PWM para controle?
      Dependendo de quantos itens você precisa controlar, acredito que seria melhor criar um protocolo baseado em uma transmissão serial ( 8 bits, 4800 bauds , por ex.) onde você poderia transmitir um byte de endereço ( ou 2 , se for muitíssimos comandos) que corresponde ao atuador/dispositivo, e enviar em seguida, mais um byte com o valor de atuação(0 a 255 se for PWM ou 0/1 se for on/off). Também, um outro byte para comando e mais um de detenção de erro de transmissão. A ideia de usar canais com frequências diferentes é muito boa, evitando problemas, no caso de usar 4 pic’s. Mas poderia usar apenas 2 pic’s, e a mesma frequência, desde que bole no protocolo um comando do tipo ‘cambio’ autorizando o outro a transmitir. O pic que transmite inibiria a sua recepção. O que autoriza a transmissão apenas aguarda receber os dados e o comando de ‘cambio’ para enviar. Terá que fazer um estudo do que possa ser melhor, levando em conta a segurança de operação, e em caso de falha na comunicação, como será a atuação em ‘modo de segurança’.
      Quanto a distancia de 50 metros, poderá ou não funcionar. Locais com muita interferência de maquinas industriais tendem a reduzir a distancia de funcionamento destes pequenos transmissores de 433mhz.
      Seria bom testar primeiro se eles irão dar conta do recado antes de começar a desenvolver o projeto.
      A outros fatores a serem estudados, como por exemplo, a aquisição de dados tanto para comandar ( interruptores/teclados/PC) como para retornar a informação da atuação (microchaves/sensores de pressão/etc).
      Creio que terá muitíssima ‘diversão’ neste seu projeto.
      Cláudio

  4. lario boa tarde? gostaria de lhe pedir uma informação
    visto que voce está sempre disponivel,como eu ja comentei a rspeito deste projeto e que por sinal funciona muito bem tanto as chaves on/off como todos os servos. agora é o seguinte eu gostaria de obter uma saida pwm de 0 a 5 volts,ao invés de 8 servos usarei apenas 7 a pergunta é preciso alterar apenas o codigo fonte do rx ou tx também?se possivel aguado resposta.

    1. Olá José! Você terá que alterar tanto o TX, como também o RX. Eles devem trabalhar de forma ‘casada’ para dar certo.
      Cláudio

  5. boa noite Claudio, montei o circuito poren nao funcionou com os servos, e as chaves on/off só funcionam quando esta precionado quando solta ela se apaga. nao estou conseguindo copilar o arquivo asm. estou gravando direto do arquivo hex, será que vc poderia me dar uma luz? 😥 😥

    1. Olá Ninis! Os botões são on/off em modo pulso, ou seja, apertou liga, soltou desliga. Quanto a compilar, verifique os erros gerados pelo compilador e tente corrigir as causas. Quanto a não funcionar, o que exatamente está acontecendo?
      Claudio

    2. Olá Ninis! Um detalhe importante: Os arquivos “ASM” estão em formato ‘.txt’. Abra eles no Mplab_Ide e salve eles com terminação ‘.asm’. Depois, deverá compilar normalmente.
      Ex. RX_CR_8C_5B_V2_ASM depois de salvo será RX_CR_8C_5B_V2.ASM (troque o ultimo ‘underline’ por um ‘ponto’). Se desejar, poderá também fazer esta mudança na hora que você baixa do site e o sistema pede aonde salvar e com que nome. Nesta ocasião, poderá fazer esta alteração citada (trocar o ‘underline’ pelo ‘ponto’). O site tem um sistema de proteção que não permite ‘subir’ arquivos com ‘.asm’ de forma direta, exceto em pasta zipada. Colocando em forma de texto permite uma rápida visualização do código, diferente de colocar em pasta zipada.
      Cláudio

      1. Bom amigo claudio, fiz como descrito e funcionou 100%, me respanda se é possiver mudar o modo das chaves on/off no arquivo asm? pra um toc ligar , um toc desliga..

        1. Olá Niiniis! O modo que você se refere é chamado de ‘retenção’. Sim, é possível mudar para este modo no ASM. Já foram publicados vários exemplos com o uso desta opção. Como foi fornecido o arquivo ASM desta montagem, você poderá estudar estes exemplos e mudar de acordo. Depois, é só recompilar no Mplab_ide e carregar no PIC o hex.
          Claudio

Comments are closed.

Back To Top