Você está na página 1de 7

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

Lgica Ladder para microcontroladores PIC and AVR


(translated from the English original; thanks to Daniel Corteletti) Resumo: Escrevi um compilador que permite gerar cdigo nativo para microcontroladores PIC16 e AVR a partir de um diagrama ladder. Suas caractersticas so: Entradas e sadas digitais Temporizadores (TON, TOF, RTO) Contadores (CTU, CTD, 'contadores circulares' para usar como sequenciadores) Entradas analgicas e sadas (PWM) analgicas Variveis inteiras e instrues aritmticas Comunicao serial facilitada para conexo a PCs, LCDs e outros dispositivos Registradores de deslocamento, tabelas "look-up" Variveis em EEPROM (que mantm os dados quando falta energia eltrica) Simulador, para testar seu programa antes de gerar o cdigo PIC ou AVR. Este programa livre. O cdigo fonte e executveis esto disponveis para download.

Introduo
PLCs (Circuitos Lgicos Programveis) so geralmente programados em lgica ladder. Isso porqu os PLCs originalmente substituram sistemas de controle baseados em lgica de rels, e quarenta anos depois, ainda permanecemos utilizando esta linguagem. Um PLC, assim como um microprocessador, executa uma lista de instrues em seqncia. Ferramentas ladder deixam isso transparente; voc pode programar o PLC ligando os contatos de rels e bobinas na tela, e o interpretador PLC ir simular o circuito que voc desenhou. Alguns contatos de rels podem ser ligados a sinais de entrada reais; Algumas das bobinas podem ser ligadas a sadas. Desta forma, voc pode fazer a simulao de seu circuito e interagir com outros dispositivos, e at controlar coisas. Este o objetivo. Na verdade ele mais amplo do que isso, porque voc pode incorporar temporizadores e contadores e operaes aritmticas que no poderiam ser (facilmente) executados somente com rels convencionais. O projeto do circuito ainda til no s porque ele intuitivo, mas tambm porque abstrai facilmente a concorrncia. Isso funciona assim:
|| Xa Xb Yout || 1 ||-------] [------+-------] [------+-------( )-------|| || | | || || | Xc | || || +-------]/[------+ ||

Isto um simples trecho de uma lgica de combinaes. Existem os termos de entrada , Xa, Xb e Xc. Existem termos de sada: Yout. A expresso Yout := Xa e (Xb ou (no Xc)). Isso faz mais sentido se voc pensar em Xa e Xb como rels de contato NA (normalmente aberto), Xc como um rel de contato NF (normalmente fechado) e Yout como uma bobina de um rel ou contactora. Claro que podemos encontrar circuitos mais complexos, como o que segue:
|| || || Asetpoint || 1 ||-------------------------------------{READ ADC}----|| || || || Atemperature || ||-------------------------------------{READ ADC}----|| || || || || || ||

1 de 7

26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

|| || || {SUB min_temp :=} || ||------------------------{ Asetpoint - 20 }--------|| || || || {ADD max_temp :=} || ||------------------------{ Asetpoint + 20 }--------|| || || || || || || || || ||[Atemperature >] Yheater || ||[ max_temp ]+------------------------(R)-------|| || | || || Xenable | || ||-------]/[------+ || || || ||[Atemperature <] Xenable Yheater || ||[ min_temp ]--------] [--------------(S)-------|| || || || || || || || || || {SUB check_temp :=} || ||-----------------------{ Asetpoint - 30 }-------|| || || || || || || || || ||[Atemperature >] Yis_hot || ||[ check_temp ]-------------------------( )-------|| || || || || || || ||------[END]----------------------------------------|| || || || ||

Trata-se de um simples termostato. H duas entradas analgicas; uma delas para o set point, para que seja possvel, por exemplo, ligar um potencimetro para o usurio definir a temperatura desejada. A outra usada para medies de temperatura, conectado a um sensor de temperatura baseado em semicondutores, ou um termopar com interface apropriada. Existe uma sada digital, Yheater. Isso pode ser usado para controlar um elemento de aquecimento, atravs de um comutador apropriado (um TRIAC, ou um rel, ou um rel de estado slido, ou seja o que for). O ciclo foi fechado com uma simples histerese. Nos definimos mais ou menos 20 unidades do ADC para histerese. Isso significa que quando a temperatura cai abaixo (setpoint - 20), ser ligado o aquecimento. e quando isso ultrapassar (setpoint + 20), o aquecimento ser desligado. Eu ainda acresci algumas coisinhas. Primeiramente, h uma entrada de ativao: o aquecedor forado a desligar quando Xenable est em nvel baixo. Eu tambm adicionei uma lmpada indicadora, Yis_hot, para indicar que a temperatura est na faixa pretendida. Isso feito de modo a comparar continuamente com o limite imposto (setpoint-20) de forma que a luz no fique piscando nos ciclos normais do termostato. Este um exemplo trivial, mas deve ficar claro que a linguagem bastante expressiva. Logica ladder no uma linguagem de propsito geral, mas uma linguagem "Turing-completa", aceita na industria, e, para uma classe limitada de problemas (orientados a controle), surpreendentemente conveniente.

Um compilador de lgica ladder para PIC16 e AVR


Acredita-se que os microcontroladores modernos de baixo custo (abaixo de US$ 3,00) passaram a ter o poder computacional de um PLC a partir de 1975. Eles passaram a processar mais MIPS para rodar uma

2 de 7

26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

lgica ladder relativamente complexa com um ciclo de vida de alguns milisegundos. Eu penso que PLCs normalmente tem uma espcie de programa do tipo "interpretador" ou "mquina virtual", mas se desejarmos realizar uma lgica simples em um processador sem muita memria ento um compilador pode ser uma idia melhor. Ento eu escrevi um compilador. Voc comea com um degrau (linha) vazio. Voc pode adicionar contatos (entrada) e bobinas (sadas) e estruturas mais complicadas para construir seus programas. Temporizadores (TON, TOF, RTO) tambm so suportados. As duraes mximas e mnimas dependem do ciclo de tempo do 'PLC', o qual configurvel; Os temporizadores podem contar deste milisegundos at dezenas de minutos. contadores e operaes aritmticas (adio, subtrao, multiplicao, diviso). Elementos de circuito podem ser adicionados em srie ou em paralelo com outros elementos existentes. E uma lista de entradas e sadas construda a partir do diagrama lgico traado. Voc tem rels internos (Rfoo), que usam posies de memria alocadas automaticamente, ou entradas (Xfoo) e sadas (Yfoo), para associar a pinos do microcontrolador. A seleo dos pinos disponveis depende do microcontrolador. Tentamos manter suporte para a maioria dos mais populares microcontroladores PICs e AVRs (veja abaixo). Voc pode editar o programa na forma grfica:

3 de 7

26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

Ento voc pode testar o programa simulando-o em tempo real. O programa aparecera na tela com os elementos ativados (ligados) representados por colchetes em uma cor mais intensa, o que torna fcil a depurao. O estado das variveis mostrado na parte de baixo da tela, na lista de entradas e sadas (I/O list).

4 de 7

26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

Depois do programa ter funcionado na simulao, voc pode associar pinos para as entradas e sadas, gerar o cdigo PIC ou AVR. A gerao do cdigo no difcil. Para o AVR, um bom alocador de registradores prover uma maior velocidade. Se voc quer ter uma otimizao de cdigo ainda mais apurada, poder aplicar algumas regras de reduo de algoritmos, e talvez reduo de estados tambm. Isso seria muito mais difcil. Mesmo ignorando isso, meu cdigo gerador para os AVRs muito pobre. O "back end" AVR ainda gera cdigo PIC... por exemplo, ele no tira vantagem do fato do AVR ter mais de um registrador. Muitos dos cdigos gerados ficam pouco otimizados. O "back end" para PIC melhor, e no muito grande. Mas nada disso importa muito se voc estiver tentando rodar algumas dezenas de degraus de uma lgica ladder
5 de 7 26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

com tempo de ciclo rpido. H suporte para conversor A/D, unidade PWM e UART nos microcontroladores utilizados. Isso significa que voc pode escrever lgica ladder que leia uma entrada analgica, e que possa enviar e receber caracteres pela serial (por exemplo, para um PC, se voc adicionar um MAX232, ou um display LCD de caracteres). Isso possvel mandando seqncia de caracteres atravs da serial, assim como o valor de variveis inteiras, como texto ASCII. E por ltimo, fora adicionado suporte a variveis em EEPROM; Voc pode indicar que uma varivel especfica ir ser salva automaticamente em uma rea de memria no voltil, que ser mantida ao se desconectar a energia.

Limitaes e iseno de responsabilidades


Naturalmente um microcontrolador com este software no pode fazer tudo que um PLC faz. Muitos PLCs oferecem mais caractersticas e blocos predefinidos que minha ferramenta. O Hardware de um PLC melhor tambm; usualmente as entradas e sadas so projetadas para suportar alteraes eltricas. Voc pode montar um PIC16F877 em uma protoboard por alguma dezena de dlares, mas voc pagar mais caro por um PLC com as mesmas capacidades. At agora, tenho recebido muito poucos relatos de erros, em comparao com o nmero de pessoas com perguntas e dvidas. Existe ainda uma grande possibilidade de defeitos, especialmente nos microcontroladores que no tenho fisicamente (e portanto, no podemos testar). Certamente, no use o LDmicro para alguma aplicao segura ou crtica, ou em algo que possa se torar caro se isso falhar. Com citado anteriormente, o cdigo gerado est longe do "otimo". Tambm, nem toda a memria RAM nos dispositivos PIC16 est disponvel para o programa na lgica ladder. Isso porque no implementei muito cdigo para suporte a paginao. Eu fiz, no entanto, suporte para a memria de paginao do programa, para permitir acesso a memria ROM nos PIC16 acima de 2k.

Download (instalao)
O programa testado sobre Windows XP. Relatos informais sugerem que ele pode trabalhar sobre windows 98, a sobre o Wine. O arquivo de download um arquivo .exe; no h outro arquivo requerido, e no h arquivo de instalao. Salve-o em algum lugar no seu computer, e execute-o. O manual est includo no arquivo .exe, mas voc pode realizar download separadamente se voc desejar. O compilador ir gerar arquivos no formato Intel IHEX. Muitos dos softwares programadores que eu tenho usam este formato. Naturalmente voc ir precisar de um programador para transferir o programa para a memria do microcontrolador. Para os AVRs, eu recomendo o tipo STK300, paralelo, como o Olimex. Para os PICs, eu recomendo o Microchip PICkit 2, como o disponvel nesta loja virtual. Agradecemos relatrios de erros. Os seguintes microcontroladores foram testados e so suportados: PIC16F877 PIC16F876 PIC16F628 ATmega64 ATmega128 Os microcontroladores abaixo so suportados, mas no foram testados; eles devem funcionar, mas no h garantia. Se voc testar, e isso funcionar adequadamente, entre em contato comunicando. Ns agradecemos. PIC16F88 PIC16F819 ATmega162

6 de 7

26/09/2011 12:34

Lgica Ladder para microcontroladores PIC and AVR

http://cq.cx/ladder-pt.html

ATmega32 ATmega16 ATmega8 O arquivo ladder tambm possvel se gerar cdigo C. Isso menos conveniente, mas voc pode usar isso em algum processador se voc possuir um compilador C. LDmicro pode gerar um cdigo interpretvel. Se estiver escrevendo um interpretador voc pode usa-lo para gerar o cdigo ladder para outro tipo de dispositivo. No h mita documentao sobre isso, mas eu constru um interpretador simples em linguagem C bastante portvel. As compilaes so disponveis em diversas lnguas: ldmicro.exe (English) ldmicro-de.exe (Deutsch; thanks to Heinz Ullrich Noell) ldmicro-fr.exe (Franais; thanks to Marcel Vaufleury) ldmicro-es.exe (Espaol; thanks to Jose Pascual) E o cdigo fonte, e vrios outros arquivos, tambm esto disponveis para download. Este programa pode ser distribudo sob os termos da GPL Version 3. ldmicro-rel1.7.zip (fonte, release 1.7) ldmicro.txt (manual) caractersticas / histrico de erros Exemplo: um semforo simples Exemplo: display de 7 segmentos Exemplo: hello, world;' enviado pela porta serial Verses antigas esto disponveis: ldmicro-rel1.6.zip (fonte, release 1.6) (boto direito para salvar qualquer um destes arquivos.) Por favor, relate qualquer defeito. Este um software livre, sem nenhum departamento responsvel pelo controle de qualidade. Eu mesmo no tenho o hardware para testar a maioria dos dispositivos. Um erro no informado no poder ser corrigido. Tenho um tutorial, no qual eu descrevo como gerar um simples diagrama ladder, simul-lo e ento gerar o arquivo IHEX e program-lo no PIC. Esta provavelmente a maneira mais fcil de comear a usar este software. Dezembro de 2007, Seattle.

7 de 7

26/09/2011 12:34