Sei sulla pagina 1di 142

UNIVERSIDADE FEDERAL DE UBERLNDIA FACULDADE DE ENGENHARIA ELTRICA PS-GRADUAO EM ENGENHARIA ELTRICA

REL DIGITAL PARA PROTEO CONTRA SOBRECORRENTE E MONITORAMENTO DA OPERAAO DE MOTORES DE INDUO

LEONARDO COSTA DE PAULA

UBERLNDIA, JULHO DE 2005

UNIVERSIDADE FEDERAL DE UBERLNDIA FACULDADE DE ENGENHARIA ELTRICA PS-GRADUAO EM ENGENHARIA ELTRICA

REL DIGITAL PARA PROTEO CONTRA SOBRECORRENTE E MONITORAMENTO DA OPERAO DE MOTORES DE INDUO

Dissertao apresentada por Leonardo Costa de Paula Universidade Federal de Uberlndia para a obteno do ttulo de Mestre em Engenharia Eltrica aprovada sem restries em 15/07/2005 pela Banca Examinadora: Prof. Darizon Alves de Andrade, Phd (UFU) Orientador Prof. Edilberto Pereira Teixeira, Dr. (UNIUBE) Prof. Carlos Augusto Bissochi Jr., Dr. (UFU)

REL DIGITAL PARA PROTEO CONTRA SOBRECORRENTE E MONITORAMENTO DA OPERAO DE MOTORES DE INDUO

LEONARDO COSTA DE PAULA

Dissertao apresentada por Leonardo Costa de Paula Universidade Federal de Uberlndia como parte dos requisitos para obteno do ttulo de Mestre em Engenharia Eltrica.

______________________________ Prof. Darizon Alves de Andrade Phd. Eng. Eltrica Orientador

ii

DEDICATRIA

Dedico este trabalho aos meus pais e familiares pelos incentivos e por terem estado sempre ao meu lado, dedico ainda aos meus amigos pela ajuda e motivao. Dedico tambm ao meu orientador, Prof. Darizon, que tornou possvel a realizao deste sonho.

iii

AGRADECIMENTOS

Agradeo ao Prof. Darizon pela confiana, amizade, orientao e grande disposio diante das inmeras dificuldades que surgiram durante esta nossa caminhada. Agradeo aos meus pais por estarem sempre dispostos em me apoiar acreditando mais do que eu que este sonho seria possvel. Aos meus irmos e sobrinho por sempre me motivarem a concluir este trabalho e por acreditarem que este objetivo pessoal seria alcanado. Aos meus amigos e scios Charles e Wagner por me motivarem e ainda por me cobrirem durante as minhas ausncias, facilitando assim a concluso deste mestrado. Aos meus amigos Felipe, Luis Marcelo e Renato pela fora e pela pronta disposio em me ajudar em tudo que foi preciso. Aos meus colegas e amigos do laboratrio pelas ajudas e dicas que sempre facilitaram o desenrolar deste trabalho, por isto serei eternamente grato. Ao SENAI CFP-FAM e UFU pela parceria que facilitou a elaborao do prottipo aqui desenvolvido e principalmente ao Emerson que teve grande participao na confeco do prottipo final. Aos meus grandes amigos que colaboraram para a concluso deste trabalho direta ou indiretamente simplesmente por serem meus verdadeiros amigos.

iv

RESUMO

Este trabalho apresenta uma soluo para o monitoramento em tempo real das correntes de um motor de induo juntamente com proteo contra sobre correntes, com curva corrente x tempo programvel. A idia principal mostrar um equipamento baseado em tecnologia digital para proteo contra sobrecorrente para motores de induo capaz de substituir com vantagens os rels bimetlicos. A curva tpica de operao de qualquer rel bimetlico pode ser facilmente programada neste dispositivo inteligente inclusive em tempo real e com o motor em funcionamento. O equipamento incorpora uma interface para comunicao em rede que possibilita o acionamento remoto do motor via PC e ainda a monitorao das condies de carga. Com a reprogramao deste rel inteligente, facilmente um mesmo dispositivo pode ser utilizado para controlar motores de diferentes potncias ou carga nominal. Assim pode-se substituir o motor sem haver a necessidade de se substituir o sistema de proteo. O trabalho descreve ainda os detalhes do projeto do equipamento e apresenta resultados experimentais obtidos com um prottipo desenvolvido em laboratrio.

ABSTRACT
This work describes a micro controlled-based device for over current protection and online monitoring of induction motor operation, able to replace with some advantages the traditional over current thermal relays. It allows real time monitoring of induction machine currents and over current protection, with programmable current x time characteristic. The typical current x time thermal relay curve can be easily programmed in this device and both the curve and setting points of operation can be altered online with the motor in operation. The device has a network communication interface for remote control and operation monitoring in a remote PC. Due to the programmable characteristic, the hardware can be used for different ranges of motor sizes and rated powers. The work shows details of design and programming, and presents experimental results obtained with a prototype developed in laboratory.

vi

Sumrio
RESUMO .............................................................................................................................. v ABSTRACT ........................................................................................................................... vi Sumrio ............................................................................................................................... vii Lista de Figuras ..................................................................................................................... x Lista de Tabelas ................................................................................................................... xii Lista de Abreviaturas .......................................................................................................... xiii Captulo 1 - Introduo .......................................................................................................... 1 1.1 Motivaes ............................................................................................................. 1 1.2 Objetivos ................................................................................................................ 3 1.3 O Estado da Arte..................................................................................................... 4 1.4 Contribuies.......................................................................................................... 7 1.5 Disposio do trabalho ............................................................................................ 7 Captulo 2 - Mquinas Eltricas Trifsicas ........................................................................... 10 2.1 O motor de induo trifsico ................................................................................. 10 2.1.1 Aspectos construtivos................................................................................ 10 2.1.2 Campo magntico girante.......................................................................... 13 2.1.3 Princpio de funcionamento do motor de induo ...................................... 19 2.1.4 Partida do motor de induo...................................................................... 21 2.2 Corrente de partida e corrente nominal de um motor ............................................. 23 2.3 Mtodos de proteo contra sobrecarga ................................................................. 25 2.4 Proposta de soluo para o problema de sobrecarga .............................................. 27

vii

Captulo 3 - Microcontroladores........................................................................................... 29 3.1 Noes de eletrnica analgica ............................................................................. 29 3.1.1 Noes de circuitos com resistores ............................................................ 30 3.1.2 Noes de circuitos com diodos ................................................................ 31 3.1.3 Noes de circuitos com transistores ......................................................... 32 3.2 Noes sobre eletrnica digital.............................................................................. 33 3.2.1 Flip-Flop, estrutura de memria digital ..................................................... 33 3.2.2 Conversor analgico digital....................................................................... 35 3.3 Microcontroladores ............................................................................................... 40 3.3.1 Microcontrolador PIC16F876A................................................................. 41 Captulo 4 - Projeto do Equipamento (Hardware e Firmware) ............................................. 44 4.1 Modelagem por Diagrama de Blocos..................................................................... 44 4.1.1 Unidade central de processamento............................................................. 45 4.1.2 Mdulo de memria no voltil................................................................. 46 4.1.3 Entradas dos canais analgicos para o ADC .............................................. 47 4.1.4 Interface serial para comunicao com o PC.............................................. 48 4.1.5 Interface local de sada de dados (display)................................................. 50 4.1.6 Interface local de entrada de dados (teclado) ............................................. 51 4.1.7 Sadas TTL para os acionamentos ............................................................. 52 4.2 Hardware proposto ............................................................................................... 52 4.3 Firmware proposto................................................................................................ 56 4.3.1 O programa principal do firmware ............................................................ 57 4.3.2 Mdulo de controle do LCD (display) ....................................................... 61
viii

4.3.3 Mdulo de controle do teclado .................................................................. 63 4.3.4 Mdulo de controle do relgio .................................................................. 68 4.3.5 Mdulo de controle da comunicao serial ................................................ 68 4.3.6 Mdulo de controle do ADC ..................................................................... 70 4.4 Avaliao do prottipo montado............................................................................ 72 Captulo 5 - Desenvolvimento do Software .......................................................................... 74 5.1 Introduo ao software desenvolvido .................................................................... 74 5.2 A implementao do programa proposto ............................................................... 75 5.3 Funcionamento e caractersticas do programa de monitorao............................... 77 5.4 Avaliao e resultados do software........................................................................ 83 Captulo 6 - Resultados Prticos........................................................................................... 85 6.1 Tempo de partida .................................................................................................. 85 6.2 Funcionamento normal.......................................................................................... 87 6.3 Proteo contra sobre corrente............................................................................... 88 6.4 Configurao do ADC........................................................................................... 90 6.5 Curva de resposta do rel inteligente ..................................................................... 91 Captulo 7 - Consideraes Finais ........................................................................................ 94 7.1 Concluses............................................................................................................ 94 7.2 Trabalhos Futuros ................................................................................................. 95 Referncias Bibliogrficas ................................................................................................... 97 Bibliogrficas recomendadas ............................................................................................... 99 Anexo A Cdigo Fonte do Firmware .............................................................................. 100

ix

Lista de Figuras
Figura 2.1 Corte esquemtico de uma mquina de induo................................................ 12 Figura 2.2 Tipos de conexes: Estrela e Tringulo ............................................................ 13 Figura 2.3 Relao entre as tenses defasadas em 120 no tempo...................................... 14 Figura 2.4 Relaes entre os enrolamentos defasados de 120 ........................................... 15 Figura 2.5 Fluxo magntico resultante de cada fase em instante distintos ........................... 17 Figura 2.6 Circuito equivalente do motor de induo.......................................................... 19 Figura 2.7 Simulao da partida a vazio de um motor de induo...................................... 22 Figura 2.8 Simulao da partida um motor de induo plena carga ................................. 23 Figura 2.9 Simulao da partida a vazio e incluso da carga nominal temporria............... 25 Figura 2.10 Curvas de disparo de alguns rels trmicos..................................................... 26 Figura 2.11 Diagrama de uma proposta para o rel digital ................................................. 28 Figura 3.1 Representao esquemtica de um resistor ....................................................... 30 Figura 3.2 Representaes esquemticas de diodos ........................................................... 31 Figura 3.3 Representao esquemtica de um transistor .................................................... 32 Figura 3.4 Lacth Nand com portas NAND: esquemtico e tabela-verdade.......................... 34 Figura 3.5 DAC de 4 bits com rede R / 2R ........................................................................ 35 Figura 3.6 Circuito equivalente de Thvenin do DAC de 4 bits ......................................... 37 Figura 3.7 Diagrama geral de uma classe de ADC............................................................. 39 Figura 3.8 Diagrama de blocos de um tpico microcontrolador .......................................... 41 Figura 3.9 Diagrama de blocos do PIC16F87XA............................................................... 42 Figura 4.1 Diagrama de blocos do rel inteligente ............................................................. 45

Figura 4.2 Protocolo de comunicao tpico para RS-232 e RS-485 .................................. 49 Figura 4.3 Esquemtico do rel inteligente utilizando o PIC16F628 .................................. 53 Figura 4.4 Esquemtico do rel inteligente utilizando o PIC16F876A ............................... 54 Figura 4.5 Fluxograma do programa principal do firmware ............................................... 58 Figura 4.6 Fluxograma da rotina para configurao local (modo ajuste) ............................ 60 Figura 4.7 Esquemtico do circuito do teclado .................................................................. 64 Figura 4.8 Fluxograma da rotina que l o teclado .............................................................. 65 Figura 4.9 Fluxograma do mdulo do teclado em modo normal ........................................ 66 Figura 4.10 Fluxograma do mdulo do teclado em modo de ajuste.................................... 67 Figura 4.11 Fluxograma do mdulo do ADC..................................................................... 70 Figura 4.12 Esquemtico do circuito que converte o sinal AC em DC ............................... 73 Figura 5.1 Fluxograma da comunicao serial entre o PC e o Rel .................................... 75 Figura 5.2 Programa de monitorao do rel inteligente: configuraes............................. 78 Figura 5.3 Programa de monitorao do rel inteligente: curva do rel .............................. 79 Figura 5.4 Interface para salvar ou carregar uma curva de resposta.................................... 80 Figura 5.5 Programa de monitorao do rel inteligente: histrico..................................... 81 Figura 5.6 Visualizao da descrio das anomalias ocorridas no prottipo....................... 82 Figura 6.1 Corrente de partida sem carga .......................................................................... 86 Figura 6.2 Corrente de partida com carga suave ................................................................ 86 Figura 6.3 Corrente do motor no momento da aplicao de sua carga nominal .................. 88 Figura 6.4 Curva de resposta contra sobre corrente programada no prottipo .................... 92

xi

Lista de Tabelas
Tabela 4.1 Descrio dos pinos de um LCD padro........................................................... 61 Tabela 4.2 Instrues bsicas do LCD............................................................................... 61 Tabela 5.1 Pacote de dados da comunicao serial ............................................................ 76

xii

Lista de Abreviaturas
CI: CPL: PC: GND: SCR: TTL: FF: LCD: LED: ADC: I/O: F.E.M.: F.M.M.: RISC: CISC: USART: universal) EEPROM: Electrical Eraser Programmable Read Only Memory (memria no voltil Circuito Integrado (Plural: CIs) Controlador Lgico Programvel (Plural: CLPs) Personal Computer (computador pessoal) Ground (conexo terra ou massa de um circuito) Semi-Conductor Retificator ou Tiristores (Plural: SCRs) Transistor Transistor Logic (tecnologia de transistor bipolar para CIs) Flip-Flop (lacth capaz de armazenar um bit de memria) Liquid Crystal Display (display de cristal lquido) Ligth Emission by Diod (diodo emissor de luz) Analogic Digital Converter (conversor analgico digital) Input and Output (dispositivos ou pinos de entrada e sada de dados) Fora eletromotriz Fora magneto motriz Reduced Instruction Set Computers (conjunto reduzido de instrues) Complex Instruction Set Computers (conjunto complexo de instrues) Universal Synchronous Asynchronous Receiver Transmitter (canal serial

programvel e apagvel eletricamente byte a byte) CAN: Controller Area Network (tipo de camada fsica de rede)

xiii

Captulo 1 - Introduo
1.1 Motivaes Desde o incio da automao industrial, poca em que s era possvel controlar a indstria atravs da utilizao das CLPs no microcontrolados de bancadas, procurava-se controlar todos os equipamentos industriais a partir de uma sala nica, comumente chamada de sala de controle. O motivo principal para se desejar que o controle de dispositivos industriais seja feito a partir de uma nica sala pode ser resumido em poucas palavras: basta pensar nos benefcios trazidos para uma empresa caso fosse possvel que um nico funcionrio pudesse ser responsvel pela monitorao e controle de vrios equipamentos fabris ao mesmo tempo sem precisar sair de sua poltrona, ou seja, este trabalhador seria capaz de ligar ou desligar equipamentos remotamente, verificar medies instantneas e at mesmo descobrir falhas, tudo isto de um nico ponto da empresa, da sala de controle. A constante evoluo da microeletrnica possibilitou implementaes de controles que, alm de serem mais inteligentes (agora microcontrolados), ocupassem menos espao nas salas de controle. Estas novas tcnicas de controle podem ser instaladas prximo ao equipamento que se deseja controlar e sua comunicao com a sala de controle pode ser feita atravs de uma rede local, facilitando assim a manuteno e instalao dos mesmos. Com a incluso de microcontroladores, em alguns casos microprocessadores, no mercado da microeletrnica os antigos CLPs passaram por uma profunda modificao sob o ponto de vista de hardware, isto , deixaram de ser apenas controladores lgicos

2 programveis e passaram a ser tambm microprocessados, o que possibilita uma melhor programao de suas funes especficas. Assim, os CLPs tiveram uma enorme diminuio do seu tamanho fsico e deixaram de ser equipamentos de bancadas que ocupavam toda uma sala. Outra vantagem seria a comunicao com o computador central que agora pode gerenciar vrios CLPs ao mesmo tempo pela mesma rede de comunicao. Cada vez mais se utilizam microcontroladores como dispositivos

controladores, isto se deve a vrios motivos, dentre os quais se podem ressaltar o fato de que o microcontrolador possibilita tanto o controle quanto a leitura de dados dos equipamentos controlados (permitindo assim uma comunicao bidirecional entre o computador central da sala de controle e todos os equipamentos) e o baixo custo dos microcontroladores atuais. Assim, utilizando-se dos microcontroladores, torna-se vivel praticamente todo tipo de atuao e monitoramento. Os engenheiros eletricistas com nfase em eletrnica costumam querer dar solues eletrnicas para todo tipo de problema, mesmo os mais simples. Com este intuito, foi analisada a necessidade atual da automao industrial. Depois de uma breve pesquisa sobre os dispositivos controladores existentes no mercado para este tipo de automao, verificou-se que um rel microcontrolado, que atue e proteja ao mesmo tempo os motores trifsicos, est em falta ou est presente com um preo ainda muito elevado para aplicao no mercado nacional. Como atualmente a maioria das protees para motores utiliza um rel bimetlico, rel este que possibilita apenas uma proteo do equipamento e no uma boa noo de como est o histrico de funcionamento deste motor. Esta idia se aplica a

3 acionamentos de motores que ainda , em sua maioria, realizado com contatores, mas igualmente adequada ao uso de acionamentos utilizando componentes de estado slido. Assim a idia de se desenvolver este trabalho surgiu, visando um produto nacional novo e barato, que seja capaz de no apenas monitorar e proteger, mas tambm atuar sobre um motor de induo trifsico. O produto final tambm dever ser hbil de trabalhar com programaes locais e remotas. Toda esta anlise e estudo ajudaram para que a idia ganhasse as motivaes e importncias necessrias para ser implementada aqui, visto que os outros dispositivos equivalentes existentes no mercado atual, se comparado ao que est sendo proposto, so equipamentos que utilizam tecnologias distintas ou possuem custos mais elevados. 1.2 Objetivos O objetivo deste trabalho desenvolver um rel inteligente de baixo custo para o mercado nacional, assim como as informaes de como este prottipo pde ser implementado. O prottipo visa a atender s necessidades das empresas que desejam supervisionar motores de induo e levantar possveis histricos de operao. As caractersticas bsicas deste prottipo so: Dispositivo microprocessado de 8 bits; Teclas para programao local; Display de cristal lquido para facilitar a interface com o usurio; No mnimo trs entradas analgicas para a medio (monitoramento em tempo real) da corrente trifsica, indicando assim o estado de carga; Pelo menos um canal de comunicao RS-232 ou RS-485;

4 No mnimo uma sada TTL para ligar / desligar um motor. Outras caractersticas podem ser agregadas, mas devero estar em placas separadas para simplificar e modular o projeto como um todo. Para controlar este dispositivo remotamente ser desenvolvido um software com a linguagem de programao orientada a objeto Delphi, este software ser desenvolvido para os sistemas operacionais Windows 9x e XP. As caractersticas fundamentais deste software so: Interface amigvel para atender tambm aos usurios mais leigos; Acesso remoto simplificado, a partir da porta serial do computador pessoal; Possibilita o monitoramento e acionamento de motores remotamente; Informa em tempo real ao usurio caso haja uma sobrecarga no motor ou qualquer outra anomalia ligada s correntes de carga; Informa ao usurio a corrente RMS que o motor est consumindo, podendo assim gerar grficos e tabelas de histricos. 1.3 O Estado da Arte Os rels inteligentes recebem este nome porque so capazes de ligar ou desligar um equipamento remotamente, mas, na maioria dos equipamentos com este nome, no passa de uma simples chave que pode ou no informar seu estado atual, isto , se ele est ou no ligado. Atualmente existem vrios equipamentos no mercado que so chamados de rels inteligentes, porm poucos possuem todas as caractersticas a que se prope este

5 trabalho, alm do que, os que as possuem, so produtos muito mais caros do que se deseja conseguir com este prottipo. A maioria dos produtos existentes no mercado limita-se ao controle de ligar e desligar, sem se preocupar em responder qual a corrente atual que o equipamento ligado est consumindo ou qualquer histrico relacionado a isto. Por no haver o monitoramento da corrente, o rel utilizado para acionar a carga normalmente um rel bimetlico, que no passa de uma proteo limitada, pois no h como se saber, de uma sala de controle, se o motor protegido por este rel est ou no com problemas, pois a nica informao que se consegue tirar de l seria se o mesmo est aberto ou no. J os produtos que atendem questo do monitoramento da corrente normalmente no se aproveitam deste dado para o monitoramento de sobrecarga, deixando este encargo para um fusvel rearmvel ou at mesmo o tradicional rel bimetlico. Assim, estas linhas de produtos apenas informam qual o histrico da corrente de carga, mas no atuam no motor de acordo com o que esto monitorando, em resumo, trata-se de um monitoramento tambm limitado. Um trabalho foi publicado recentemente, julho de 2004, apresentando um rel digital multifuncional, trata-se de um dispositivo capaz de monitorar as tenses e correntes desenvolvido para criar um dispositivo capaz de ser programado atravs de entradas com nveis lgicos de 0 e 1. Com relao ao prottipo proposto aqui este rel tem a vantagem da monitorao das tenses, mas no capaz de ser programado para reproduzir uma curva sobre corrente x tempo como o deste trabalho [17]. O LOGO! da Siemens um bom exemplo de como est o mercado atual deste tipo de controlador, este equipamento possui sadas de at 10A e entradas para informaes

6 lgicas 0 ou 1, isto , pode-se executar uma programao para que ele ligue caso uma determinada entrada estiver em nvel lgico ligado (1) ou para ele desligar se a entrada mudar de desligada (0) para ligada (1). Vrias combinaes so possveis e este equipamento j substitui muitos outros dispositivos programveis para o controle e automao de iluminaes, esteiras rolantes entre outros. Mas para o controle de motores no como o proposto aqui, pois no h uma entrada de um conversor analgico digital para monitorar as correntes e, portanto, no capaz de proteger um motor contra sobre correntes [18]. A prpria Siemens tem ainda o SIMATIC S7-200, trata-se de um micro CLP utilizado para controlar motores e mquinas em geral na indstria, como novamente ele no possui caractersticas para o monitoramento de corrente, por isto no possibilita a proteo contra sobre corrente [18]. Saindo dos dispositivos controladores e entrando nos dispositivos de proteo, ainda da marca Siemens, dois outros rels valem a pena serem apresentados. O primeiro apenas um rel trmico para proteo contra sobrecarga, j o segundo um rel inteligente, bastante parecido com a proposta deste trabalho salvo pelo fato dele no possuir um display ou comando para programao local. Apesar disto o SIMOCODE-DP, como chamado este rel inteligente, capaz de se comunicar com um PC e monitorar as correntes das trs fases do motor. Por no possuir um display LCD este equipamento possui um tamanho bastante reduzido e parecido com rels trmicos comuns [18]. Todos estes dados pesquisados determinaram a motivao da implementao deste prottipo, visto que se trata de um produto caro em um mercado de poucos fabricantes. Ainda por se tratar de um produto cujo mercado favorvel e poucas empresas esto investindo na fabricao destes tipos de dispositivos.

7 1.4 Contribuies As contribuies deste trabalho esto voltadas automao industrial, que possibilitar um melhor controle e monitoramento da operao de motores trifsicos utilizando-se de um computador pessoal a um custo abaixo do existente hoje no mercado. Este prottipo ser desenvolvido para o mercado voltado a motores, porm pode-se utiliz-lo para o controle e monitoramento de qualquer equipamento trifsico que esteja dentro das especificaes de carga do equipamento. Por este motivo pode ser empregado em inmeras aplicaes, onde o monitoramento de sobre correntes em tempo real se fizer necessrio. Outra contribuio que merece ser ressaltada aqui seria o fato de esta proposta criar um rel inteligente de tal modo que seja possvel program-lo em tempo real, isto , enquanto o processo estiver em andamento (o rel estiver monitorando uma carga) pode-se alterar sua curva de resposta sem que haja qualquer interferncia na operao da carga monitorada. 1.5 Disposio do trabalho Este trabalho est disposto de uma maneira simples, direta e de fcil entendimento, para possibilitar que futuros trabalhos sejam implementados a partir dele. A estrutura bsica desta dissertao est resumida a seguir: Captulo 1 - Introduo: relata a motivao do trabalho, descreve os objetivos, fala sobre o mercado e produtos similares e por fim as contribuies da dissertao; Captulo 2 - Mquinas Eltricas Trifsicas: fornece uma introduo bsica sobre mquinas de induo para possibilitar o seu controle de partida. Por isto este captulo

8 engloba tambm tpicos como tipos de partidas, operao normal e de sobrecarga, mtodos mais utilizados para proteo de sobrecarga e finalmente uma proposta para soluo que ser implementada; Captulo 3 - Microcontroladores: parte do trabalho dedicada apresentao terica da engenharia eletrnica dando-se mais nfase aos microcontroladores. Neste captulo sero apresentadas as noes mnimas necessrias para o bom entendimento do prottipo do rel inteligente que ser montado no decorrer deste estudo; Captulo 4 - Projeto do Equipamento (Hardware e Firmware): nesta parte do trabalho esto descritos todas as caractersticas fsicas do prottipo e tambm como o equipamento foi programado, contendo itens importantes como os diagrama de blocos, o projeto do hardware proposto, os mdulos de programao do firmware, os fluxogramas dos mdulos mais importantes e ainda uma anlise sobre o equipamento proposto; Captulo 5 - Desenvolvimento do Software: parte do trabalho que apresenta as necessidades do software de controle bem como uma modelagem necessria para supri-las, este captulo divido em fluxograma e avaliao; Captulo 6 - Resultados Prticos: aqui so discutidos e apresentados todos os resultados dos testes feitos em laboratrio. Este item apresenta uma discusso sobre a avaliao final do prottipo de seus resultados, uma comparao com os produtos similares e por fim uma anlise tcnica de tudo; Captulo 7 - Consideraes Finais: neste captulo se encontra a concluso do trabalho bem como algumas propostas para futuros trabalhos relacionados;

9 Referncias Bibliogrficas: parte que contm toda a bibliografia utilizada que possibilitou a criao deste trabalho; Anexo A : impresso dos arquivos fontes tanto de firmware quanto de software.

10

Captulo 2 - Mquinas Eltricas Trifsicas


Sero abordadas neste captulo informaes como: a operao do motor de induo; o tipo de partida utilizado durante os testes prticos; as curvas de sobrecarga que o motor pode suportar bem como sua corrente nominal; os mtodos de proteo existentes e recomendados pela norma brasileira NBR 5410. Como o foco deste trabalho projetar um rel inteligente com microcontrolador interno, que seja capaz de monitorar as correntes de fase do motor e ainda atuar de acordo uma programao especfica para cada motor. A programao deste rel inteligente ir proteger o motor contra sobrecarga. O estudo sobre motores eltricos que ser visto neste captulo ser bastante objetivo, para que se possa entender o funcionamento bsico dos mesmos e conhecer as necessidades bsicas para sua proteo. 2.1 O motor de induo trifsico Os motores de induo trifsicos, tambm chamados de motores assncronos, so sem dvida alguma os mais utilizados na indstria atualmente. Embora o motor de induo seja, talvez, o mais simples de todos os motores sob o ponto de vista de operao e trabalho, a teoria de sua operao bastante sofisticada [1]. Durante os testes prticos do prottipo do rel inteligente, que o objeto deste trabalho, foi utilizado um motor de induo trifsico de baixa potncia, por isto ser visto aqui apenas alguns conceitos bsicos deste tipo de motor. 2.1.1 Aspectos construtivos Existem dois tipos de mquinas de induo. O primeiro tipo seria as mquinas de rotor bobinado tm um rotor semelhante ao do estator, isto , possuem trs enrolamentos

11 isolados distribudos ao longo da periferia do rotor cujas fases esto deslocadas de 120 no espao. A ligao com o exterior da mquina faz-se atravs de trs anis e escovas aos quais se pode ligar um circuito exterior, normalmente resistncias de partida ou sistemas de regulao de velocidade. J as mquinas de rotor em gaiola tm um rotor constitudo por um ncleo de ferro no qual se encontram condutores ligados na periferia do rotor atravs de dois anis que fecham um curto entre si. Esta construo tem um elevado nvel de robustez, um baixo peso bem como um reduzido momento de inrcia e, no conjunto, talvez a mquina mais barata. De todos os motores eltricos existentes, o motor de gaiola de esquilo o mais simples no aspecto construtivo. Outra caracterstica que faz com que o motor de gaiola de esquilo seja largamente utilizado o fato de possuir uma operao quase isenta de manuteno, o que o indica para aplicaes em localizaes remotas ou de severas condies de trabalho ambientes agressivos etc. Por tudo isto provavelmente a mquina mais utilizada em acionamentos de velocidade fixa e cada vez mais utilizada tambm em acionamentos de velocidade ajustvel, apesar das dificuldades de controle que apresenta. A Figura 2.1 representa o corte esquemtico de uma mquina de induo, onde abc so as correntes das fases entrando e.a'b'c' so as mesmas correntes saindo pelo outro lado. A armadura do estator no diferente da de uma mquina sncrona de corrente alternada e por isto no requer nenhuma elaborao adicional, j o ncleo do rotor de um motor de induo um cilindro de ao laminado, no qual condutores de cobre ou de alumnio so fundidos ou so enrolados paralelamente ao eixo em ranhuras existentes no ncleo. Notase que os condutores no precisam ser isolados do ncleo, pois as correntes induzidas no rotor

12 seguem o caminho de menor resistncia, ou seja, os condutores de cobre ou de alumnio fundido [1].

Figura 2.1 Corte esquemtico de uma mquina de induo

Em motores cujo rotor do tipo gaiola de esquilo, os condutores do rotor esto curto-circuitados em cada terminal por anis terminais contnuos da o nome de gaiola de esquilo. Caso os rotores sejam maiores, os anis so soldados aos condutores em vez de serem moldados na construo. Um detalhe construtivo deste tipo de motor que as barras nem sempre so paralelas ao eixo do rotor, mas podem ser deslocadas ou colocadas segundo um pequeno ngulo em relao a ele para produzir um conjugado mais uniforme e diminuir o zumbido magntico durante a operao do motor [1].

13 Motores de rotor bobinado tm seus condutores de cobre distribudos nas diversas ranhuras, usualmente isolados do ncleo de ferro. Estes motores podem ser ligados tanto em delta quanto em estrela. 2.1.2 Campo magntico girante Ainda observando a Figura 2.1, a bobina aa representa todas as bobinas associadas fase A para um par de plos. De modo similar, a bobina bb representa as bobinas da fase B e a bobina cc representa as bobinas da fase C. Quando uma das extremidades de cada fase ligada entre si o enrolamento do estator trifsico dito como conectado em estrela, por exemplo, as extremidades abc em curto e a'b'c' em cada ponto da "estrela". Em contrapartida, quando ligados independentemente, isto , fase A ligada em a e a, fase B ligada em b e b e fase C ligada em c e c, dito que o motor est conectado em tringulo. O desenho esquemtico dos tipos de ligaes estrela e tringulo ilustrado na Figura 2.2.

Conexo Estrela

Conexo Tringulo

Figura 2.2 Tipos de conexes: Estrela e Tringulo

14 Um campo magntico girante, de amplitude constante e girando velocidade sncrona pode ser produzido por qualquer grupo polifsico de enrolamentos cujos eixos magnticos estejam igualmente espaados ao longo da periferia do estator se tiverem o mesmo nmero de fases e se as correntes que circulam atravs dos enrolamentos tambm estiverem uniformemente defasadas no tempo. Um exemplo bastante simples seria de um enrolamento bifsico, imagine este enrolamento disposto fisicamente no estator com um deslocamento de 90, assim seria produzido um campo girante constante desde que as correntes das fases tambm estivessem deslocadas em quadratura no tempo. Em virtude do que foi dito que todas as mquinas de induo trifsicas necessitam de trs enrolamentos individuais e idnticos com eixos magnticos deslocados de 120 eltricos no espao e pelos quais circulem correntes defasadas tambm de 120 no tempo. Somente com este pr-requisito ser possvel produzir um campo magntico de amplitude constante, que gira velocidade sncrona.

Figura 2.3 Relao entre as tenses defasadas em 120 no tempo

15 A Figura 2.3 ilustra as tenses senoidais trifsicas equilibradas aplicadas armadura de uma mquina trifsica, assim pode-se considerar a mesma curva para as correntes trifsicas que circulam pela armadura, se considerarmos a mesma impedncia presente nos trs enrolamentos. Para facilitar a anlise deste grfico, o deslocamento no tempo das correntes, no eixo horizontal, est em graus proporcional a cada instante, isto facilita a anlise da curva senoidal para cada fase e tambm simplifica a verificao da defasagem entre as fases, que de 120.

Figura 2.4 Relaes entre os enrolamentos defasados de 120

16 Ligando-se as fases A, B e C nos terminais a, b e c do enrolamento de um estator de um motor de induo trifsico e ligando-se os terminais a, b e c em curto, conforme mostrado na Figura 2.4, obtm-se um campo magntico resultante girante de amplitude constante e velocidade sncrona. Para entender melhor como formado este campo magntico resultante girante deve-se calcular o campo magntico gerado por cada fase e posteriormente calcular-se o campo resultante. Ento para verificar o giro deste campo resultante deve-se calcular novamente os campos magnticos de cada fase s que para um instante diferente do primeiro, conforme o grfico da Figura 2.3. Agora ser explicado qualitativamente como o fluxo magntico induzido por cada fase, para isto ser mostrado o que ocorre com o fluxo de cada fase em quatro diferentes instantes do grfico da Figura 2.3: 90; 210; 330; 450. Observe que o instante de 450 fecha um perodo completo em relao ao instante de 90 (450-90=360), ou seja, a segunda vez que a fase A passa pelo seu ponto de mximo. Este trs instantes distintos (90, 210 e 330) foram escolhidos devido ao fato de serem os instantes em que cada fase encontra-se no seu valor mximo. Uma anlise simplificada de como o fluxo magntico gerado por cada uma das fases pode ser obtida atravs da regra da mo direita [1], utilizada para a determinao da direo e do sentido do fluxo, e atravs de uma analogia entre fases, para a determinao da amplitude do fluxo. A Figura 2.5 mostra o sentido da corrente eltrica gerado por cada uma das fases nos quatro instantes escolhidos. Pode-se observar na Figura 2.3 que no instante de 90 (4,17ms) as fases B e C encontram-se com polaridade invertida com relao fase A, por isto

17 que na Figura 2.5 o sentido da corrente eltrica devido s fases B e C esto invertidas, isto , entrando nos pontos b e c e saindo nos pontos b e c. O fluxo magntico gerado pela corrente circulante devido fase A no instante de 90 mostrado na Figura 2.5 conforme a regra da mo direita, j a amplitude devido a esta fase considerada a mxima amplitude de um fluxo magntico gerado por uma nica fase cujo valor de Fa=Fmax, pois neste instante a fase A encontra-se em sua amplitude mxima (veja Figura 2.3).

Figura 2.5 Fluxo magntico resultante de cada fase em instante distintos

18 As direes e os sentidos dos fluxos magnticos gerados pelas fases B e C tambm esto indicados na figura, assim como suas amplitudes que sero iguais entre si em mdulo, cujo mdulo vale Fb=Fc=Fmax/2, pois no instante de 90 exatamente o instante em que os valores de suas fases encontram-se, em mdulo, na metade do seu valor mximo. Como o ngulo entre os dois fluxos magnticos gerados pelas fases B e C de 120 e suas amplitudes so iguais, o fluxo resultante destas duas componentes ser um com mesma direo e sentido do fluxo magntico gerado pela fase A, cuja amplitude ser a metade da amplitude do fluxo magntico gerado pela fase A. Logo o fluxo magntico resultante das trs fases no instante de 90 ter a mesma direo e sentido do fluxo gerado pela fase A e amplitude 50% maior. Nos demais instantes as anlises so as mesmas vistas anteriormente com uma nica diferena: o fluxo magntico resultante das trs fases muda de direo. Um detalhe importante para finalizar a anlise do instante de 90 da Figura 2.5 que independente do instante em que se fizer a anlise do fluxo resultante, seu mdulo sempre ser o mesmo e ir valer 50% a mais do valor mximo de um fluxo gerado por uma nica fase. Outro detalhe bastante importante que a velocidade sncrona depende apenas do nmero de pares de plos para o qual o enrolamento trifsico foi projetado e da freqncia da fonte de alimentao trifsica, conforme mostra a equao abaixo:
120 f P

NS =

Equao 2.1

Onde: Ns a velocidade sncrona em rpm; f a freqncia da fonte de alimentao CA em hertz; P o nmero de plos;

19 2.1.3 Princpio de funcionamento do motor de induo O princpio de funcionamento do motor de induo est baseado no fato da fora magneto motriz girante estabelecer um campo magntico girante de mesma velocidade, isto , velocidade sncrona. O caminho do campo magntico estabelecido no estator e no rotor, de tal forma que, na presena do campo magntico, se o rotor estiver parado ou girando com velocidade diferente da sncrona ocorre uma velocidade relativa entre o campo girante e o rotor. Esta a velocidade de escorregamento e imprescindvel para a operao do motor. Com a diferena de velocidade os condutores do rotor so cortados pelas linhas de fluxo do campo magntico, o que d origem a tenses e correntes induzidas no rotor. Essas correntes por sua vez estabelecem o campo magntico do rotor, cuja interao com o campo produzido pelas correntes estatricas resulta em conjugado e conseqente movimento. A diferena entre as velocidades do campo magntico produzido pelos enrolamentos e o giro do rotor uma caracterstica dos motores de induo e, por isto, eles so classificados como motores assncronos ou no sncronos, a Figura 2.6 mostra como seria o circuito equivalente dos motores trifsicos.

Figura 2.6 Circuito equivalente do motor de induo

Conforme foi visto, a velocidade do motor nunca poder ser igual do campo magntico girante, pois se isto ocorresse a corrente induzida seria zero e no se produziriam

20 fluxo magntico nem conjugado. Por isto se diz que ele deve escorregar em velocidade a fim de que se produza conjugado. O que resulta numa diferena de velocidades produzidas entre a velocidade sncrona do campo magntico girante (Ns) e a velocidade na qual o rotor do motor gira (Nr) como resultado do conjugado produzido pela interao entre seu campo e o campo magntico girante. Esta diferena na velocidade chamada velocidade de escorregamento ou rotao de escorregamento e normalmente expressa como uma frao ou porcentagem da velocidade sncrona como mostrada na equao abaixo:
Ns Nr f ou N r = N s (1 s ) = 120 (1 s ) Ns P

s=

Equao 2.2

Onde: s o escorregamento em frao da velocidade sncrona; Nr a velocidade do rotor em rpm; Ns a velocidade sncrona em rpm; f a freqncia da fonte de alimentao CA em hertz; P o nmero de plos; Quando o motor operar a vazio, o escorregamento muito baixo e sua impedncia rotrica muito elevada. Assim a corrente no rotor reduzida corrente suficiente para produzir o conjugado necessrio a vazio. O fator de potncia muito baixo e em atraso (tipicamente menor que 0,3), pois a corrente que circula pelo estator utilizada apenas para a magnetizao da mquina. Quanto maior a carga do motor maior ter que ser o conjugado necessrio para acion-la, j para se obter um maior conjugado ter que ser maior a diferena de velocidades

21 entre o rotor e o campo girante no entreferro o que, conseqentemente, aumentar o escorregamento. Entretanto, quando uma carga mecnica aplicada ao rotor, isto leva a um aumento no escorregamento e conseqente a um aumentando na freqncia da corrente induzida do rotor, na reatncia e na sua f.e.m. induzida. O aumento da corrente induzida no rotor reflete-se num aumento da corrente primria do estator, em decorrncia disto uma corrente maior ser requerida no estator melhorando assim o fator de potncia, que resultar na produo de mais potncia mecnica (trabalho).
2.1.4 Partida do motor de induo

Lembrando que este trabalho visa desenvolver um prottipo para proteo contra sobrecarga para motores trifsicos e no um estudo das diferentes formas de partida bem como os mtodos para se limitar a corrente de partida, no faro parte desta dissertao informaes detalhadas sobre o assunto, mas sim apenas uma pequena ilustrao do tipo de partida que foi utilizada durante os testes prticos [1] e [2]. Na maioria das suas aplicaes os motores de induo do tipo gaiola, de pequena potncia, podem arrancar por ligao direta rede eltrica sem que se verifiquem quedas bruscas na tenso de suprimento e sem que se verifique ainda um tempo de partida prolongado. Foi este o tipo de motor utilizado nos testes relacionados a este trabalho. O motor utilizado durante os testes prticos foi acionado atravs de uma botoeira que por sua vez aciona um contator que est ligado ao objeto deste trabalho: o rel inteligente. O acionamento desta botoeira deu-se atravs de um comando TTL vindo do rel inteligente. Este motor foi conectado em tringulo e partida direta, pois como de pequeno

22 porte no causa nenhum estresse na rede eltrica e por isto no se faz necessrio nenhum tipo de controle de partida.

Figura 2.7 Simulao da partida a vazio de um motor de induo

Apesar de no haver nenhum tipo de controle de partida neste trabalho, necessrio informar o tempo de partida do motor a ser monitorado e controlado, pois o rel inteligente precisar desta informao para poder ignorar a corrente lida pelo seu transdutor para efeito de monitoramento da corrente em regime permanente, j que a corrente de partida muitas vezes maior que a nominal. A Figura 2.7 mostra a simulao do tempo de partida tpico de um motor a vazio. Note que o tempo de partida menor do que 250 ms.

23 J a Figura 2.8 mostra o mesmo motor da Figura 2.7 partindo com carga nominal, note que o tempo de partida sobe para aproximadamente 350 ms. Mesmo assim, os tempos de partida tpicos de um motor de induo normalmente so menores do que 1 s.

Figura 2.8 Simulao da partida um motor de induo plena carga

2.2 Corrente de partida e corrente nominal de um motor

Os motores eltricos so cargas que apresentam caractersticas bastante peculiares se comparadas s demais cargas eltricas existentes. Por isto, os equipamentos a motor (denominao que a NBR 5410 sugere para este tipo de dispositivo) devem possuir um circuito de ligao e proteo diferenciado.

24 Durante a partida, todo motor absorve uma corrente bastante superior de funcionamento normal plena carga, como foram mostradas nas Figura 2.7 e Figura 2.8. Por isto, o projeto do circuito de ligao dever ser dimensionado para suportar as condies de partida e no s as condies de regime permanente. A corrente de partida Ip de um motor trifsico de induo tipo gaiola de esquilo, que so utilizados em mais de 90% das aplicaes, apresenta os seguintes valores tpicos [3]: Motores de dois plos: 4,2 I n I p 9 I n ; Motores de mais de dois plos: 4,2 I n I p 7 I n .

Onde: In a corrente nominal; Ip a corrente de partida do motor de induo.

25
Figura 2.9 Simulao da partida a vazio e incluso da carga nominal temporria

Observando a simulao da Figura 2.9 pode-se ter uma ntida viso da diferena entre as correntes de partida, at 250 ms, com carga nominal, entre 350 ms e 500 ms, e sem carga, a partir de 500 ms. Outra peculiaridade dos equipamentos a motor que a sua potncia absorvida em funcionamento determinada pela potncia mecnica no eixo do motor, potncia que solicitada pela carga acionada, o que pode resultar em sobrecarga no circuito de alimentao caso no haja proteo adequada. Observe que o dispositivo de proteo contra sobre corrente dever suportar, sem atuar, a corrente de partida, sendo capaz, portanto, de distinguir o momento de partida do motor da sua condio de operao normal, pois se a corrente de funcionamento normal ultrapassar 15% da corrente nominal o dispositivo de proteo dever ser capaz de atuar desligando o motor [3].
2.3 Mtodos de proteo contra sobrecarga

Alguns dispositivos foram surgindo basicamente para tratar do importante assunto de proteo dos circuitos de motores, dentre eles o rel trmico de sobrecarga sem dvida nenhuma o mais empregado quando o assunto a proteo contra sobre corrente. Normalmente os rels trmicos so conectados juntamente com os contatores. Os rels trmicos de sobrecarga so divididos em classes de disparo, que permitem adapt-los s caractersticas dos motores, em especial s condies de partida.

26 Outros dispositivos de proteo podem ser utilizados, mas como o objeto principal deste trabalho desenvolver um rel inteligente que consiga atuar de forma semelhante a um rel trmico, ento apenas este tipo de dispositivo ser apresentado aqui.

Figura 2.10 Curvas de disparo de alguns rels trmicos

Conforme pode ser observado na Figura 2.10, os rels bi metlicos iro desligar o motor conforme as curvas apresentadas na figura. Estes rels so constitudos basicamente por um conjunto de lminas composta de dois metais de diferentes coeficientes de dilatao trmica um conjunto destes por fase e um mecanismo de disparo. O seu funcionamento est baseado no aquecimento destes dois metais, pois como eles esto soldados um sobre o outro ao esquentarem devido sobre corrente na fase um dos metais ir dilatar mais que o outro, fazendo com que estas lminas se afastem do contato abrindo o circuito. Pode-se notar que se trata de um sistema de proteo relativamente simples. Para tentar eliminar ou pelo menos atenuar os efeitos de temperaturas ambientes superiores s indicadas pela curva de disparo de cada rel bi metlico, recorre-se

27 compensao do rel, obtida atravs da alterao na conformao das lminas bimetlicas ou pela utilizao de uma lmina bimetlica auxiliar [3]. A proteo contra curto-circuito deve ficar por conta de outro dispositivo, tal como um fusvel ou um disjuntor magntico. Isto porque o rel bi metlico pode levar um tempo considerado alto para atuar sobre uma corrente de curto-circuito.
2.4 Proposta de soluo para o problema de sobrecarga

Uma proposta de soluo seria a substituio de um rel bi metlico por um rel inteligente. A diferena maior entre estes dois dispositivos est associada ao fato de que o rel inteligente possibilitar ao tcnico responsvel pela manuteno do motor visualizar um breve histrico de sobre correntes que causaram o desligamento automtico do motor. O prottipo proposto para o rel inteligente seria, em termos funcionais, parecido com o diagrama ilustrado pela Figura 2.11. Observe que a idia seria possibilitar em primeiro lugar uma interface grfica e bastante amigvel com um PC remoto atravs de uma comunicao serial, em seguida pensa-se em utilizar sensores de corrente para monitorar as correntes de fase do motor e por fim deseja-se atuar sobre a bobina de um contator utilizando uma sada de nvel lgico digital. A placa microcontrolada deste prottipo necessitaria possuir um canal serial para comunicao remota, pelo menos uma sada digital para comandar o acionamento do motor e ainda um conversor analgico digital (ADC) para poder tratar as correntes lidas.

28

Figura 2.11 Diagrama de uma proposta para o rel digital

As vantagens deste prottipo sobre a proteo tradicional que utiliza um rel trmico so: Possibilita o monitoramento on-line da corrente do motor por um PC remoto; Histrico das sobre correntes as quais o motor foi submetido; Possibilidade de acionamento remoto do motor; Praticamente as mesmas funes disponveis remotamente atravs do PC podem ser comandadas localmente atravs de um teclado com quatro botes e um display LCD; Alterao da curva de resposta (Sobrecorrente x Tempo) com o sistema em operao. Com posse dos conhecimentos bsicos necessrios para o bom entendimento do funciomento do objeto de controle, o motor de induo, pode-se agora partir para o estudo terico da eletrnica necessria para o desenvolvimento de uma placa que consiga atender aos requisitos deste trabalho. No prximo captulo ser visto um estudo sobre eletrnica e microcontroladores visando o desenvolvimento do hardware do rel digital.

29

Captulo 3 - Microcontroladores
Neste captulo sero apresentados os conceitos bsicos sobre

microcontroladores e eletrnica, o enfoque visa um melhor entendimento de como foi possvel desenvolver o prottipo do rel inteligente. Ao se analisar este trabalho de uma maneira macro pode-se notar que se trata de um trabalho mais voltado engenharia eletrnica do que engenharia de potncia, apesar de sua aplicao estar totalmente direcionada engenharia de potncia. Este fato faz com que o prvio estudo da engenharia eletrnica e uma nfase um pouco maior no estudo de microcontroladores seja fundamental para o bom entendimento. Este captulo basicamente se divide da seguinte forma: noes sobre a eletrnica analgica, sobre eletrnica digital, sobre microcontroladores e um detalhe maior sobre o microcontrolador PIC utilizado. Todo este contedo foi utilizado no desenvolvimento do prottipo.
3.1 Noes de eletrnica analgica

A eletrnica vista aqui foi dividida em duas partes: eletrnica analgica e eletrnica digital. A eletrnica analgica a base de toda a engenharia eletrnica e est presente direta ou indiretamente em praticamente todos os ramos da cincia atual. A eletrnica bsica envolve circuitos simples livres de circuitos integrados com apenas componentes chamados de analgicos tais como: resistores, indutores, capacitores, diodos e transistores. J a eletrnica digital abrange circuitos com os chamados circuitos integrados (CI), os CIs so componentes eletrnicos que possuem dentro deles inmeros resistores, capacitores, diodos e transistores agrupados de tal maneira que so capazes de executar determinadas tarefas previamente programadas.

30 Neste projeto foram utilizados resistores, capacitores e transistores juntamente com alguns circuitos integrados, por isto algumas noes bsicas do funcionamento de circuitos que utilizem estes componentes sero mostradas aqui.
3.1.1 Noes de circuitos com resistores

O resistor conhecido como um dos componentes passivos de um circuito, pois ele no interfere de forma ativa no comportamento da corrente eltrica ou da tenso. Trata-se apenas de um componente capaz de limitar a corrente eltrica devido a sua resistncia corrente eltrica. A lei de Ohm ilustrada na equao abaixo mostra bem o funcionamento de um resistor num circuito.
V V R= R i

V = R i i =

Equao 3.1

Onde: R: a resistncia eltrica de um resistor; V: a diferena de potencial eltrico entre dois pontos; i: a corrente eltrica que passa pelo resistor devido esta diferena de potencial. A Figura 3.1 ilustra como a representao esquemtica de um resistor em um circuito.
R5 10K

Figura 3.1 Representao esquemtica de um resistor

importante entender o funcionamento de um resistor em um circuito, pois o seu conceito foi amplamente utilizado no decorrer deste trabalho. Primeiro com resistores de

31 Pull-up e Pull-down, em seguida com resistores para limitar a corrente de base de um transistor, dispositivo que ser visto no decorrer deste captulo.
3.1.2 Noes de circuitos com diodos

O diodo j um semicondutor, isto , um dispositivo normalmente de silcio que trabalhado quimicamente para se implantar nele caractersticas especiais [4]. Aqui ser visto apenas o funcionamento bsico do diodo sem explicar como ou porque ele consegue se comportar desta maneira. O diodo D1, cuja representao em um circuito est ilustrado na Figura 3.2, funciona como um controlador do sentido convencional da corrente eltrica, isto , ele aponta para o sentido que ele permite a corrente passar e se por algum motivo uma corrente reversa tentar passar por ele, esta corrente no conseguir passar no sentido reverso e o diodo ir reter toda a tenso que estiver tentando produzir esta corrente reversa.

D1 Zenner 5.1V

Figura 3.2 Representaes esquemticas de diodos

So vrios os tipos de diodos existentes no mercado, mas neste projeto foram utilizados apenas dois tipos: o diodo simples e o diodo zenner. O zenner conectado ao circuito de maneira diferente do diodo simples, ele utilizado normalmente quando se deseja limitar uma tenso para evitar que algum outro componente no se queime. Este diodo capaz de funcionar, quando polarizado com uma corrente reversa, como um circuito aberto at a sua tenso nominal, depois que atinge esta tenso ele passa a conduzir corrente para evitar

32 que sua tenso aumente alm da sua tenso nominal. Este tipo de diodo utilizado neste projeto como proteo das entradas analgicas do microcontrolador.
3.1.3 Noes de circuitos com transistores

Os transistores foram a grande revoluo na eletrnica do sculo XX, foi graas a ele que hoje existem poderosos computadores e os mais variados circuitos integrados. O transistor possibilitou a evoluo da eletrnica digital como um todo. Neste projeto o transistor foi utilizado como uma chave liga desliga e por isto ser apenas apresentada aqui a sua funo como chave [4] e [5]. O funcionamento de um transistor, cuja representao pode ser vista na Figura 3.3, como chave basicamente ligandose os pinos 2 e 3 dele como se fossem um diodo, ou seja, o sentido convencional da corrente eltrica que dever passar por ele dever ser do pino 2 para o pino 3 e utilizar o pino 1 como sendo a chave ou gate.

2 Q1

Figura 3.3 Representao esquemtica de um transistor

Basicamente o transistor funciona da seguinte forma, se uma tenso for aplicada na base (pino 1) de tal forma que uma corrente de base passe pelo transistor ento o transistor ir abrir uma passagem de corrente entre o coletor (pino 2) e o emissor (pino 3). Quando se retirar a corrente de base o transistor ir fechar a passagem de corrente entre o coletor e o emissor, funcionando assim como uma chave de liga e desliga.

33 Deve-se cuidar para que as correntes de base e as correntes que passam entre o coletor e o emisso no ultrapassem as correntes mximas especificadas pelo fabricante do transistor em questo, pois isto iria danificar o transistor e, portanto, iria fazer com que o circuito no funcionasse corretamente.
3.2 Noes sobre eletrnica digital

Eletrnica digital seria um pr-requisito para microcontroladores, aqui foi utilizado apenas o conhecimento sobre flip-flops e sobre conversor analgico digital alm de uma boa noo de circuitos TTL e CMOS. A eletrnica digital foi a cincia que possibilitou o surgimento de computadores e microcontroladores, foi graas a esta cincia que hoje possvel realizar o controle preciso de vrios processos. Na eletrnica digital o que se faz representar todos os sinais analgicos e que se deseja controlar em nmeros binrios (0 e 1). Depois de se conseguir equacionar o que se deseja dentro da lgebra booleana fica relativamente fcil encontrar um circuito que consiga executar tal controle [6]. importante ter uma boa noo sobre o latch (circuito base para um Flip-Flop) e ainda mostrar o funcionamento bsico de um conversor analgico digital, pois o lacth a estrutura bsica dos dispositivos de memria atuais e o conversor foi utilizado neste trabalho para poder monitorar a corrente do motor.
3.2.1 Flip-Flop, estrutura de memria digital

O lacth nand um Flip-Flop (FF) simples com apenas duas portas NAND. A caracterstica bsica de um lacth seria possuir dois pinos de sada, uma sendo o complemento da outra em termos de lgebra booleana, isto , quando uma tiver o valor 1 a outra ter o valor 0 e vice-versa. Estas sadas so normalmente denominadas como sendo Q e Q .

34 As entradas deste lacth so SET e CLEAR , esto normalmente em repouso no estado alto e por isto possuem a barra em cima do nome, assim se algum desejar colocar a sada Q em nvel lgico alto dever colocar a entrada SET em nvel lgico baixo mantendo a entrada CLEAR em nvel lgico alto, caso deseje-se colocar a sada em nvel lgico baixo deve-se fazer o oposto. As duas entradas no podem estar ao mesmo tempo no nvel lgico baixo, pois isto seria um comando invlido para este circuito relativamente simples. O circuito e a tabela-verdade de um lacth nand pode ser visto na Figura 3.4.

SET

2 1 3 Q

SET CLEAR
1 1 1 0 0 0 1 0

Q Q

Q Q

2 1 CLEAR 3 Q

0 1 1 0 invlido

Figura 3.4 Lacth Nand com portas NAND: esquemtico e tabela-verdade

Facilmente pode-se conseguir variaes deste circuito como por exemplo colocando uma porta NAND a mais em cada entrada de comando conseguindo assim um circuito sncrono, isto , introduzindo um comando de Enable ou Clock. Mas o mais importante era mostrar aqui como possvel armazenar um bit de memria. Agrupando-se quatro lacht destes pode-se armazenar uma palavra de 4 bits, que chamada de nibble. Ento se agrupando dois nibbles obtm-se uma palavra de 8 bits denominada byte (observe que seria necessrio oito circuitos de lacth como o da Figura 3.4). E assim por diante pode-se conseguir o circuito com o nmero de bits que se necessite simplesmente agrupando-se vrios lacths em paralelo.

35
3.2.2 Conversor analgico digital

O estudo de um conversor analgico digital (ADC) no pode ocorrer sem primeiro ilustrar como o funcionamento de um conversor digital analgico (DAC), isto porque um ADC muito mais complexo do que um DAC. Normalmente o ADC utiliza um DAC interno para saber quando a converso chegou ao fim. O circuito mais tradicional de uma converso digital analgica seria uma rede R / 2R, esta a melhor maneira de se explicar o funcionamento de um DAC porque alm de trabalhar basicamente com resistores fcil de montar na prtica pelo fato de possuir apenas dois valores de resistncias: R e 2R. A Figura 3.5 mostra como seria um DAC com esta rede de apenas 4 bits.

Vref

B0 2

B1 2

B2 2

B3 2

3 2

7 + 4

Vout

2R A 2R R

2R B R

2R C R

2R D

R 2R

Figura 3.5 DAC de 4 bits com rede R / 2R

A entrada deste DAC seria a palavra B de 4 bits, representada na figura por B3, B2, B1 e B0. O nmero indicado de cada bit indica a potncia que a base dois do nmero binrio dever ser o expoente da potncia com base 2, isto , o bit B2 tem valor 2 2 e o bit B3

36 tem valor 2 3 . Assim a palavra B pode variar de 0, quanto todos os bits estiverem com o valor zero, at 7, quando todos os bits tiverem o valor um. Para explicar o funcionamento deste circuito pode-se utilizar o teorema da superposio de fontes, isto , pode-se analisar separadamente cada bit do circuito e depois somar a contribuio de cada bit para ento chegar ao valor de Vout . Tambm ser necessrio utilizar o teorema de Thvenin, veja referncia bibliogrfica [7], para encontrar a tenso e a resistncia equivalente vista do ponto D. A anlise deste circuito fica mais fcil se for feito do bit mais significativo primeiro, assim primeiramente ser vista a contribuio apenas deste bit ligado Vref e os demais ligados ao terra. O circuito ento teria no ponto A o resistor de 2R do B0, que estaria conectado massa (terra), em paralelo com o 2R do ponto A para a massa, logo a resistncia equivalente do ponto A para o terra seria 2R//2R=R. Ento poderia se somaria esta resistncia com a resistncia existente entre os pontos A e B o que resultaria novamente em uma resistncia de 2R. Ento se repetiria esta mesma anlise at chegar ao ponto D, que seria um pouco diferente. No ponto D ter-se-ia uma resistncia de 2R vinda do ponto C, a resistncia de 2R do prprio ponto D massa, o que difere o ponto D dos demais pontos, e ainda o resistor 2R do bit B0 que nesta considerao estaria ligado Vref . Logo as duas resistncias de 2R que esto ligadas massa resultariam em uma resistncia equivalente de R e a tenso no ponto D seria a do divisor de tenso entre os resistores 2R, ligado Vref , e R ligado massa. A tenso calculada por este divisor de tenso seria ento
1 Vref . 3

37 J a resistncia equivalente vista pelo ponto D seria de 2R/3. O circuito equivalente de Thvenin visto do ponto D est ilustrado na Figura 3.6, observe que o Vth a tenso calculada para cada bit, no caso do bit B3 ser
1 Vref . 3

3 2

7 + 4

Vout

Vth 2R/3 R

Figura 3.6 Circuito equivalente de Thvenin do DAC de 4 bits

Como h uma massa virtual entre os terminais 2 e 3 do amplificador operacional, a equao para determinar a tenso de sada dada pela equao .

Vout =

R 3 Vth = Vth 2R / 3 2
Como a tenso de Thvenin para o caso do bit B3

Equao 3.2

1 Vref , a contribuio para 3

a tenso de sada do bit B3 ser de 0,5 Vref . Fazendo uma anlise anloga para encontrar a tenso de Thvenin para o bit B2 ser encontrada uma tenso de contribuio deste bit para a tenso de sada ser de 0,25 Vref . As demais contribuies respeitaro a regra de ser a metade da anterior at o bit menos significativo. Como o teorema da superposio diz que a tenso resultante ser a
1 Vref e conseqentemente a 6

38 soma das contribuies parciais das tenses encontra-se para o DAC de 4 bits a seguinte equao de tenso de sada:
B Vref 8

Vout =

Equao 3.3

Onde:

Vout e Vref: so as tenses de sada e referncia, respectivamente; B: o valor da palavra binria de entrada do DAC.
Observe que o maior valor de um DAC normalmente atinge ao valor da fonte

de referncia utilizada, neste exemplo pode-se notar que o mximo valor seria, em mdulo, 7/8 da tenso de referncia. No ADC acontece a mesma coisa, se for necessrio ler uma tenso de um potencimetro ligado a uma tenso Vref jamais seria possvel ler o valor exato de Vref , mas apenas 2(n1) valores com em passos discretos de 2-(n-1) iniciados em 0 e mximo valor de
2 ( n1) 1 Vref , onde n seria o nmero de bits do seu conversor ADC. 2 ( n1)

Neste trabalho inicialmente foi utilizado um ADC de 8 bits, pois um ADC de 8 bits seria capaz de ler uma valor aproximado de 99,22% do valor mximo de referncia e um passo aproximado de 0,78% do valor de referncia, ou seja, em termos de metrologia, este instrumento de medio seria da classe de 1% de exatido, o que mais do que suficiente para este prottipo. Existem vrios tipos de ADC no mercado atual e a caracterstica mais importante que varia entre eles a velocidade de converso, esta velocidade de converso varia porque varia o algoritmo utilizado para a implementao do ADC.

39 Como o intuito deste captulo apenas explicar como funciona basicamente a cincia que ser utilizada no trabalho, ser visto apenas um ADC tpico e seu funcionamento para explicar como funciona esta converso, os demais tipos de ADC sero apenas citados e podem ser vistos com mais detalhes na referncia bibliogrfica [6].

Figura 3.7 Diagrama geral de uma classe de ADC

A Figura 3.7 mostra como seria um diagrama de blocos de uma ADC, o funcionamento relativamente simples: primeiramente um comando de START deve ser dado unidade de controle quando a entrada analgica Va estiver pronta para a converso, a unidade de controle ir precisar de um sinal de Clock externo para poder sincronizar o envio da primeira palavra digital ao registrador. Ento a cada passo do Clock o ADC verifica se a nova tenso gerada pelo DAC interno maior do que a da entrada analgica, quando esta resposta for verdadeira ento o ADC interrompe sua converso habilitando o sinal EOC. Alguns tipos de ADC so: ADC de rampa digital, h um contador interno que ir contar desde 0 at um valor um pouco maior que Va encontrando assim o seu valor; ADC de aproximaes sucessivas, o mais utilizado por reduzir o seu tempo de converso de acordo com o nmero de bits, pois este verifica do bit mais significativo para o menos

40 significativo se cada um destes bits devem ou no estar ligados; ADC flash, o de maior velocidade disponvel atualmente, porm requer muito mais circuitos e conseqentemente mais caro.
3.3 Microcontroladores

Resumidamente pode-se dizer que um microcontrolador nada mais do que um circuito integrado da eletrnica digital com uma tabela-verdade muito maior que a maioria dos circuitos integrados e cuja tabela-verdade interna possibilita a execuo de vrias tarefas diferentes. Seu funcionamento bsico seria a traduo de um valor de uma palavra binria na sua entrada, que so chamados de opcode, em funo de sua tabela-verdade interna. Os

opcodes so os valores de entrada da unidade central de processamento (CPU) que foram


previamente programados neste CI e que representam algum tipo de operao, que pode ser lgica, aritmtica ou de transferncia de dados, tudo respeitando sua tabela-verdade. Na verdade bem mais complexo do que isto, mas esta uma analogia bastante interessante de se fazer. Existem vrios livros abordando este assunto e alguns deles esto na referncia bibliogrfica deste trabalho [6], [8] e [9]. A melhor maneira para verificar o funcionamento de um microcontrolador atravs de seu diagrama de blocos como o da Figura 3.8. Observe que a Figura 3.8 possui vrios circuitos independentes em um nico chip conectados de tal forma que tudo execute exatamente os opcodes gravados na memria de programa, ROM neste caso. No caso dos microcontroladores utilizados ainda h mais um tipo de memria de dados alm da memria RAM, a memria EEPROM. As portas paralelas e seriais so para realizar a interface com o mundo externo ao microcontrolador, as

41 interrupes so para melhorar algumas funes, por exemplo, a da comunicao serial. Os temporizadores podem ser utilizados para a contagem de tempo e assim realizar alguns atrasos ou esperas por algum evento de um determinado tempo. Os conversores ADC e DAC tambm so utilizados para interagir com o mundo externo.

Figura 3.8 Diagrama de blocos de um tpico microcontrolador

A explicao de como estes vrios perifricos internos ao microcontrolador funcionam e interagem entre si pode ser vista na referncia bibliogrfica de cada microcontrolador em particular. Detalhes sobre o funcionamento de microcontroladores em geral tambm podem ser encontrados nas bibliografias deste trabalho [10] e [11].
3.3.1 Microcontrolador PIC16F876A

O microcontrolador utilizado aqui ser apresentado de uma maneira resumida e direta para ilustrar todo o funcionamento bsico do PIC adotado e ainda dar uma noo de como funciona um microcontrolador de tecnologia RISC [8].

42

Figura 3.9 Diagrama de blocos do PIC16F87XA

Na Figura 3.9 est o diagrama de blocos do microcontrolador utilizado para a implementao do prottipo do rel inteligente. Observe a quantidade de funes disponveis

43 e imagine a densidade deste tipo de circuito integrado, conseqentemente a complexidade deste microcontrolador. Este PIC possui 28 pinos, dos quais apenas 22 esto disponveis para I/O, foram utilizados 4 pinos da porta RB como barramento de dados, isto , funcionando como I/O, e outros 3 pinos desta porta foram utilizados como barramento de controle para o controle do LCD e um pino ficou reservado para habilitar e desabilitar o teclado. A porta RA foi toda praticamente reservada para o conversor analgico digital, exceto pelo pino que habilita o teclado. Enquanto que a maioria dos pinos da porta RC ficaram disponveis para futuras implementaes. Esta porta a da comunicao serial, 2 pinos foram utilizados para a comunicao em si e, se for o caso, 1 pino poder ser utilizado para o controle do fluxo da comunicao se o protocolo RS-485 for utilizado. Todas as portas possuem sadas compatveis com a tecnologia TTL e so capazes de fornecer correntes de at 25mA cada, caso seja necessria mais corrente um drive de corrente dever ser conectado sada da porta em questo. Apresentados os conhecimentos que possibilitem o projeto e desenvolvimento da placa de circuito impresso que viabilize este projeto ser dado incio, no prximo captulo, ao desenvolvimento e projeto em si. Primeiramente, a placa de circuito impresso ser desenvolvida e posteriormente o firmware que consiga atender s necessidades de programao deste prottipo ser implementado.

44

Captulo 4 - Projeto do Equipamento (Hardware e Firmware)


O enfoque deste captulo ser mostrar todos os passos para a escolha dos componentes para a confeco do prottipo e tambm como foi elaborado o sistema operacional que ir rodar na placa microcontrolada, tambm chamado de firmware. importante ressaltar a sutil diferena existente entre firmware e software. O

firmware seria o programa desenvolvido especialmente para uma placa, por exemplo, a BIOS
de um computador pessoal, que desenvolvido especialmente para realizar a interface com a placa me. J o software um programa desenvolvido para uma aplicao final, normalmente o software roda sobre um sistema operacional previamente escolhido enquanto que o

firmware no.
Este captulo est dividido em itens que obedecem a uma ordem cronolgica da criao do prottipo. Inicialmente ser apresentado um diagrama de blocos que mostra os componentes bsicos de todo o projeto. Posteriormente cada bloco do diagrama ser estudado a parte visando a determinao de todos os componentes necessrios para o seu funcionamento. Por fim ser feita a integrao entre todos estes blocos criando assim um prottipo para este projeto.
4.1 Modelagem por Diagrama de Blocos

O melhor diagrama de blocos para mostrar as diferentes caractersticas necessrias ao prottipo ilustrado na Figura 4.1.

45
Entradas dos canais analgicos para o ADC Sadas TTLs para os acionamentos Interface serial para comunicao com o PC

Unidade Central de Processamento

Interface local de sada de dados (Display)

Mdulo de memria no voltil

Interface local de entrada de dados (Teclado)

Figura 4.1 Diagrama de blocos do rel inteligente

Para atender aos requisitos exigidos neste diagrama de blocos foi necessrio fazer um estudo das inmeras relaes entre os custos e os benefcios dos componentes compatveis existentes no mercado. Tambm foi levada em conta a estrutura do laboratrio da Universidade Federal de Uberlndia, onde o prottipo foi desenvolvimento.
4.1.1 Unidade central de processamento

Por se tratar de um prottipo bastante simples em termos de processamento, a unidade central de processamento (CPU) escolhida pde ser a de um microcontrolador bsico de 8 bits, que a mais barata. Alm disto o microcontrolador deve possuir uma interface serial compatvel com a existente nos computadores pessoais, assim foi escolhida a interface USART que bastante comum entre os microcontroladores atuais. Outra considerao o nmero de pinos I/O, pois o dispositivo dever ler um teclado, comandar um LCD, atuar em pelo menos um acionamento e ainda portas para comandar um ADC externo, conforme a proposta inicial, ou possuir entradas analgicas para um ADC interno.

46 Observe que a escolha do microcontrolador est relacionada com todas as funes que se deseja obter do equipamento. Inicialmente pensou-se em utilizar a famlia do 80C51 da Intel, por ser mais fcil de programar devido sua arquitetura CISC. Mas por convenincia da estrutura laboratorial existente, optou-se inicialmente pelo PIC16F628 e posteriormente pelo PIC16F876A, por este ltimo possuir um conversor analgico digital interno alm de pinos de I/O. Outro fator que auxiliou na escolha da famlia PIC foi o fato de que este tipo de microcontrolador possui uma memria flash interna suficientemente grande para armazenar todo o desenvolvimento do firmware o que simplifica o projeto de hardware, enquanto que a tecnologia da famlia 80C51, na maioria das opes existentes, necessitaria de um barramento de dados externo para acessar a memria de programa externa.
4.1.2 Mdulo de memria no voltil

Alguns bytes de memria EEPROM so necessrios para implementar a memria no voltil do equipamento, isto porque se deseja que o mesmo lembre da sua ltima configurao ao religar. A EEPROM foi escolhida no lugar da memria FLASH porque a aplicao necessitava de pouca memria e seria melhor utilizar uma memria que possusse escrita e leitura por byte, ou seja, byte a byte a EEPROM pode ser alterada e lida enquanto que a FLASH normalmente precisa ser apagada por bloco. Normalmente estes dois tipo de memria so utilizadas como memria de programa, mas neste caso a idia utiliz-las como memria de dados no voltil, assim sua gravao feita em tempo de execuo e o PIC j possui instrues que facilitam este tipo de programao.

47 O PIC16F876A possui 256 bytes de memria EEPROM, ento para o desenvolvimento deste firmware optou-se por dividir estes 256 bytes em 8 blocos de 32 bytes cada, no primeiro bloco de memria foram colocados os dados referentes configurao do equipamento, tais como identificao do equipamento (ID) e os dados do motor a ser controlado (corrente nominal, tempo de partida e suas respectivas unidades). No segundo bloco foram colocados os dados referentes curva que o rel inteligente dever obedecer durante a monitorao do motor configurado. Nada foi implementado nos demais blocos, mas o desenvolvimento do firmware foi de tal maneira que facilmente pode-se aumentar o nmero mximo de pontos da curva de controle do equipamento ou utilizar este vrios bytes para outras aplicaes.
4.1.3 Entradas dos canais analgicos para o ADC

Foi exatamente nesta fase do projeto que se desistiu do PIC16F628, pois como ele no possui um ADC interno seria necessrio um externo, at a tudo estava dentro do esperado. Mas quando se percebeu que seria necessrio um ADC serial externo e quando se estudou o datasheet de um perifrico destes tudo mudou, pois esta programao seria bastante complicada de se desenvolver. Em virtude desta dificuldade optou-se migrar para o PIC16F876A, porque este possui a mesma estrutura de memria interna, o que possibilitou migrar todo o cdigo de programa desenvolvido para o PIC16F628 sem grandes modificaes, e ainda possui um ADC interno de 10 bits com at 5 canais. Em virtude desta troca o projeto ficou com pinos de I/O sobrando, j que o PIC16F876A possui 22 pinos de I/O [11]. J quanto s caractersticas do ADC interno, como o que se deseja monitorar uma corrente senoidal cuja freqncia de rede de 60 Hz, o tempo de aquisio de dados

48 deste ADC mais do que o suficiente, aproximadamente 20 s [11]. Quanto configurao do ADC interno, optou-se por utilizar apenas trs canais e utilizar as outras duas entradas analgicas como entrada de referncia para melhorar a qualidade do sinal medido.
4.1.4 Interface serial para comunicao com o PC

A interface serial escolhida para comunicao com o PC foi a RS-232 para o desenvolvimento do prottipo, mas pretende-se utilizar a RS-485/422 tambm caso seja possvel. A idia inicial era utilizar uma rede CAN para esta comunicao, porm seria muito mais difcil e caro. A vantagem da rede CAN para a rede RS-485 que pode-se conectar um novo equipamento na rede em qualquer topologia e sem se preocupar com a fiao, enquanto que a rede RS-485/422 necessita ser conectada ponto a ponto, no permitindo ramificaes. Ento a rede CAN ficar como idia de trabalhos futuros. Como o protocolo entre a RS-232 e a RS-485 so os mesmos e a nica diferena na camada fsica da rede, ento tudo que for feito para um poder ser aproveitado para o outro padro bastando substituir a camada fsica, isto , a interface eltrica da comunicao. Ambos os padres utilizam normalmente 8 bits de dados, um bit de sincronismo chamado start bit e um bit de parada denominado de stop bit. Outras variaes podem ser utilizadas, por exemplo, a utilizao de um bit de paridade para fazer o controle de redes com mais de um escravo no caso do padro RS-485 ou RS-422. A Figura 4.2 ilustra bem como est distribudo estes bits ao longo do tempo.

49

1 bit de paridade

8 Bits de dados

Figura 4.2 Protocolo de comunicao tpico para RS-232 e RS-485

A diferena mais significativa em termos funcionais entre os padres RS-232 e RS-485 que o primeiro necessita de no mnimo trs fios (um para transmisso, um para recepo e um comum de referncia) enquanto que no segundo podem ser utilizados apenas dois fios (ambos so utilizados para a transmisso e recepo) ou RS-422 com quatro fios (dois para transmisso e dois para recepo de dados). Se forem utilizados apenas dois fios para o padro RS-485 a comunicao dever ser half duplex, isto , apenas um dispositivo de cada vez poder transmitir seus dados, isto porque existe apenas um canal de dados e no pode ser usado para transmitir e receber dados ao mesmo tempo. J no padro RS-232 a comunicao pode ser sempre full duplex, ou seja, ambos os dispositivos podem transmitir simultaneamente, pois existe um canal para transmisso e outro para recepo. Para evitar que o PC transmita dados ao mesmo tempo que o prottipo e que ocorra coliso de dados na rede caso ela seja half duplex desenvolveu-se toda a programao da serial com um protocolo mestre escravo, isto , quando um equipamento somente transmite depois de receber algum dado e o PC o nico que inicia uma tranmisso..

1 bit de parada

1 Bit de start

50 A diferena entre as camadas fsicas utilizadas est basicamente nas tenses colocadas na rede e seus significados. Para o RS-232 o nvel lgico zero transmitido quando uma tenso positiva entre 3V e 12V estiver entre os terminais de transmisso e o comum, analogamente um nvel lgico um quando esta tenso for negativa entre -12V e -3V. Na recepo de dados os mesmos nveis de tenso devem ser respeitados mudando apenas que a diferena de tenso estar entre os terminais de recepo e o comum. O padro RS-485, por possuir apenas dois fios, trabalha com nveis lgico correspondentes s diferenas de tenso entres estes dois fios. Se a tenso for positiva ento um zero lgico foi transmitido e se for negativa um nvel lgico um foi transmitido ou recebido. Normalmente a amplitude desta tenso varia de 2V 6V [16]. A utilizao do padro RS-232 mais simples e facilita a interface com os computadores pessoais atuais, pois eles possuem, normalmente, pelo menos uma porta serial RS-232. Se for utilizar o RS-485 que tem a vantagem de atingir maiores distncias devido ao fato de transmitir tenses balanceadas sem uma tenso de referncia comum ser necessrio instalar um conversor de RS-485 para RS-232 na porta serial do PC [16]. Os componentes adquiridos para realizar a comunicao serial foram o MAX232 e o HIN232 para o padro RS-232 e o DS485 para o padro RS-485. A escolha por estes dispositivos foi baseada no baixo custo e por serem fceis de encontrar.
4.1.5 Interface local de sada de dados (display)

Para fazer uma interface visual com o usurio local optou-se pela utilizao de um display de cristal lquido de 2 linhas por 16 colunas, pois este LCD bastante comum e possui caracteres suficientes para realizar uma boa interface. Visando melhorar ainda a

51 interface de sada de dados foi ligado um LED vermelho indicando se o motor est ligado ou no. O LCD escolhido foi um com comunicao paralela pela facilidade de sua programao, porm foi preciso utilizar 4 pinos de dados e 3 pinos de controle para realizar esta comunicao. Gastou-se apenas 4 pinos de dados porque este tipo de LCD pode ser conectado com um barramento de 4 ou de 8 bits de dados. Optou-se pelo barramento de 4 bits para economizar portas de I/O do PIC e porque j havia 4 pinos no barramento de dados destinados ao teclado, assim foi compartilhar estes pinos. Fazer funcionar esta interface foi a parte mais complicada de todo o projeto, isto porque foram desenvolvidas aqui todas as rotinas de comunicao com o LCD em linguagem de mquina.
4.1.6 Interface local de entrada de dados (teclado)

A entrada de dados no foi difcil de implementar e a idia inicial foi satisfatria para atender ao que se esperava do projeto. Foi criado um teclado de apenas quatro teclas: uma para acessar o menu do dispositivo (tecla Menu); uma para sinalizar uma confirmao de dados (Tecla Ok); uma para sinalizar um incremento (tecla Up); e finalmente uma para sinalizar um decremento (tecla Down). Com estas quatro teclas foi possvel criar uma boa interface de entrada de dados tanto para perguntas e confirmaes simples quanto para entrada de valores numricos pelo usurio. Para ler estas teclas foram necessrios utilizar 5 pinos do PIC, os mesmos 4 pinos do barramento de dados utilizados na comunicao com o LCD mais 1 pino de controle para habilitar o teclado o que possibilitou a economia de 3 pinos de I/O do PIC.

52
4.1.7 Sadas para os acionamentos

Foi separado um pino de I/O do PIC para poder controlar o acionamento do motor, caso no final do projeto sobre mais pinos outras aplicaes podero surgir, mas por hora o objetivo apenas controlar o acionamento de um nico motor atravs da monitorao de suas correntes. Uma pequena placa adicional foi utilizada para elevar a corrente do pino do PIC para uma corrente capaz de acionar um contator, por exemplo. Esta placa utilizar um circuito bastante simples com um transistor e um rel de 5V comum.
4.2 Hardware proposto

Conforme foi visto anteriormente, inicialmente o projeto foi baseado no PIC16F628, uma vez que este PIC atendia ao requisitos de memria RAM e EEPROM para os dados e memria FLASH para o firmware e aos requisitos de pinos de I/O. Ento foram desenvolvidos tanto o protocolo de rede da camada aplicao com este microcontrolador como toda a interface com o LCD e com o teclado. Somente quando se concluiu esta parte do trabalho foi que se iniciou o estudo de como seria a interface com o ADC externo. Como j estava previsto neste projeto, reservou-se dois pinos de I/O (RA6 e RA7) para a comunicao serial com o ADC externo. A Figura 4.3 mostra como estava o projeto que utilizava o PIC16F628.

53
J2 3 2 1 Vcc Driv er p/ Motor U1 RA0/AN0 RA1/AN1 RA2/AN2/VREF RA3/AN3/CMP1 RA4/TOCKI/CMP2 RA5/MCLR/Vpp RA6/OSC2/CLKOUT RA7/OSC1/CLKIN RB0/INT RB1/Rx/DT RB2/Tx/CK RB3/CCP1 RB4/PGM RB5 RB6/T1OSO/T1CKI/PGC RB7/T1OSI/PGD R5 10K R6 10K Vcc U3 4 3 2 DI DE RE A B R0 DS485 2 6 7 1 + J4 1 2 3 RS485 Vcc

P1 10K C3 100nF

VDD

1 J3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 LCD RS R/W EN D1 S1

Vss

PIC16F628

S4

S3

S2

Figura 4.3 Esquemtico do rel inteligente utilizando o PIC16F628

Depois de um estudo completo sobre como seria a comunicao com o ADC externo, o tempo necessrio para se program-lo e o fato de o projeto com o PIC16F628 estar caminhando para o seu limite em termos de hardware, decidiu-se ento trocar este microcontrolador por outro que j possusse um conversor analgico digital interno, ou seja, o PIC16F876A.

54
J1 ADC Vcc 1 2 3 4 5 C3 P2 10K 3 Vcc 3 2 U1 1 10K P1 20 10K 2 3 4 5 6 7 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 U2 Vcc PIC16F876A J2 3 2 1 Driv er p/ Motor 4 2 3 8 DI RE DE +VCC DS485 / MAX485 RO A B 1 6 7 + J4 1 2 RS485 R5 J3 S4 D1 RS R/W EN S3 S2 S1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 LCD 2 1 100nF

1 9 10

RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/TOCKI MCLR RA5/SS/AN4 RB0/INT OSC1/CLKIN RB1 OSC2/CLKOUT RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK Vss RC7/RX/DT Vss

X1

20 MHz C5 15 pF C4 15 pF 19 8

Figura 4.4 Esquemtico do rel inteligente utilizando o PIC16F876A

A escolha do novo microcontrolador no foi difcil, pois bastou procurar pelo PIC imediatamente superior que possusse as mesmas caractersticas existentes no PIC16F628 e que ainda dispusesse de um ADC interno e mais alguns pinos de I/O para eventuais novas necessidades. O primeiro microcontrolador que atendia a estas exigncias foi o PIC16F873A, mas ao utiliz-lo descobriu-se que a disposio da sua memria RAM tornava impossvel utilizar a mesma camada de aplicao da rede serial j desenvolvida, foi assim que se optou finalmente pelo PIC16F876A que compatvel com o endereamento de memria RAM do PIC16F628, pois todo o firmware foi desenvolvido utilizando-se de ponteiros na declarao de variveis.

VDD

55 A compatibilidade entre o PIC16F628 e o PIC16F876A foi possvel principalmente devido ao fato de possurem ponteiros para acessar os 16 ltimos bytes do banco 0 da memria RAM, o que possibilita o acesso aos valores das variveis do banco 0 mesmo estando com os outros bancos selecionados. Isto no ocorre no PIC16F873A. O esquemtico mostrado na Figura 4.4 foi o utilizado na confeco da placa do prottipo do rel inteligente salvo apenas a substituio do componente U2, o DS485, por um HIN232, o que simplificou consideravelmente os testes no laboratrio, visto que o laboratrio no contava com um conversor RS-485 para RS-232 que seria necessrio instalar no PC. Outra mudana causada pele troca do DS485 pelo HIN232 foi o cabo de comunicao, que passou de 2 fios para um cabo de 3 fios, incluindo o fio de referncia GND. Agora uma breve explicao deste esquemtico dar uma idia de como a placa funciona. Iniciando com U1, que o PIC16F876A, ele foi conectado a uma alimentao de 5V (Vcc) e a um cristal de 20MHz com este cristal o PIC executa uma instruo em apenas 200ns. O conector J1 utilizado para a entrada analgica dos trs canais analgicos disponibilizados pelo PIC. O hardware ligado a este conector dever limitar a tenso em at 5V para que no queime estas entradas analgicas. Este conector tambm fornece a tenso de referncia para que o ADC interno identifique esta de tenso de entrada. O conector J2 ir fornecer um sinal digital para o acionamento do motor, lembrando que ser necessrio um amplificador de corrente conhecido como driver para que o sinal digital seja capaz de acionar um contator, que por sua vez ir acionar o motor. O U2 e o conector J4 foram substitudos conforme j foi dito aqui, mas eles tm a funo da camada fsica da rede de comunicao serial, isto , atravs deles que os dados realmente so transmitidos entre o rel inteligente e o PC remoto.

56 O conector J3 ser ligado ao LCD, observe que sero necessrios 4 pinos de dados e 3 pinos de controle para que o PIC consiga comunicar-se com o LCD. Ainda esto disponveis neste conector dois pinos para a alimentao (Vcc e Gnd) e ainda um pino para o ajuste do contraste do display. Os botes S1, S2, S3 e S4 tero as funes das teclas Down, Up, Ok e Menu, respectivamente. Observe que o pino 6 do PIC o RA4 est ligado neste botes e enquanto ele estiver com um nvel lgico 1 (5V) o teclado estar desabilitado e os 4 pinos de dados de RB4 at RB7 podero ser utilizados na comunicao com o LCD.
4.3 Firmware proposto

Como foi explicado anteriormente, o esquema da placa do rel inteligente relativamente simples, mas isto graas ao fato do microcontrolador utilizado possuir internamente vrios perifricos. Se no fosse o fato do microcontrolador possuir uma memria flash para armazenar o firmware, uma memria EEPROM para armazenar os dados de configurao do usurio, um ADC e um canal serial USART ento o esquemtico seria bem mais complicado do que este apresentado aqui. Por tudo isto, a grande dificuldade est mais relacionada ao projeto e desenvolvimento do firmware do que ao projeto do hardware necessrio para atender aos requisitos do rel inteligente. O firmware foi desenvolvido de maneira modular, assim o cdigo necessrio para controlar o teclado ficou totalmente independente daquele necessrio para controlar o LCD. A grande vantagem de programar o microcontrolador em mdulos que a manuteno fica mais fcil.

57 O mdulo que ficou responsvel pelo teclado acionado via varredura pelo programa principal no seu loop principal, isto , o teclado no funciona com interrupo, mas sim por varredura. J o mdulo desenvolvido para controlar o LCD disponibilizou vrias funes que simplificaram a escrita de caracteres no display. Foi criado um mdulo contador de tempo que funciona com interrupo, este mdulo utilizado para gerar o relgio interno do rel inteligente. Infelizmente para se conseguir um relgio preciso seria necessrio outro cristal conectado diretamente a um pino especfico, mas como no h necessidade de tanta exatido foi utilizado o prprio oscilador de 20 MHz do microcontrolador para a contagem do tempo. Este contador ser utilizado para medir o tempo em que o motor estar trabalhando em sobre corrente. Um mdulo de comunicao serial foi desenvolvido totalmente independente, ele controlado remotamente via interrupo serial. Trata-se de um mdulo que simplesmente responde aos comandos remotos de maneira rpida e eficaz. Este mdulo utiliza as funes do mdulo de acesso memria EEPROM para gravar e verificar os dados configurados. Por fim, um mdulo capaz de ler os dados do ADC foi desenvolvido de modo a imprimir no display a corrente lida naquele instante. Este mdulo tambm executado via varredura pelo programa principal, assim como o teclado.
4.3.1 O programa principal do firmware

Nesta parte do trabalho sero apresentados todos os fluxogramas dos mdulos desenvolvidos para o firmware do prottipo de rel inteligente, tambm ser explicado o funcionamento de cada um deles para que todo o projeto do equipamento possa ser entendido. A Figura 4.5 mostra o fluxograma completo do programa principal, observe que assim que o PIC inicializado, o primeiro passo iniciar os valores das variveis globais

58 utilizadas no controle do rel inteligente. Em seguida o microcontrolador deve preparar as interrupes (serial e do relgio interno) para que este prottipo possa contar o tempo e ainda comunicar-se com o PC remoto. A ltima fase da inicializao do equipamento a do display, isto , sincronizar a comunicao entre o PIC e o LCD, sem dvida nenhuma nesta etapa que a programao mais trabalhosa porque o PIC trabalha em tempos de "s" enquanto que o LCD trabalha em "ms".

Loop Principal do Programa Principal Incio do Programa Mostra a mensagem principal no LCD Inicializa variveis e portas do Microcontrolador Mdulo ADC (imprime a corrente lida) Inicializa Interrupes (Relgio e Serial) Mdulo do Teclado (Retorna tecla) Inicializa o Mdulo LCD (Display) = Ok

Tecla?

= Menu

= Up / Down

Seleciona o canal do ADC da corrente escolhida (Up/Down)

Rotina de configurao local (modo de ajuste)

Figura 4.5 Fluxograma do programa principal do firmware

O chamado Loop Principal do Programa Principal a parte do programa que ter uma repetio eterna e que far com que o rel inteligente sempre esteja monitorando as correntes, o teclado e ainda a comunicao serial. O loop principal comea mostrando uma mensagem padro na primeira linha do LCD e em seguida faz a leitura de um dos canais do ADC e mostra o valor da corrente lida de acordo com o que foi configurado na sua memria

59 EEPROM. Ento o microcontrolador ir monitorar o teclado para verificar se h algum comando local a ser atendido. Observe que a comunicao serial e o controle do relgio juntamente com o controle do tempo em que a corrente monitorada est acima da corrente nominal configurada para o motor em questo no foram tratadas no programa principal e muito menos no loop principal. Na verdade a comunicao serial funciona atravs da interrupo que foi inicializada no programa principal enquanto que o controle de sobre corrente foi implementado na interrupo do relgio interno. A Figura 4.6 mostra como foi implementada a rotina de configurao local, neste modo de ajuste o teclado lido at que uma tecla seja pressionada, caso passe muito tempo sem que a tecla seja pressionada ento a rotina do teclado retorna que nada foi pressionado. Durante o modo de ajuste o equipamento tambm no responde a nenhum comando serial, afinal ele est em ajuste, mas recebe os dados normalmente e pode executar o comando assim que sair deste modo, porm o PC remoto pode achar que o comando no foi recebido corretamente caso ocorra um erro de time out.

60

Figura 4.6 Fluxograma da rotina para configurao local (modo ajuste)

Note que para simplificar o fluxograma no foram colocadas todas as variveis capazes de serem alteradas localmente, mas sim apenas o nome da primeira que o ID do equipamento a ser ajustado. Este ID utilizado para saber a qual equipamento da rede est direcionado esta informao, isto foi desenvolvido no firmware j prevendo a instalao de um conversor RS-232 para RS-485 no PC e a troca do chip MAX232/HIN232 por um DS485, por exemplo. Esta mudana j permitiria a confirugao de uma rede, pois tanto o firmware quanto o software j foram desenvolvidos prevendo esta alterao. Outras variveis podem ser configuradas localmente via teclado, mas a interface para isto no to amigvel quanto a configurao remota. Exemplos de outras variveis so: mxima variao da corrente lida no ADC (chamado de delta); menor valor da corrente lida no ADC (corrente equivalente se o valor lido no ADC for zero); corrente nominal do motor; tempo de partida do motor; unidade em que o tempo de partida do motor est expresso; unidade em que a corrente do motor est expressa.

61
4.3.2 Mdulo de controle do LCD (display)

O funcionamento do mdulo do display totalmente independente dos demais e utilizado apenas para mostrar os resultados de uma maneira local. Depois de se inicializar o LCD e criar algumas rotinas que facilitam a impresso de caracteres no display ficou muito mais fcil de se utilizar este mdulo, contudo foi aqui empregada a maior parte do tempo em programao. Inclusive, ao se trocar o PIC utilizado, foi necessrio revisar todo este mdulo porque o novo PIC o PIC16F876A necessitava de um cristal externo de 20MHz, assim o sincronismo entre o microcontrolador e o LCD necessitou de atrasos maiores. O mdulo do display conta com uma rotina de inicializao, uma de escrita e uma de leitura de dados. Outras variaes destas rotinas bsicas foram desenvolvidas para facilitar a escrita de frases completas gravadas na memria de programa memria flash do microcontrolador e para simplificar a programao do LCD.

Tabela 4.1 Descrio dos pinos de um LCD padro


Pinos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Funo Alimentao Alimentao V0 RS R/W E B0 B1 B2 B3 B4 B5 B6 B7 Descrio Terra ou GND Vcc ou +5V Tenso de ajuste do contraste 1 = Dado; 0 = Instruo 1 = Leitura; 0 = Escrita 1 = Habilitado; 0 = Desabilitado

Barramento de Dados

A Tabela 4.1 traz uma descrio bsica de cada pino do LCD. Dos 7 pinos utilizados para a comunicao entre o display e o microcontrolador, 4 pinos fazem parte do

62 barramento de dados do pino 11 at o pino 14 e compartilhado com o teclado e 3 pinos so utilizados para o controle do LCD, chamados de barramento de controle.

Tabela 4.2 Instrues bsicas do LCD


Descrio Display Limpa display com home p/ cursor Liga Desliga Desloca p/ Esquerda Controle do Cursor Desloca p/ Direita Cursor Home Cursor piscante Cursor com alternncia Sentido de deslocamento do cursor Para a esquerda ao entrar caractere Para a direita Para a esquerda Deslocamento da mensagem ao entrar caractere Para a direita Deslocamento da mensagem sem Para a esquerda entrada de caractere Para a direita Primeira linha Endereo da primeira posio Segunda linha Modo Liga (sem cursor) Desliga RS 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 R/W 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Dados (Hexa) 0C 0A / 08 01 0E 0C 10 14 02 0D 0F 04 06 07 05 18 1C 80 C0

A programao do display foi feita utilizando os comandos mais comuns descritos na A Tabela 4.1 traz uma descrio bsica de cada pino do LCD. Dos 7 pinos utilizados para a comunicao entre o display e o microcontrolador, 4 pinos fazem parte do barramento de dados do pino 11 at o pino 14 e compartilhado com o teclado e 3 pinos so utilizados para o controle do LCD, chamados de barramento de controle.

Tabela 4.2, para enviar comandos com apenas 4 bits (nibble) de dados necessrio enviar primeiro o nibble mais significativo depois o menos significativo. Por

63 exemplo, para enviar o comando liga display sem cursor (0x0C) deve-se enviar primeiro o

nibble 0 (0000 em binrio) e depois o nibble C (1100 em binrio).


Para maiores detalhes de como este mdulo ou os prximos foram implementados na prtica basta consultar o Anexo A . Neste anexo encontra-se o cdigo fonte compilado de todo o firmware, lembrando que a linguagem utilizada para esta programao foi a linguagem de mquina do PIC.
4.3.3 Mdulo de controle do teclado

A Figura 4.7 mostra como o circuito (hardware) do teclado foi implementado, necessrio entender bem este circuito para compreender como ele foi programado. Primeiramente ser apresentado os componentes do circuito:

Vcc a tenso de alimentao de 5V; R5 o resistor de pull-up; D1 o diodo de isolao dos pinos de dados; S1 o boto do teclado, um push bottom; O pino de controle para habilitar e desabilitar o teclado; O pino de dados a representao de um nico boto, lembrando que o rel inteligente conta com quatro botes idnticos a este.

64
Vcc

R5 10K

1 D1 S1 1 Pino de Dados Pino de Controle

Figura 4.7 Esquemtico do circuito do teclado

Feitas as apresentaes dos componentes deste circuito, parte-se agora para o entendimento de como foi possvel a programao do teclado. importante lembrar que o teclado foi programado pelo sistema de varredura, isto , o loop principal fica monitorando o teclado de tempos em tempos e no h nenhuma interrupo do teclado como nos computadores pessoais. O teclado fica normalmente desabilitado, ou seja, o pino de controle est sempre com nvel lgico 1 (+5V). Nesta condio pode-se notar que o diodo jamais ir conduzir, pois a tenso de 5V a mais alta tenso presente no circuito e, por isto, ser impossvel que o diodo seja polarizado diretamente a ponto de haver uma diferena de tenso direta de +0,7V. Como jamais passar corrente pelo diodo, o boto poder ser pressionado que no alterar a tenso que estar presente nos pinos de dados, ou barramento de dados. Assim, os pinos de dados podero estar sendo utilizados para acessar outros dispositivos, no caso o LCD. Para se realizar uma leitura do teclado deve-se inicialmente habilit-lo, isto , colocar o pino de controle em nvel lgico 0 (0V). Quando o pino de controle estiver com nvel lgico 0 o diodo poder ser polarizado diretamente e, conseqentemente, as

65 informaes contidas nos pinos de dados podero sofrer alteraes vindas desta conexo fsica.

Incio da Rotina que l a tecla pressionada

Habilita os pull-ups internos do barramento de dados

Espera por 10ms para filtrar rudos

Desabilita os pull-ups internos do barramento de dados

Habilita o teclado pelo pino de controle

L o contedo do barramento de dados

Salva o valor lido

Fim da Rotina

Figura 4.8 Fluxograma da rotina que l o teclado

Para ler a tecla propriamente dita deve-se colocar nvel lgico 1 no pino de dados que est conectado tecla que ser lida, isto feito atravs da habilitao dos resistores de pull-up internos da prpria porta (veja a Figura 4.8). Em seguida aguarda-se algum tempo para estabilizar as tenses e eliminar os rudos e ento feita a leitura da porta para verificar as teclas que esto pressionadas. Caso seja lido um nvel lgico 1 a tecla no foi pressionada, mas caso seja lido um nvel lgico 0 a tecla est pressionada. Para finalizar a leitura do teclado no momento em que se salva o valor lido feito um filtro dos bits do barramento de dados zerando os valores dos outros pinos da porta (a porta do PIC possui 8 pinos ou 8 bits) e posteriormente negado o valor destes pinos, para que o bit fique com o valor 1 somente se a tecla for pressionada, o que facilita a utilizao lgica no meio do programa, pois 1 est associado verdadeiro e 0 falso. Observe que se o pino lido estiver em nvel lgico 0 significa que est diferente do que foi colocado nele atravs dos resistores de pull-up, isto indica que houve uma

66 interferncia do hardware externo, ou seja, o boto foi pressionado. Esta interferncia ocorre devido passagem de corrente pelo boto pressionado e pelo diodo diretamente polarizado, como a tenso de conduo do diodo de aproximadamente 0,7V, ento a tenso no pino de dados ser de aproximadamente 0,7V, tenso esta que indica um nvel lgico 0 e no 1. A regra implementada para a leitura do teclado neste firmware foi a mais simples possvel, observe a Figura 4.9 para entend-la melhor. Se no houver tecla pressionada a varredura passa pelo mdulo do teclado somente verificando se deve responder a algum comando serial. J se houver tecla pressionada, o rel ir guardar apenas a ltima tecla pressionada, isto , mesmo que sejam pressionadas mais de uma tecla simultaneamente apenas a ltima ficar gravada na varivel que indica a tecla pressionada. praticamente impossvel soltar as teclas no mesmo instante, pois o tempo que o PIC executa uma instruo menor que 1s.

Figura 4.9 Fluxograma do mdulo do teclado em modo normal

67 Outro fluxograma de leitura do teclado foi implementado para quando o rel inteligente estiver sendo ajustado no mdulo local, isto , caso algum esteja configurando o rel inteligente localmente. A Figura 4.10 mostra a outra forma de leitura do teclado implementada para quando o equipamento estiver em modo de ajuste local. Note que de acordo com este segundo fluxograma o rel inteligente no espera que a tecla pressionada seja solta, isto faz com que se a tecla for mantida pressionada pelo usurio do equipamento por muito tempo o mdulo ir acreditar que a tecla foi pressionada vrias vezes, por isto no modo de ajuste deve-se ter bastante cuidado ao se pressionar o teclado. Tambm importante notar que se nenhuma tecla for pressionada por muito tempo, aqui configurado 7s, o rel inteligente ir acreditar que o usurio no mais ir configurar o equipamento e, conseqentemente, ir sair do modo de ajuste, o que evita que este prottipo fique no modo de ajuste por esquecimento.

Incio do Mdulo do Teclado (ajuste) Espera 100ms para ler o teclado Rotina que l a tecla pressionada Alguma Tecla?

Limpa varivel que indica tecla pressionada

No

No

Sim

Inicia contador de tempo (7s)

Tempo acabou?

Salva tecla pressionada na varivel

Sim Espera 50ms para que a tecla seja solta

Fim do Mdulo

Figura 4.10 Fluxograma do mdulo do teclado em modo de ajuste

68
4.3.4 Mdulo de controle do relgio

O contador de tempo ou relgio interno do rel inteligente foi implementado no

Timer2 do microcontrolador. Este contador de tempo interno foi programado para gerar
interrupes de 1ms, isto , ele foi programado para gerar mil interrupes por segundo. Esta contagem de tempo possui um erro, como toda medio, mas para esta aplicao o erro desprezvel, porm para criar um relgio no, pois teria um atraso por dia que poderia ser significativo. Este erro no foi levantado porque no devido ao clculo, que est exatamente correto, mas devido s variaes do cristal de 20 MHz utilizado, por isto quando se deseja uma preciso em um dispositivo destes utilizam-se um cristal de 32 kHz e um capacitor varivel para realizar um ajuste fino do relgio. Nesta rotina de interrupo foi implementado o controle responsvel para verificar o tempo de sobre corrente do motor. Este controle simplesmente conta o tempo que a sobre corrente est no motor e verifica se este tempo est dentro do tempo programado para este motor. Caso este tempo seja ultrapassado o rel inteligente ir desligar o motor e gerar um alarme visual localmente e outro no programa instalado no PC remoto. A grande vantagem de se implementar o controle de sobre corrente na interrupo do relgio interno do prottipo que, com toda a certeza, o motor ser desligado no instante em que foi programado para desligar.
4.3.5 Mdulo de controle da comunicao serial

Este mdulo sem dvida nenhuma o mdulo mais complexo que foi desenvolvido neste prottipo, apesar do mdulo do LCD ter sido mais trabalhoso e mais problemtico, aqui foi elaborado os mais complexos cdigos do firmware.

69 A complexidade deste cdigo est relacionada criao de um protocolo de comunicao e ao sincronismo da comunicao entre o software e o firmware. Mas, graas ao conhecimento adiquirido durante a elaborao de outros trabalhos que utilizam a comunicao serial [16], no houveram dificuldades na elaborao desta parte do cdigo. O recebimento de dados via canal serial foi todo implementado atravs da interrupo do PIC, mas a resposta a esta interrupo foi implementada na varredura do mdulo do teclado, pois o nico lugar do firmware que sempre est em execuo, j que o

loop principal pode ficar sem ser chamado se algum ficar segurando uma tecla pressionada.
A rotina responsvel pela recepo dos dados vindos do canal serial simplesmente copia estes dados para um buffer na memria RAM do microcontrolador, uma vez que esta cpia tenha sido completada um flag ir indicar que os dados podero ser tratados. Ento no mdulo do teclado uma rotina que verifica este flag e trata os dados, se for o caso, continuamente chamada por varredura. J rotina que trata os dados responsvel por executar o comando enviado pelo PC remoto e ainda responder que este comando foi executado corretamente. No instante em que o rel est tratando os dados recebidos ele poder estar: copiando dados para a EEPROM ou da EEPROM; ligando ou desligando o motor; atualizando o seu relgio interno. A estrutura da camada de aplicao do protocolo de rede desenvolvido para a comunicao entre o PC e o rel digital de 48 bytes assim distribudos: 4 bytes de controle; 3 bytes com as 3 correntes de fase; 3 bytes com o horrio do relgio interno (segundo, minuto e hora); 5 bytes disponveis para futuras implementaes; 32 bytes a serem escritos na EEPROM ou lidos; 1 byte com o nmero de bytes do pacote (48 ou 0x30). Caso haja o recebimento de um byte a mais ou a menos ou caso algum byte de controle seja diferente dos

70 valores esperados um erro de comunicao ser reportado ao PC e ser armazenado no seu histrico.
4.3.6 Mdulo de controle do ADC

A Figura 4.11 mostra o fluxograma do mdulo do ADC que chamado durante a execuo do loop principal. Sempre que o programa passa pelo loop principal as correntes so lidas pelo ADC do microcontrolador, mas se por algum motivo o loop principal for interrompido pode ser porque algum travou o teclado ou porque algum esteja acessando o modo de ajuste o equipamento no estar atualizando o valor da corrente, o que pode resultar numa tomada de deciso errada diante de uma possvel corrente antiga.

Incio do Mdulo do ADC

Verifica a corrente que deve ser mostrada no LCD

Aponta para o prximo canal do ADC <3

Faz a leitura do canal do ADC

Grava valor lido na varivel correspondente

Calcula o valor da corrente lida no ADC

=3

Testa Contador?

Incrementa um contador

Mostra corrente do canal selecionado no LCD

Fim do Mdulo

Figura 4.11 Fluxograma do mdulo do ADC

O fluxograma mostra que inicialmente este mdulo ir verificar qual dos trs canais est selecionado para ser mostrado no LCD, em seguida ir ler as correntes do ADC deixando por ltimo a corrente do canal que dever ser mostrado no display. Todas as

71 correntes lidas sero gravadas na memria RAM do equipamento e nenhum histrico gravado, isto , apenas a corrente instantnea utilizada no monitoramento. O byte lido no ADC representa o valor lido de cada corrente, mas para que este valor seja mostrado no LCD ser necessrio realizar um clculo de acordo com uma reta que poder ser configurada pelo usurio. Esta configurao possibilitar a conexo deste equipamento diferentes medidores de corrente sem que haja problemas no seu funcionamento, desde que estes diferentes medidores de corrente sejam lineares. O prottipo foi desenvolvido independnete do sensor utilizado, assim o sensor em si no faz parte do rel digital, mas sim um perifrico necessrio e pode ser de qualquer natureza desde que seja uma funo linear. O prottipo aceita a configurao desta reta conforme mostra a equao abaixo:
I lido + I zero 256

I Calc =

Equao 4.1

Onde:

ICalc a corrente calculada que ser mostrada no LCD; Ilido o valor proporcional da corrente lida no ADC (byte); Izero o valor proporcional da corrente mnima, quando o valor lido no ADC zero
(byte);

a diferena entre a corrente mxima e a corrente mnima do transdutor utilizado. Com esta funo de transferncia qualquer transdutor linear pode ser conectado

na entrada do ADC do rel inteligente sem problema algum, isto faz com que o equipamento possa trocar de transdutor sem que seja necessrio fazer qualquer tipo de adaptao. A nica limitao a da entrada analgica que no pode receber tenses acima de 5 V e, por ser usado

72 um ADC de 8 bits, maiores do que 0,02 V (5 V dividido por 256) para que seja perceptvel ao conversor analgico. Como o sensor dever fornecer tenses entre 0,02 V e 5 V para o conversor analgico ser capaz de medir, o ganho do transdutor, ou sensor, utilizado dever ser implementado antes da entrada do canal analgico.
4.4 Avaliao do prottipo montado

O prottipo desenvolvido para o rel inteligente foi capaz de atender a todos os requisitos iniciais deste trabalho. Com a placa e os componentes eletrnicos utilizados aqui pode se montar o rel inteligente e program-lo. O equipamento funcionando no s atendeu como tambm mostrou que com pequenas modificaes, principalmente no seu firmware, outras funes bastante interessantes poderiam ser agregadas neste rel inteligente e sero citadas no captulo final deste trabalho como trabalhos futuros. Como o tempo de aquisio do ADC inferior a 50s, com um ADC to rpido pode-se desenvolver um algoritmo capaz de medir o sinal do transdutor em AC e no em DC como foi implementado, isto possibilita uma resposta mais rpida a qualquer mudana na corrente monitorada, pois o retificador de preciso que converte o sinal AC em DC causa um pequeno atraso devido ao capacitor utilizado para encontrar o valor mdio da onda AC. A Figura 4.12 mostra como deve ser o circuito conectado ao canal analgico do PIC.

73
R R

R Sinal AC

R/2 Entrada do ADC 1 Zenner 5.1V

C 6

3 2

+ 4

3 6 2

+ 4

Figura 4.12 Esquemtico do retificador de preciso que converte o sinal AC em DC

Este circuito capaz de retificar o sinal vindo do transdutor sem as perdas na tenso de 0,7V dos diodos tradicionais, pois este circuito um retificador de preciso. Na seqncia, o sinal convertido em DC para simplificar o algoritmo utilizado, que agora no precisar calcular o valor da tenso mdia que proporcional corrente mdia do motor. Agora que o hardware e firmware foram desenvolvidos e testados resta apenas desenvolver uma interface amigvel que possibilite a programao e monitoramento remoto de todas as funcionalidades disponveis no rel digital. No prximo captulo ser visto o desenvolvimento do software de controle e monitoramento desenvolvido especificamente para este prottipo. Esta prxima etapa bastante enriquecedora, pois a partir dela que se alcanar o carter de automao em tempo real desejada desde o incio do trabalho.

74

Captulo 5 - Desenvolvimento do Software


Este captulo far uma explicao de como foi desenvolvido o software de controle do prottipo do rel inteligente proposto neste trabalho e mostrar tambm como este programa capaz de monitorar e atuar sobre o prottipo. Tambm ser visto aqui todas as dificuldades encontradas nesta etapa e os resultados obtidos nos testes realizados. A partir de agora ser apresentada uma introduo sobre o projeto do software e como ele foi implementado seguido por alguns fluxogramas e explicao funcional. Para finalizar o captulo haver uma apresentao dos resultados e uma discusso sobre a eficincia do sistema desenvolvido para este trabalho.
5.1 Introduo ao software desenvolvido

Este software foi desenvolvido visando apenas atender s necessidades de implementao do prottipo, por isto ele ficou bastante simples e sem uma viso de software final, isto , sem os devidos cuidados que se deve ter com um software comercial. As caractersticas bsicas do programa implementado, que foi todo programado em Delphi, acessar uma das portas serial do computador pessoal e comunicar-se com o prottipo do rel inteligente atravs do padro serial RS-232 e, com isto, ser capaz de programar este equipamento de uma maneira bem mais simples do que a programao local, pois o PC conta com vrios recursos que o equipamento desenvolvido no possui. Optou-se que a programao da curva de resposta do rel digital seria programada somente via PC, pois seria muito complicado desenvolver uma interface para esta programao local utilizando-se apenas das 4 teclas disponveis no prottipo, alm ainda da dificuldade que seria de se entrar os dados corretamente com apenas estas teclas.

75 Com isto o prottipo necessita do PC remoto para sua programao, uma limitao que no problema devido ao fato de que a idia inicial deste trabalho desenvolver um rel inteligente o bastante para possibilitar a monitorao e o controle de um motor atravs de um nico computador central.
5.2 A implementao do programa proposto

A implementao deste software precisou ser feita em paralelo com boa parte do desenvolvimento do firmware do prottipo, principalmente porque com os recursos disponveis no PC ficaria mais fcil conferir e depurar os dados gravados na EEPROM do rel digital bem como o seu correto funcionamento. Contudo, para que a comunicao fosse possvel o primeiro grande desafio foi elaborar um protocolo de comunicao que funcionasse e fosse de certa forma seguro quanto a perda de dados ou bytes. O protocolo segue a idia mostrada no fluxograma da Figura 5.1.

Figura 5.1 Fluxograma da comunicao serial entre o PC e o Rel

76 Mas para que a comunicao ficasse segura, garantindo que o PC e o Rel conseguissem "falar" a mesma lngua, o pacote de comunicao deveria seguir uma regra, esta regra mostrada na Tabela 5.1.

Tabela 5.1 Pacote de dados da comunicao serial


Nome Rel Comando Erro EEAdd Fases Horrio Reservados EEPROM Tamanho Descrio Nmero de identificao do Rel Comando a ser executado Informao do erro ocorrido segundo o Rel Endereo base da EEPROM Valores medidos pelo ADC das 3 fases do motor Informao sobre o horrio configurado no Rel (Seg, Min, Horas) Bytes ainda sem funo para possveis melhoramentos Buffer de dados da EEPROM iniciados pelo endereo EEAdd Byte de controle com o tamanho do pacote de dados (fixo em 48) Tamanho 1 Byte 1 Byte 1 Byte 1 Byte 3 Bytes 3 Bytes 5 Bytes 32 Bytes 1 Byte

Alguns detalhes devem ser levados em conta para que o pacote seja vlido, o byte "Rel" foi previsto para o caso de se desejar plugar o rel digital a uma rede que utilize o padro RS-485 na comunicao. Assim, com a simples aplicao de um conversor RS-232 para RS-485, o prottipo j poder se comunicar em uma rede RS-485. J o byte de "Comando" foi projetado reservando-se alguns bits, isto , este byte deve conter os bits 1, 2, 4 e 5 sempre zerados para que o comando seja vlido e o bit 0 informa se o motor est ou no ligado naquele momento ou, dependendo do bit 3, se para ligar ou desligar o motor. Maiores detalhes sobre o funcionamento e valores vlidos para cada byte da Tabela 5.1 podem ser vistos nos anexos deste trabalho. Assim o desenvolvimento do software inicialmente foi em funo da depurao das funes do equipamento. Foi feita uma tela no programa capaz de mostrar todos os bytes gravados no bloco da EEPROM que se desejava acessar, com isto era possvel verificar se os dados configurados no programa foram corretamente gravados no equipamento. O que

77 possibilitou validar simultaneamente o mdulo de comunicao serial e o mdulo de escrita e leitura da EEPROM do prottipo. Com o correto funcionamento da leitura e da escrita na EEPROM e ainda com o correto funcionamento da comunicao serial, partiu-se para o desenvolvimento do mdulo capaz de gravar e verificar as configuraes principais do rel. Com este mdulo pronto, passou a ficar mais fcil a configurao da funo de transferncia do ADC e tambm as caractersticas do motor a ser monitorado. Agora, utilizando-se desta configurao remota, conseguiu-se depurar e ajustar todo o mdulo do conversor analgico digital do equipamento. Um comando para ligar e desligar o motor foi desenvolvido somente depois que tudo j estava funcionando. Para finalizar o projeto funcional do software foi implementada uma tela no programa que possibilita a entrada dos dados da curva de operao do rel inteligente. Esta interface tambm viabiliza a visualizao simultaneamente desta curva, podendo ainda salv-la no PC e envi-la para o equipamento.
5.3 Funcionamento e caractersticas do programa de monitorao

O programa desenvolvido para o monitoramento remoto do rel inteligente relativamente pequeno e simples. Ao se executar o programa, ele abre na janela de configuraes e traz alguns valores padres, tais como ID do rel a ser comunicado 255, bloco de memria da EEPROM igual ao bloco 1, corrente nominal do motor igual 5A entre outros. A Figura 5.2 mostra a janela principal do programa desenvolvido neste trabalho para o monitoramento do rel inteligente, observe que praticamente todos os dados configurveis variam de 0 at 255, pois so os valores que cabem em um byte da EEPROM do PIC. Note tambm que os blocos da memria EEPROM variam de 1 at 8, conforme j foi visto anteriormente. Observe que o bloco 1 est relacionado com a configurao do rel, por

78 isto o bloco 1 selecionado automaticamente sempre que a pessoa selecionar a pasta 1.Configuraes do programa.

Figura 5.2 Programa de monitorao do rel inteligente: configuraes

A Figura 5.3 j mostra um exemplo de curva que pode ser programada no rel inteligente utilizando este programa, note ainda que o bloco de memria seja automaticamente selecionado para o bloco 2, local onde fica armazenada a curva na memria EEPROM do PIC. Na coluna Corrente (A) onde se deve programar os valores das correntes enquanto que na mesma linha na coluna do Tempo (s) deve-se programar o tempo mximo que a corrente citada nesta linha pode ser fornecida ao motor. Assim um ponto definido no

79 grfico ao lado desta tabela, a interpolao linear de todos os pontos programados na tabela gera uma curva correspondente conforme mostra a prpria Figura 5.3. O nmero mximo de pontos que se pode configurar para esta curva de resposta do rel de 16, este valor suficiente para se montar uma boa curva de resposta se comparada curva do rel bi metlico, mas com pequenas alteraes no firmware e no

software pode-se aumentar o nmero de pontos desta curva consideravelmente.

Figura 5.3 Programa de monitorao do rel inteligente: curva do rel

Estes 16 pontos esto subdivididos em 2 grupos de 8 pontos cada. No primeiro grupo a unidade dos tempos de centsimos de segundos e por isto pode varia de 0,00s at

80 2,55s (limite determinado pelo valor mximo de um byte). J no segundo grupo a unidade dos tempos de segundos, logo podem variar de 0s at 255s, somente valores inteiro. Alm das limitaes nos preenchimentos dos tempos mximos que cada sobre corrente pode passar pelo motor antes do rel inteligente desligar h tambm uma limitao para os valores das sobre correntes. A sobrecorrente cadastrada na curva de operao no deve ser maior do que a corrente mxima configurada para o ADC, pois assim o rel no ser capaz de monitor-la. O software tambm no permite que se cadastre uma corrente menor do que a corrente nominal do motor, pois seno o motor mal partiria e j seria desligado. Os valores das sobrecorrentes configuradas na curva podem sofrer pequenas alteraes devido converso do valor para um valor inteiro compatvel no ADC de 8 bits, por isto muitas vezes os valores lidos no prottipo no so os mesmos que foram gravados ou configurados no programa, mas esta diferena sempre inferior a 1%.

Figura 5.4 Interface para salvar ou carregar uma curva de resposta

81

A Figura 5.4 mostra a janela que se abre caso o boto Definies das Curvas... seja pressionado. Nesta janela pode-se selecionar uma curva j gravada no PC para envi-la ao equipamento ou salvar a curva que acabou de ser digitada na pasta 2.Curva de Resposta. Com esta facilidade consegue-se gerar vrias curvas que simulem qualquer rel bimetlico e programar o rel inteligente para obedecer a uma delas. Um histrico de todas as anomalias ocorridas no rel inteligente durante uma comunicao gerado na pasta 4.Histrico, conforme pode ser observado na Figura 5.5.

Figura 5.5 Programa de monitorao do rel inteligente: histrico

82 Este histrico pode ser apagado sempre que o usurio desejar e informa se houve algum erro de comunicao, erro ao gravar a EEPROM interna ou ainda alerta de sobre corrente. Porm este histrico no foi implementado para ser gerado pelo prottipo do

hardware, mas sim apenas pelo software. Por este motivo o histrico no descarregado via
serial do equipamento, mas sim gerado atravs do constante monitoramento do PC da situao atual do prottipo. Observe que no histrico do exemplo utilizado todas as anomalias possveis foram detectadas pelo equipamento, ento para visualizar melhor a descrio dos erros ocorridos pode-se clicar com o boto direito e selecionar a opo Visualizar toda descrio... sobre a linha que se deseja verificar ou ento dar um duplo clique nesta linha. A Figura 5.6 mostra uma mensagem com toda a descrio para que se possa ler toda a mensagem, observe que neste exemplo todos os possveis erros de uma comunicao foram apresentados, alm do desligamento do motor devido a uma sobre corrente.

Figura 5.6 Visualizao da descrio das anomalias ocorridas no prottipo

Observando as figuras do programa de monitorao do rel inteligente pode-se notar que algumas das configuraes so globais, por exemplo, o bloco de memria, a opo de sincronizar relgios de Escrever na EEPROM ou at mesmo ligar e desligar o motor.

83 Estes comandos so globais e podem ser enviados ao equipamento juntamente com a opo descrita na pasta de comandos especficos selecionada. Caso deseje-se manter o programa monitorando o rel inteligente basta marcar a opo Automtico e configurar a opo de intervalo de acordo com o computador que est sendo utilizado. Com isto o programa ir ficar comunicando com o rel e levantando um histrico automaticamente de tempos em tempos em funo do intervalo selecionado. Outro detalhe que poder ser ressaltado o fato de o programa utilizar as cores para chamar a ateno do usurio dependendo do tipo de alerta. Por exemplo, se o motor estiver ligado a cor azul ir aparecer no escrito Motor Ligado se estiver apenas desligado a cor um preto, mas caso tenha sido desligado devido a uma sobre corrente a cor o vermelho mostrado na Figura 5.5.
5.4 Avaliao e resultados do software

O software desenvolvido para comunicar-se com o prottipo apresentou um timo desempenho, pois ficou pequeno (menor que 1MB) e roda muito bem em qualquer mquina que tenha o sistema operacional Windows instalado. Nos testes de comunicao percebeu-se que o tempo para gerar um erro de

Time Out estava pequeno demais para mquinas mais lentas algo em torno de um segundo.
Por este motivo foi necessrio aumentar este tempo em at 5 vezes. A programao da transmisso serial totalmente compatvel com o padro RS-485, assim caso resolva-se instalar um conversor de RS-232 para RS-485 na sada da porta do PC no ser necessrio realizar nenhum tipo de alterao no software, mas no prottipo sim j que ele foi montado com o MAX232 ou HIN232. A menos que se instale no prottipo tambm um conversor RS-232 para RS-485. Um detalhe que este conversor

84 dever possuir o chamado SDC (Send Data Control), um circuito capaz de detectar automaticamente se a porta em questo est iniciando uma transmisso de dados ou no. De uma maneira geral o software atendeu a todas as necessidades deste trabalho que, alm de possuir uma interface amigvel, facilita o aprendizado e o manuseio do equipamento. Depois de todo estes desenvolvimento partiu-se para os testes prticos visando a aprovao do projeto como um todo, alguns dos resultados encontrados nos testes podem ser verificados no prximo captulo e discutidos no captulo final.

85

Captulo 6 - Resultados Prticos


Aqui sero vistos os resultados experimentais do prottipo monitorando as correntes de um motor de induo trifsico de tal maneira que as eventuais sobre-correntes deste motor obedeam s curvas programadas pelo software de configurao, o qual foi descrito no captulo anterior. Os testes e os ensaios realizados com este prottipo esto voltados ao controle da sobre corrente de acordo com uma curva previamente definida, assim o que foi feito nesta parte do trabalho resumiu-se em apenas configurar algumas curvas e verificar como foi o comportamento do rel inteligente durante os testes de sobre corrente e se o mesmo conseguia ou no desligar o motor conforme a curva nele definida.
6.1 Tempo de partida

A programao do tempo de partida do motor faz com que o rel inteligente permita durante a partida que uma sobre corrente qualquer seja absorvida pelo motor. Graas a esta programao que o rel inteligente permite que o motor parta, pois se no houvesse esta configurao o rel iria desligar o motor logo que o ele fosse ligado, pois a corrente de partida muitas vezes a corrente nominal. O prottipo permite a programao de tempos de partida de 1 centsimo de segundo at 255 segundos, que o limite de um byte. Esta faixa de valores permite atender todos os motores de induo, pois dificilmente um motor levar mais do que 10 segundos para entrar no seu regime permanente de funcionamento. A Figura 6.1 mostra o comportamento do motor utilizado nos testes em laboratrio durante sua partida sem carga, note que o tempo de partida nesta condio ficou prximo aos 250 ms.

86

Figura 6.1 Corrente de partida sem carga

Figura 6.2 Corrente de partida com carga nominal

87 O mesmo motor da Figura 6.1 leva agora cerca de 300 ms para partir com carga nominal. importante notar que o tempo de partida depende tambm da condio de carga de partida e por isto deve-se levar em conta a carga de partida para se programar o tempo de partida do motor, neste exemplo o tempo de partida aumentou em 20%. Durante o primeiro teste do equipamento com relao ao tempo de partida o funcionamento no estava correto, ento foi necessrio realizar algumas alteraes no

firmware do prottipo para que o tempo de partida passasse a ser respeitado. A


implementao para o correto funcionamento do rel inteligente foi relativamente simples, bastou colocar uma condio que ignorava a sobre corrente se o tempo de partida ainda no tivesse se esgotado.
6.2 Funcionamento normal

Depois de programado o tempo de partida do motor, iniciaram-se os testes para verificar como o rel se comportava durante o seu funcionamento normal, isto , deixou-se o motor funcionando com sua corrente nominal por uma hora. Este teste visou verificar se o rel conseguiria monitorar a corrente e manter o motor ligado at que recebesse um comando para deslig-lo. Para tanto foi necessrio mant-lo a uma corrente de at 15% da corrente nominal, porque a curva programada no rel somente iniciava o desligamento do motor a partir deste valor. Este teste provou que o prottipo funcionou como se esperava enquanto a corrente do motor ficasse abaixo da curva programada, assim o equipamento foi validado por ter conseguido ligar e desligar o motor atravs de um comando remoto, via PC, ou um comando local, via teclado.

88 Na Figura 6.3 pode-se verificar um momento de transio entre o funcionamento do motor a vazio e seu funcionamento com carga nominal. Este momento foi utilizado vrias vezes para confirmao do funcionamento do rel digital. No primeiro ensaio buscava-se verificar se o rel funcinaria corretamente durante uma transio brusca do valor da corrente do motor. Assim, observou-se que o prottipo comportou-se totalmente imparcial diante desta variao da corrente, exatamente como era esperado.

Figura 6.3 Corrente do motor no momento da aplicao de sua carga nominal

6.3 Proteo contra sobre corrente

Agora, para finalizar os testes deste equipamento, foram programados diferentes correntes como sendo uma sobre corrente que deveria ser desligada em um determinado tempo.

89 Para facilitar os testes foi programado no rel que a sua corrente nominal era a da sua operao a vazio e a sua corrente nominal como sendo a primeira sobrecorrente que deveria o rel deveria desligar com tempo de programao de 5 segundos. Agora a Figura 6.3 passou a ser entendida pelo rel inteligente como momento de transio de sua operao com corrente nominal para uma sobre corrente. O resultado tambm foi positivo, isto , o rel desligava o motor quando se passava os tempos programados para esta sobre corrente, vrios tempos diferentes foram experimentados. Vrios tempos de partida diferentes tambm foram colocados e testados de uma maneira simulada porque existe no laboratrio meios para monitorar tempos abaixo de 1 segundo com preciso. Novamente para realizar os testes no laboratrio foram feitas algumas programaes fora da realidade, visando apenas a validao do equipamento. Um exemplo do tipo de teste que foi feito seria a programao de um tempo de partida de 2 s, uma corrente igual corrente vazio da mquina como sendo uma sobre corrente que deve ser cortada em 3 s e ento foi verificado que 5 s aps ter se ligado o motor o mesmo foi desligado pelo rel inteligente automaticamente, conforme o esperado. Aps os testes com tempos de partida acima de 1 segundo acreditou-se que o funcionamento em tempos de partida abaixo de 1 segundo tambm estaria correto, j que a rotina programada no firmware a mesma. O relgio interno do prottipo mostrou-se satisfatrio para a contagem de curtos intervalos de tempo. Com estes testes notou-se que o rel inteligente respeitou o tempo de partida e passou a verificar as sobre correntes somente aps este tempo ter se passado, assim o equipamento atendeu a uma das suas principais caractersticas: monitorar a sobre corrente quando a mquina estiver em regime permanente e no no momento de sua partida.

90 Durante todos os ensaios foram utilizados sensores de efeito Hall para o monitoramento das correntes. Como o foco deste trabalho esteve sempre voltado ao desenvolvimento do rel digital o sensor a ser empregado poderia ser qualquer um, pois o rel foi projetado para se adaptar ao sensor como poder ver observado a seguir no item que se refere configurao do ADC.
6.4 Configurao do ADC

Como j foi citado anteriormente, o conversor analgico digital interno do PIC foi programado para ser totalmente configurvel pelo usurio em uma funo de transferncia linear qualquer. Assim o equipamento tornou-se extremamente aberto e pronto para atender a todos os casos. O ADC interno do equipamento foi programado para ler uma tenso j retificada que representasse uma corrente equivalente a que estava passando pelo motor naquele instante. Esta corrente pde ser monitorada pelo PC remoto sem maiores problemas. Um erro na medio era visvel e era devido s aproximaes e arredondamentos dos clculos envolvidos bem como o fato do conversor analgico digital utilizado ter sido de apenas 8 bits, apesar de o PIC possuir capacidade para um conversor de at 10 bits. Este erro no representou um problema porque ele era inferior a 1,0% do fundo de escala, isto , do valor mximo configurado para o ADC ler. O erro citado acima no foi significativo para o controle da sobre corrente do motor j que normalmente a curva de resposta programada no equipamento possua valores de correntes vizinhos que variavam entre si em aproximadamente 10%. Apesar da idia proposta aqui ter deixado o equipamento bastante aberto a diversos motores com diversas amplitudes de correntes, um problema foi gerado por se dar

91 esta soluo de medio. O problema que surge que um circuito de retificao com preciso e um circuito de proteo para garantir que a tenso de entrada na porta do canal do ADC do PIC no ultrapassasse o valor mximo de 5V teve de ser implementado. Outro problema, mas no muito crtico que o tempo de resposta do rel inteligente agora est limitado ao tempo de resposta da tenso retificada que indica o valor da corrente medida. Como esta tenso teve que ser retificada, um capacitor foi colocado no circuito e este capacitor atrasa a resposta da tenso. Se um capacitor de capacitncia muito elevada for utilizado haver a vantagem de se conseguir mais estabilidade no valor medido da corrente, mas em contrapartida o tempo de resposta do rel inteligente ser menor porque a corrente medida sempre ser uma corrente de alguns instantes atrs. Estes dois problemas no afetaram os testes do prottipo porque o equipamento foi desenvolvido para executar respostas a partir de 1 centsimo de segundo. Como o perodo de um ciclo da rede eltrica leva aproximadamente 16,7 milsimos de segundos ou 1,7 centsimos de segundos, o prottipo dever monitorar pelo menos um perodo completo da forma de onda da corrente eltrica medida antes de se tomar uma deciso, o que bastante aceitvel. Devido aos atrasos no prprio circuito eletrnico desenvolvido, aconselha-se utilizar tempos de respostas acima dos 20 centsimos de segundos, o que j bastante satisfatrio para este equipamento.
6.5 Curva de resposta do rel inteligente

Qualquer curva de resposta pode ser programada pelo usurio a qualquer momento mesmo com o motor ligado, graas a esta facilidade este prottipo poder atender a diversos motores de induo existentes no mercado com a facilidade de se trocar o motor de induo sem que se precise trocar a proteo, mas sim apenas a sua programao.

92 Algumas curvas de resposta foram programadas e testadas no equipamento para verificar se o prottipo era capaz de desligar o motor caso o tempo de sobre corrente medido por ele fosse maior que o tempo nele configurado, porm todas as situaes testadas aqui foram simulaes e no o funcionamento real em campo, mas foi suficiente para validar o rel inteligente. Um exemplo das curvas programadas no equipamento nesta fase de testes foi a curva da Figura 6.4. Observe que para correntes acima de 10A, o que representa 200% da corrente nominal, foi programado para o rel inteligente desligar em 3 segundos. Os valores de corrente acima de 200% praticamente tm os tempos de resposta prximos, pois no h como abaixar muito mais do que 0,5s o tempo de resposta devido ao que foi citado anteriormente.

Figura 6.4 Curva de resposta contra sobre corrente programada no prottipo

Neste exemplo o comportamento do rel inteligente foi bastante satisfatrio, pois ele conseguiu desligar o equipamento com preciso para todos os tempos pedidos acima de 1 segundo. Para tempos abaixo deste valor j no foi possvel avali-lo, poisera impossvel cronometrar o tempo de resposta do rel digital.

93 Pode-se dizer que o rel inteligente desenvolvido neste trabalho pode ser capaz de simular as diversas curvas dos rels bimetlicos existentes no mercado atual sem maiores problemas, no captulo seguinte ser feita uma anlise destes resultados e propostos alguns trabalhos futuros baseados nesta dissertao.

94

Captulo 7 - Consideraes Finais


Pode-se notar que este trabalho abrange diversas reas da engenharia eltrica, das quais vale citar: eletrnica bsica; eletrnica de potncia; eletrnica digital; mquinas eltricas; microcomputadores e microcontroladores; sistemas de tempo real. O curioso que este trabalho iniciou-se na linha de pesquisa de potncia e mquinas eltricas, mas como o rel inteligente no est preocupado em controlar a partida do motor e muito menos com o controle da velocidade da mquina, acabou-se investindo mais tempo no estudo de microcontroladores e microcomputadores do que no prprio motor eltrico. Alm de ter sido um trabalho bastante completo do ponto de vista da engenharia eltrica, ele tambm possibilitou unir as diversas reas citadas acima. Fato este que provou que a integrao interdisciplinar das matrias estudadas em um curso de engenharia pode e deve ser mais explorada em seus cursos, pois se no fosse por esta integrao entre as disciplinas este trabalho no teria sido desenvolvido.
7.1 Concluses

O trabalho conseguiu atingir todos os objetivos iniciais e mostrou um nicho de mercado pouco explorado pela indstria brasileira. Este nicho precisaria receber mais ateno e mais investimentos visando diminuir os custos destes equipamentos, normalmente importados, utilizados na indstria nacional. O custo do prottipo, desconsiderando custo do projeto de engenharia envolvido, no ficou muito alto comparado com o que existe no mercado para a proteo de motores contra a sobre corrente. Este seria outro fator que poderia atrair a ateno de alguns

95 empresrios nacionais para que iniciassem um trabalho para desenvolver um produto nacional. Outro ponto favorvel ao desenvolvimento de um produto comercial com base neste prottipo seria o fato de que no existem muitos equipamentos nacionais com as mesmas caractersticas e mesmo custo deste prottipo.
7.2 Trabalhos Futuros

Vrios trabalhos futuros podem ser desenvolvidos a partir desta idia, principalmente trabalhos que necessitem de um processador local para desenvolver alguma funo como controle de partida ou de velocidade, pois este prottipo possui um microcontrolador de grande capacidade com muita memria disponvel. Pode-se aproveitar a referncia [3] para complementar este trabalho com um timo controle de partida para os motores de induo, isto pode ser feito utilizando o prprio PIC deste trabalho sem que seja necessrio realizar grandes mudanas no hardware ou

firmware.
Pode-se ainda utilizar os outros 8 pinos de I/O que sobraram para controlar vrios motores em paralelo, visto que este microcontrolador trabalha em 200ns de ciclo de instruo e o seu ADC interno consegue realizar uma converso em menos de 100s. Para tanto bastaria incluir um circuito integrado multiplexador na entrada dos pinos do ADC, por exemplo, utilizando-se 1 pino de I/O no multiplexador j seria possvel saltar de 3 para 6 canais analgicos e ainda sobrariam 7 pinos, dos quais apenas um seria utilizado para acionar um outro motor. Outra sugesto seria reduzir o custo deste trabalho retirando o display de cristal lquido, pois a interface com o PC muito mais simples e pode ser utilizada em seu lugar,

96 assim constri-se um equipamento mais barato (menos da metade do preo de um com LCD) com mesmo potencial. Diversos trabalhos podem ser originados a partir deste estudo, cada variao na aplicao ou novidade geraria um trabalho novo, utilizar uma rede CAN ou Ethernet (TCP/IP) no lugar da serial, uma rede USB ou ainda uma conexo bluetooth para manter o equipamento compatvel com as novas tecnologias.

97

Referncias Bibliogrficas
[1] Kosow, Irving I. Mquinas Eltricas e Transformadores. 2. Edio, 1979. Editora Globo. Porto Alegre, RS. [2] Lima, Marco Rogrio Calheira. Desenvolvimento de um Sistema Eletrnico para Partida de Motores de Induo Trifsicos com Controle Programvel da Amplitude da Corrente de Partida. 1998. Dissertao (Mestrado em Engenharia Eltrica) Universidade Federal de Uberlndia. [3] Guia EM da NBR 5410. Captulo 5 Proteo contra sobre correntes e Captulo 7 Circuito de Motores. So Paulo, dezembro de 2001. [4] Millman, Jacob e Halkias, Christos C. Eletrnica Volume 1. 2. Edio, 1981. Editora MacGraw-Hill. So Paulo, SP. [5] Millman, Jacob e Halkias, Christos C. Eletrnica Volume 2. 2. Edio, 1981. Editora MacGraw-Hill. So Paulo, SP. [6] Tocci, Ronald J. e Widmer, Neal S. Sistemas Digitais Princpios e Aplicaes. 8. Edio, 2003. Editora Pearson Education do Brasil. So Paulo, SP. [7] Hayt Jr., William H. e Kemmerly, Jack E. Anlise de Circuitos em Engenharia. 1. Edio, 1971. Editora McGraw-Hill. So Paulo, SP. [8] Gimenez, Salvador R. Microcontroladores 8051. 1. Edio, 2002. Editora Pearson Education do Brasil. So Paulo, SP. [9] Silva Jnior, Vidal Pereira da Aplicaes Prticas do Microcontrolador 8051. 5. Edio, 1996. Editora rica Ltda. So Paulo, SP. [10] DATASHEET: PIC16F62X datasheet. [11] DATASHEET: PIC16F87XA datasheet.

98 [12] DATASHEET: Interfacing PICmicros to an LCD Module. [13] DATASHEET: Display LCD. [14] DATASHEET: DS485. [15] DATASHEET: HIN232. [16] ARTIGO: Fernandes, Jos Manuel e Paula, Leonardo Costa On-line Control Systems

Using RS-485. ISA 2001, Houston, Texas


[17] ARTIGO: Mozina, C; Young, M; Bailey, B; Baker, B; Dalke, G Commissioning and maintenance testing of multifuncition digital relays. Plup and Paper Industry Technical Conference, 2004. [18] SITE: Site oficial da Siemens no Brasil (www.siemens.com.br)

99

Bibliogrficas recomendadas
[19] Toro, Vincent Del Fundamentos de Mquinas Eltricas, LTC Livros Tcnicos e Cientficos Editora SA, Rio de Janeiro, RJ. [20] Halliday, David e Resnick, Robert. Fundamentos de Fsica 3 Eletromagnetismo. 2. Edio, 1994. Editora LTC Livros Tcnicos e Cientficos. Rio de Janeiro, RJ. [21] Silva, Srgio Batista da. Contribuio ao uso de microcontroladores na proteo de circuitos em baixa tenso. 2003. Dissertao (Mestrado em Engenharia Eltrica) Universidade Federal de Uberlndia.

100

Anexo A Cdigo Fonte do Firmware

;************************************************************************************************ ; PROJETO DE UM REL INTELIGENTE ; CARACTERSTICAS: ; ESTE PROTTIPO POSSUI UM DISPLAY LCD 16x2, 4 BOTES PARA UMA PROGRAMAO LOCAL, 3 ENTRADAS ; ANALGICAS PARA LEITURA DAS CORRENTES DE UM MOTOR DE INDUO TRIFSICO, 1 SADA TTL PARA ; LIGAR OU DESLIGAR O MESMO MOTOR, 1 PORTA SERIAL RS232 PARA PROGRAMAO REMOTA. ; ELABORADO POR: ; ENG. LEONARDO COSTA DE PAULA ; ORIENTADO POR: ; DR. DARIZON ALVES DE ANDRADE - UFU ; INICIADO EM: 29/07/03 ; Arquivo: Main.asm ;************************************************************************************************ ; PROCESSOR RADIX 16F876A HEX

; Configura o bit de controle ; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

#INCLUDE <P16F876A.INC> #INCLUDE <D:\PROJETOS\PIC\UTILS\MACROS.INC> #INCLUDE <MAIN.INC> ; ORG GOTO GOTO 0X00 R_INICIO_TST R_INICIO

;================================================================================================ ; Tratamento das Interrupes ;================================================================================================ ORG GOTO 0X04 R_INTERRUPCOES

;================================================================================================ ; ATENO!!! REA RESERVADA PARA AS MENSAGENS (POIS O ENDEREO MXIMO 255!!!) MSG_INICIO RETLW RETLW RETLW RETLW RETLW RETLW MSG_MOTOR RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_CONFIRMA RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW D'5' 'R' 'E' 'L' 'E' ' ' D'6' 'L' 'I' 'G' 'A' 'R' '?' D'15' 'O' 'K' ' ' 'P' '/' ' ' 'C' 'O' 'N' 'F' 'I' 'R' 'M' 'A' ; TAMANHO DA MENSAGEM ; TAMANHO DA MENSAGEM

101
RETLW MSG_ID RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_DELTA RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_MENOR RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_NOMINAL RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_PARTIDA RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_UNIDADE RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW MSG_I_UNIDADE RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW D'7' 'R' 'E' 'L' 'E' ' ' 'I' 'D' D'9' 'A' 'M' 'P' 'L' 'I' 'T' 'U' 'D' 'E' D'8' 'I' ' ' 'M' 'I' 'N' 'I' 'M' 'O' D'9' 'I' ' ' 'N' 'O' 'M' 'I' 'N' 'A' 'L' D'7' 'P' 'A' 'R' 'T' 'I' 'D' 'A' D'14' 'T' 'E' 'M' 'P' 'O' ' ' '1' '=' 'c' 's' '/' '2' '=' 's' D'12' 'I' ' ' 'x' ' ' '1' '/' '1' ; TAMANHO DA MENSAGEM 'R'

; TAMANHO DA MENSAGEM

; TAMANHO DA MENSAGEM

; TAMANHO DA MENSAGEM

; TAMANHO DA MENSAGEM

; TAMANHO DA MENSAGEM

; TAMANHO DA MENSAGEM

102
RETLW RETLW RETLW RETLW RETLW '0' '/' '1' '0' '0'

;================================================================================================ ; AS INTERRUPES VIERAM PARA C PARA SOBRAR MAIS ESPAO PARA AS MENSAGENS (STACK 1) R_INTERRUPCOES MOVWF V_W_TEMP ; Salva W e STATUS MOVF STATUS, W MOVWF V_S_TEMP MOVF FSR, W MOVWF V_FSR_TEMP CLRF STATUS ; VAI PARA O BANK 0 BTFSC GOTO INT_SER GOTO INT_TMR2 GOTO INT_FIM MOVF MOVWF MOVF MOVWF SWAPF SWAPF RETFIE V_FSR_TEMP, W FSR V_S_TEMP, W STATUS V_W_TEMP, F V_W_TEMP, W R_TIMER2 ; DENTRO DESTA ROTINA H UM "GOTO INT_FIM" R_SERIAL_RX ; DENTRO DESTA ROTINA H UM "GOTO INT_FIM" PIR1, TMR2IF INT_TMR2 ; SE 1 PORQUE OCORREU UMA INT DO TIMER2

; RECUPERA W SEM ALTERAR O STATUS (MOVF ALTERA O STATUS!)

;================================================================================================ ; ROTINA UTILIZADA PARA TESTES GERAIS DO PIC (DEBUG) R_INICIO_TST CLRF STATUS MOVLW K_PORTA MOVWF PORTA MOVLW K_PORTB MOVWF PORTB MOVLW K_PORTC MOVWF PORTC ; MOVLW K_INTCON ; MOVWF INTCON ; MOVLW K_ADCON0 ; MOVWF ADCON0 ; MOVLW K_T2CON ; BANK 0 ; MOVWF T2CON ; ; ; ; BSF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF CLRF R_TST_LOOP MOVLW BTFSC GOTO CLRF GOTO R_TST_SET MOVLW MOVWF GOTO STATUS, RP0 K_PR2 PR2 K_PIE1 PIE1 K_TRISA TRISA K_TRISB TRISB K_TRISC TRISC K_OPTION OPTION_REG K_ADCON1 ADCON1 STATUS 0X00 PORTB, 7 R_TST_SET PORTB R_TST_LOOP 0XFF PORTB R_TST_LOOP ; SELECIONA BANK 1

; K_TRISA ; K_TRISB ; K_TRISC

; ; ; ;

;================================================================================================

103
; ROTINAS GERAIS PARA ACESSO AOS PERIFRICOS OU ROTINAS MATEMTICAS ;================================================================================================ ;-----------------------------------------------------------------------------------------------; ROTINA QUE MULTIPLICA UM BYTE POR OUTRO ; ENTRADA: V_NUM1 E V_NUM2 = BYTES A SEREM MULTIPLICADOS ; SADA: V_NUM4,V_NUM3 = WORD RESPOSTA (V_NUM4 O MAIS SIGNIFICATIVO) ; AFETA: W; STATUS; V_NUM1; V_NUM2; V_NUM3; V_NUM4; V_NUM5; V_NUM6 ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_MUL8 CLRF CLRF CLRF MOVLW MOVWF R_MUL_LOOP RRF BTFSS GOTO MOVF ADDWF BTFSS GOTO INCF R_MUL_CONT MOVF ADDWF R_MUL_PULA RLF RLF BIT!) DECFSZ GOTO RETURN V_NUM3 V_NUM4 V_NUM5 0X08 V_NUM6 V_NUM1, F STATUS, C R_MUL_PULA V_NUM2, W V_NUM3, F STATUS, C R_MUL_CONT V_NUM4, F V_NUM5, W V_NUM4, F V_NUM2, F V_NUM5, F V_NUM6 R_MUL_LOOP ; INICIA VARIVEIS LOCAIS ; INICIA CONTADOR

; COMO ERA UM BIT ZERO, NO PRECISA SOMAR! ; SOMA PARTE BAIXA ; NO PRECISOU AJUSTAR PARTE ALTA

; SOMA PARTE ALTA ; SEMPRE CHEGA AQUI COM C = 0! ; MULTIPLICA POR 2 (PREPARA PARA TESTAR PRXIMO

; AT PASSAR POR TODOS OS BITS

;-----------------------------------------------------------------------------------------------; ROTINA QUE DIVIDE UMA WORD POR UM BYTE ; ENTRADA: V_NUM,V_NUM1 = DIVIDENDO; V_NUM2 = DIVISOR ; SADA: V_NUM5,V_NUM4 = QUOCIENTE; V_NUM3 = RESTO ; AFETA: W; STATUS; V_NUM; V_NUM1; V_NUM3; V_NUM4; V_NUM5; V_NUM6 ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_DIV8 CLRF CLRF CLRF MOVLW MOVWF R_DIV_LOOP RLF RLF RLF BTFSC GOTO MOVF SUBWF BTFSS GOTO GOTO R_DIV_CY MOVF SUBWF BSF R_DIV_POS MOVWF R_DIV_NEG RLF RLF DECFSZ GOTO RETURN V_NUM2, W V_NUM3, W STATUS, C V_NUM3 V_NUM4 V_NUM5 V_NUM6 R_DIV_LOOP ; GARANTE INCREMENTO DO QUOCIENTE ; GUARDA RESULTADO, POIS A SUBTRAO FOI POSITIVA ; AJUSTA O QUOCIENTE ; AJUSTA O QUOCIENTE ; AT PASSAR POR TODOS OS BITS V_NUM3 V_NUM4 V_NUM5 0X10 V_NUM6 ; INICIA VARIVEIS LOCAIS ; INICIA CONTADOR

V_NUM1, F V_NUM, F V_NUM3, F ; V_NUM3 <- BIT MAIS SIGNIFICATIVO STATUS, C R_DIV_CY ; SE DEU CARRY, SUBTRAI E GRAVA RESTO! V_NUM2, W V_NUM3, W STATUS, C R_DIV_NEG R_DIV_POS

; RESULTADO DA SUBTRAO FOI NEGATIVO!

104
;-----------------------------------------------------------------------------------------------; ROTINA QUE CONVERTE UM NUMERO DE BINRIO PARA BCD ; ENTRADA: W = NMERO EM BINRIO DE 0 AT 99 ; SADA: W = NMERO EM BCD ; AFETA: W; STATUS; V_NUM; V_NUM1; V_NUM2; *V_NUM3; *V_NUM4; *V_NUM5; *V_NUM6 ; CHAMA: R_DIV8 (STACK: 2) ;-----------------------------------------------------------------------------------------------R_BIN_TO_BCD MOVWF CLRF M_MOVLF CALL SWAPF IORWF RETURN V_NUM1 V_NUM V_NUM2, D'10' R_DIV8 V_NUM4, W V_NUM3, W

; PARTE ALTA DA WORD NULA

;-----------------------------------------------------------------------------------------------; ROTINA QUE CONVERTE UM NUMERO BCD PARA BINRIO ; ENTRADA: W = NMERO EM BCD ; SADA: W = NMERO EM BINRIO ; AFETA: W; STATUS; V_NUM1; V_NUM2; V_NUM3 ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_BCD_TO_BIN MOVWF ANDLW MOVWF SWAPF ANDLW MOVWF BCF RLF RLF MOVWF RLF ADDWF ADDWF RETURN V_NUM1 0X0F V_NUM3 V_NUM1, W 0X0F V_NUM1 STATUS, V_NUM1, V_NUM1, V_NUM2 V_NUM2, V_NUM1, W V_NUM3, W ; SALVA BYTE A SER CONVERTIDO ; SALVA PARTE BAIXA DO BCD ; SALVA PARTE ALTA DO BCD C F ; MULTIPLICA PARTE ALTA POR 2 W ; MULTIPLICA PARTE ALTA POR 4 E COLOCA EM W W ; MULTIPLICA A PARTE ALTA POR 8 E COLOCA EM W ; SOMA PARTE ALTA X 8 COM PARTE ALTA X 2 = PARTE ALTA X (8 + 2) ; W = 10x(PARTE ALTA) + PARTE BAIXA = BINRIO DO BCD

;-----------------------------------------------------------------------------------------------; ROTINA QUE L VALOR DO ADC ; ENTRADA: W = CANAL SELECIONADO (0..4) ; SADA: W = ADRESH = BYTE COM OS 8 BITS MAIS SIGNIFICATIVO DO VALOR CONVERTIDO ; AFETA: ADRESH; ADRESL; V_W_AUX; W ; CHAMA: NADA ;-----------------------------------------------------------------------------------------------R_ADC_READ MOVWF MOVLW ANDWF BCF BTFSC RLF REFERNCIA! RLF RLF RLF MOVF IORWF MOVLW CALL ; BCF BSF BTFSC GOTO MOVF ; BSF RETURN V_W_AUX B'11000111' ADCON0, F STATUS, C V_W_AUX, 1 V_W_AUX, F V_W_AUX, F V_W_AUX, F V_W_AUX, F V_W_AUX, W ADCON0, F 0X01 R_DELAY

; ZERA O CANAL ; PARA FAZER A ROTAO ; VERIFICA SE CANAL 2 (FASE 3) ; SE FOR, APONTA PARA O CANAL 4, POIS O 2

; POSICIONA O BIT ZERO NA TERCEIRA POSIO! ; SELECIONA O CANAL A SER LIDO

; PEQUENO ATRASO PARA ESTABILIZAR O SINAL DO NOVO CANAL INTCON, GIE ; DESABILITA INTS ; INICIA CONVERSO ; ESPERA PELO FINAL DA CONVERSO

ADCON0, GO ADCON0, GO $-1 ADRESH, W INTCON, GIE

; HABILITA INTS

;-----------------------------------------------------------------------------------------------; ROTINA QUE L A EEPROM INTERNA

105
; ENTRADA: EEADR = ENDEREO A SER LIDO ; SADA: W = BYTE LIDO ; AFETA: W; STATUS; EECON1; EEDATA; EEADR ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_EE_READ BSF BSF BCF BSF BCF MOVF BCF BCF BCF RETURN STATUS, RP0 STATUS, RP1 EECON1, EEPGD EECON1, RD STATUS, RP0 EEDATA, W STATUS, RP1 STATUS, RP0 STATUS, RP1

; APONTA PARA VARIVEIS NO BANK 3 ; APONTA PARA MEMORIA DE DADOS (EEPROM) ; INICIA LEITURA ; RETORNA PARA O BANCO 2 ; SALVA BYTE LIDO (8 BITS MENOS SIGNIFICATIVO) ; RETORNA PARA O BANCO 0 ; APONTA PARA VARIVEIS NO BANK 0

;-----------------------------------------------------------------------------------------------; ROTINA QUE ESCREVE NA EEPROM INTERNA E VERIFICA SE A ESCRITA FOI CORRETA ; ENTRADA: EEADR = ENDEREO A SER ESCRITO, EEDATA = BYTE A SER ESCRITO ; SADA: Z = 0 SE OK ; AFETA: W; STATUS; EECON1; EECON2 ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_EE_WRITE BSF BSF BCF BSF BCF M_MOVLF M_MOVLF BSF BSF BCF BTFSC GOTO VERIFICAO MOVF INCF BSF XORWF BCF BCF RETURN STATUS, RP0 STATUS, RP1 EECON1, EEPGD EECON1, WREN INTCON, GIE

; APONTA PARA VARIVEIS NO BANK 3 ; APONTA PARA MEMORIA DE DADOS (EEPROM) ; HABILITA A ESCRITA ; DESABILITA INTERRUPES

EECON2, 0x55 EECON2, 0xAA ; PREPARA P/ A ESCRITA EECON1, WR ; INICIA ESCRITA INTCON, GIE EECON1, WREN EECON1, WR $-1 EEDATA, W EEDATA, F EECON1, RD EEDATA, W STATUS, RP0 STATUS, RP1 ; HABILITA INTERRUPES ; DESABILITA A ESCRITA ; ESPERA PELA CONCLUSO DA ESCRITA P/

; GUARDA BYTE ESCRITO PARA VERIFICAO ; GARANTE QUE OS DOIS SEJAM DIFERENTES ; INICIA LEITURA ; TESTA SE BYTE LIDO = ESCRITO ; APONTA PARA VARIVEIS NO BANK 0

;-----------------------------------------------------------------------------------------------; ROTINA QUE L A MEMRIA FLASH INTERNA ; ENTRADA: EEADR, EEADRH = ENDEREO A SER LIDO (BANK = 2 SELECIONADO) ; SADA: W = BYTE LIDO = EEDATA (BANK = 2), EEDATH = 6 BITS RESTANTES (BANK = 2) ; AFETA: W; STATUS; EECON1; EEDATA; EEDATH ; CHAMA: NADA (STACK 1) ;-----------------------------------------------------------------------------------------------R_FLASH_READ BSF BSF BSF NOP NOP BCF MOVF BCF RETURN ;-----------------------------------------------------------------------------------------------; ROTINA LIGA O MOTOR E PREPARA VARIVEIS ; ENTRADA: NENHUMA ; SADAS: V_FAIXA; V_PARTIDA; V_SER_FLAG SO ATUALIZADOS STATUS, RP0 EECON1, EEPGD EECON1, RD ; MUDA O BANCO 3 ; APONTA PARA MEMORIA DE PROGRAMA (FLASH) ; INICIA LEITURA ; NECESSRIO O ATRASO DE 2 NOPs STATUS, RP0 EEDATA, W STATUS, RP1 ; RETORNA PARA O BANCO 2 ; SALVA BYTE LIDO (8 BITS MENOS SIGNIFICATIVO) ; RETORNA PARA O BANCO 0

106
; AFETA: W; STATUS ; CHAMA: R_EE_READ (STACK: 2) ;-----------------------------------------------------------------------------------------------R_LIGA_MOTOR BTFSC GOTO CLRF M_EE_READ MOVWF M_EE_READ MOVWF BSF R_L_MOTOR_FIM RETURN P_MOTOR R_L_MOTOR_FIM V_SER_FLAG E_PARTIDA V_PARTIDA E_UNIDADE V_FAIXA P_MOTOR

; IGNORA COMANDO PORQUE O MOTOR J EST LIGADO! ; DESLIGA O ALARME ATUAL ; INICIA CONTADOR DO TEMPO DE PARTIDA ; PEGA A UNIDADE DA PARTIDA

;-----------------------------------------------------------------------------------------------; ROTINA QUE TRATA A INTERRUPO DO TIMER2 ; ENTRADA: V_1MS; V_10MS; V_SEG; V_MIN; V_HOR; V_DIA; V_SEM ; SADAS: V_1MS; V_10MS; V_SEG; V_MIN; V_HOR; V_DIA; V_SEM SO ATUALIZADAS ; AFETA: W; STATUS; V_1MS; V_10MS; V_SEG; V_MIN; V_HOR; V_DIA; V_SEM ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_TIMER2 BCF PIR1, TMR2IF ; PREPARA PARA NOVA INTERRUPO ; QUANDO CHEGA AQUI PORQUE PASSOU 1 ms INCF MOVLW XORWF M_JNZ CLRF V_MS, F D'10' V_MS, W R_TMR2_OK V_MS

; VERIFICA SE J CHEGOU ; AINDA NO CHEGOU EM ZERO

; QUANDO CHEGA AQUI PORQUE PASSARAM 10 ms MOVF M_JZ BTFSC DECF R_TRM2_CS BTFSC BSF TEMPO E TESTAR INCF MOVLW XORWF M_JNZ CLRF V_PARTIDA, F R_TRM2_CS B_1CS_P V_PARTIDA, F B_1CS B_INC_TEMP V_CS, F D'100' V_CS, W R_TMR2_OK V_CS ; VERIFICA SE O TEMPO DE PARTIDA ZERO ; TESTA SE DEVE DECREMENTAR A PARTIDA

; TESTA SE DEVE INCREMENTAR CONTADOR DE SOBRECORRENTE ; PREPARA FLAG QUE AVISA PARA INCREMENTAR

; VERIFICA SE J CHEGOU

; QUANDO CHEGA AQUI PORQUE PASSOU 1 s MOVF BTFSS DECF R_TRM2_TEC_OK MOVF M_JZ BTFSC DECF R_TRM2_S BTFSC BSF TEMPO E TESTA INCF MOVLW XORWF M_JNZ CLRF B_1S B_INC_TEMP V_SEG, F D'60' V_SEG, W R_TMR2_OK V_SEG ; TESTA SE DEVE INCREMENTAR CONTADOR DE SOBRECORRENTE ; PREPARA FLAG QUE AVISA PARA INCREMENTAR O V_TEC_TEMPO, F STATUS, Z V_TEC_TEMPO, F V_PARTIDA, F R_TRM2_S B_1S_P V_PARTIDA, F ; CASO J ESTEJA EM ZERO, IGNORE PRXIMO COMANDO

; VERIFICA SE O TEMPO DE PARTIDA ZERO ; TESTA SE DEVE DECREMENTAR A PARTIDA

; VERIFICA SE J CHEGOU

; QUANDO CHEGA AQUI PORQUE PASSOU 1 MINUTO INCF V_MIN, F MOVLW D'60' XORWF V_MIN, W ; VERIFICA SE J CHEGOU M_JNZ R_TMR2_OK CLRF V_MIN

107
; QUANDO CHEGA AQUI PORQUE PASSOU 1 h INCF V_HOR, F MOVLW D'24' XORWF V_SEG, W M_JNZ R_TMR2_OK CLRF V_HOR R_TMR2_OK MOVF M_JZ R_TMR2_CONT BTFSS GOTO BTFSS GOTO BCF INCF MOVF SUBWF BTFSS GOTO M_MOTOR OU 2) BCF BSF R_TMR2_FIM GOTO INT_FIM B_M_ALERTA B_M_SOBRE ; FLAG PARA AVISAR AO PC DO PROBLEMA ; FLAG PARA AVISAR AO PC DO PROBLEMA ; FINALIZA INTERRUPO V_PARTIDA, F R_TMR2_FIM P_MOTOR R_TMR2_FIM B_INC_TEMP R_TMR2_FIM B_INC_TEMP V_TEMPO V_TEMPO_MAX, W V_TEMPO, W STATUS, C R_TMR2_FIM 0

; VERIFICA SE J CHEGOU

; VERIFICA SE O TEMPO DE PARTIDA ACABOU ; SAI IGNORANDO A CONTAGEM DE TEMPO ; VERIFICA SE O MOTOR EST LIGADO ; SAI SE ELE ESTIVER DESLIGADO

; LIMPA ESTE FLAG ; FAZ W = V_TEMPO - W ; ENQUANTO NO ESTOURAR O TEMPO TUDO BEM! ; DESLIGA O MOTOR (DEVE ESTAR NO BANK 0

;-----------------------------------------------------------------------------------------------; ROTINA QUE ENVIA UM DADO PELA SERIAL ; ENTRADA: W = BYTE COM O DADO A SER ENVIADO ; SADAS: NENHUMA ; AFETA: TXREG; STATUS; ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_SERIAL_TX BTFSS GOTO MOVWF RETURN PIR1, TXIF $-1 TXREG

; TESTA SE O TXREG EST VAZIO

;-----------------------------------------------------------------------------------------------; ROTINA QUE RECEBE UM DADO PELA SERIAL ; ENTRADA: NENHUMA ; SADAS: [V_SER_PTR] = W = BYTE RECEBIDO OU ERRO; V_SER_OK = SER_COUNT ; AFETA: W; STATUS; FSR; V_SER_PTR; V_SER_OK ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_SERIAL_RX BSF BTFSS GOTO M_MOVLF BTFSC GOTO BTFSC GOTO MOVF XORLW M_JZ M_MOVLF CLRF P/ O PC MOVF MOVWF RECEPO INCF MOVF MOVWF GOTO V_SER_PTR, F RCREG, W INDF R_SER_RX_END ; APONTA PARA O PRXIMO END. DO BUFFER DE RECEPO ; LIBERA O BUFFER DA SERIAL (DESCARTA DADO!) ; ESCREVE NO BUFFER V_SER_PTR, W FSR ; CARREGA O ENDEREO ATUAL DO PONTEIRO ; APONTA PARA ENDEREO DO BUFFER DE STATUS, IRP PIR1, RCIF R_SER_RX_END V_SER_OK, SER_COUNT RCSTA, FERR R_SER_RX_ERROR RCSTA, OERR R_SER_RX_ERROR V_SER_PTR, W SER_END R_SER_RX_PTR FSR, SER_INFO INDF ; PONTEIRO APONTANDO PARA BANK 2 OU BANK 3 ; SAI SE NO HOUVER DADO NO BUFFER DE RECEPO ; EVITA TIMEOUT, POIS ACABOU DE CHEGAR UM BYTE ; VERIFICA SE HOUVE ALGUM FRAMING ERROR ; VERIFICA SE HOUVE ALGUM OVERRUN ERROR ; CARREGA O ENDEREO ATUAL DO PONTEIRO ; TESTA SE ESTOUROU O PONTEIRO

; GARANTE ZERO, POIS S UTILIZADO NA RESPOSTA

108
R_SER_RX_ERROR BCF BSF GOTO R_SER_RX_PTR M_MOVLF BSF POSSVEL!) MOVF R_SER_RX_END CLRF GOTO RCSTA, CREN RCSTA, CREN R_SER_RX_END FSR, SER_INFO B_ERRO_OVER RCREG, W STATUS INT_FIM

; RESETA COMUNICAO

GRAVA

ERRO

DE

ESTOURO!

(PRIMEIRO

ERRO

; LIBERA O BUFFER DA SERIAL (DESCARTA DADO!)

; FINALIZA INTERRUPO

;-----------------------------------------------------------------------------------------------; ROTINA QUE TRATA OS BYTES RECEBIDOS PELA SERIAL ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: W; STATUS; FSR; V_SER_PTR; V_SER_OK; *EEADR; *EEADRH; EEDATA ; CHAMA: R_LIGA_MOTOR (2); R_EE_READ; R_EE_WRITE; R_ATUALIZA_EEPROM (STACK: 3) ;-----------------------------------------------------------------------------------------------R_SERIAL CLRF BSF BSF MOVF M_JZ DECFSZ GOTO STATUS STATUS, IRP STATUS, RP1 V_SER_OK, F R_SER_END V_SER_OK R_SER_END ; GARANTE BANK 0 ; PONTEIRO PARA O BANK 2 E BANK 3 ; PREPARA PARA LER DADOS DO BANK 2

; CHEGA AQUI SE V_SER_OK ERA IGUAL A 1 E ACABOU DE OCORRER UM TIMEOUT! M_MOVLF FSR, SER_INFO ; APONTA PARA O BYTE DE INFORMAO MOVF XORLW M_JZ BSF COMUNICAO V_SER_PTR, W SER_END R_SER_TIMEOUT_OK ; TESTA SE OCORREU UMA QUEBRA NA COMUNICAO (BREAK) B_ERRO_BREAK ; ESCREVE QUE OCORREU UM ERRO DE

QUEBRA

DE

R_SER_TIMEOUT_OK ; H DADOS A SEREM TRATADOS PELA SERIAL MOVLW SER_SIZE XORWF SER_TAM, W M_JZ R_SER_TST_OK BSF B_ERRO_TAM INVLIDO R_SER_TST_OK MOVLW ANDWF M_JZ BSF INVLIDO R_SER_COM_OK ; VERIFICA ID BSF OK!) M_MOVLF M_EE_READ XORWF BTFSS BCF M_MOVLF MOVF M_JNZ SER_CMD_TST SER_CMD, W R_SER_COM_OK B_ERRO_CMD

; TESTA SE O TAMANHO DO PACOTE EST OK ; ESCREVE QUE OCORREU UM ERRO DE COMANDO

; FILTRA BITS PARA TESTAR SE O COMANDO VLIDO ; ESCREVE QUE OCORREU UM ERRO DE COMANDO

B_ID_OK FSR, SER_ID E_ID INDF, W STATUS, Z B_ID_OK FSR, SER_INFO INDF, F R_SER_RESP

; ACREDITA QUE O PC ESTEJA FALANDO COM ELE (ID ; APONTA PARA O BYTE DA IDENTIFICAO

; SE DIFERENTES ENTO ID NOK! ; APONTA PARA O BYTE DA IDENTIFICAO ; ATUALIZA STATUS ; SE HOUVE QUALQUER ERRO, APENAS RESPONDE

; SE CHEGOU AQUI PORQUE DEVE ATENDER AO COMANDO, PACOTE SERIAL EST OK! BTFSS GOTO BCF BSF B_ID_OK R_SER_RESP STATUS, RP0 STATUS, RP1 ; SE DIFERENTES ENTO NO TRATA DADOS ; GARANTE O BANK 2 ; APONTA P/ INCIO DOS DADOS DA EEPROM DO BUFFER SERIAL

; PREPARA PONTEIROS DOS ENDEREOS M_MOVLF FSR, SER_EDATA0

109
MOVLW ANDWF MOVWF SER_EE_ADDR SER_EE, W EEADR ; FILTRA BITS COM O ENDEREO DO BLOCO DA EEPROM ; APONTA P/ ENDEREO INICIAL DA EEPROM

; DEVE ESCREVER / LER OS BYTES NA EEPROM R_SER_EEPROM BTFSC B_EE_WR GOTO R_SER_EE_WRITE ; PROVIDENCIA UMA LEITURA NA EEPROM CALL R_EE_READ MOVWF INDF GOTO R_SER_EE_CONT R_SER_EE_WRITE MOVF MOVWF CALL M_JNZ R_SER_EE_CONT BCF BSF INCF INCF EEADR, F FSR, F INDF, W EEDATA R_EE_WRITE R_SER_EE_NOK

; TESTA SE FOI UMA LEITURA OU ESCRITA ; SALTA SE PARA FAZER UMA ESCRITA

; COPIA DADO P/ O BUFFER SERIAL

; SALTA SE HOUVE ERRO DE ESCRITA NA EEPROM!

STATUS, RP0 STATUS, RP1

; APONTA PARA VARIVEIS DO BANK 2 ; INCREMENTA OS PONTEIROS E CONTINUA A CPIA

; TESTA SE J COPIOU O LTIMO DADO MOVLW SER_EDATA0 + SER_EDATA XORWF FSR, W BTFSS STATUS, Z GOTO R_SER_EEPROM ; LOOP AT COPIAR TODOS OS BYTES R_SER_EE_OK BTFSS GOTO B_EE_WR R_SER_EE_FIM ; TESTA SE FOI UMA LEITURA OU ESCRITA ; SALTA SE PARA FAZER UMA ESCRITA

; COMO FOI UMA ESCRITA, ATUALIZA VARIVEIS AQUI!!! CALL R_ATUALIZA_EEPROM GOTO R_SER_EE_FIM R_SER_EE_NOK M_MOVLF BSF R_SER_EE_FIM BCF BCF FSR, SER_INFO B_ERRO_EEPROM STATUS, RP0 STATUS, RP1 ; APONTA PARA ; APONTA PARA O BYTE DE INFORMAO ; ESCREVE QUE OCORREU UM ERRO ESCRITA NA EEPROM

; GARANTE O BANK 0 O PRIMEIRO ENDEREO DA FASE NO BUFFER

; AS CORRENTES SO SOMENTE LEITURA M_MOVLF FSR, SER_FASE SERIAL MOVF V_I1, W MOVWF INDF INCF FSR, F MOVF V_I2, W MOVWF INDF INCF FSR, F MOVF V_I3, W MOVWF INDF INCF FSR, F ; VERIFICA SE DEVE LIGAR / DESLIGAR O MOTOR BSF STATUS, RP1 BTFSS GOTO BTFSS GOTO M_MOTOR GOTO R_SER_MOTOR_OFF M_MOTOR R_SER_MOTOR_READ BCF MOTOR DESLIGADO BTFSS GOTO BSF LIGADO

; COPIA DADO P/ O BUFFER SERIAL ; COPIA DADO P/ O BUFFER SERIAL ; COPIA DADO P/ O BUFFER SERIAL

; APONTA PARA VARIVEIS NO BANK 2

B_MOTOR_SET R_SER_MOTOR_READ ; SALTA POIS NO DESEJA LIGAR / DESLIGAR O MOTOR B_MOTOR_ON R_SER_MOTOR_OFF 1 ; LIGA O MOTOR (DEVE ESTAR NO BANK 0 OU 2) R_SER_MOTOR_READ 0 ; DESLIGA O MOTOR (DEVE ESTAR NO BANK 0 OU 2) B_MOTOR_ON P_MOTOR R_SER_MOTOR_OK B_MOTOR_ON ; CONSIDERA INICIALMENTE A CONDIO DE ; RETORNA INDICANDO QUE O MOTOR EST DESLIGADO ; RETORNA INDICANDO QUE O MOTOR

EST

110
R_SER_MOTOR_OK ; INICIA VERIFICAO DO HORRIO M_MOVLF FSR, SER_TIME BTFSS B_TIME_WR GOTO R_SER_TIME_READ ; O PIC DEVE ATUALIZAR SEU HORRIO INTERNO BCF STATUS, RP1 CLRF V_MS CLRF V_CS MOVF INDF, W INCF FSR, F MOVWF V_SEG MOVF INDF, W INCF FSR, F MOVWF V_MIN MOVF INDF, W INCF FSR, F MOVWF V_HOR GOTO R_SER_RESP R_SER_TIME_READ ; O PIC DEVE ENVIAR SEU HORRIO INTERNO BCF STATUS, RP1 MOVF V_SEG, W MOVWF INDF INCF FSR, F MOVF V_MIN, W MOVWF INDF INCF FSR, F MOVF V_HOR, W MOVWF INDF INCF FSR, F R_SER_RESP BCF BCF MOVLW MOVWF MOVF IORWF CLRF M_MOVLF MOVWF DA SERIAL R_SER_LOOP MOVF CLRF BTFSS GOTO BTFSS GOTO MOVWF R_SER_LOOP_PULA INCF MOVLW XORWF M_JNZ R_SER_END CLRF RETURN STATUS, RP0 STATUS, RP1 SER_INFO FSR V_SER_FLAG, W INDF, F V_SER_OK V_SER_PTR, SER_ID FSR INDF, W INDF B_ID_OK R_SER_LOOP_PULA PIR1, TXIF $-1 TXREG FSR, F SER_END FSR, W R_SER_LOOP STATUS ; SE DIFERENTES ENTO NO ENVIA DADOS ; ESPERA TRMINO DO LTIMO ENVIO ; ENVIA O DADO PELA SERIAL ; INICIALIZA VARIVEIS DE CONTROLE DA SERIAL ; APONTA PARA O END. INICIAL DO BUFFER

; APONTA PARA O PRIMEIRO BYTE DO HORRIO NO BUFFER SERIAL ; SE FOR PARA ATUALIZAR SALTA O GOTO ; SE FOR PARA APENAS LER O HORRIO SALTA ; APONTA PARA VARIVEIS NO BANK 0

; ATUALIZA HORRIO DO PIC

; APONTA PARA VARIVEIS NO BANK 0

; CARREGA HORRIO NO BUFFER SERIAL

; APONTA PARA VARIVEIS NO BANK 0

; TESTA SE J PASSOU DO END. DO CHECK SUM ; ENVIA TODOS OS BYTES ZERANDO O BUFFER ; RETORNA PARA CONDIO DE TUDO ZERO

;-----------------------------------------------------------------------------------------------; ROTINA QUE CARREGA VARIVEIS PRINCIPAIS DA EEPROM PARA A MEMRIA RAM (ESPELHO) ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: W; STATUS; FSR; V_SER_PTR; V_SER_OK; *EEADR; *EEADRH; EEDATA ; CHAMA: R_EE_READ (STACK: 2) ;-----------------------------------------------------------------------------------------------R_ATUALIZA_EEPROM M_EE_READ MOVWF M_EE_READ MOVWF RETURN E_DELTA V_DELTA E_MENOR V_MENOR

111
;************************************************************************************************ ; Inicio do Programa Principal ;************************************************************************************************ R_INICIO CLRF STATUS ; GARANTE BANK = 0 ; APONTA P/ O INICIO DOS BYTES COMUNS TODOS OS BANCOS ; LIMPA VARIVEIS GLOBAIS M_MOVLF FSR, V_BANKS R_INI_LOOP1 CLRF INCFSZ GOTO M_MOVLF M_MOVLF R_INI_ZERAR CLRF INCF DECFSZ GOTO ; LIMPA BUFFER SERIAL M_MOVLF BSF R_INI_LOOP2 CLRF INCF MOVLW XORWF M_JNZ INDF FSR, F R_INI_LOOP1 FSR, V_NUM1 V_NUM, 0X20 INDF FSR, F V_NUM, F R_INI_ZERAR FSR, SER_ID STATUS, IRP INDF FSR SER_END FSR, W R_INI_LOOP2 ; APONTA P/ O INICIO DO BUFFER SERIAL

; LOOP AT ZERAR TODAS AS VARIAVEIS GLOBAIS

; TESTA SE J PASSOU DO END. DO CHECK SUM ; LOOP P/ ZERAR O BUFFER SERIAL ; CONFIGURA RECEPO DA SERIAL

; INICIA VARIVEIS DE CONTROLE M_MOVLF RCSTA, K_RCSTA M_MOVLF MOVLW MOVWF

ADCON0, K_ADCON0 ; INICIA CONFIGURAES DO AD K_T2CON T2CON ; BANK 0

; INICIALIZA VALORES DAS PORTAS M_MOVLF PORTA, K_PORTA M_MOVLF PORTB, K_PORTB M_MOVLF PORTC, K_PORTC ; INICIA VARIVEIS DO BANK 1 BSF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_MOVLF M_CHBK STATUS, RP0

ADCON1, K_ADCON1 ; TERMINA CONFIGURAES DO AD PR2, K_PR2 SPBRG, K_SPBRG TXSTA, K_TXSTA PIE1, K_PIE1 OPTION_REG, K_OPTION TRISA, K_TRISA TRISB, K_TRISB TRISC, K_TRISC 10 ; INICIA CONTADOR DO TIMER2 ; CONFIGURA O BAUD RATE ; CONFIGURA TRANSMISSO ; HABILITA INTERRUPES

; INICIALIZA DIREO DAS PORTAS

; SELECIONA BANK 0

; INICIALIZA VALORES DAS PORTAS M_MOVLF PORTA, K_PORTA M_MOVLF PORTB, K_PORTB M_MOVLF PORTC, K_PORTC BSF M_MOTOR P_NTEC 0 ; DESABILITA O TECLADO ; DESLIGA O MOTOR ; INICIA PONTEIRO COM A CORRENTE DA PRIMEIRA FASE ; INICIALIZA VARIVEIS DE CONTROLE DA SERIAL ; INICIALIZA O LCD

; INICIALIZAES DAS VARIVEIS DE CONTROLE M_MOVLF V_I_PTR, V_I1 M_MOVLF V_SER_PTR, SER_ID CALL M_MOVLF R_LCD_START

INTCON, K_INTCON ; CONFIGURA CONTROLE DE INTERRUPES

; ATUALIZA VARIVEIS ESPELHO AQUI CALL R_ATUALIZA_EEPROM

112
R_MAIN ; ; CALL CALL CALL CALL M_JZ ;DEBUG!!! GOTO ;FIM DO DEBUG!!! BTFSC GOTO BTFSC GOTO R_MSG_INICIO R_LCD_I R_TESTA_I R_TEC_UP R_MAIN R_MAIN V_TECLA, TEC_MENU R_MAIN_MENU V_TECLA, TEC_OK R_MAIN_OK ; ESCREVE MSG INICIAL NO LCD ; MOSTRA CORRENTE ATUAL NO LCD ; VERIFICA SE H SOBRECORRENTE ; ESPERA POR UMA TECLA

; FOI TECLA MENU ; FOI TECLA OK

; S PODE TER SIDO TECLAS UP OU DOWN BSF STATUS, C BTFSC V_TECLA, TEC_UP GOTO R_MAIN_UP R_MAIN_DOWN BCF STATUS, C R_MAIN_UP CALL R_I_PTR GOTO R_MAIN R_MAIN_MENU CALL R_MSG_MOTOR CALL R_TECLA BTFSC V_TECLA, TEC_OK GOTO R_MAIN_MENU_OK ; FOI TECLA OK BTFSS V_TECLA, TEC_MENU GOTO R_MAIN_FIM ; CASO CONTRRIO VOLTA AO LOOP ; TRATA BOTO MENU DENTRO DO MENU LIGA / DESLIGA MOTOR MOVLW E_ID CALL R_AJUSTA_EEPROM MOVLW E_DELTA CALL R_AJUSTA_EEPROM MOVLW E_MENOR CALL R_AJUSTA_EEPROM MOVLW E_NOMINAL CALL R_AJUSTA_EEPROM MOVLW E_PARTIDA CALL R_AJUSTA_EEPROM MOVLW E_UNIDADE CALL R_AJUSTA_EEPROM MOVLW E_I_UNIDADE CALL R_AJUSTA_EEPROM CALL GOTO R_ATUALIZA_EEPROM R_MAIN_FIM ; POR HORA APENAS SAI!

R_MAIN_MENU_OK ; TRATA BOTO OK PARA LIGA / DESLIGA MOTOR BTFSS P_MOTOR GOTO R_MAIN_MOT_ON M_MOTOR 0 GOTO R_MAIN_FIM R_MAIN_MOT_ON ; O MOTOR EST DESLIGADO, DEVE LIG-LO M_MOTOR 1 GOTO R_MAIN_FIM R_MAIN_OK ; NADA IMPLEMENTADO PARA ESTA OPO AT AGORA R_MAIN_FIM MOVLW CALL M_WAIT GOTO LCD_CLR R_LCD_CMD D'100' R_MAIN

; VERIFICA SE O MOTOR EST LIGADO ; SALTA PARA LIGAR O MOTOR, POIS EST DESLIGADO

; ESPERA UM POUCO ANTES DE CONTINUAR

;-----------------------------------------------------------------------------------------------; ROTINA QUE CAUSA UM ATRASO DE APROXIMADAMENTE N x 51,2 us ; ENTRADA: W = N ESPERAS ; SADA: NENHUMA ; AFETA: W; STATUS; TMR0 ; CHAMA: NADA (STACK: 1) ;------------------------------------------------------------------------------------------------

113
R_DELAY SUBLW MOVWF INCF BCF BTFSS GOTO APROXIMADAMENTE 50xW us RETURN ;-----------------------------------------------------------------------------------------------; ROTINA QUE CAUSA UM ATRASO DE APROXIMADAMENTE N ms ; ENTRADA: W = N ESPERAS ; SADA: NENHUMA ; AFETA: W; STATUS; V_WAIT; TMR0 ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_WAIT MOVWF R_WIT_LOOP MOVLW CALL DECFSZ GOTO RETURN ;-----------------------------------------------------------------------------------------------; ROTINA QUE ESPERA POR UMA TECLA POR UM TEMPO MXIMO ; ENTRADA: V_TEC_TEMPO = NMERO DE SEGUNDOS QUE DEVE ESPERAR PELA TECLA = 7 SEGUNDOS SE ZERO! ; SADA: V_TECLA = TECLA PRECIONADA ; AFETA: W; STATUS; V_TECLA; V_TEC_TEMPO ; CHAMA: R_TEC_UP (4) (STACK: 5) ;-----------------------------------------------------------------------------------------------R_TECLA MOVF BTFSC MOVLW MOVWF CLRF R_TEC_LOOP MOVF M_JZ CALL M_JZ R_TEC_FIM CLRF MOVF RETURN V_TEC_TEMPO, W STATUS, Z D'7' V_TEC_TEMPO V_TECLA V_TEC_TEMPO, F R_TEC_FIM R_TEC_UP R_TEC_LOOP V_TEC_TEMPO V_TECLA,F ; VERIFICA SE O TEMPO ZERO ; SE FOR ZERO ENTO COLOCA O DEFAULT VALOR ; PRIMEIRAMENTE NENHUMA TECLA PRECIONADA V_WAIT D'20' R_DELAY V_WAIT, F R_WIT_LOOP ; CARREGA CONTADOR DE TEMPO ; APROXIMADAMENTE 20 x 256 x 4/Fosc ~= 1000 us ; REPETE AT PASSAR O TEMPO PEDIDO 0XFF TMR0 TMR0, F INTCON, T0IF INTCON, T0IF $-1 ; APROXIMADAMENTE W x 256 x 4/Fosc ~= W x 50 us ; AJUSTE DA SUBTRAO ; PREPARA PARA VERIFICAR SE HOUVE OVERFLOW ; ESPERA POR OVERFLOW, ISTO , PASSOU

; TESTA SE J ESTOUROU TEMPO DE ESPERA DA TECLA ; RETORNA Z = 0 SE NADA PRECIONADO ; SE NADA TECLADO, SAI IMEDIATAMENTE ; APENAS ATUALIZA STATUS DE ACORDO COM A TECLA

;-----------------------------------------------------------------------------------------------; ROTINA QUE L LTIMA TECLA PRECIONADA (ESPERA SOLTAR A TECLA SE FOR O CASO) ; ENTRADA: NENHUMA ; SADA: V_TECLA = 0 SE NADA; = TECLA PRECIONADA; STATUS, Z = 0 ; AFETA: W; STATUS; V_TECLA ; CHAMA: R_SERIAL (3); R_LE_TEC (1) (STACK: 4) ;-----------------------------------------------------------------------------------------------R_TEC_UP CLRF R_TEC_UP_LOOP CALL CALL M_JZ MOVWF GOTO R_TEC_UP_FIM MOVF RETURN V_TECLA R_SERIAL R_LE_TEC R_TEC_UP_FIM V_TECLA R_TEC_UP_LOOP V_TECLA,F ; PRIMEIRAMENTE NENHUMA TECLA PRECIONADA ; VERIFICA A COMUNICAO SERIAL ; RETORNA Z = 0 SE NADA PRECIONADO ; SE NADA TECLADO, SAI IMEDIATAMENTE ; SALVA TECLA PRECIONADA

; APENAS ATUALIZA STATUS DE ACORDO COM A TECLA

114
;-----------------------------------------------------------------------------------------------; ROTINA QUE ESPERA POR UMA TECLA POR UM TEMPO MXIMO, MAS NO ESPERA SOLTAR A TECLA ; ENTRADA: V_TEC_TEMPO = NMERO DE SEGUNDOS QUE DEVE ESPERAR PELA TECLA = 7 SEGUNDOS SE ZERO! ; SADA: V_TECLA = TECLA PRECIONADA ; AFETA: W; STATUS; V_TECLA; V_TEC_TEMPO ; CHAMA: R_LE_TEC; R_WAIT (STACK: 2) ;-----------------------------------------------------------------------------------------------R_TECLA_WAIT MOVF BTFSC MOVLW MOVWF CLRF R_TEC_WIT_LOOP MOVF M_JZ M_WAIT CALL M_JZ MOVWF M_WAIT R_TEC_WIT_FIM CLRF MOVF RETURN V_TEC_TEMPO, W STATUS, Z D'7' V_TEC_TEMPO V_TECLA V_TEC_TEMPO, F R_TEC_WIT_FIM D'100' R_LE_TEC R_TEC_WIT_LOOP V_TECLA D'50' V_TEC_TEMPO V_TECLA,F

; VERIFICA SE O TEMPO ZERO ; SE FOR ZERO ENTO COLOCA O DEFAULT VALOR ; PRIMEIRAMENTE NENHUMA TECLA PRECIONADA

; TESTA SE J ESTOUROU TEMPO DE ESPERA DA TECLA ; RETORNA Z = 0 SE NADA PRECIONADO ; SE NADA TECLADO, SAI IMEDIATAMENTE ; SALVA TECLA PRECIONADA

; APENAS ATUALIZA STATUS DE ACORDO COM A TECLA

;-----------------------------------------------------------------------------------------------; ROTINA QUE VERIFICA QUAIS AS TECLAS QUE ESTO PRESSIONADAS (NO ESPERA SOLTAR TECLA) ; ENTRADA: NENHUMA ; SADAS: W = TECLA PRECIONADA ; Z = 0 SE NO E Z = 1 SE SIM ; AFETA: W; TRIS_TEC; STATUS; *TMR0; V_WAIT ; CHAMA: R_WAIT (STACK: 1) ;-----------------------------------------------------------------------------------------------R_LE_TEC BSF BCF BCF BCF M_WAIT MOVF BSF BSF BSF BCF ANDLW XORLW PRECIONADAS! RETURN K_TECS K_TECS STATUS, RP0 OPTION_REG, 7 STATUS, RP0 P_NTEC D'10' PORT_TEC, W P_NTEC STATUS, RP0 OPTION_REG, 7 STATUS, RP0 ; BANK 1 ; HABILITA PULL UP ; BANK 0 ; HABILITA TECLADO ; ESPERA 10 ms PARA FILTRAR RUDOS ; L TECLAS ; DESABILITA TECLADO ; BANK 1 ; DESABILITA PULL UP ; BANK 0 ; FILTRA OS PINOS VLIDOS DO TECLADO ; COMPLEMENTA OS BITS, SE Z = 0 ENTAO NO H TECLAS

;-----------------------------------------------------------------------------------------------; ROTINA DE INICIALIZAO DO LCD ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: W; STATUS; V_LCD; *V_WAIT ; CHAMA: R_WAIT; LCD_CMD (STACK: 4) ;-----------------------------------------------------------------------------------------------R_LCD_START M_CHBK MOVLW ANDWF M_CHBK 01 TRIS_LCD_OUT TRIS_LCD, F 10

; CONFIGURA BARRAMENTO DE DADOS COMO OUTPUT

; ZERA O BARRAMENTO DE DADOS E O BARRAMENTO DE CONTROLE DO LCD BCF P_EN ; GARANTE QUE O LCD ESTEJA DESABILITADO M_WAIT BCF BCF D'200' P_RS P_READ ; ESPERA AS TENSES DO CIRCUITO ESTABILIZAR ; GARANTE COMANDO DE ESCRITA DE COMANDOS NO MDULO DO LCD

; ESCREVE O PRIMEIRO COMANDO NO LCD (INICIALIZA O LCD) MOVLW K_NDATA ANDWF PORT_LCD, F ; ESCREVE ZERO NO BARRAMENTO DE DADOS DO LCD

115
MOVLW 0X30 IORWF PORT_LCD, F MOVLW 0X03 MOVWF V_LCD R_LCD_STT_LOOP BSF P_EN NOP NOP NOP HABILITA E O QUE DESABILITA BCF P_EN M_WAIT D'20' DECFSZ V_LCD, F GOTO R_LCD_STT_LOOP ; ESCREVE O DADO NO BARRAMENTO DE DADOS

; HABILITA LCD ; ESPERA MAIS DE 450ns ENTRE O SINAL QUE

; DESABILITA LCD ; ESPERA MAIS DE 15ms

; AGORA PROGRAMA O LCD PARA 4 BITS DE DADOS BSF P_EN ; HABILITA LCD BCF P_D0 ; ESCREVE 2 NO BARRAMENTO DE DADOS NOP NOP ; ESPERA MAIS DE 450ns HABILITA E O QUE DESABILITA BCF P_EN ; DESABILITA LCD M_WAIT D'1' ; ESPERA UM POUCO ANTES DE CONTINUAR

ENTRE

SINAL

QUE

; AGORA O LCD EST PRONTO PARA COMUNICAR-SE VIA 4 BITS DE DADOS (INICIA PROGRAO DO LCD) MOVLW LCD_CFG CALL R_LCD_CMD MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL RETURN ;-----------------------------------------------------------------------------------------------; ROTINA QUE LE UM BYTE DO LCD ; ENTRADA: NENHUMA ; SADAS: V_LCD = BYTE LIDO DO LCD ; AFETA: W; STATUS; TRIS_LCD = INPUT; CTRL_LCD; V_LCD ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_LCD_READ BSF M_CHBK MOVLW IORWF M_CHBK BSF NOP NOP MOVF ANDLW MOVWF BCF NOP NOP NOP QUADRADA DO ENABLE BSF NOP NOP SWAPF ANDLW IORWF BCF RETURN P_EN P_READ 01 TRIS_LCD_IN TRIS_LCD, F 10 P_EN PORT_LCD, W K_DATA V_LCD P_EN ; CONFIGURA COMO LEITURA LCD_OFF R_LCD_CMD LCD_ON R_LCD_CMD LCD_CLR R_LCD_CMD LCD_CUR_R R_LCD_CMD LCD_CUR_INPUT R_LCD_CMD

; CONFIGURA PORT_LCD COMO INPUT ; HABILITA LCD ; ESPERA MAIS DE 350ns PELA RESPOSTA DO LCD ; L E FILTRA DADOS LIDOS ; DESABILITA LCD

ESPERA

MAIS

DE

500ns

PARA

MONTAR

ONDA

; HABILITA LCD

; ESPERA MAIS DE 350ns PELA RESPOSTA DO LCD PORT_LCD, W K_NDATA V_LCD, F ; MONTA O BYTE COMPLETO RECEBIDO DO LCD P_EN ; DESABILITA LCD

116

;-----------------------------------------------------------------------------------------------; ROTINA QUE ESCREVE UM BYTE NO LCD ; ENTRADAS: W = BYTE A SER ESCRITO NO LCD ; SADAS: NENHUMA ; AFETA: STATUS; V_LCD; V_W_AUX ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_LCD_WRITE MOVWF BCF M_CHBK MOVLW ANDWF M_CHBK ; ENVIA NIBBLE SUPERIOR MOVLW ANDWF BSF BTFSC BSF BTFSC BSF BTFSC BSF BTFSC BSF NOP DADOS PRONTO BCF MOVLW ANDWF ; ENVIA NIBBLE INFERIOR BSF BTFSC BSF BTFSC BSF BTFSC BSF BTFSC BSF NOP DADOS PRONTO BCF M_CHBK MOVLW IORWF M_CHBK MOVF RETURN V_LCD P_READ 01 TRIS_LCD_OUT TRIS_LCD, F 10 K_NDATA PORT_LCD, F P_EN V_LCD, 7 P_D3 V_LCD, 6 P_D2 V_LCD, 5 P_D1 V_LCD, 4 P_D0 ; ESPERA PELO MENOS 195ns COM O BARRAMENTO DE P_EN K_NDATA PORT_LCD, F P_EN V_LCD, 3 P_D3 V_LCD, 2 P_D2 V_LCD, 1 P_D1 V_LCD, 0 P_D0 ; ESPERA PELO MENOS 195ns COM O BARRAMENTO DE P_EN 01 TRIS_LCD_IN TRIS_LCD, F 10 ; DESABILITA LCD ; DESABILITA LCD ; ESCREVE ZERO NO BARRAMENTO DE DADOS DO LCD ; HABILITA LCD ; SALVA BYTE A SER ESCRITO ; CONFIGURA COMO ESCRITA

; CONFIGURA PORT_LCD COMO OUTPUT

; ESCREVE ZERO NO BARRAMENTO DE DADOS DO LCD ; HABILITA LCD

; CONFIGURA PORT_LCD COMO INPUT

V_LCD, W ; RECUPERA DADO ENVIADO ENVIADA

;-----------------------------------------------------------------------------------------------; ROTINA QUE ESPERA O LCD FICAR DESOCUPADO ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: CTRL_LCD; *W; *STATUS; *TRIS_LCD; *V_LCD ; CHAMA: R_LCD_READ (STACK: 2) ;-----------------------------------------------------------------------------------------------R_LCD_BF BCF CALL BTFSC GOTO RETURN P_RS ; CONFIGURA COMO COMANDO R_LCD_READ ; L BYTE DE COMANDO DO LCD V_LCD, 7 R_LCD_BF ; CONTINUA AT O LCD DESOCUPAR!

;-----------------------------------------------------------------------------------------------; ROTINA QUE ENVIA UM COMANDO PARA O LCD ; ENTRADA: W = BYTE COM O COMANDO A SER ENVIADO ; SADAS: NENHUMA ; AFETA: STATUS; V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD ; CHAMA: R_LCD_BF; R_LCD_WRITE (STACK: 3) ;------------------------------------------------------------------------------------------------

117
R_LCD_CMD MOVWF CALL MOVF CALL RETURN

V_W_AUX ; SALVA COMANDO R_LCD_BF ; ESPERA O LCD DESOCUPAR V_W_AUX, W R_LCD_WRITE

;-----------------------------------------------------------------------------------------------; ROTINA QUE ENVIA UM DADO PARA O LCD ; ENTRADA: W = BYTE COM O DADOS A SER ENVIADO ; SADAS: NENHUMA ; AFETA: STATUS; V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD ; CHAMA: R_LCD_BF; R_LCD_WRITE (STACK: 3) ;-----------------------------------------------------------------------------------------------R_LCD_CHAR MOVWF CALL BSF MOVF CALL RETURN V_W_AUX ; SALVA DADO R_LCD_BF ; ESPERA O LCD DESOCUPAR P_RS V_W_AUX, W R_LCD_WRITE ; CONFIGURA COMO DADO

;-----------------------------------------------------------------------------------------------; ROTINA QUE MOSTRA UM BCD NO LCD ; ENTRADA: W = BCD A SER MOSTRADO ; SADAS: NENHUMA ; AFETA: W; STATUS; V_W_AUX; V_NUM1; *V_LCD; *TRIS_LCD; *CTRL_LCD ; CHAMA: R_LCD_BF; R_LCD_WRITE (STACK: 3) ;-----------------------------------------------------------------------------------------------R_LCD_BCD MOVWF ANDLW ADDLW MOVWF SWAPF ANDLW ADDLW MOVWF CALL BSF MOVF CALL MOVF GOTO RETURN V_W_AUX 0X0F '0' V_NUM1 V_W_AUX, W 0X0F '0' ; SALVA NUMERO A SER MOSTRADO ; CONVERTE NO ASCII EQUIVALENTE ; SALVA NIBBLE INFERIOR DO BCD ; PEGA NIBBLE SUPERIOR DO BCD ; CONVERTE NO ASCII EQUIVALENTE

V_W_AUX ; SALVA DADO R_LCD_BF ; ESPERA O LCD DESOCUPAR P_RS V_W_AUX, W R_LCD_WRITE V_NUM1, W R_LCD_CHAR ; CONFIGURA COMO DADO ; MOSTRA NIBBLE SUPERIOR ; RECUPERA NIBBLE INFERIOR ; MOSTRA NIBBLE INFERIOR

;-----------------------------------------------------------------------------------------------; ROTINA QUE MOSTRA UM BYTE EM DECIMAL NO LCD ; ENTRADA: W = BYTE COM O DADOS A SER ENVIADO ; SADAS: NENHUMA ; AFETA: W; STATUS; V_NUM; V_NUM1; V_NUM2; V_NUM3; V_NUM4; *V_NUM5; *V_NUM6; V_NUM7 ; *V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD ; CHAMA: R_DIV8; R_LCD_BF; R_LCD_WRITE (STACK: 3) ;-----------------------------------------------------------------------------------------------R_LCD_DECIMAL CLRF MOVWF M_MOVLF MOVLW R_LCD_DEC_LOOP MOVWF MOVF MOVWF CLRF CALL MOVF BTFSS GOTO BTFSS GOTO R_LCD_DEC_SHOW ADDLW STATUS V_NUM3 V_NUM7, 0X03 D'100' V_NUM2 V_NUM3, W V_NUM1 V_NUM R_DIV8 V_NUM4, W STATUS, Z R_LCD_DEC_SHOW V_NUM7, 4 R_LCD_DEC_OK '0' ; GARANTE BANK 0 ; SALVA DADO

; PARTE ALTA DA WORD NULA ; PEGA O RESTO PARA DIVIDIR POR 10 (RESTO EM V_NUM3)

; VERIFICA SE DEVE MOSTRAR

118
MOVWF CALL MOVF BSF CALL BSF R_LCD_DEC_OK DECF MOVLW ANDWF M_JZ MOVLW BTFSS GOTO BSF MOVLW GOTO R_LCD_DEC_FIM RETURN ;-----------------------------------------------------------------------------------------------; ROTINA QUE ENVIA UMA MENSAGEM PARA O DISPLAY A PARTIR DA POSIO ATUAL DO CURSOR ; ENTRADA: W = ENDEREO DA MENSAGEM (PRIMEIRO BYTE INFORMA O TAMANHO DA MENSAGEM) ; SADAS: NENHUMA ; AFETA: W; STATUS; V_NUM; V_NUM1; *V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD ; CHAMA: R_LCD_CHAR (STACK: 4) ;-----------------------------------------------------------------------------------------------R_MENSAGEM MOVWF CALL MOVWF R_MSG_LOOP INCF MOVF CALL CALL DECFSZ GOTO RETURN V_NUM R_CALL_MSG V_NUM1 V_NUM, F V_NUM, W R_CALL_MSG R_LCD_CHAR V_NUM1, F R_MSG_LOOP ; GUARDA ENDEREO DA MENSAGEM V_NUM1 ; SALVA DADO EM ASCII R_LCD_BF ; ESPERA O LCD DESOCUPAR V_NUM1, W P_RS ; CONFIGURA COMO DADO R_LCD_WRITE V_NUM7, 4 ; FLAG TEMPORRIO PARA INFORMAR QUE DEVE MOSTRAR ZEROS! V_NUM7, F 0X03 V_NUM7, W R_LCD_DEC_FIM D'10' V_NUM7, 0 R_LCD_DEC_LOOP V_NUM7, 4 D'1' R_LCD_DEC_LOOP

; FLAG TEMPORRIO PARA INFORMAR QUE DEVE MOSTRAR ZEROS!

; ROTINA AUXILIAR PARA PEGAR CADA CARACTER DA MENSAGEM R_CALL_MSG MOVWF PCL ;-----------------------------------------------------------------------------------------------; ROTINA QUE ENVIA A MENSAGEM DO LOOP PRINCIPAL NA PRIMEIRA LINHA ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: W; STATUS; *V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD ; *V_NUM; *V_NUM1; *V_NUM2; *V_NUM3; *V_NUM4; *V_NUM5; *V_NUM6 ; CHAMA: R_MENSAGEM (5), R_LCD_CHAR; R_LCD_CMD; R_BIN_TO_BCD; R_LCD_BCD (STACK: 5) ;-----------------------------------------------------------------------------------------------R_MSG_INICIO MOVLW CALL M_SHOW_MSG LCD_L0 R_LCD_CMD MSG_INICIO

; POSICIONA NA PRIMEIRA LINHA ; MOSTRA A MENSAGEM DO LOOP PRINCIPAL

; MOSTRA O HORRIO NO FORMATO HH:MM:SS MOVLW LCD_L0 + D'8' CALL R_LCD_CMD MOVF CALL CALL MOVLW CALL MOVF CALL CALL MOVLW CALL MOVF CALL CALL RETURN V_HOR, W R_BIN_TO_BCD R_LCD_BCD ':' R_LCD_CHAR V_MIN, W R_BIN_TO_BCD R_LCD_BCD ':' R_LCD_CHAR V_SEG, W R_BIN_TO_BCD R_LCD_BCD

;------------------------------------------------------------------------------------------------

119
; ROTINA QUE ENVIA A MENSAGEM QUE PERGUNTA SE LIGA OU DESLIGA O MOTOR ; ENTRADA: NENHUMA ; SADAS: NENHUMA ; AFETA: W; STATUS; *V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD; *V_NUM; *V_NUM1 ; CHAMA: R_MENSAGEM (5), R_LCD_CHAR; R_LCD_CMD (STACK: 5) ;-----------------------------------------------------------------------------------------------R_MSG_MOTOR MOVLW CALL M_SHOW_MSG MOVLW CALL MOVLW CALL M_SHOW_MSG BTFSS GOTO MOVLW CALL MOVLW CALL MOVLW CALL MOVLW CALL R_MSG_MOT_FIM RETURN ;-----------------------------------------------------------------------------------------------; ROTINA DE INTERFACE PARA AJUSTAR OS VALORES DE CONFIGURAO NA EEPROM ; ENTRADA: W = ENDEREO DA EEPROM A SER AJUSTADO ; SADAS: NENHUMA ; AFETA: W; STATUS; V_NUM2; *V_W_AUX; *V_LCD; *TRIS_LCD; *CTRL_LCD; *V_NUM; *V_NUM1; ; *V_NUM3; *V_NUM4; *V_NUM6; *V_NUM7 ; CHAMA: R_MENSAGEM (5), R_TECLA_WAIT (2); R_EE_READ; R_EE_WRITE; ; R_LCD_CHAR (3); R_LCD_CMD; R_LCD_DECIMAL (STACK: 6) ;-----------------------------------------------------------------------------------------------R_AJUSTA_EEPROM MOVWF BSF MOVWF CLRF BCF MOVWF MOVLW CALL MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_DELTA MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_MENOR MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_NOMINAL MOVLW XORWF M_JNZ MOVLW GOTO V_EE_OP STATUS, RP1 EEADR EEADRH STATUS, RP1 V_EE_OP LCD_CLR R_LCD_CMD E_ID V_EE_OP, W R_AJT_EE_DELTA MSG_ID R_AJT_EE_VALOR E_DELTA V_EE_OP, W R_AJT_EE_MENOR MSG_DELTA R_AJT_EE_VALOR E_MENOR V_EE_OP, W R_AJT_EE_NOMINAL MSG_MENOR R_AJT_EE_VALOR E_NOMINAL V_EE_OP, W R_AJT_EE_PARTIDA MSG_NOMINAL R_AJT_EE_VALOR ; SALVA ENDEREO DA EEPROM ; MUDA PARA O BANCO 2 ; GRAVA ENDEREO DA EEPROM ; GARANTE ENDEREO VLIDO ; VOLTA PARA O BANCO 0 ; SALVA ENDEREO DA EEPROM ; LIMPA O DISPLAY LCD_CLR R_LCD_CMD MSG_CONFIRMA LCD_L1 R_LCD_CMD LCD_L1 + 3 R_LCD_CMD MSG_MOTOR P_MOTOR R_MSG_MOT_FIM LCD_L1 R_LCD_CMD 'D' R_LCD_CHAR 'E' R_LCD_CHAR 'S' R_LCD_CHAR

; LIMPA O DISPLAY ; MOSTRA A MENSAGEM PARA CONFIRMAR OPERAO ; POSICIONA NA SEGUNDA LINHA ; POSICIONA NA SEGUNDA LINHA PARA ESCREVER "LIGAR?" ; MOSTRA A MENSAGEM PARA LIGAR OU DESLIGAR O MOTOR ; VERIFICA SE O MOTOR EST LIGADO ; SALTA, POIS EST DESLIGADO E DEVE LIG-LO MESMO ; POSICIONA NA SEGUNDA LINHA PARA ESCREVER "DES"

120
R_AJT_EE_PARTIDA MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_UNIDADE MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_I_UNIDADE MOVLW XORWF M_JNZ MOVLW GOTO R_AJT_EE_VALOR CALL MOVLW CALL CALL MOVWF E_PARTIDA V_EE_OP, W R_AJT_EE_UNIDADE MSG_PARTIDA R_AJT_EE_VALOR E_UNIDADE V_EE_OP, W R_AJT_EE_I_UNIDADE MSG_UNIDADE R_AJT_EE_VALOR E_I_UNIDADE V_EE_OP, W R_AJT_EE_FIM MSG_I_UNIDADE R_AJT_EE_VALOR R_MENSAGEM ':' R_LCD_CHAR R_EE_READ V_EE_VALOR ; MOSTRA A MENSAGEM EQUIVALENTE

; CHAMA ROTINA DE LEITURA DA EEPROM ; SALVA VALOR DA EEPROM

; INICIA O AJUSTE DO VALOR PROPRIAMENTE DITO R_AJT_EE_LOOP ; LIMPA 3 CARACTERES DO DISPLAY MOVLW LCD_L1 CALL R_LCD_CMD MOVLW ' ' CALL R_LCD_CHAR CALL R_LCD_CHAR CALL R_LCD_CHAR MOVLW LCD_L1 CALL R_LCD_CMD ; MOSTRA O VALOR ATUAL DA VARIVEL MOVF V_EE_VALOR, W CALL R_LCD_DECIMAL CALL BTFSC GOTO BTFSS BTFSC GOTO R_TECLA_WAIT V_TECLA, TEC_OK R_AJT_EE_GRAVA V_TECLA, TEC_MENU STATUS, Z R_AJT_EE_FIM

; FOI TECLA OK ; SE FOI MENU OU NADA, ENTO SAI ; NADA TECLADO POR MUITO TEMPO, ENTO SAI DO LOOP

; DEVE INCREMENTAR / DECREMENTAR O VALOR BTFSC V_TECLA, TEC_UP GOTO R_AJT_EE_INC DECF V_EE_VALOR, F GOTO R_AJT_EE_LOOP R_AJT_EE_INC INCF V_EE_VALOR, F GOTO R_AJT_EE_LOOP R_AJT_EE_GRAVA MOVF BSF MOVWF CALL R_AJT_EE_FIM RETURN V_EE_VALOR, W STATUS, RP1 EEDATA R_EE_WRITE

; DEVE INCREMENTAR

; MUDA PARA O BANCO 2 ; CHAMA ROTINA DE ESCRITA DA EEPROM

;-----------------------------------------------------------------------------------------------; ROTINA QUE L AS 3 CORRENTES DE FASES DO ADC E MOSTRA A CORRENTE SELECIONADA NO LCD ; ENTRADA: V_I_PTR = END. DA VARIVEL COM O VALOR DA CORRENTE A SER MOSTRADA ; SADAS: NENHUMA ; AFETA: W; STATUS; FSR; V_NUM; V_NUM7; *V_W_AUX; V_LCD; *TRIS_LCD; *CTRL_LCD; ; V_NUM1; V_NUM2; *V_NUM; *V_NUM3; *V_NUM4; *V_NUM5; *V_NUM6 ; CHAMA: R_ADC_READ; R_LCD_DECIMAL; R_LCD_CHAR; R_LCD_CMD; R_DIV8; R_MUL8 (STACK: 4) ;-----------------------------------------------------------------------------------------------R_LCD_I MOVLW CALL MOVLW LCD_L1 R_LCD_CMD 'I'

121
CALL MOVLW SUBWF ADDLW CALL MOVLW CALL M_MOVLF R_LCD_I_LOOP BSF CALL MOVF MOVWF MOVLW SUBWF CALL MOVWF DECFSZ GOTO R_LCD_CHAR V_I1 V_I_PTR, W '1' R_LCD_CHAR '=' R_LCD_CHAR V_NUM1, 3 STATUS, C R_I_PTR V_I_PTR, W FSR V_I1 V_I_PTR, W R_ADC_READ INDF V_NUM1 R_LCD_I_LOOP ; INCREMENTA O PONTEIRO DA CORRENTE ATUAL ; GUARDA ENDEREO DA FASE ATUAL EM FSR ; DETERMINA O CORRENTE CANAL A SER LIDO ; L O ADC ; SALVA VALOR ATUAL

; DETERMINA A CORRENTE FASE A SER LIDA

; MOSTRA A CORRENTE CALCULADA NO LCD MOVWF V_NUM1 MOVF V_DELTA, W MOVWF V_NUM2 CALL R_MUL8 MOVF V_NUM3, W MOVWF V_NUM1 MOVF V_NUM4, W ADDWF V_MENOR, W (OFFSET) MOVWF V_NUM ; FAZ O AJUSTE DA UNIDADE DA CORRENTE M_EE_READ E_I_UNIDADE MOVWF V_NUM2 CALL R_DIV8 MOVF V_NUM4, W MOVWF V_I_AUX MOVF V_NUM5, W CALL R_LCD_DECIMAL ; MOSTRA AS CASAS DECIMAIS MOVLW ',' CALL R_LCD_CHAR MOVLW D'10' MOVWF V_NUM2 MOVF V_I_AUX, W MOVWF V_NUM1 CALL R_MUL8 MOVLW '0' ADDWF V_NUM4, W CALL R_LCD_CHAR MOVLW MOVWF MOVF MOVWF CALL MOVLW ADDWF CALL MOVLW CALL MOVLW CALL MOVLW CALL MOVF CALL MOVLW CALL MOVLW CALL CALL CALL CALL CALL RETURN D'10' V_NUM2 V_NUM3, W V_NUM1 R_MUL8 '0' V_NUM4, W R_LCD_CHAR 'A' R_LCD_CHAR ' ' R_LCD_CHAR '(' R_LCD_CHAR INDF, W R_LCD_DECIMAL ')' R_LCD_CHAR ' ' R_LCD_CHAR R_LCD_CHAR R_LCD_CHAR R_LCD_CHAR R_LCD_CHAR

; MULTIPLICADOR DELTA ; SALVA RESULTADO MENOS SIGNIFICATIVO ; SOMA MAIS SIGNIFICATIVO COM O MENOR VALOR DA ESCALA ; SALVA RESULTADO DA SOMA NO MAIS SIGNIFICATIVO ; PEGA O COEFICIENTE DA UNIDADE DA CORRENTE ; DIVIDE O VALOR I * DELTA + MENOR PELO COEFICIENTE ; SALVA BYTE MENOS SIGNIFICATIVO ; PEGA O BYTE MAIS SIGNIFICATIVO ; MOSTRA PARTE INTEIRA DO RESULTADO

; PREPARA PARA MOSTRAR A PARTE DECIMAL ; PEGA PARTE BAIXA

; CONVERTE PARA ASCII

; PREPARA PARA MOSTRAR A PARTE DECIMAL ; PEGA PARTE BAIXA

; CONVERTE PARA ASCII

;------------------------------------------------------------------------------------------------

122
; ROTINA QUE INC/DEC PONTEIRO DA CORRENTE ; ENTRADA: V_I_PTR = END. DA VARIVEL COM O VALOR DA CORRENTE; C = 1 P/ INCREMENTAR ; SADAS: NENHUMA ; AFETA: W; STATUS; V_I_PTR ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_I_PTR M_JC DECF MOVLW XORWF M_JNZ MOVLW MOVWF GOTO R_I_PTR_INC INCF MOVLW XORWF M_JNZ MOVLW MOVWF R_I_PTR_END RETURN ;-----------------------------------------------------------------------------------------------; ROTINA QUE VERIFICA SE H SOBRECORRENTE ; ENTRADA: V_I_PTR = END. DA VARIVEL COM O VALOR DA CORRENTE ; SADAS: V_TEMPO_MAX; V_FAIXA; V_TEMPO SO ATUALIZADOS ; AFETA: W; STATUS; V_TEMPO_MAX; V_FAIXA; V_TEMPO ; CHAMA: NADA (STACK: 1) ;-----------------------------------------------------------------------------------------------R_TESTA_I MOVF MOVWF BTFSS GOTO MOVF BTFSS GOTO BSF MOVLW MOVWF BCF MOVLW MOVWF R_TST_I_LOOP CALL SUBWF BTFSC GOTO BSF INCF INCF BCF DECFSZ GOTO V_I_PTR, W FSR P_MOTOR R_TST_I_CLR V_PARTIDA, F STATUS, Z R_TST_I_CLR STATUS, RP1 E_MAX EEADR STATUS, RP1 K_FAIXA V_NUM R_EE_READ INDF, W STATUS, C R_TST_I_OK STATUS, RP1 EEADR EEADR STATUS, RP1 V_NUM R_TST_I_LOOP ; W = ENDEREO DA CORRENTE DA FASE ATUAL ; GUARDA ENDEREO ; VERIFICA SE O MOTOR EST LIGADO ; LIMPA TODAS AS VARIVEIS INTERNAS E SAI ; SE ZERO NO EST EM PARTIDA ; LIMPA TODAS AS VARIVEIS INTERNAS E SAI ; MUDA PARA O BANK 2 ; PEGA O ENDEREO BASE DAS CORRENTES ; APONTA PARA ESTE ENDEREO NA EEPROM ; MUDA PARA O BANK 0 ; PREPARA CONTADOR R_I_PTR_INC V_I_PTR, F V_I1 - 1 V_I_PTR, W R_I_PTR_END V_I3 V_I_PTR R_I_PTR_END V_I_PTR, F V_I3 + 1 V_I_PTR, W R_I_PTR_END V_I1 V_I_PTR

; H SOBRECORRENTE E LOCALIZOU O SEU TEMPO! ; MUDA PARA O BANK 2 ; APONTA PARA O TEMPO MXIMO ; APONTA PARA A PRXIMA CORRENTE CADASTRADA ; MUDA PARA O BANK 0

; CONTA OS 8 CADASTROS EXISTENTES ; VARRE TODAS AS FAIXAS GRAVADAS

R_TST_I_CLR ; LIMPA TODAS AS VARIVEIS INTERNAS (MENOS O FLAG DE SOBRECORRENTE) CLRF V_TEMPO ; NO H SOBRECORRENTE! CLRF V_TEMPO_MAX BCF B_1CS BCF B_1S BCF B_M_ALERTA ; LIMPA O ALERTA DA VARIVEL GOTO R_TST_I_FIM ; NO H SOBRECORRENTE! R_TST_I_OK BSF MOTOR B_M_ALERTA ; FLAG PARA AVISAR AO PC QUE H UM ALERTA NO

; CARREGA DADOS O TEMPO MXIMO DA SOBRECORRENTE LOCALIZADA! BSF STATUS, RP1 ; MUDA PARA O BANK 2 INCF EEADR ; APONTA PARA O TEMPO MXIMO

123
CALL MOVWF R_EE_READ V_TEMPO_MAX ; GUARDA O TEMPO MXIMO DESTA SOBRECORRENTE

; CALCULA A FAIXA E VERIFICA SE DEVE ZERAR O CONTADOR MOVLW K_FAIXA/2 + 1 SUBWF V_NUM, W ; CALCULA A FAIXA BTFSC STATUS, C GOTO R_TST_I_1CS ; EST NA FAIXA DE CENTSIMOS DE SEGUNDOS ; OBSERVOU QUE A FAIXA DE SEGUNDOS BTFSC B_1S GOTO R_TST_I_FIM CLRF V_TEMPO BCF B_1CS BSF B_1S GOTO R_TST_I_FIM ; VERIFICA SE A FAIXA ANTERIOR ERA A MESMA ; LIMPA CONTADOR SE A FAIXA MUDOU! ; ACIONA O FLAG DA FAIXA

R_TST_I_1CS ; OBSERVOU QUE A FAIXA DE CENTSIMOS DE SEGUNDOS BTFSC B_1CS ; VERIFICA SE A FAIXA ANTERIOR ERA A MESMA GOTO R_TST_I_FIM CLRF V_TEMPO ; LIMPA CONTADOR SE A FAIXA MUDOU! BCF B_1S BSF B_1CS ; ACIONA O FLAG DA FAIXA R_TST_I_FIM RETURN END

;************************************************************************************************* ; DEFINIES DAS CONSTANTES ; Arquivo: Main.inc ;************************************************************************************************* ;================================================================================================= ; TIMER2 #DEFINE K_T2CON #DEFINE K_PR2 B'00100101' D'249' ; TIMER2 LIGADO COM PRE=4 E POST=5 ; O TIMER2 IR CONTAR DE 0 AT 249 (250 VEZES)

;================================================================================================= ; CONSTANTES DE INICIALIZAO #DEFINE K_TRISA #DEFINE K_TRISB #DEFINE K_TRISC #DEFINE K_PORTA #DEFINE K_PORTB #DEFINE K_PORTC B'11101111' B'11110000' B'11111110' 0XFF 0X00 0X00 ; SELECIONA COMO I/O (=1 -> INPUT / =0 -> OUTPUT) ; SELECIONA COMO I/O (=1 -> INPUT / =0 -> OUTPUT) ; SELECIONA COMO I/O (=1 -> INPUT / =0 -> OUTPUT) ; UTILIZADO PARA CONTROLE DOS PERIFRICOS ; UTILIZADO PARA I/O DE DADOS E COMUNICAO SERIAL ; UTILIZADO PARA I/O DE DADOS E COMUNICAO SERIAL ; DESABILITA PULL UP DO PORTB E PREESCALA PARA TIMER 0 ; HABILITA INTERRUPES ; HABILITA A INT SERIAL DE RECEPO E TIMER2 (BANK 1) ; FREQ. DE CONVERSO E CANAL ESCOLHIDO ; 4/2 CANAIS

#DEFINE K_OPTION B'10000111' #DEFINE K_INTCON B'11000000' #DEFINE K_PIE1 B'00100010' #DEFINE K_ADCON0 B'10000001' #DEFINE K_ADCON1 B'00001011'

;================================================================================================= ; TECLADO #DEFINE TRIS_TEC TRISB #DEFINE PORT_TEC PORTB #DEFINE P_NTEC #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE TEC_MENU 7 TEC_OK TEC_UP TEC_DOWN 4 P_MENU P_OK P_UP P_DOWN

PORTA, 4 6 5 PORT_TEC, PORT_TEC, PORT_TEC, PORT_TEC, TEC_MENU TEC_OK TEC_UP TEC_DOWN ; TODOS OS BITS SETADOS = NENHUMA TECLA

#DEFINE K_TECS

B'11110000'

;================================================================================================= ; LCD MODULE

124
#DEFINE #DEFINE #DEFINE #DEFINE TRIS_LCD TRIS_LCD_OUT TRIS_LCD_IN PORT_LCD PORTB, 1 PORTB, 2 PORTB, 3 ; OFFSET PARA O PRIMEIRO BIT DO K_DATA_BASE K_DATA_BASE K_DATA_BASE K_DATA_BASE + + + + 0 ; BIT MENOS SIGNIFICATIVO DO BARRAMENTO DE DADOS 1 2 3 ; BIT MAIS SIGNIFICATIVO DO BARRAMENTO DE DADOS ; TODOS OS BITS UTILIZADOS NO BARRAMENTO DE DADOS DO LCD ; TODOS OS DEMAIS BITS DA PORTA QUE NO DADOS DO LCD ; DESLIGA LCD ; LIGA LCD E DESLIGA O CURSOR! ; LIGA CURSOR ; ATIVA CURSOR "_" ; ATIVA CURSOR ALTERNANTE "X" E "_" ; DESLOCA O CURSOR PARA DIREITA APS ENTRAR DADOS ; DESLOCA O CURSOR PARA ESQUERDA APS ENTRAR DADOS TRISB 0X0F 0XF0 PORTB ; CONSTANTES UTILIZADAS PARA CONFIGURAR DIREO DO I/O

#DEFINE P_RS #DEFINE P_READ #DEFINE P_EN

#DEFINE K_DATA_BASE 4 BARRAMENTO DE DADOS #DEFINE P_D0 PORT_LCD, #DEFINE P_D1 PORT_LCD, #DEFINE P_D2 PORT_LCD, #DEFINE P_D3 PORT_LCD, #DEFINE K_DATA #DEFINE K_NDATA #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE LCD_CFG LCD_OFF LCD_ON LCD_CUR_ON LCD_CURSOR LCD_CUR_INPUT LCD_CUR_HOME LCD_CUR_R LCD_CUR_L LCD_CLR LCD_L0 LCD_L1

B'11110000' B'00001111' 0X28 0X08 0X0C 0X0E 0X0D 0X0F 0X02 0X06 0X04 0X01 0X80 0XC0

;================================================================================================= ; SERIAL #DEFINE K_TXSTA #DEFINE K_RCSTA #DEFINE K_SPBRG #DEFINE SER_COUNT ; BUFFER SERIAL #DEFINE SER_EDATA #DEFINE SER_SIZE D'48' B'01100100' B'11010000' D'129' 0X10 D'32' ; STATUS DA TRANSMISSO SERIAL ; STATUS DA RECEPO SERIAL ; 129 = 9600 OU 64 = 19200 (0,16%) ; VEZES QUE PASSA PELA LE_TEC E ESPERA PRXIMO BYTE ; 32 BYTES DE DADOS DA EEPROM DENTRO DO PACOTE ; TOTAL DE BYTES DE UM PACOTE DE COMUNICAO ; ; ; END. DO ; ; END. DA ; END. DO ; ENDEREO DO ID NO PACOTE END. DO COMANDO NO PACOTE ERRO (PIC -> PC) NO UTILIZADO (PC -> PIC) END. BASE DA EEPROM PRIMERIA FASE PRIMEIRO BYTE DO HORRIO (SEG;MIN;HOR) END. RESERVADOS PARA FUTURAS IMPLEMENTAES

#DEFINE SER_ID 0X120 + 0X00 #DEFINE SER_CMD SER_ID + D'1' #DEFINE SER_INFO SER_ID + D'2' #DEFINE SER_EE SER_ID + D'3' #DEFINE SER_FASE SER_ID + D'4' #DEFINE SER_TIME SER_ID + D'7' #DEFINE SER_RES SER_ID + D'10' (10..14) #DEFINE SER_EDATA0 SER_ID + D'15' #DEFINE SER_TAM SER_ID + SER_SIZE - 1 #DEFINE SER_END ENDEREO!) ; ERROS #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE #DEFINE SER_TAM + 1

; END. DO PRIMEITO BYTE DE DADOS DO PACOTE ; END. DO BYTE DE TESTE (= TAMANHO DO PACOTE) ; PRIMEIRO ENDEREO INVLIDO (P/ TESTAR

DA SERIAL (PARA O BYTE INFO) B_ERRO_OVER INDF, 0 ; ERRO DE ESTROURO DE BYTES RECEBIDOS B_ERRO_BREAK INDF, 1 ; ERRO DE QUEBRA DE RECEPO B_ERRO_CMD INDF, 2 ; ERRO DE COMANDO INVLIDO B_ERRO_EEPROM INDF, 3 ; ERRO DE ESCRITA NA EEPROM B_ERRO_TAM INDF, 4 ; ERRO DO TAMANHO DO PACOTE B_ERRO_ALERTA INDF, 5 ; EST EM ALERTA DE SOBRECORRENTE B_ERRO_SOBRE INDF, 6 ; HOUVE UMA SOBRECORRENTE B'00110110' SER_CMD, 7 SER_CMD, 6 SER_CMD, 3 SER_CMD, 0 ; TODO COMANDO ENVIADO DEVE TER ESTES BITS ZERADOS ; BIT RESPONSVEL PELA ATUALIZAO DO HORRIO

; COMANDOS DA SERIAL #DEFINE SER_CMD_TST #DEFINE B_TIME_WR >ATUALIZA) #DEFINE B_EE_WR #DEFINE B_MOTOR_SET #DEFINE B_MOTOR_ON

(=1-

; BIT QUE INFORMA SE DEVE ESCREVER NA EEPROM ; BIT QUE INFORMA SE DEVE ESCREVER O NOVO STATUS DO MOTOR ; BIT QUE INFORMA O STATUS DO MOTOR (LIGADO / DESLIGADO)

; ENDEREOS DA EEPROM PARA EVITAR QUE SOBREESCREVE DADOS ERRADOS #DEFINE SER_EE_ADDR B'11110000' ; ENDEREO INICIAL DOS BLOCOS DE 16 BYTES DA EEPROM ;================================================================================================= ; ACIONAMENTO DO MOTOR #DEFINE P_MOTOR PORTB, 0

125
;************************************************************************************************* ; VARIVEIS DA RAM ;************************************************************************************************* V_BANK0 V_BANK1 V_BANK2 16F876/77!!! V_BANK3 16F876/77!!! V_BANKS 16F876/77!!! EQU EQU EQU EQU EQU 0X20 0XA0 0X120 0X1A0 0XF0 ; INCIO DA RAM DO BANK 0 (80 BYTES) ; INCIO DA RAM DO BANK 1 (80 BYTES) ; INCIO DA RAM DO BANK 2 (80 + ; INCIO DA RAM DO BANK 3 (80 +

16 16

BYTES) BYTES)

APENAS APENAS

; INCIO DA RAM PARA QUALQUER BANK (16 BYTES) APENAS

;------------------------------------------------------------------------------------------------; VARIVEIS COM ACESSO ATRAVS DO BANK 0 ; VARIVEIS DE CONTROLE V_TECLA EQU V_BANK0 + 0X00 ; VARIVEL DE LEITURA DA TECLA V_WAIT EQU V_BANK0 + 0X01 ; CONTADOR PARA ATRASO EM ms DA ROTINA R_WAIT V_LCD EQU V_BANK0 + 0X02 ; BYTE CONTENDO O DADO/COMANDO DO/PARA LCD V_I_PTR EQU V_BANK0 + 0X03 ; BYTE COM O ENDEREO DA CORRENTE MOSTRADA NO LCD ; BYTES PARA AS FUNES MATEMTICAS V_NUM EQU V_BANK0 + 0X04 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM1 EQU V_BANK0 + 0X05 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM2 EQU V_BANK0 + 0X06 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM3 EQU V_BANK0 + 0X07 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM4 EQU V_BANK0 + 0X08 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM5 EQU V_BANK0 + 0X09 ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM6 EQU V_BANK0 + 0X0A ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS V_NUM7 EQU V_BANK0 + 0X0B ; BYTE UTILIZADO NAS ROTINAS MATEMTICAS ; BYTES PARA GUARDAR AS LTIMAS LEITURAS DO ADC V_I1 EQU V_BANK0 + 0X0C ; CORRENTE DA PRIMEIRA FASE DO MOTOR (END.= BASE + 8) V_I2 EQU V_BANK0 + 0X0D ; CORRENTE DA SEGUNDA FASE DO MOTOR V_I3 EQU V_BANK0 + 0X0E ; CORRENTE DA TERCEIRA FASE DO MOTOR ; BYTES PARA A CONTAGEM DO TEMPO V_MS EQU V_BANK0 + 0X0F ; BYTE QUE CONTA MILZIMOS DE SEGUNDOS (0..9) V_CS EQU V_BANK0 + 0X10 ; BYTE QUE CONTA OS CENTZIMOS DE SEGUNDOS (0..99) V_SEG EQU V_BANK0 + 0X11 ; BYTE QUE CONTA OS SEGUNDOS (0..59) V_MIN EQU V_BANK0 + 0X12 ; BYTE QUE CONTA OS MINUTOS (0..59) V_HOR EQU V_BANK0 + 0X13 ; BYTE QUE CONTA AS HORAS (0..23) ; BYTES PARA A CONVERSO DO ADC V_DELTA EQU V_BANK0 + 0X14 ; ESPELHO DO E_DELTA V_MENOR EQU V_BANK0 + 0X15 ; ESPELHO DO E_MENOR ; BYTES PARA A CONTAGEM DE TEMPO V_PARTIDA EQU V_BANK0 + 0X16 ; CONTADOR DO TEMPO DE PARTIDA DO MOTOR V_UNIDADE EQU V_BANK0 + 0X17 ; INDICADOR DA UNIDADE DO TEMPO DE PARTIDA DO MOTOR V_TEMPO_MAX EQU V_BANK0 + 0X18 ; CONTM O TEMPO MXIMO QUE O RELE DEVE MANTER O MOTOR LIGADO V_TEMPO EQU V_BANK0 + 0X19 ; CONTM A CONTAGEM DE TEMPO (TEMPO QUE J PASSOU) V_TEC_TEMPO EQU V_BANK0 + 0X1A ; CONTM O CONTADOR DE TEMPO PARA A ROTINA DE LEITURA DA TECLA V_FAIXA EQU V_BANK0 + 0X1B ; CONTM O PONTEIRO PARA A FAIXA DA SOBRECORRENTE ; DEFINIES SOBRE A FAIXA E OS TEMPOS DAS CORRENTES (NIBBLE INF. S DE FLAGS P/ OS CONTADORES) #DEFINE K_FAIXA D'16' ; NMERO DE SOBRECORRENTES CADASTRADAS NA EEPROM #DEFINE B_1CS_P V_FAIXA, 0 ; INDICA QUE A FAIXA EST EM CENTSIMOS DE SEGUNDOS (PARTIDA) #DEFINE B_1S_P V_FAIXA, 1 ; INDICA QUE A FAIXA EST EM SEGUNDOS (PARTIDA) #DEFINE B_1CS V_FAIXA, 2 ; INDICA QUE A FAIXA EST EM CENTSIMOS DE SEGUNDOS #DEFINE B_1S V_FAIXA, 3 ; INDICA QUE A FAIXA EST EM SEGUNDOS #DEFINE B_INC_TEMP V_FAIXA, 4 ; INDICA QUE DEVE INCREMENTAR O CONTADOR DE TEMPO ; VARIVEIS AUXILIARES DE USO GERAL V_I_AUX EQU V_BANK0 + 0X1C ; CONTM A PARTE BAIXA DO CLCULO DA CORRENTE EM R_LCD_I V_EE_VALOR EQU V_BANK0 + 0X1D ; CONTM UM VALOR ESPELHO DA EEPROM UTILIZADO EM R_AJUSTA_EEPROM V_EE_OP EQU V_BANK0 + 0X1E ; CONTM O ENDEREO (OPO DA EEPROM) EM R_AJUSTA_EERPOM ;------------------------------------------------------------------------------------------------; VARIVEIS COM ACESSO INDEPENDENTE DO BANCO (16 BYTES) V_W_TEMP EQU V_BANKS + 0x00 ; WREG TEMPORRIO PARA INTERRUPES V_S_TEMP EQU V_BANKS + 0x01 ; STATUS TEMPORRIO PARA INTERRUPES V_FSR_TEMP EQU V_BANKS + 0x02 ; FSR TEMPORRIO PARA INTERRUPES V_W_AUX EQU V_BANKS + 0x03 ; VARIVEL AUXILIAR PARA O W (DESTRUDO NAS SUBROTINAS) ; VARIVEIS GLOBAIS PARA COMUNICAO SERIAL V_SER_PTR EQU V_BANKS + 0x04 ; PONTEIRO PARA BUFFER DA SERIAL V_SER_OK EQU V_BANKS + 0x05 ; CONTADOR PARA TIME OUT DA SERIAL V_SER_FLAG EQU V_BANKS + 0X06 ; CONTM BITS DE STATUS PARA SER ENVIADO AO PC #DEFINE B_M_ALERTA V_SER_FLAG, 5 ; EST EM ALERTA DE SOBRECORRENTE #DEFINE B_M_SOBRE V_SER_FLAG, 6 ; HOUVE UMA SOBRECORRENTE ; BYTES COM FLAGS PARA USO GERAL NAS ROTINAS V_FLAGS EQU V_BANKS + 0X07 ; FLAGS PARA USO GERAL EM ROTINAS INTERNAS #DEFINE B_ID_OK V_FLAGS, 0 ; FLAG QUE INDICA SE A COMUNICAO COM O RELE (1=SIM)

;************************************************************************************************* ; VARIVEIS DA EEPROM

126
;************************************************************************************************* ; 32 BYTES: CONFIGURAO GERAIS (EX.: DA CORRENTE E DO ADC) E_ID EQU 0X00 ; BYTE COM IDENTIFICAO DO RELE E_DELTA EQU 0X01 ; VARIAO MXIMA DA LEITURA DO ADC (MXIMO VALOR - MNIMO VALOR) E_MENOR EQU 0X02 ; MENOR VALOR LIDO NO ADC (QUANTO O ADC LER BYTE 0) E_NOMINAL EQU 0X03 ; BYTE COM A CORRENTE NOMINAL DO MOTOR (VALOR DE 0 AT 255!) E_PARTIDA EQU 0X04 ; TEMPO DE PARTIDA DO MOTOR E_UNIDADE EQU 0X05 ; UNIDADE DO TEMPO DE PARTIDA (1=T x 1cs;2=T x 1s) E_I_UNIDADE EQU 0X06 ; MULTIPLICADOR DA UNIDADE DA CORRENTE (1, 10 OU 100) ; 32 BYTES: BUFFER COM O CADASTRO DAS MXIMAS CORRENTES (16 x 2 = 32 BYTES USADOS) ; PARA OS PRIMEIROS 16 BYTES (8 CORRENTES) A UNIDADE 1cs, NAS DEMAIS SER 1s ; AS CORRENTES ESTO EM ORDEM DECRESCENTE DE CORRENTE E CRESCENTE DE TEMPO E_MAX EQU 0X20 ; END. BASE PARA O PRIMEIRO DOS CINCO CADASTROS E_I_MAX EQU D'0' ; OFFSET PARA A CORRENTE E_T_MAX EQU D'1' ; OFFSET PARA O TEMPO QUE DEVE ESPERAR ANTES DE DESLIGAR O MOTOR

;************************************************************************************************* ; MACROS ;************************************************************************************************* ;------------------------------------------------------------------------------------------------; MACRO PARA ATRASOS M_DELAY MACRO MOVLW CALL ENDM M_WAIT MACRO MOVLW CALL ENDM N N R_DELAY N N R_WAIT ; TEMPO EM N x 1 ms ; TEMPO EM N x 4 us

;------------------------------------------------------------------------------------------------; MACRO PARA CONTROLE DO MOTOR M_MOTOR MACRO LIGA IF LIGA == 1 ; BSF CALL ENDIF IF LIGA == 0 BCF ENDIF ENDM ; S FUNCIONA NOS BANK 0 E BANK 2 P_MOTOR R_LIGA_MOTOR P_MOTOR

;------------------------------------------------------------------------------------------------; MACROS PARA O ADC DESTE PROJETO M_RD_AD MACRO MOVLW CALL ENDM CANAL CANAL R_RD_AD

;------------------------------------------------------------------------------------------------; MACROS PARA A EEPROM M_EE_READ BSF M_MOVLF CLRF ; M_MOVLF CALL ENDM M_EE_WRITE BSF M_MOVLF CLRF ; M_MOVLF M_MOVLF CALL ENDM MACRO ENDERECO STATUS, RP1 EEADR, LOW(ENDERECO) EEADRH EEADRH, HIGH(ENDERECO) R_EE_READ MACRO ENDERECO, DADO STATUS, RP1 EEADR, LOW(ENDERECO) EEADRH EEADRH, HIGH(ENDERECO) EEDATA, DADO R_EE_WRITE ; MUDA PARA O BANCO 2 ; GARANTE ENDEREO VLIDO ; SELECIONA ENDEREO A SER LIDO (NO P/ PIC16F87X) ; CHAMA ROTINA DE LEITURA DA EEPROM

; MUDA PARA O BANCO 2 ; GARANTE ENDEREO VLIDO P/ PIC16F873 ; SELECIONA ENDEREO A SER LIDO (NO P/ PIC16F87X) ; CHAMA ROTINA DE ESCRITA DA EEPROM

;------------------------------------------------------------------------------------------------; MACROS PARA A FLASH M_RD_FLASH MACRO ENDERECO

127
BSF STATUS, RP1 M_MOVLF EEADR, LOW(ENDERECO) M_MOVLF EEADRH, HIGH(ENDERECO) CALL R_FLASH_READ ENDM ; MUDA PARA O BANCO 2 ; CHAMA ROTINA DE LEITURA DA FLASH

;------------------------------------------------------------------------------------------------; MACROS PARA O DISPLAY M_DPY_CHR MOVLW CALL ENDM M_DPY_CMD MOVLW CALL ENDM M_SHOW_MSG MOVLW CALL ENDM MACRO DADO DADO R_LCD_CHAR DADO DADO R_LCD_CMD ENDERECO ENDERECO R_MENSAGEM

MACRO

MACRO

128

Anexo B

Atigo apresentado no UNINDU 2005

Veja o arquivo "intelligent relay.pdf".

Potrebbero piacerti anche