You are on page 1of 40

Diego Fiscina Raquel Andrade Jaízo Júnior Emerson Oliveira Matheus Cardoso Cláudio Bergossi

Interface microcontrolada para automação de experimentos.

Feira de Santana – BA Março / 2009
1

Diego Fiscina Raquel Andrade Jaízo Júnior Emerson Oliveira Matheus Cardoso Cláudio Bergossi

Interface microcontrolada para automação de experimentos. Relatório da disciplina Projeto Anual apresentada à banca de graduação em Engenharia de Computação da Universidade Estadual de Feira de Santana como requisito parcial para obtenção do título de Bacharel em Engenharia de Computação.

Orientador: Prof. Paulo César Machado de Abreu Farias

Departamento de Exatas Universidade Estadual de Feira de Santana

Feira de Santana – BA Março / 2009
2

Relatório da disciplina Projeto Anual sob o título “Interface microcontrolada para automação de experimentos”, apresentado como requisito parcial para a formação em Engenharia de Computação, Março de 2009. Feira de Santana – BA.

Prof. Wagner Oliveira Departamento de Tecnologia Examinador

Prof. Paulo César Machado de Abreu Farias Departamento de Exatas - UEFS Orientador

3

Resumo

Este relatório discorre sobre o projeto desenvolvido pelos alunos do curso Engenharia de Computação da UEFS (Universidade Estadual de Feira de Santana) durante a disciplina Projeto Anual. Tal projeto baseia-se num protótipo de uma estação microcontrolada para automação de experimentos, onde a comunicação entre a estação e o computador é feita através de comunicação serial (padrões USB e RS232). Outro requisito essencial à criação desse equipamento foi de desenvolver uma biblioteca de rotinas em software para controlar, a partir de uma estação de trabalho (e.g. computador pessoal), todas as funcionalidades da estação de aquisição. Além de criar um aplicativo básico para testar e controlar os canais analógicos e digitais da estação microcontrolada, mostrando em tela os dados lidos e escritos destes canais de aquisição.

4

Sumário

Lista de figuras 1. Introdução ............................................................................................................... 9 2. Fundamentação teórica........................................................................................ 10 2.1. Arquitetura de microcontroladores............................................................... 10 2.2. Comunicação USB ......................................................................................... 13 2.3 Técnicas de transferência de dados .............................................................. 14 2.3.1. Polling....................................................................................................... 14 2.3.2. Interrupção ............................................................................................... 15 2.4. Conversor A/D por aproximações sucessivas ............................................. 16 3. Desenvolvimento do projeto ................................................................................ 17 3.1 Programação de microcontroladores ........................................................... 17 3.1.1 Programador JDM..................................................................................... 17 3.1.2 Confecção do circuito .............................................................................. 19 3.2. PCB (Printed Circuit Board) do projeto ........................................................ 20 3.3. Firmware ......................................................................................................... 23 3.4. Comunicação USB: CDC e HID...................................................................... 27 3.4.1. Diagrama e componentes........................................................................ 28 3.5. System Monitoring - Data Acquisition Station ............................................. 29 3.5.1. Detalhamento das funções do sistema .................................................. 30 3.5.2. Comunicação Serial com Java................................................................ 33 3.5.3. Protocolo de comunicação (System Monitoring / Micro-controlador) . 34 3.5.4. Banco de Dados MySql (JDBC) .............................................................. 34 4. Conclusão ............................................................................................................. 37 5. Referências ........................................................................................................... 39 5

Lista de Figuras

Figura 1 – Arquitetura do microcontrolador PIC. ................................................... 10 Figura 2 – Esquema geral de um microcontrolador. .............................................. 13 Figura 3 - Conversor A/D de aproximação sucessiva. ........................................... 16 Figura 4 – Diagrama do programador JDM. ............................................................ 18 Figura 5 – Layout do programador JDM. ................................................................ 19 Figura 6 – Diagrama utilizado para conhecer os componentes e suas conexões. ............................................................................................................................ 21 Figura 7- Diagrama desenvolvido no EAGLE. ........................................................ 22 Figura 8 – Arquivo da placa com as trilhas roteadas manualmente gerado a partir do diagrama e adaptado pra comunicação USB. ............................................ 23 Figura 9: Estrutura do firmware............................................................................... 26 Figura 10 - Diagrama do circuito de comunicação USB-RS232 ............................ 28 Figura 11 - Modelo de dados – System Monitoring. ............................................... 35 Figura 12 - Estrutura de Pacotes. ............................................................................ 36

6

Lista de tabelas

Tabela 1: Relação entre parâmetro recebido e método correspondente ........ Error! Bookmark not defined.

7

Lista de Ilustrações

Ilustração 1 - Listagem de Experimento.................................................................. 30 Ilustração 2 - Adicionar Experimento. ..................................................................... 31 Ilustração 3 - Gráfico de um Experimento............................................................... 32 Ilustração 4 - Configuração PWM e leitura rápida de canais A/D. ......................... 32

8

1. Introdução Este projeto tem o objetivo de projetar e montar o protótipo de uma estação microcontrolada capaz de fazer o controle de experimentos e a aquisição automática de dados externos. O equipamento desenvolvido possui linhas de entrada e saída (E/S) digitais que podem ser operadas individualmente ou em modo byte. Além dessas características, este protótipo possui pelo menos três canais de conversão AD (analógico/digital) e um canal de saída analógica, para atuação sobre os experimentos. A comunicação entre a estação e o computador foi feita pela porta USB com a motivação de que o evoluir dos equipamentos eletrônicos, principalmente os portáteis, propiciou a difusão das portas USB, que são, hoje, indispensáveis para o funcionamento da grande maioria dos dispositivos atuais, em detrimento a porta serial “clássica” RS232, que aos poucos vem sendo substituída, inclusive nos desktops. O protocolo USB é o presente e o futuro (no que tange ao constante evoluir do padrão) no que diz respeito à velocidade de transferência de informação e também à facilidade e padronização em conexões aos sistemas atuais, embora esta última questão seja particularmente complexa, em suas nuances, no que diz respeito ao firmware de controle. Contudo, existem ainda muitas aplicações que utilizam, fundamentalmente, o padrão RS232. Dessa forma, para aumentar a flexibilidade do equipamento, a comunicação serial RS232 também foi implementada. O microcontrolador escolhido foi o PIC 18F4550, pois se adequou satistatóriamente aos requisitos do projeto. Além de suas características internas, como 32 Kbytes de memória flash, dentre outras, tal PIC possui um módulo próprio para controlar a comunicação USB, atributo essencial ao desenvolvimento do projeto. A filosofia multiplataforma foi adotada, em relação ao software (desenvolvido, com este intuito, na linguagem de programação JAVA), permitindo ao usuário trabalhar com diferentes plataformas, como Windows ou Linux. Como metas estipuladas pela ementa inicial do projeto, a equipe desenvolveu uma biblioteca de rotinas para controlar todas as funcionalidades da estação, e um aplicativo básico para testar os canais digitais de leitura e escrita, ajustar o valor do sinal da saída analógica, mostrar em um display os canais de aquisição, etc.. A opção de desenvolver a interface para automação de experimentos dentro de um Projeto Anual é interessante para a universidade, pois torna possível a adoção do equipamento em larga escala além de estimular a produção de conhecimento técnico-científico no próprio curso de Engenharia da Computação, bem como outros cursos beneficiados, como outros cursos de Engenharia e Física. Este projeto se adequa ao perfil dos estudantes de Engenharia de Computação, pois exige habilidades de desenvolvimento tanto de hardware quanto de software, com fins de atender os requisitos do problema.
9

2. Fundamentação teórica Esta seção irá explicar, de forma breve, os conceitos teóricos utilizados na confecção da interface microcontrolada.

2.1. Arquitetura de microcontroladores Um microcontrolador difere de um microprocessador em vários aspectos. Primeiro, e o mais importante, são as suas funcionalidades. Para que um microprocessador possa ser usado, outros componentes devem-lhe ser adicionados, tais como memória e componentes para receber e enviar dados. Em resumo, isso significa que o microprocessador é o verdadeiro coração do computador. Por outro lado, o microcontrolador foi projetado para ter tudo num só, mesmo que reduzidamente. Nenhum outro componente externo é necessário nas aplicações, a depender do tipo de microcontrolador escolhido, uma vez que todos os periféricos necessários já estão contidos nele. Assim, poupa-se tempo, espaço e materiais na construção dos dispositivos. Portanto, um microcontrolador se caracteriza por incorporar no mesmo encapsulamento um microprocessador, memória de programa e dados, periféricos como temporizadores, “watchdog timers”, módulos de comunicação serial, conversores Analógico/Digital, geradores de PWM, etc., fazendo com que o hardware final fique extremamente complexo. A arquitetura do microcontrolador utiliza dois barramentos de endereços distintos para acessar instruções e dados.

Figura 1 – Arquitetura do microcontrolador PIC.

A arquitetura geral de um microcontrolador está dividida em: • • Unidade de Memória; Unidade Central de Processamento (CPU);
10

• • • • • •

Barramentos; Unidade de entrada/saída; Comunicação série; Unidade de temporização; Watchdog Timer; Conversor analógico – digital.

Memória de programa (FLASH) - para armazenar o programa (firmware) criado. Como a memória fabricada com tecnologia FLASH pode ser programada e reprogramada mais de uma vez, ela é adequada para o desenvolvimento firmwares de dispositivos. EEPROM - memória dos dados que necessitam de ser salvaguardados quando a alimentação é desligada. Normalmente é usada para guardar dados importantes que não se podem perder quando a alimentação, de repente ou intencionalmente, é desligada. Um exemplo deste tipo de dados é a temperatura fixada para os reguladores de temperatura. Se, durante uma queda de alimentação, se perdessem dados, seria preciso proceder a um novo ajustamento quando a alimentação fosse restabelecida. Assim, o nosso dispositivo perderia eficácia. RAM - memória de dados usada por um programa, durante a sua execução. Na RAM, são guardados todos os resultados intermediários ou dados temporários durante a execução do programa e que não são cruciais para o dispositivo, caso ocorra uma falha na alimentação. Unidade de processamento central - faz a conexão com todos os outros blocos do microcontrolador. Ele coordena o trabalho dos outros blocos e executa o programa do utilizador. Barramentos - são os caminhos de comunicação entre os componentes. Existem dois tipos: de endereço (o número de linhas depende da quantidade de dados que deseja endereçar e serve, também, para endereçar posições de memória para a CPU) e de dados (o numero de linhas depende da largura da palavra de dados e serve para interligar todos os componentes do microcontrolador). Fisicamente falando, os barramentos são fios conectados entre os componentes. Unidades de entrada e saída - são ligações físicas entre o microcontrolador e o mundo exterior. Estes componentes possuem vários endereços de memória, podendo se comunicar com os outros componentes através do barramento de dados e também com o mundo exterior através das linhas de saída (pinos do CI).
11

Comunicação serial - é uma alternativa de comunicação com interfaces externas. Possui três linhas de execução, uma usada para enviar e outra para receber dados; a terceira é a linha de referência tanto do lado de entrada quando do de saída. Este tipo de comunicação obedece a um protocolo para troca de dados. Contador/Temporizador - é um registrador de 8 bits do microcontrolador que trabalha independentemente do programa. Tomando como exemplo alguns microcontroladores, ao fim de cada conjunto de quatro ciclos de relógio do oscilador, o contador incrementa o valor armazenado, até atingir o valor máximo (255), que, a esta altura, recomeça a contagem a partir de zero. O tempo exato entre dois incrementos sucessivos do conteúdo do temporizador, pode ser utilizado para medir intervalos de tempo, o que o torna muito útil em vários dispositivos. Watchdog - é um contador que está continuamente em funcionamento onde, caso haja alguma condição de erro no fluxo do programa principal, este contador, sem necessidade de intervenção humana, reseta o microcontrolador para que este funcione, novamente, de forma adequada. Conversor A/D: os sinais dos periféricos são diferentes daqueles que o microcontrolador pode entender (zero e um), e devem ser convertidos no formato compreendido pelo microcontrolador. Esta tarefa é executada por intermédio de um bloco destinado à conversão analógico-digital ou conversor A/D convertendo um valor analógico para um valor digital.

12

Figura 2 – Esquema geral de um microcontrolador.

2.2. Comunicação USB Inicialmente, a comunicação USB (Universal Serial Bus) foi projetada para conectar dispositivos periféricos, como teclados e mouse, ao computador. Entretanto, a comunicação USB provou ser muito útil em diversas aplicações, incluindo medição e automação. Um dispositivo USB é detectado, automaticamente, quando conectado a computador, mesmo que este não venha a funcionar corretamente na máquina host [1]. De acordo com a topologia do barramento, até 127 dispositivos podem ser conectados ao mesmo tempo em um mesmo barramento, ao contrário da porta serial clássica que suporta apenas um dispositivo conectado por vez. Adicionando "hubs" ou concentradores de portas, mais dispositivos podem ser adicionados a uma máquina, criando conexão para mais periféricos [3] Atualmente, quase todos os periféricos estão disponíveis em uma versão para USB, como mouses, teclados, impressoras, etc.. Dentre as vantagens que o
13

padrão USB oferece, algumas delas foram especialmente consideradas para utilização do padrão na estação de aquisição de dados deste projeto. São elas:  Padrão de conexão: qualquer dispositivo compatível como USB usa padrões definidos de conexão assim não é necessário ter um tipo de conector específico para cada aparelho; Plug and Play ("Colocar e Usar"): quase todos os dispositivos USB são concebidos para serem conectados ao computador e utilizados logo em seguida. Apenas alguns exigem a instalação de drivers, como é o caso deste trabalho, ou softwares específicos. Alimentação elétrica: a maioria dos dispositivos que usam USB não precisam ser ligados a uma fonte de energia, já que a própria conexão USB é capaz de fornecer eletricidade (5V – cinco volts [1]). Ampla compatibilidade: o padrão USB é compatível com diversas plataformas e sistemas operacionais. O Windows, por exemplo, o suporta desde a versão 98. Sistemas operacionais Linux e Mac também são compatíveis.

Os cabos USB contam com quatro fios internos: VBus (VCC), D+, D- e GND. O primeiro é o responsável pela alimentação elétrica. O segundo e o terceiro são utilizados na transmissão de dados (a letra "D" provém de data, dado em inglês). O quarto, por sua vez, é para controle elétrico, servindo como referência (InfoWester, 2009). A comunicação entre os dispositivos conectados via USB é feita através de um protocolo específico [1]. Nele, o host, isto é, o computador ou o equipamento que recebe as conexões, emite um sinal para encontrar os dispositivos conectados e estabelece um endereço para cada um deles [1]. Uma vez estabelecida a comunicação, o host recebe a informação de que tipo de conexão o dispositivo conectado utiliza . Tal como ocorre com outras tecnologias, o padrão USB passa periodicamente por revisões em suas especificações para atender as necessidades atuais do mercado [1]. Este trabalho utiliza a versão 2.0 que é atualmente mais usada, contudo compatível [1] com a versão anterior e concomitante em uso, a versão 1.1. 2.3 Técnicas de transferência de dados Existem basicamente três técnicas para transferência de dados: Polling, Interrupção e DMA (Direct Memory Access). Nesse tópico são abordadas as técnicas de Pooling e Interrupção. 2.3.1 Polling Nesse tipo de operação de entrada e saída, o controle da transferência é todo feito pela CPU. O dispositivo de E/S executa a operação requisitada, sinaliza o término da operação carregando um valor apropriado no registrador de estado de E/S. Enquanto isso, a CPU não é alertada sobre o término da
14

operação e precisa ficar verificando periodicamente o estado do dispositivo de E/S. Para exemplificar pode ser feita uma analogia com um telefone que não tivesse campainha. Seria necessário tirar o fone do gancho periodicamente, para ver se alguma comunicação está em curso. No entanto, tal como o telefone, há outro meio de resolver esse problema: usar um "sinal de chamada", o que equivale a solicitar ao dispositivo que execute uma tarefa e que avise quando tiver terminado; enquanto isto, a CPU poderia fazer outras coisas. A principal vantagem da e/s com polling é a sua simplicidade. No entanto, esta técnica possui a desvantagem de que a CPU fica dedicada à operação de e/s. Isto pode ser extremamente ineficiente, sob o ponto de vista da utilização da CPU. 2.3.2 Interrupção Interrupções são modificações no fluxo de controle causadas por uma ação externa relacionada à entrada ou saída. Uma interrupção é um sinal de controle enviado por um agente externo à CPU, quando um determinado evento é detectado. Este mecanismo força a CPU a tratar o evento externo. A detecção de uma interrupção faz com que o processador transfira o controle para uma rotina de tratamento de interrupção ("interrupt handler"). A rotina de tratamento de interrupções faz o processador executar as seguintes ações: detectar a fonte da interrupção (o dispositivo que interrompeu); executar as ações apropriadas (que dependem do dispositivo); retornar ao ponto do programa em que estava quando iniciou o atendimento à interrupção. Pode ocorrer que um ou mais dispositivos enviem sinal de interrupção simultaneamente à CPU. Nesse caso, atenderá primeiramente ao dispositivo de mais alta prioridade. São prioritárias para atendimento as interrupções devidas a:    emergências de hardware, tais como atendimento a reset (reinicicalização) e erros de hardware (erro de paridade de memória, etc.); eventos de alta prioridade; E/S de dispositivos de alta velocidade.   

Durante o atendimento a uma interrupção, a CPU não poderá simultaneamente atender a outra interrupção (nas interrupções mascaráveis, a CPU para e atende de mais alta prioridade). Para evitar essa situação, existe o recurso de habilitar / desabilitar as interrupções, de forma que a CPU, ao iniciar o atendimento a uma interrupção, desabilita as demais interrupções e, ao terminar o atendimento, volta a habilitar todas as interrupções. Algumas interrupções não são mascaráveis, ou seja, não podem ser desabilitadas, tais como os erros de hardware e reset.
15

2.4 Conversor A/D por aproximações sucessivas O circuito conversor A/D clássico que usa um conversor D/A é chamado de aproximação sucessiva, sendo o mais usado. Ele é mostrado na Figura 3. Vin é a entrada analógica e Dn até D0 são as saídas digitais. Esse circuito utiliza um buffer e, portanto, o sinal digital ainda permanece no circuito enquanto o conversor está processando a próxima amostra. RAS significa Registrador de Aproximação Sucessiva (ou, em inglês, SAR, Successive Approximation Register). Ele tem os mesmos sinais de controle que o conversor A/D contador de rampa: START, que comanda o conversor A/D para iniciar a conversão, CLOCK e END, que diz que a conversão daquela amostra em particular foi finalizada.

Figura 3 - Conversor A/D de aproximação sucessiva. O conversor A/D de aproximação sucessiva configura primeiro a configuração do MSB (bit mais significativo; o MSB em um conversor A/D de oito bits é o D7). De modo a facilitar as explicações abaixo, deve ser considerado um conversor A/D de oito bits. A comparação entre Vin e a saída do conversor D/A dirá à unidade de controle se este bit deverá permanecer configurado como 1 ou se deveria ser configurado como 0, já que o amplificador operacional dirá de imediato à unidade de controle se o valor da amostra é maior ou menor do que 128 (2^7). Em seguida o D6 é configurado em 1 e, com base na comparação feita pelo amplificador operacional, a unidade de controle saberá se este bit deverá permanecer em 1 ou não, repetindo o processo. E assim por diante. Uma vantagem do conversor A/D de aproximação sucessiva é o seu tempo de conversão fixo. No pior caso ele encontrará o valor digital correto para a amostra em n pulsos de clock, onde n é o número de bits usados. Para um conversor A/D de oito bits, o valor digital para cada amostra pode ser
16

encontrado em até oito pulsos de clock (comparado aos 255 no contador de rampa), e para um conversor A/D de 16 bits o valor digital para cada amostra pode ser encontrado em até 16 pulsos de clock. Outra grande vantagem deste circuito é o uso de um buffer de saída que permite ao circuito que está sendo alimentado pelo conversor A/D ler o dado digital enquanto o conversor A/D já está trabalhando na próxima amostra.

3. Desenvolvimento do projeto Nessa sessão é abordado o desenvolvimento do projeto analisando cada parte eleborada.

3.1 Programação de microcontroladores A programação de um PIC pode ser feita em um PC com ferramentas disponíveis gratuitamente em Assembler ou C, mas requer o uso de um dispositivo programador para transferir o código do programa para a memória interna do PIC. Normalmente isto pode ser feito de duas maneiras:  Inserindo-se o PIC no soquete apropriado do programador. Posteriormente, o PIC é transferido para o circuito definitivo, onde pode ser soldado diretamente à placa de circuito impresso ou inserido em um soquete. Conectando-se um programador serial em um soquete previamente soldado à placa de circuito impresso onde o PIC já reside. Isto é conhecido como In-Circuit Serial Programming ou ICSP. Esta modalidade é bastante prática e causa menos estresse ao PIC, por evitar seu constante manuseio durante repetidos testes.

Há vários tipos diferentes de programadores cujo projeto pode ser encontrado na Internet ou adquiridos de determinados fornecedores. A maioria deles é de fácil construção e podem ser conectados à porta paralela ou à porta serial do P, ou à USB. De fato, qualquer computador que disponha de uma dessas interfaces pode ser usado para programar o PIC.

3.1.1 Programador JDM O Programador JDM tem como característica fundamental a sua facilidade de montagem, custo baixo, além de se utilizar a porta serial para a comunicação com o PIC. Além desses requisitos fundamentais, a principal
17

característica que se levou a escolher o JDM como programador, foi justamente no ponto em que ele oferece suporte tanto para a programação previa do chip fora do circuito em si, quanto pela modalidade ICSP. Como alternativa para o auxilio no desenvolvimento do projeto, optou-se por confeccionar dois programadores JDM, pois os outros programadores existentes no laboratório eram utilizados por muitos alunos, o que dificultava o andamento do projeto. A Figura 4 mostra diagrama do programador JDM confeccionado, facilmente encontrado na Internet. Vale ressaltar que existem vários projetos de programadores, onde os mesmos diferem no tipo de PIC’s compatíveis para a programação, alem dos seus componentes internos.

Figura 4 – Diagrama do programador JDM.

18

3.1.2 Confecção do circuito Após a identificação de todos os componentes necessários à confecção do programador, a partir do diagrama da Figura 4, o circuito foi montado previamente numa protoboard e testado para verificar se funcionava corretamente. Para a confecção da PCB, partindo do layout abaixo, também encontrado na Internet, utilizou-se uma técnica muito comum para imprimir tal layout na placa de fenolite. Essa técnica se baseia em alguns passos simples: 1. Imprimir o layout numa folha de papel fotográfico. A impressão tem que ser feita com uma impressora a laser.

Figura 5 – Layout do programador JDM. 2. Após impresso, o papel é prendido em cima da placa de fenolite, com ajuda de uma fita adesiva.

19

3. Posteriormente, passa-se um ferro de passar roupas em sua superfície, fazendo com que a tinta se desprenda do papel e grude na placa.

4. A placa impressa é, então, corroída numa solução contendo percloreto de ferro.

Após esses passos a placa está, então, pronta para ser furada, colocada os componentes e soldada. A partir dessa técnica, foi possível confeccionar a placa do programador com qualidade, facilitando o andamento do projeto.

3.2. PCB (Printed Circuit Board) do projeto A confecção da placa final do projeto se deu com a mesma técnica utilizada para confeccionar o gravador. Inicialmente, foi confeccionada uma placa para
20

abrigar o PIC18F877A para posteriormente ser confeccionada a placa final do projeto, a qual abriga o PIC 18F4550. O diagrama para a placa com o PIC18F877A com os componentes e suas ligações utilizado foi disponibilizado pelo professor da disciplina e pode ser visto na Figura 6.

Figura 6 – Diagrama utilizado para conhecer os componentes e suas conexões.

21

Primordialmente, foi feito um estudo do programa EAGLE 5.3.0 que foi o utilizado para a confecção da PCB. Para a elaboração da PCB inicial, primeiro foi feito um diagrama do circuito com todas as ligações entre os componentes baseado no diagrama inicial fornecido pelo professor com algumas alterações no regulador de tensão. Alguns pinos do microcontrolador ficaram ligados com conectores para serem acessados posteriormente conforme necessário. Como as ligações básicas do PIC 18F877A são iguais as do PIC 18F4550, para fazer a alteração da placa para abrigar o PIC 18F4550 foi utilizado o mesmo diagrama da placa para o PIC 18F877A, fazendo alterações nos pinos 18, 23 e 24 responsáveis pela comunicação USB (Figura 7). Dessa forma foi gerado um novo arquivo para ser impresso e produzir a placa final com comunicação USB e RS232.

Figura 7 - Diagrama desenvolvido no EAGLE.

O arquivo para a confecção da placa é gerado a partir do diagrama com todas as conexões estabelecidas. Nesse arquivo foi feito o posicionamento entre os componentes para não ocorrer cruzamento entre trilhas e o roteamento das mesmas. Para fazer o roteamento foi atentado para as quinas que não poderiam estar formando 90 graus, portanto todas as quinas foram
22

diagonalizadas ou arredondadas. Esse roteamento foi feito para placa de uma camada. A Figura 8 mostra o layout da placa.

Figura 8 – Arquivo da placa com as trilhas roteadas manualmente gerado a partir do diagrama e adaptado pra comunicação USB. Para obter o arquivo somente com as trilhas é necessário apenas imprimir a figura desmarcando a exibição dos componentes nas opções do programa.

3.3. Firmware Firmware é o conjunto de instruções de um programa gravado diretamente no hardware, de forma a ser armazenado permanentemente no circuito. Em geral, é não-volátil e permanece armazenado mesmo após o desligamento do aparelho que o esteja armazenando. O firmware desenvolvido no projeto que está gravado no microcontrolador PIC18F4550 [7] tem como finalidade se comunicar através de comunicação serial (RS232 ou USB) com o software de gerenciamento da estação aquisição de dados o sistema de supervisão. Este software foi desenvolvido na linguagem de programação Java, visando a portabilidade, e intermedia o acesso do usuário com a estação de aquisição de dados. A primeira funcionalidade pensada para o firmware foi em virtude da comunicação através da porta serial: como saber que um dado foi recebido?
23

Como o único evento que interessa a esse firmware é a entrada de dados pela porta serial, não há nenhum prejuízo em deixá-lo em um loop contínuo, verificando da porta serial se algum dado foi recebido. Além disso, é a forma mais simples, e, conseqüentemente a que exige menos tempo de implementação, fato realmente relevante na escolha do método, devido ao curto espaço de tempo de desenvolvimento disponível. Esse é o fluxo básico e central do funcionamento do firmware, que está sempre ‘ouvindo’ a porta serial. Depois de resolvida esta questão, começou-se então a listar e, posteriormente, implementar as funcionalidades que o usuário deveria dispor nesse sistema. Por questão de organização, dividimos essas funcionalidades em módulos, que são um conjunto de funções (métodos) responsáveis por funcionalidades especificas do microcontrolador. O primeiro módulo construído foi o responsável pela conversão analógico-digital, ou simplesmente A/D. Ele é constituído de três funções, bastante simples, como descrito abaixo: channel_adc_0(): faz a conversão A/D do sinal lido no PORT A0, e escreve esse valor na porta serial; channel_adc_1():faz a conversão A/D do sinal lido no PORT A1, e escreve esse valor na porta serial; channel_adc_3():faz a conversão A/D do sinal lido no PORT A3, e escreve esse valor na porta serial;

O segundo módulo a ser construído foi o módulo responsável pela geração do PWM , Pulse-Width Modulation, ou Modulação por Largura de Pulso, no português. De uma forma básica, um PWM consiste de uma onda quadrada, onde se pode variar a Duty Cicle, ou seja, o tempo em que o sinal fica em estado lógico alto, sem, entretanto, variar o período da onda [8]. O PORT C0 foi escolhido para ser a saída do sinal PWM. Esse módulo é constituído de sete métodos, descritos abaixo: 1. set_cicly_pwm_high(): eleva, em uma taxa de 4%, proporcionalmente ao período do ciclo, o tempo em que a onda fica em estado lógico alto. 2. set_cicly_pwm_low(): similar a set_cicly_pwm_high(), porém decrementando a parte ativa do ciclo em 4% em relação ao seu período total. 3. set_cicly_pwm_0(): seta o ciclo ativo em 0%, ou seja, mantém em 0 a saída do PWM. 4. set_cicly_pwm_25(): seta em 25% o percentual de tempo ativo do ciclo.
24

5. set_cicly_pwm_50(): seta em 50% o percentual de tempo ativo do ciclo. 6. set_cicly_pwm_75(): seta em 75% o percentual de tempo ativo do ciclo. 7. set_cicly_pwm_100(): seta em 100% o percentual de tempo ativo do ciclo, ou seja, deixa a porta em nível alto. O outro módulo implementado foi o responsável pela entrada e saída digital. O PORTB (todas as portas) foi escolhido para essa função, assim temos oito portas disponíveis, o que equivale a um byte. Pode-se setar como entrada ou saída cada uma das portas individualmente, assim como ler ou escrever em cada uma delas. Em seguida, listam-se os três métodos que fazem essas funções. 1. set_tris_io_digital(): responsável por setar, individualmente, as portas escolhidas para fazerem a E/S digital (escolhemos o PORTB) como entrada ou saída, de acordo com o parâmetro recebido; 2. set_ports_io_digital(): responsável por setar, individualmente, os níveis lógicos das portas que estão setadas como saída, de acordo com o parâmetro recebido; 3. get_ports_io_digital(): responsável pela leitura do nível lógico das portas, individualmente ou todas juntas. Implementados esses módulos, o próximo problema a ser tratado foi o da comunicação, pois não basta saber que um dado foi recebido (como foi discutido acima), mas precisa-se saber que dado foi esse, e que ele significa para o sistema. Dessa forma, um protocolo foi elaborado, onde cada escolha do usuário, que será feita através do programa Java, corresponderá a um caractere, que deve ser enviado pela porta serial ao firmware, onde, posteriormente, ao reconhecer o dado, chamará a função correspondente. A Figura 9 mostra um diagrama do funcionamento do firmware, e a Tabela 1 mostra os caracteres associados a cada método.

25

Figura 9: Estrutura do firmware.

Tabela 1:Relação entre parâmetro recebido e método correspondente. CÓDIGO A B C D T P G H L 0 1 2 3 4 FUNÇÃO ASSOCIADA channel_adc_0 channel_adc_1 channel_adc_3 set_time_adc set_tris_io_digital set_ports_io_digital get_ports_io_digital set_cicly_pwm_high set_cicly_pwm_low set_cicly_pwm_0 set_cicly_pwm_25 set_cicly_pwm_50 set_cicly_pwm_75 set_cicly_pwm_100

A seta dupla entre o módulo do programa Java e o firmware indica que este também envia dados, e não apenas recebe. Isso ocorre por que os
26

métodos do módulo de entrada e saída digital necessitam de parâmetro, pois é necessário saber qual porta o usuário quer setar como entrada ou saída, ou qual porta ele vai querer ler ou escrever. O protocolo que foi definido segue o seguinte procedimento para esse caso: se alguma função do módulo de entrada e saída digital for chamada, o programa Java deve esperar uma sinalização (escolheu-se o caractere ‘s’), que virá do método chamado, indique que o firmware está pronto para receber o parâmetro, e só então enviar o parâmetro que indique em qual porta deve-se fazer o procedimento indicado no parâmetro passado anteriormente, assim garante-se que o parâmetro não se perderá. Poder-se-ia fazer diferente, como usar bufferização, porém, não se fez necessário, pois a solução escolhido se mostra bastante funcional, foi de simples implementação, e a perda de desempenho que isso possa ter causado é irrelevante. 3.4. Comunicação USB: CDC e HID A especificação USB (USB-IF) define classes de comunicação para os mais variados tipos de comunicação (interrupção, transferência em massa, etc. [1]. Dentre essas classes de comunicação que o padrão USB define, duas classes foram consideradas para desenvolver dois tipos de comunicação USB: CDC e HID. A classe de comunicação CDC (Connected Device Configuration), desenvolvida nesse projeto, se enquadra em uma série de classes que definem transferências genéricas de dados, como transferência de sinais de controle e dados em modems, cabos Ethernet e, para o caso deste trabalho, transferências que emulam a transmissão de dados através da comunicação serial RS232. A especificação CDC descreve a subclasse Abstract Control Model (IAR SYSTEMS) para a emulação serial através do USB. Basicamente, para que a emulação RS232 possa ser realizada duas interfaces (classes) USB são necessárias: Communication Interface Class e Data Interface Class. A primeira interface encarrega-se de notificar ao host – neste caso uma estação de controle, um computador pessoal – do status da conexão USB-RS232 oriunda do dispositivo. A segunda interface define a forma como os dados serão enviados (OUT bulk endpoint and one IN bulk endpoint [1] já que, no padrão RS 232, os dados são mandados em sua forma crua (raw data), sem qualquer formatação [2]. A classe de comunicação HID (acrônimo em inglês, Human Interface Device) consiste, primariamente, na definição da comunicação entre computadores e dispositivos que são usados por humanos para controlar funções em sistemas de computadores. Os exemplos mais conhecidos são os teclados, mouses e flash drives ou, menos convencionais, como painéis de controle, leitores de
27

código de barras [1], etc.. Dispositivos que se adéquam aos requerimentos de hardware [1] para serem dispositivos HID são reconhecidos automaticamente pelos atuais e alguns antigos sistemas operacionais. Ou seja, não há necessidade de instalação de driver ou software extra para que os dispositivos funcionem nos computadores, por exemplo, diferentemente do que acontece para os dispositivos inclusos nas definições das classes CDC. 3.4.1. Diagrama e componentes O diagrama abaixo (ver Figura 10) representa a montagem do circuito básico para se realizar a comunicação RS232 mascarada através da USB. O microcontrolador utilizado foi o PIC18F4550, que possui um módulo próprio que gerencia a comunicação USB, como já foi dito anteriormente. Nele pode-se perceber, dentre os demais, o componente SV1, por exemplo. Esse componente simboliza a entrada para o gravador serial, utilizado para gravar o firmware no microcontrolador. Os demais componentes são peças chave que a própria especificação do micro-controlador requer para realizar comunicações USB.

Figura 10 - Diagrama do circuito de comunicação USB-RS232 Se bem analisado, esta é, de fato, toda a montagem necessária para o funcionamento da estação de aquisição dados. Pois, os módulos de leitura ADC e PWM, únicos módulos estáveis e funcionais da estação após a transposição do PIC16F877A para o atual PIC18F4550, realizam leitura e escrita, respectivamente, em portas do próprio microcontrolador, dispensando dispositivos extras para tais funcionalidades.
28

A inserção ou junção destes módulos, ADC e PWM, com o código base de comunicação USB, além do funcionamento em si da estação e a comunicação com o sistema de supervisão (tratado adiante) foi transparente. O sistema de supervisão continua a reconhecer portas seriais COM, por exemplo, em Windows, transparecendo o uso ou não do barramento USB. Quanto a implementação, as mudanças sensíveis, necessitando da inserção nos locais corretos de algumas diretrizes para inicialização e manutenção da comunicação USB. Embora já tenha sido descrita, mesmo de forma resumida, a forma como um dispositivo USB se comunica com um computador, é válido ressaltar, especificamente, o processo de identificação do microcontrolador no computador como dispositivo USB e a manutenção da comunicação: 1. O microcontrolador inicializa, antes de tudo, o módulo de comunicação USB (neste caso, a simulação da conexão RS232 via USB). 2. Aguarda até que o dispositivo esteja conectado ao computador para que o todo o código do firmware possa ser acionado. 3. Após a confirmação da conexão, o firmware só permite que as funções sejam chamadas se o dispositivo esteja enumerado. Este estado é diferente do conectado. Um dispositivo conectado não necessáriamente está enumerado, ou seja, não está entre os dispositivos devidamente reconhecidos e configurados para pleno funcionamento. 4. Durante todo o processo de comunicação, o módulo USB fica, continuamente, enviando um sinal de atividade do dispositivo (tempo máximo de 10 ms (dez milissegundos) para que a conexão de dados não se perca). Este sinal é enviado através de uma interrupção criada somente para enviar tal sinalização. Por fim, para que a estação possa iniciar suas funções, basta, claro, que o firmware já tenha sido gravado no micro-controlador e conectar o circuito através do cabo USB na devida e correspondente porta no computador. Após isso, será exibida uma mensagem que o dispositivo foi detectado (em ambiente Windows). Contudo, o computador – assim como todos os demais com sistema Windows - não possui nativo um driver necessário para gerenciar a comunicação com o dispositivo (microcontrolador). Como foi dito antes, já que essa é uma forma de comunicação específica de emulação RS232 e não comunicações HID, faz-se necessário um driver específico. Após indicar onde se encontra o driver correto, (utilizou-se o driver que acompanha o software desenvolvimento) o micro-controlador será enumerado pelo computador e o firmware poderá funcionar corretamente. 3.5. System Monitoring - Data Acquisition Station
29

O System Monitoring foi projetado para prover a manipulação de dados e parâmetros do microcontrolador PIC 18F4550. Esta manipulação inclui ler, armazenar e montar gráficos de dados coletados do conversor A/D do microcontrolar. Outro propósito é a configuração da largura do pulso do PWM. Este aplicativo foi implementado utilizando a linguagem de programação Java. Esta linguagem disponibiliza API’s que possibilitam a comunicação Serial e USB. Para o armazenamento dos dados, foi utilizado o servidor de banco de dados MySql.

3.5.1. Detalhamento das funções do sistema As funcionalidades do sistema serão listadas a seguir:  Listar Experimentos realizados;

Neste requisito o usuário visualiza todos os experimentos armazenados no banco de dados (ver imagem).

Ilustração 1 - Listagem de Experimento.

o Adicionar Experimento e Amostras em Banco de Dados; Nesta funcionalidade o usuário do sistema pode configurar um experimento, onde neste é informado: uma descrição, o canal A/D lido, a freqüência de leitura e uma observação geral do experimento, ver imagem abaixo.
30

Ilustração 2 - Adicionar Experimento.

Após esta configuração inicial, o usuário poderá iniciar a gravação dos dados lidos da porta serial clicando no botão “Start”. Ao final do experimento o usuário poderá parar a gravação dos dados adquiridos via porta serial, oriundos do canal A/D selecionado, finalizando assim a coleta de dados, clicando no botão “Stop”.

o Remover Experimento e Amostras do Banco de Dados; O usuário através desta funcionalidade poderá remover um experimento e suas amostras armazenadas no banco de dados. o Montar Gráfico de um determinado Experimento do Banco de Dados. Esta rotina permite ao usuário montar gráfico do experimento, onde os seus eixos X e Y são, respectivamente, momento da coleta e valor coletado. Ver ilustração abaixo.

31

Ilustração 3 - Gráfico de um Experimento.  Listar as portas do Sistema; Está funcionalidade mostra ao usuário as portas seriais disponíveis em seu sistema.  Configuração PWM e leitura rápida de canais A/D. A configuração do PWM é realizada executando funções no micro-controlador referentes ao seu percentual (0%, 25%, 50%, 75% e 100%), além disso, o sistema permite que o usuário aumente e diminua o pulso do PWM através de passos (step_up / step_down). A leitura rápida de canais A/D é feita executando funções do microcontrolador e lendo seu retorno através da porta serial. O resultado da leitura é exibido nesta mesma tela, proporcionando ao usuário a informação de forma rápida. Ver ilustração abaixo.

Ilustração 4 - Configuração PWM e leitura rápida de canais A/D.
32

3.5.2. Comunicação Serial com Java A comunicação serial do System Monitoring foi implementada utilizando a biblioteca RXTXcomm. Através desta biblioteca foi desenvolvida a classe SerialCommunication.java, responsável por todos os métodos envolvidos na comunicação serial. Implementação da Classe SerialCommunication: Nesta classe foi implementado o padrão de projeto Singleton de forma a permitir apenas uma instância desta classe, não permitindo assim o sistema criar múltiplas instâncias (conexões com a mesma porta serial). Nesta classe foram implementados os seguintes métodos:  listSerialPorts; Este método retorna as portas seriais presentes no microcomputador.  openSerialPort; É neste método que a porta serial, configurada no arquivo de propriedades (serialPort.properties), é aberta com os parâmetros configurados no mesmo arquivo de propriedades.  setParametersPort; O método setParametersPort, como o próprio nome já indica, configura a porta serial com os parâmetros indicados no arquivo de propriedade. Os parâmetros são: bit de dados, bit de parada, paridade, timeout e velocidade. Os valores padrões podem ser visualizados abaixo: o o o o o o  bit de dados = 8 bit de parada = 1 paridade = 0 timeout = 1000 velocidade = 9600 defaultPort=COM1

writeDataToSerialPort; Através deste método pode-se enviar uma string ou um int para a porta serial.
33

readDataFromSerialPort; Este é o método responsável por iniciar a Thread responsável por monitorar os eventos de entrada de dados pela porta serial.

serialEvent; Este método é uma implementação do método declarado na interface SerialPortEventListener, onde através desta interface, pode-se capturar os dados oriundos da porta serial.

closeSerialPort; Este método fecha a porta serial em uso.

3.5.3. Protocolo de comunicação (System Monitoring / Microcontrolador) O protocolo de comunicação entre o System Monitoring e o microcontrolador foi definida de forma que fossem atendidos os requisitos do sistema. Inicialmente foram implementados os métodos no firmware do microcontrolador (ex.: read_adc_0, ler o dado do canal 0 do conversor A/D) a fim de promover os dados necessários para a sua exibição no System Monitoring. Para este fim, o software do System Monitoring, envia para a porta serial um inteiro, onde este é lido pelo firmware para executar a função correspondente a este inteiro enviado. Caso a função executada retorne algum valor, este é enviado para a porta serial e eventualmente lido pelo System Monitoring.

3.5.4. Banco de Dados MySql (JDBC) O armazenamento dos dados coletados num experimento é feito através do JDBC com MySql. O primeiro passo foi elaborar o modelo entidade relacional, esse modelo foi simples de criar, pois para atender as necessidades do sistema bastaram apenas duas tabelas (ver Figura 11).

34

Figura 11 - Modelo de dados – System Monitoring.

Através da Figura 11, pode-se perceber a simplicidade do modelo do banco de dados do System Monitoring. Para efetuar as operações necessárias aos requisitos do sistema (insert, select, etc.) foi criado o pacote database na estrutura do sistema (ver Figura 12). Neste pacote foram criadas três classes:

35

Figura 12 - Estrutura de Pacotes.  DataBaseConnection Esta classe é responsável por realizar a conexão com o servidor de banco de dados, ou seja, é ela que fornece o método getConnection para uso em toda a aplicação.  DataBaseparameters Esta classe é apenas para armazenar as constantes referentes aos parâmetros de conexão com o banco de dados.  ExperimentoDAO; É na classe Experimento DAO, que se encontram todos os métodos operacionais do banco de dados (inserts, selects, deletes, etc). Para atingir os objetivos do sistema foram desenvolvidos os seguintes métodos: o insertExperiment Método responsável pela inserção de um determinado experimento no banco de dados. o delExperiment
36

Método responsável por experimento do banco de dados. o insertSample

deletar

um

determinado

Método responsável pela inserção de uma determinada amostra no banco de dados. o getExperiment Através deste método pode-se obter um experimento armazenado no banco de dados. o getAllExperiments Este método retorna todos os experimentos do banco de dados. o getAllSamplesFromExperimento Com este método podem-se obter todas as amostras de um determinado experimento.

Vale ressaltar que estas operações com banco de dados, são exclusivas para experimentos com leitura de dados de conversores A/D no microcontrolador. Outro detalhe a ser comentado, é o fato do tempo de coleta de amostras, ou seja, no momento que o usuário inicia um experimento, ele informa o intervalo entre as amostras. Mas este intervalo não é o intervalo real entre as amostras. Isto ocorre devido a algumas limitações do protocolo adotado. O intervalo informado pelo usuário é na verdade o intervalo em que o sistema envia a solicitação do dado do conversor A/D, após esta solicitação, o microcontrolador interpreta a solicitação e executa a função correspondente e envia o seu retorno para a porta serial. A partir deste momento, o sistema recebe o dado enviado para a porta serial, captura o tempo do sistema e armazena a amostra no banco de dados. Como este processo é assíncrono, não podemos afirmar que o intervalo entre as amostras será o mesmo informado pelo usuário. 4. Conclusão
37

Para o desenvolvimento desse trabalho foi necessário o estudo e entendimento principalmente, do funcionamento dos microcontroladores da família PIC da Microchip, de comunicação USB-RS232 e de confecção de placas de circuito impresso. A despeito da maior facilidade de uso de dispositivos HID, somente a comunicação CDC ou USB-RS232 pode ser desenvolvida. Dentre os principais motivos para a não conclusão da comunicação HID, foi o grande atraso ocorrido no desenvolvimento da comunicação CDC. Esta última que possui complexidade consideravelmente inferior à comunicação HID, implicou considerável atraso no desenvolvimento, devido, principalmente, à inexperiência em montagem e análise de circuitos eletrônicos do estudante responsável pelo desenvolvimento, além da novidade da pesquisa sobre o padrão USB. O estudante responsável encontrou, em relação à montagem, vários outros problemas/dificuldades quanto, por exemplo, à verificação de fios sem continuidade, valores corretos para os componentes necessários para realizar a comunicação (capacitores, resistores, etc.) e gravação do firmware, etc. Outra grande dificuldade encontrada, talvez tão impactante quanto à inexperiência do estudante, foi a escassez de fonte de pesquisa e estudo sobre a programação em C com PIC para comunicação USB, utilizando a ferramenta de desenvolvimento CCS C (CCS Inc.). Esta ferramenta somente dispunha de alguns exemplos que abarcavam algumas nuances de formas para programar para USB (embora, posteriormente, tenham sido fundamentais, após intenso e laborioso estudo). Além de explicações pouco elucidativas a respeito das funções para USB que a ferramenta implementava. Outra grande dificuldade na fase de montagem da comunicação USB: a gravação do firmware. Uma tarefa que deveria ser simples, e de fato é, tornouse complicada em certo período do projeto devido a contínuas inconstâncias no gravador - somente havia um único disponível no início. Além dos eventuais problemas com fios, havia computadores em que a tensão necessária da porta serial, fundamental para concretizar a gravação, não era suficiente, resultando inconstâncias no reconhecimento do microcontrolador pelo software responsável pela gravação (WinPic800). Posteriormente outros dois gravadores foram montados por um componente do grupo e a constância de problemas com gravações de firmware diminuiu bastante ou se esvaiu em alguns casos. A partir dos testes realizados pôde-se verificar o funcionamento adequado do sistema atendendo as funcionalidades previstas no início do projeto como o sistema supervisório, a comunicação Serial RS232, execução das funções do firmware e a placa feita para abrigar o sistema. A comunicação USB foi desenvolvida como CDC. Os testes realizados foram ensaios feitos no laboratório e os módulos de leitura ADC e PWM foram os únicos módulos
38

estáveis e funcionais da estação após a transição do PIC16F877A para o atual PIC18F4550. Em relação à comunicação serial (RS-232), a codificação do firmware começou usando como microcontrolador o PIC 16F877A, e apenas no final do projeto o código foi migrado para o PIC 18F4550. Problemas em relação à equipamentos defeituoso, que atrasaram o andamento da codificação desse firmware, também ocorreram, porém, considera-se que o mesmo está em um nível razoável de desenvolvimento. Somado a isso, tem-se que o código está bastante inteligível, e há a possibilidade de se ampliar, sem maiores dificuldades (em relação ao código), inserindo novas funcionalidades ao sistema.

5. Referências [1] Axelson, J. (2005). USB Complete: Everything You Need to Develop USB Peripherals, Third Edition. Madison, WI 53704: Lakeview Research LLC. [2] Serial communications via USB Virtual Com Ports. (s.d.). Acesso em 21 de Janeiro de 2009, disponível em IAR SYSTEMS: http://supp.iar.com/Support/?note=15729&from=search+result [3] Visão geral da comunicação USB. Acesso em 22 de Janeiro de 2009, disponível em National Instruments: http://digital.ni.com/worldwide/brazil.nsf/web/all/354F3CD90DC1B8BE86 256FBE0050D6D6 [4] Fazendo suas placas de circuito impresso. Acesso em 21 de janeiro de 2009, disponível em: http://www.overdance.com.br/audio_list/Fazendo%20suas%20placas%2 0de%20circuito%20impresso.pdf [5] Understanding ICSP for PIC Microcontrollers. Acesso em 16 de dezembro de 2008, disponível em:

39

http://www.instructables.com/id/Understanding-ICSP-for-PICMicrocontrollers/ [6] Multi chip programmer. Acesso em 19 de dezembro de 2008, disponível em: http://www.talkingelectronics.com/projects/MultiChipPgmr/MultiChipPgmr -02-Construction.html [7] PIC18F2455/2550/4455/4550 Data Sheet. Disponível em: http://ww1.microchip.com/downloads/en/DeviceDoc/39632D.pdf [8] PWM (Pulse Width Modulation). Acesso em 19 de dezembro de 2008, disponível em: http://www.netrino.com/Embedded-Systems/How-To/PWM-Pulse-WidthModulation

40