Navigator

Codificador de controle remoto com PIC12F675

Codificador de rc
 

Introdução

Considerando-se que há no mercado uma grande variedade de circuitos integrados de codificadores de controle remoto de baixo custo, posso dizer que este é um projeto para fins educacionais. No entanto, tenho também uma motivação prática para embarcar nele.

Há bastante tempo tenho um portão eletrônico instalado em minha residência precisava de uma unidade de controle que permanecesse fixa no interior da casa, de preferência próxima ao interfone. Além disso, a potência do transmissor deveria ser um pouco superior ao normal, pois minha casa fica a uns 40m do portão (não, eu não moro em uma fazenda).

Tendo um novo desafio pela frente, fui buscar na Internet por informações sobre o funcionamento de controles remotos e também de circuitos transmissores. Descobri que a maioria dos aparelhos domésticos opera em 433MHz e que o sinal é modulado em amplitude. Além disso, a codificação digital emprega modulação por largura de pulso (PWM) a uma freqüência de 2KHz.

A informação digital transmitida é basicamente uma seqüência de 24 bits, sendo parte deles interpretada como endereço e parte como dados, dependendo das características do receptor.

A foto acima é o resultado final. Em uma placa de circuito impresso padrão montei o circuito descrito neste artigo e também reguladores de tensão para 5 e 12V. A bobina na parte central da placa faz parte de um filtro Pi contra interferências. O componente verde que aparece montado em pé na parte inferior esquerda é o módulo transmissor de 433MHz. A Figura 2 mostra um close desse componente híbrido e de baixo custo facilmente encontrado no mercado do ramo.

O circuito ficou pequeno o bastante para caber juntamente com uma antena de 17cm (1/4 de onda) e um transformador de 12V dentro da base de um aparelho interfone HDL.

Antecipando o óbvio, quero explicar por que não utilizei o botão presente no HDL exatamente para essa finalidade: tenho uma antena de 40m de extensão e ala capta toda sorte de interferências. Quando fiz testes usando o botão do interfone para acionar o portão eletrônico eu frequentemente via meu portão andando sozinho!

O circuito que apresento aqui tem relativa imunidade contra ruídos pois o botão tem que permanecer pressionado por algum tempo (configurável) antes que o transmissor seja acionado. Em testes, isso novamente se mostrou indispensável.

Teoria de operação

O diagrama da Figura 3 mostra os blocos que compõe este projeto. Na entrada à esquerda uma informação digital é fornecida ao codificador. Este, por sua vez, transforma essa informação em um sinal PWM que é alimentado ao módulo transmissor para emissão na forma de rádio-freqüência.

A informação digital é apresentada ao codificador sempre que um botão for pressionado e de forma continuada enquanto o botão não for liberado.

O módulo transmissor recebe o sinal do codificador e modifica a amplitude do sinal transmitido de acordo com o nível de tensão aplicada. Para a modulação PWM apenas dois niveis de sinal são empregados: nivel alto, correspondente a máxima amplitude e nivel baixo correspondente a amplitude mínima possível. A largura de banda do transmissor empregado permite uma taxa de transmissão da ordem de 8Kbps, mas apenas cerca de 600bps estão sendo utilizados.

Na Figura 4, o primeiro sinal representa o relógio do codificador, ajustado para 2KHz neste projeto. Este sinal não é realmente transmitido mas serve apenas como referência para realizar a codificação.

O segundo sinal na figura acima representa o sinal codificado. Durante os primeiros 23 ciclos o sinal é mantido em nível lógico zero. Logo após, o sinal reverte ao nível lógico alto por um ciclo. Este período é chamado de piloto e se destina a permitir ao receptor entrar em sincronismo com o transmissor.

Logo após o piloto, normalmente seguem-se os 24 bits da informação a ser transmitida. Neste projeto, e em muitos dispositivos de controle, essa informação é interpretada como o endereço do receptor. Desse modo o repector aceitará o comando apenas quando os dados recebidos forem idênticos a um endereço preestabelecido, simplesmente ignorando quaisquer outros endereços. É comum também interpretar os últimos 2, 4 ou 8 bits como dados. Nesse caso, os primeiros 22, 20, ou 16 bits são interpretados como endereçamento e os bits de dados correspondem a diferentes comandos destinados à uma mesma unidade.

Cada bit de dado é codificado na forma de um pulso onde os níveis empregados têm largura variável, conforme indicado na parte de baixo da figura acima. No entanto, convém notar que a largura total do pulso é exatamente igual a 3 ciclos do relógio.

Após esse trem de 72 pulsos, segue-se o anticódigo, representando a seqüência 0101. A recepção do anticódigo permite ao receptor verificar (fracamente) se todos os bits foram recebidos corretamente, e saber que já terminou a transmissão do pacote de dados.

Normalmente, o receptor irá ignorar os primeiros k pacotes recebidos, mas irá usá-los para certificar-se de que os dados recebidos estão corretos. Se os últimos k+1 pacotes recebidos forem idênticos, então o comando será aceito.

O circuito

O diagrama esquemático do codificador é apresentado na Figura 5. O coração do circuito é um PIC12F675, um microcontrolador de 8bits, dotado de 6 portas de E/S digitais (4 delas também configuráveis como entradas analógicas para o conversor A/D interno), 1K de memória de programa e 64 bytes de RAM.

Na sua porta GP5, configurada como entrada digital, conecta-se resistor pull-up R1 de 10K e a chave S1 do tipo push-button ligada à terra. Uma pressão nessa chave traz momentaneamente a entrada GP5 ao nível lógico zero. O software detecta essa transição e age de acordo com ela.

A porta GP4, configurada como saída, é conectada via resistor R4 de 1K à porta do transistor Q1. Este, por sua vez, tem seu dreno ligado ao pino GND do módulo transmissor e sua fonte ligada à terra. Desse modo, um nível alto na porta do transistor fará que este conduza, ligando a tensão do módulo transmissor. Desse modo, o transmissor permanecerá desligado enquanto não for necessário, economizando energia.

A porta GP2, assim como a porta GP4, é conectada ao transistor Q2 para fazer o acoplamento de tensão entre o codificador e o transmissor. Além disso, há uma inversão de níveis lógicos, pois um nível alto na porta do transistor fará com que a linha de dados do transmissor fique próxima ao terra, o que é interpretado como nível lógico zero. Um nível baixo na porta do transistor corta sua condução e seu dreno é levado próximo a 12V pelo resistor pull-up R3 de 4K7.

O resistor R2 de 10K é responsável por manter a linha Vpp/~MCLR a um nível lógico alto, já que um nível baixo nessa entrada provoca um reset do microcontrolador. A função reset não foi desabilidada por ser considerada benéfica neste circuito.

O capacitor C1 de 100nF tem função de desacoplamento para o microcontrolador e não deve ser omitido. Para melhor filtragem de ruídos, convém inserir também um indutor entre o VDD e a linha de 5V formando um filtro Pi. Alguns micro-H devem ser suficientes, mas dependendo da fonte de interferências, o valor desse indutor deve ser determinado mais criteriosamente.

O software

O software do codificador tem estrutura geral bastante simples e seu fluxograma esta detalhado na Figura 6.

Após inicializar e configurar corretamente os periféricos internos do PIC12F675, o software entra em um laço permanente.

Nesse laço, a primeira tarefa é monitorar a chave, detectando o momento em que é pressionado o botão. Caso não haja pressão, o laço prossegue e sua próxima tarefa é piscar o LED. A finalidade psicológica do LED piscante é apenas a de tranqüilizar o usuário, assegurando que o software continua rodando e o PIC não está travado. Isso é bastante desejável considerando-se a vulnerabilidade dos circuitos CMOS a ruídos.

Ao detectar a pressão da chave, a subrotina de transmissão é chamada. Por sua vez, a primeira tarefa dessa subrotina é a de monitorar a chave por algum tempo (alguns milissegundos). No momento em que é pressionada a chave, seus contatos literalmente batem um contra o outro e ocorre um rebote. Isso se repete durante alguns microssegundos provocando consecutivos eventos de liga-desliga. Além disso, ruídos na alimentação também podem provocar esse tipo de evento, mas normalmente são bem mais rápidos.

Tendo isso em vista, durante a fase de monitoramento, a subrotina simplesmente retorna caso a chave seja aberta. Assim, o único modo do transmissor ser ativado é a chave permanecer pressionada e promovendo um contato ininterrupto durante alguns milissegundos.

O próximo passo é carregar o buffer do codificador com a seqüência de 24 dígitos binários a ser transmitida. Com isso, o codificador realiza a codificação por largura de pulso e envia o resultado ao transmissor. Entre cada etapa, uma subrotina de atraso é chamada para garantir a correta temporização. Convém notar a presença do transistor inversor entre o codificador e o transmissor. Por causa disso, o software apresenta os níveis alto e baixo trocados ao acionar a linha chamada tx.

Finalmente, essa subrotina entra em laço e volta a carregar o buffer se a chave ainda estiver pressionada. Assim o código será continuamente transmitido até que a chave seja liberada.

Seguem abaixo o código fonte e também o arquivo binário compilado para este software:

Referências

  • ASK - Modulação por deslocamento de amplitude
  • Consumer IR - Artigo na wikipédia descrevendo protocolos de codificação comumente usados em controles remotos sem fio (especialmente por infravermelho).

Fig. 1 - Circuito concluído - Ampliar figura (58Kb)

Fig. 2 - Transmissor RF - Ampliar figura (54Kb)

Fig. 3 - Diagrama de blocos - Ampliar figura (3Kb)

Fig. 4 - Codificação - Ampliar figura (30Kb)

Fig. 5 - Diagrama esquemático - Ampliar figura (22Kb)

Fig. 6 - Fluxograma - Ampliar figura (27Kb)


Updated on  Mon Jul 15 13:27:35 2013
Copyright © 1997-2012, Waldeck Schutzer
http://twitter.com/ityessal http://twitter.com/liminft