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:
Segue o arquivo HEX do TX:
Segue o novo arquivo ASM do RX (versão 2 com uso de interrupção do timer0 e 1, mais estável e preciso):
Segue o novo arquivo HEX do RX(versão 2 com uso de interrupção do timer0 e 1, mais estável e preciso):
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.
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!!!
boom dia lario: no caso de acrescentar o resistor de 47o como pullup seria no tx ou rx? o projeto vai continuar tendo 5 chaves onoff? pois todas as entrandas onoff estao em pullup para terra.e quanto as saidas dos servos no rx fica trepidando e nao obedece os comandos.ficarei no aguardo qualquer mudança a ser feita me fale que modificarei.grato
Olá Luiz! Desculpe. Esqueci de mencionar que é no receptor que você terá de colocar o pull up de 470 ohms, no pino 3. Quanto a parte do pwm, terei que montar o circuito e iniciar testes para conferir a situação. Assim que tiver um resultado positivo, você será comunicado.
Obrigado
Cláudio
lario montei este tambem, das 5 chaves onoff 4 funciona normalmente a chave da porta 3 nao funcionou
gravei 4 pic o resultado sempre o mesmo, e quanto as saidas dos servos nao funcionou,fica trepidando o servo o tempo todo,alguma sugestao?
Olá Luiz!
Agradeço o retorno. Quanto a saída do pino 3, você deverá colocar um resistor de pull up de 470 ohms (ou seja, coloque um resistor de 470 ohms do +5v ao pino 3). Esta saída é ‘open colector’ e não fornece corrente, necessitando de um resistor ao VCC. Foi esquecido de colocar no esquema. Você disse que fica ‘trepidando’, mas consegue realizar algum movimento no servo?
Claudio
Claudio olá novamente ainda nw montei este projeto mas sem duvida vai funcionar agora fika ai uma dica eu montei este controle remoto proporcional deste site http://optotech.net.br/fzanoto/controle_remoto.htm e funciona muito bem mesmo tanto que tenho ele em um automodelo meu a mais de um ano porem no caso do outro site se eu montar dois pares um vai interferir no outro afinal de contas o codigo enviado é o mesmo nw tendo nenhum meio de escrever codigo para cada par casar somente com um modelo como no caso do seu outro modelo de controle remoto com pic 16f628 onde mudando o fonte posso ter centenas deles funcionando com um codigo diferente .Vou montar o seu ainda hoje agora uma duvida pode ser usado potenciometros de 5k que por padrao costuma ser o modelo usado nos controles remoto profissionais (Futaba)e o seu receptor é compativel com servos futaba desde ja um abraço e vc esta de parabens por mais este projeto .obrigado Edmilson
Olá Edilson! Obrigado por seu comentário. A vantagem de ter um ‘serial number’ é que outro transmissor operando com o mesmo protocolo não vai acionar o seu controle remoto. No entanto, se vários estiverem próximos e sendo na mesma frequência, inevitavelmente irá gerar mau funcionamento. Sempre é de boa regra, usar frequências em canais diferentes, quando usar mais de um e próximos, para evitar este inconveniente. Quanto aos potenciometros, você poderá usar de 5k, mas terá que mudar o capacitor agregado de 22 nF para 2 X 220nF = 440nf (use a regra de ‘três’ da matemática), para manter a constante de tempo igual. Poderá, depois , fazer um ajuste fino por colocar em paralelo valores como 10 nF ou superior , e se necessário , fazer o contrário, por reduzir de 440 para 380 nF.
Claudio
lario obrigado por ter colocado disponivel este fantastico projeto cuntrile pwm.
posso testar pic a pic sem os radio? ate eu adquirir os radios. lhe agradeço muito se me responder.
Olá José! Obrigado por seu comentário. Sim, você poderá testar pic a pic, ligando o pino de saída do tx para o pino de entrado do rx. Não tive a oportunidade de testar com um servo real. Portanto, poderia me dar um retorno?
Cláudio
boa tarde claudio . primeiramente obrigado pelo circuito . montarei com pelo menos 2 servos que tenho em casa e retornarei para dar resposta amanhã ou no máximo segunda . um abraço .
Olá Michel! Obrigado pela colaboração. Ficarei no aguardo.
Claudio
olá claudio , montei os circuitos mas infelizmente não consegui terminar pois não encontrei o cristal de 20 MHz , procurei em sucadas aqui e nada . vou ver se acho na loja hoje perto de casa . segunda de retorno .