Curitiba PR 2009
Projeto de Graduao na rea de Engenharia Eltrica apresentado Universidade Federal do Paran, como requisito parcial para a obteno do ttulo de Engenheiro Eletricista. Orientador: Eduardo Parente Ribeiro.
Curitiba PR 2009
AGRADECIMENTOS
Agradecemos a todos que nos incentivaram a fazer este trabalho, trazendo-nos fora e confiana para que no desanimssemos em nenhum instante durante a execuo deste trabalho. Agradecemos ao profo. Dr. Eduardo Parente Ribeiro do Departamento de Engenharia Eltrica da Universidade Federal do Paran pela sugesto do tema e pelo apoio dado sempre que precisamos, orientando o projeto e indicando fontes de pesquisas para o desenvolvimento deste. Agradecemos tambm ao profo. M.Sc. Ademar Luiz Pastro e ao profo. Dr. Gideon Villar Leandro do Departamento de Engenharia Eltrica da Universidade Federal do Paran pelas crticas e sugestes dadas na apresentao parcial do projeto. Agradecemos ao nosso grande amigo Luis pela fora e ajuda durante o desenvolvimento do software, e ao Eng. Jefferson da Henry pelo emprstimo dos microcontroladores. Tambm agradecemos aos fabricantes de componentes MAXIM e MICROCHIP por terem nos disponibilizado amostras dos componentes, sem os quais no conseguiramos realizar este projeto. No poderamos esquecer de agradecer s nossas famlias e amigos, que estiveram sempre ao nosso lado e que compreenderam nossa ausncia em alguns momentos, com a certeza de que tudo isso era preciso para o sucesso deste trabalho. Acima de tudo, agradecemos um ao outro pelo empenho e dedicao dados a este trabalho, na certeza de que estaramos fazendo o possvel para o sucesso deste projeto.
RESUMO
O dispositivo para aquisio de sinais e controle digital apresentado neste trabalho um prottipo que se assemelha a um osciloscpio digital, utilizado para captar sinais, digitaliz-los e envi-los para o computador atravs da comunicao USB. O dispositivo possui dois canais de 8 bits independentes, taxa de amostragem varivel, oito escalas de amplitude e controle digital para dois dispositivos externos. O hardware consiste de um estgio amplificador de dois canais e com ganho varivel, dois multiplexadores para seleo deste ganho e um microcontrolador, responsvel pelo tratamento do sinal, pela seleo do ganho do AmpOp atravs do controle do MUX, e pela comunicao com o computador. O firmware do microcontrolador foi elaborado em linguagem C. O software da interface grfica foi elaborado em Delphi, apresentando uma tela que lembra a de um osciloscpio convencional.
ABSTRACT
The device for signal acquisition and digital control presented in this work is a prototype that resembles a digital oscilloscope,used to capture signals, scan them and send them to your computer through the USB communication. The device has two independent channels of 8 bits, variable sample rate, eight amplitude scales and digital control for two external devices. The hardware consists of a stage and two-channel amplifier with variable gain, two multiplexers to select the gain and a microcontroller, which is the responsible for the signal treatment, for the selection of the AmpOp gain through MUX control, and also for the communication with the computer. The microcontrollers firmware was developed in language C. The software's graphical interface was developed in Delphi, displaying a screen that resembles that of a conventional oscilloscope.
metal oxide semiconductor) (Electrically Erasable Programmable Read Only Memory) Registrador de Propsito Geral (General Purpose Register) Dispositivo de Interface Humana (Human Interface Device) Programao Serial no Circuito (In-Circuit Serial Programming) Kilo-bits por Segundo (Kilo-bits per second) Kilo-amostras por Segundo (Kilo-Samples per Second) Bit menos significativo (Least significant Bit) Programao em Baixa Tenso (Low Voltage
Programming) Controle de Acesso ao Meio (Media Access Control) Megabits por Segundo (Mega bits per Second) Comando de Gerenciamento Microescalonado (MicroBit mais significativo (Most Significant Bit) Relgio da Serial (Serial Clock) Mega-amostras por Segundo (Mega-Samples per Second ) Controlador de Interface Programvel (Programmable Interface Controller) Memria Somente de Leitura (Read Only Memory) Registrador de Funo Especial (Special Function
5 SRAM TDM Multiplexing) TTL USB WUSB Lgica Transstor-Transstor (Transistor-Transistor Logic) Barramento Serial Universal (Universal Serial Bus) Wireless USB Memria Esttica de Acesso Randnico (Static Random Access Memory) Multiplexao por Diviso de Tempo (Time division
LISTA DE FIGURAS
FIGURA 1 TOPOLOGIA USB..........................................................................19 FIGURA 2 TOPOLOGIA DO WIRELESS USB...............................................20 FIGURA 3 TIPOS DE CONECTORES USB...................................................20 FIGURA 4 TIPOS DE CONECTORES USB...................................................21 FIGURA 5 TIPOS DE CONECTORES USB...................................................21 FIGURA 6 TIPOS DE ADAPTADORES USB..................................................22 FIGURA 7 TIPOS DE ADAPTADORES USB..................................................22 FIGURA 8 TIPOS DE ADAPTADORES USB..................................................23 FIGURA 9 CORTE TRANSVERSAL DO CABO USB.....................................23 FIGURA 10 MODELO DE HUB USB..............................................................31 FIGURA 11 CONVERSOR ANALGICO DIGITAL........................................33 FIGURA 12 CIRCUITO BSICO DE UM AMPOP..........................................33 FIGURA 13: DIAGRAMA DO DISPOSITIVO COM COMUNICAO USB E CONVERSOR ANALGICO/DIGITAL...............................................................34 FIGURA 14: DIAGRAMA DE BLOCOS DO CONVERSOR ANALGICO/DIGITAL........................................................................................35 FIGURA 15 LAYOUT DAS TRILHAS..............................................................40 FIGURA 16 LAYOUT DOS COMPONENTES.................................................41 FIGURA 17 LAYOUT DAS TRILHAS DAS PLACAS DE CORREO..........42 FIGURA 18 LAYOUT DOS COMPONENTES DAS PLACAS DE CORREO - - -43 FIGURA 19 PROTTIPO NO MONTADO NO INTERIOR DA CAIXA...........43 FIGURA 20 VISTA SUPERIOR DA CAIXA.....................................................44 FIGURA 21 VISTA SUPERIOR ESQUERDA DA CAIXA................................44 FIGURA 22 VISTA SUPERIOR DIREITA DA CAIXA......................................45 FIGURA 23 TELA DE INTERFACE DO PCWHD...........................................48 FIGURA 241 - ESQUEMA ELETRNICO DO PROGRAMADOR ...................49 FIGURA 25 GRAVADOR DO PIC...................................................................49 FIGURA 26 TELA DE INTERFACE DO PICPGM DEVELOP. PROGRAMMER V1.0.1.5...............................................................................................................50 FIGURA 27 - MICROCONTROLADOR 18F2550 .............................................51
7 FIGURA 28 FLUXOGRAMA DO FIRMWARE.................................................52 FIGURA 29 TELA DE INTERFACE GRFICA DO BORLAND DELPHI SECOND EDITION VERSO 7.2.......................................................................55 FIGURA 30 FLUXOGRAMA DO PROGRAMA EM DELPHI...........................60 FIGURA 31 TELA DE INTERFACE GRFICA DO PROGRAMA FINAL........61
LISTA DE QUADROS
QUADRO 1: RELAO DE RESISTORES UTILIZADOS.................................45 QUADRO 2: RELAO DE CAPACITORES UTILIZADOS..............................46 QUADRO 3: RELAO DE CIRCUITOS INTEGRADOS UTILIZADOS...........46 QUADRO 4: RELAO DOS DEMAIS COMPONENTES UTILIZADOS..........46 QUADRO 5 PINOS UTILIZADOS NO PIC......................................................52
SUMRIO
AGRADECIMENTOS...........................................................................................1 RESUMO.............................................................................................................2 ABSTRACT..........................................................................................................3 LISTA DE ABREVIATURAS E SIGLAS..............................................................4 LISTA DE FIGURAS............................................................................................6 LISTA DE QUADROS..........................................................................................8 SUMRIO............................................................................................................9 1. INTRODUO..............................................................................................11 1.1. OBJETIVO.................................................................................................11 1.1.1. OBJETIVO GERAL.................................................................................12 1.1.2. OBJETIVO ESPECFICO.......................................................................12 1.2. JUSTIFICATIVA.........................................................................................12 2. CONCEITOS.................................................................................................14 2.1. PRINCIPAIS CONCEITOS........................................................................14 2.1.1. OSCILOSCPIO....................................................................................14 2.1.2. USB.........................................................................................................15 2.1.2.1. HISTRICO.........................................................................................16 2.1.3. WIRELESS USB WUSB......................................................................17 2.1.4. PRINCIPAIS CARACTERSTICAS DO USB.........................................17 2.1.5. TOPOLOGIA USB..................................................................................18 2.1.6. TIPOS DE CONECTORES E ADAPTADORES USB ...........................20 2.1.7. CABO USB.............................................................................................23 2.1.8. HOST USB..............................................................................................24 2.1.9. PROTOCOLO USB................................................................................25 2.1.10. ENUMERAO....................................................................................26 2.1.11. MODELO DE FLUXO DE DADOS.......................................................27 2.1.12. DISPOSITIVOS USB............................................................................29 2.1.13. DIGITALIZAO DE SINAIS...............................................................32 2.1.14. AMPLIFICAO DE SINAIS................................................................33 3. ARQUITETURA DO PROTTIPO...............................................................34 3.1. ANLISE DOS PRINCIPAIS COMPONENTES DO CIRCUITO...............35
10 3.1.1. ESCOLHA DO MICROCONTROLADOR...............................................36 3.1.2. ESCOLHA DO MULTIPLEXADOR.........................................................37 3.1.3. ESCOLHA DO AMPLIFICADOR OPERACIONAL.................................38 4. CONCLUSES.............................................................................................63 4.1. PERSPECTIVAS.......................................................................................64 REFERNCIAS BIBLIOGRFICAS..................................................................65 REFERNCIAS PARA PESQUISA...................................................................66 ANEXO A - CRONOGRAMA DO PROJETO....................................................69 ANEXO B DIAGRAMA ESQUEMTICO DO CIRCUITO...............................70 ANEXO C DIAGRAMA ESQUEMTICO DO CIRCUITO DE TRATAMENTO DE SINAIS..........................................................................................................72 ANEXO D DIAGRAMA ESQUEMTICO DA FONTE EXTERNA..................73 ANEXO E CDIGO FONTE DO FIRMWARE................................................74 ANEXO F CDIGO FONTE DO SOFTWARE...............................................78
11
1. INTRODUO
A medio e a anlise de sinais so de fundamental importncia para muitos profissionais, principalmente na rea de eletro-eletrnica. Esta medio pode ser feita de diversas maneiras. Muitos so os dispositivos existentes para realizar medies em circuitos eltricos ou eletrnicos, seja um simples multmetro de bolso com seus recursos limitados ou um sofisticado osciloscpio de bancada com suas vrias funes especiais, ou ainda os analisadores de espectro. Cada um dos equipamentos tem sua aplicao, dependendo das necessidades de preciso, confiabilidade e custo, o usurio pode optar pelo equipamento que satisfaa sua necessidade. Quanto maior a complexidade do equipamento, confiabilidade, preciso, quantidade de recursos e ainda a tecnologia utilizada, maior ser o custo do equipamento. Juntando a eletrnica e os recursos do computador, resolveu-se desenvolver um dispositivo para anlise de sinais, semelhante a um osciloscpio, porm, de mais baixo custo. O dispositivo para aquisio de sinais e controle digital via USB um dispositivo que captura os sinais a serem analisados atravs de pontas de prova conectadas a entradas do tipo BNC, trata o sinal e envia atravs de uma conexo USB para um microcomputador, onde, por meio de uma interface grfica, o sinal ento mostrado em uma tela, similar a de um osciloscpio comum. Este projeto foi baseado no trabalho de concluso de curso dos graduandos Leandro Silva Piecarz e Walter Luciano Espndola, apresentado em 2007 [1]. Partindo da idia base buscou-se aprimorar e evoluir o dispositivo apresentado por estes formandos de 2007.
1.1.
Objetivo
O objetivo deste projeto desenvolver um dispositivo para aquisio e tratamento de sinais, e envio destes atravs de conexo USB para um
12 computador que, previamente carregado com um software, mostrar os sinais a serem analisados na tela. Tambm incorporado ao projeto tem-se um controlador de dispositivos atravs do computador, com sadas digitais para os equipamentos a serem controlados.
1.1.1.
Objetivo geral
O objetivo geral deste projeto desenvolver um hardware e um software na rea de instrumentao e controle, voltado para a medio de sinais e o controle de dispositivos externos, visando custo baixo e facilidade de uso.
1.1.2.
Objetivo especfico
Projetar um circuito eletrnico para a aquisio de sinais com dois canais de oito bits, com taxa de amostragem pr-definido no firmware em 32kSPS e oito escalas de amplitude variando de 0,02V a 25V.
Desenvolver um firmware para a comunicao via USB e digitalizao do sinal. Desenvolver uma interface grfica para que os sinais sejam mostrados na tela do computador. Confeccionar o prottipo do dispositivo.
1.2.
Justificativa
Vrias so as motivaes para o desenvolvimento deste projeto, dentre as principais pode-se citar os seguintes: A utilizao dos conhecimentos em eletrnica analgica e digital para desenvolver o circuito.
13 A possibilidade de confeccionarmos a placa, visto que esta parte prtica extremamente apreciada pelos membros da equipe. O desafio de desenvolver uma interface grfica no computador, sendo que nenhum dos membros da equipe tinha conhecimentos aprofundados no assunto, tendo ento que estudar e aprender mais sobre isto. A possibilidade futura de comercializao, adequando o produto s normas e evoluindo o prottipo com as possveis correes e sugestes.
14
2. CONCEITOS
Nesta parte do trabalho ser apresentado um breve resumo de conceitos necessrios para o entendimento da seqncia do projeto. Sero abordados conceitos bsicos sobre osciloscpios e suas principais funes, comunicao via porta USB com suas principais caractersticas e protocolos, bem como dispositivos que usam este tipo de comunicao. Tambm sero abordados os temas de digitalizao e amplificao de sinais.
2.1. 2.1.1.
Osciloscpio basicamente um dispositivo de visualizao grfica que mostra sinais, contnuos ou alternados, eltricos no tempo. Um osciloscpio pode ser usado para determinar diretamente o perodo ou a tenso de um sinal, determinar indiretamente a freqncia de um sinal ou ainda para medir a diferena de fase entre dois sinais peridicos. Os sinais captados pelo osciloscpio so geralmente mostrados em uma tela retangular de tamanho 10cmx8cm com divises de 1cm e, nos eixos X e Y cada quadrado ainda possui subdivises de 0,2cm o que facilita a leitura dos sinais analisados. Para realizar a captura dos sinais se faz necessrio o uso de ponteiras de prova adequadas para o modelo de osciloscpio usado. Geralmente essas ponteiras so atenuadoras com escalas de atenuao de 1:1, 1:10 ou 1:100, resposta em freqncia com escalas de 20MHz a 300MHz e conexo do tipo BNC. As escalas de atenuao e resposta em freqncia dependem do modelo da ponteira. Os osciloscpios podem ser analgicos ou digitais, normalmente com uma ou duas entradas de sinal e que permitem a visualizao dos canais separadamente ou simultaneamente. As funes mais comuns encontradas nos osciloscpios so:
15 CH1 mostra apenas o sinal do canal 1. CH2 mostra apenas o sinal do canal 2 . ALT mostra alternadamente varreduras completas de cada um dos canais. Para que a atlernncia no seja perceptvel a varredura deve apresentar um perodo inferior a 1/n da persistncia da retina do olho humano, onde n o nmero de canais amostrados. Para dois canais, por exemplo, um perodo equivalente a 50Hz suficiente. CHOP a apresentao dos dois canais efetuada em uma nica varredura completa do feixe de eltrons por partilha de tempo. A comutao efetua-se a elevada freqncia, 100kHz, de forma a garantir que a distncia entre traos consecutivos seja inferior ao dimetro da mancha luminosa. Deste modo a sequncia de pequenos traos percebida como uma linha contnua. No entanto, se a freqncia de varredura for numa freqncia mais baixa, pode-se observar um trao descontnuo. ADD mostra a soma dos sinais presentes nos canais 1 e 2.
Tambm encontramos em um osciloscpio botes para seleo de escalas de tempo e de amplitude do sinal. O ajuste da escala de amplitude independente para cada um dos canais e o ajuste da escala de tempo comum aos dois canais, em alguns modelos de osciloscpios ainda podemos ter essa seleo da escala de tempo em separado para cada um dos canais. [6], [7] e [8].
2.1.2.
USB
Diversas caractersticas, como sua velocidade de transmisso, sua versatilidade, sua facilidade de uso e sua confiabilidade, fazem do USB uma interface perfeita para efetuar comunicao com os mais diversos perifricos, desde um mouse at uma cmera digital, inclusive permitindo a leigos instalar o seu prprio perifrico no seu computador pessoal.
16
2.1.2.1.
Histrico
A verso 1.0 do padro USB foi lanada em janeiro de 1996. No entanto, ele s se tornou disponvel para computadores pessoais com o lanamento da verso OEM Service Release 2 do Windows 95, no segundo semestre de 1996. O seu uso ainda era muito limitado, visto que no havia muitos perifricos que utilizavam este barramento, e o suporte tcnico desta verso ainda possua muitos erros. Por volta de 1998, a quantidade de perifricos desenvolvidos com o padro USB havia aumentado muito, e o lanamento do Windows 98 e de sua verso subseqente, o Windows 98 Second Edition, que corrigiu alguns erros da anterior, permitiram que o USB se tornasse uma interface bastante popular. Em setembro de 1998 foi lanada a verso 1.1 do padro USB. Ambas as verses (citadas em conjunto como USB 1.x) permitiam duas velocidades, chamadas Low-Speed (1,5 Mbps) e Full-Speed (12 Mbps). Com o aumento na popularidade do USB 1.x, tornou-se aparente a necessidade de se aumentar a velocidade do barramento. Visto isso, foi lanado em abril de 2000 a verso 2.0 do padro USB, que introduziu uma nova velocidade de transferncia: Hi-Speed (480 Mbps). Este valor no foi escolhido por acaso: pesquisas mostraram que para uma velocidade de transmisso possibilitar compatibilidade reversa com as velocidades anteriores, ela deveria ser 40 vezes maior do que a Full Speed. Esta nova velocidade tornou o USB mais atrativo para perifricos como dispositivos de armazenamento e impressoras. Em dezembro de 2001, foi lanado um suplemento para o USB 2.0, chamado USB On-The-Go, que permitiu a conexo direta entre perifricos, ao contrrio da implementao padro, que exige a conexo do perifrico a um computador. E em maio de 2005, completou-se a especificao tcnica de outra extenso do USB, denominada Certified Wireless USB (ou, simplesmente, Wireless USB), que permite que a transmisso USB seja realizada sem fios. [2].
17
2.1.3.
O WUSB utiliza formatos de pacotes definidos na subcamada MAC (Media Access Control Controle de Acesso ao Meio) da camada enlace. Existem quatro tipos bsicos de pacote utilizados neste protocolo: Pacotes MMC (Micro-scheduled Management Command Comando de Gerenciamento Microescalonado): so pacotes de controle da transmisso de rdio. Estes pacotes endeream todos os dispositivos da rede WUSB e so transmitidos utilizando encapsulamento seguro de pacotes. Devem ser transmitidos sempre pelo host da rede e taxa de bits mais confivel do protocolo, que a taxa bsica de sinalizao da camada fsica. Pacotes de dados: estes pacotes podem ser transmitidos tanto por um host como por um dispositivo e carregam dados especficos da aplicao. Podem ser transmitidos a qualquer taxa de bits que seja permitida pela implementao. Pacotes de handshake: so pacotes pequenos que indicam sucesso das transaes. Transmitidos sempre pelos dispositivos da rede WUSB, so parte importante do protocolo, e por isso devem ser transmitidos, assim como os pacotes MMC, taxa de bits mais confivel do mesmo. Pacotes de notificao: podem ser transmitidos apenas por dispositivos e so utilizados para carregar informaes de notificao especficas para o host. [2].
2.1.4.
O USB tem como principais caractersticas as seguintes: O computador atua como um host. Podem ser conectados ao host at 127 dispositivos, diretamente ou atravs de hubs USB.
18 Cabos individuais USB podem ter at 5 metros; com hubs, os dispositivos podem ficar at 30 metros de distncia do host (o equivalente a seis cabos). Com o USB 2.0, o barramento possui uma taxa mxima de transferncia de dados de 480 Mbps. Um cabo USB possui dois fios para energia (+5 volts e o fio terra) e um par tranado para a conduo dos dados. Nos cabos de energia, o computador poder fornecer at 500 mA de energia a 5 volts. Os dispositivos de baixa-potncia (como o mouse) podero puxar a energia diretamente do barramento. Os dispositivos de altapotncia (como impressoras) possuem fonte prpria de alimentao e exigem mnima energia do barramento. Os hubs podem ter suas prprias fontes de energia para fornecer energia aos dispositivos conectados a ele. Os dispositivos USB so hot-swappable (conectveis "a quente"), ou seja, podem ser conectados e desconectados a qualquer momento. Os diversos dispositivos USB podem ser colocados no modo sleep (hibernar) pelo computador host, quando o computador entrar no modo de economia de energia. [2], [3], [4] e [5].
2.1.5.
Topologia USB
O barramento USB possui uma topologia da forma de estrela em camadas (tiered star). Neste tipo de topologia, um nico PC (root) pode se conectar a vrios perifricos (partes que provem funes ao sistema) e ainda, a hubs (pontos de conexo, definidos como uma classe especial de dispositivos no USB), que por sua vez conectam outros perifricos. No centro de cada estrela, h um hub e cada ponto um dispositivo que se conecta a uma porta de um hub. Um hub tpico pode possuir 2, 4 ou 7 portas. Um dispositivo (perifrico) pode ainda ser um dispositivo composto,
19 contendo um perifrico e um hub (por exemplo, uma impressora conectada a um host PC pode possuir portas USB, para que possamos plugar um cabo para imprimir fotos diretamente de uma cmera digital ou ainda conectar outros dispositivos). A cada dispositivo composto na rede designado um endereo nico.
No USB, o host inicia uma transmisso de dados atravs dos dispositivos conectados a ele atravs da alocao de slots de tempo a cada dispositivo (Time division Multiplexing - TDM). As conexes entre um host e um dispositivo lgico so ponto-a-ponto e dirigidas do host para o dispositivo. Alm disso, um host no USB pode fazer conexes lgicas com at 127 dispositivos. O Wireless USB possui topologia semelhante ao do USB cabeado, onde a diferena principal entre as duas a ausncia de hubs na no-cabeada. [2] e [3].
20
2.1.6.
2.1.6.1. Conectores
21
22
2.1.6.2. Adaptadores
23
2.1.7.
Cabo USB
O cabo USB um cabo blindado que possui que possui internamente outros quatro cabos, como na figura a seguir:
24
Os cabos USB possuem no seu interior, 2 pares de fios. Um par tranado e formado por fios branco e verde ou, em alguns modelos, amarelo e azul. Atravs desses dois fios trafegam os dados, no formato serial. Esses dois sinais formam o que chamamos de par diferencial. Ao invs de ter um fio de terra e outro de sinal, os dois levam o mesmo sinal, mas com polaridades invertidas, portanto so chamados de D+ e D. A vantagem do par diferencial a alta imunidade a rudos eltricos e interferncias em geral. O cabo possui ainda os fios V+ (vermelho) e GND (preto ou marrom) em cada segmento para distribuir energia aos dispositivos. V+ nominalmente +5 V na fonte. Envolvendo esses dois pares de fios temos uma camada formada por uma folha de alumnio e uma blindagem externa, formada por uma malha de cobre. Envolvendo tudo temos uma camada protetora de plstico. O USB permite a utilizao de segmentos de cabo variveis de 0,5 metros at 5 metros, escolhendo-se um padro adequado de condutores. Para fornecer nveis de tenso de entradas garantidos e impedncias apropriadas nas terminaes, so utilizadas terminaes parciais no fim da cada cabo. Estas terminaes permitem a deteco da conexo e remoo em cada porta e a diferenciao entre dispositivos de alta e baixa velocidade. [3], [4] e [5].
2.1.8.
Host USB
Existe apenas um host num sistema USB. A interface USB para o sistema do computador hospedeiro refere-se ao controlador do mesmo. O controlador do host pode ser implementado em combinao de hardware e software. O host USB interage com os dispositivos atravs do controlador do mesmo. O host responsvel por: Detectar a conexo e remoo de dispositivos USB. Gerenciar o fluxo de controle e de dados entre ele e os perifricos. Coletar estatsticas de atividades e estado.
O software do sistema USB no host gerencia interaes entre dispositivos USB e o software do dispositivo instalado no prprio hospedeiro. Existem cinco reas de interao entre o software do sistema USB e o software do dispositivo: Enumerao e configurao do dispositivo. Transferncias isossncronas de dados. Transferncias assncronas de dados. Gerenciamento de energia. Gerenciamento de informaes de barramentos e dispositivos.
Sempre que possvel, o software do sistema usa interfaces existentes no host para gerenciar as interaes acima. [3].
2.1.9.
Protocolo USB
O USB um barramento receptor (ou de contagem). O controlador do host inicia todas as transferncias de dados. Todas as transaes do barramento envolvem a transmisso de at trs pacotes. Cada transao se inicia quando o controlador do host envia um pacote USB descrevendo o tipo e a direo da transao, o endereo do dispositivo USB e o nmero do ponto final (endpoint). O ponto final de um dispositivo a nica poro enderevel deste que a fonte de informao em um fluxo de comunicaes entre o host e o prprio. O nmero de endpoint um valor de 4 bits entre 0(hex) e F(hex), inclusive, associado a um ponto final de um perifrico USB. Este primeiro pacote conhecido como "pacote de sinal" (token packet). O dispositivo USB, que endereado, seleciona a si mesmo pela decodificao do endereo apropriado. Em uma dada transao, dados so transferidos do host para o dispositivo ou vice-versa. A direo da transferncia especificada no token packet. A fonte da transao envia ento um pacote de dados ou indica que no h mais dados para serem transferidos. O
26 destinatrio, em geral, responde com um "pacote aperto de mo" (handshake packet), indicando o sucesso da transferncia. O modelo para transferncias de dados entre a fonte ou um destino no host e um ponto final de um dispositivo conhecido como pipe (tubo ou canal). Existem dois tipos de pipe: correntes (stream) e mensagens (message). Uma corrente de dados no possui uma estrutura USB definida, enquanto as mensagens possuem. Alm disto, os tubos possuem associaes com as bandas de transmisso de dados, tipos de servios de transferncia e caractersticas de endpoint, como direo e tamanho de buffer. A maioria dos tubos passa a existir quando um dispositivo configurado. Uma mensagem de pipe, default control pipe, sempre existe enquanto o dispositivo est sendo alimentado, para que possa fornecer acesso s configuraes, informaes de controle e status deste. A listagem das transaes permite o controle do fluxo para vrias correntes de tubos (stream pipes). O mecanismo de controle de fluxo permite a construo de listas flexveis, que acomodam servios concorrentes de misturas heterogneas de stream pipes. Mltiplas correntes de pipes podem ser servidas em diferentes intervalos e com pacotes de diferentes tamanhos. [3].
2.1.10. Enumerao
A enumerao a atividade que identifica e atribui endereos nicos para os dispositivos ligados ao barramento. Por permitir a conexo e remoo de dispositivos em qualquer instante de tempo, a enumerao uma atividade ininterrupta para o software do sistema. Alm disso, a enumerao tambm inclui a deteco e o processo de remoo de perifricos. [3].
27
2.1.11.1.
Transferncia de controle
Dados de controle so usados pelo software de sistema do USB para configurar os dispositivos durante a primeira conexo destes. Outros drivers podem ser escolhidos para utilizar transferncias de controle em implementaes especficas. A distribuio de dados perdida. [3].
2.1.11.2.
Volume de dados, tipicamente, consiste em grandes quantidades destes, assim como os usados em impressoras e scanners. Este tipo de dado seqencial. Trocas de dados confiveis so asseguradas por hardware utilizando a deteco de erros do prprio. Vale lembrar tambm que a largura das bandas de transmisso para este tipo de transferncia de dados pode variar dependendo de outras atividades concorrentes do barramento. um tipo de transmisso que assegura a integridade dos dados, mas no a velocidade de transmisso. Esta apenas garantida pelo melhor esforo, isto , caso haja possibilidade de transmisso mais rpida, esta ser feita. [3].
2.1.11.3.
Transferncia de interrupo
Uma transferncia pequena e limitada de, ou para, um dispositivo chamada de interrupo. Alguns dados podem ser apresentados para transferncias por um dispositivo em qualquer instante, e distribuda pelo USB a uma taxa nunca mais lenta quanto a especificada pelo dispositivo. Dados de interrupo consistem tipicamente de notificaes de eventos, caracteres ou coordenadas que so organizadas com um ou mais bytes. [3].
29
2.1.11.4.
Transferncia isossncrona
Dados isossncronos so contnuos e em tempo real na sua criao e distribuio. Informaes relacionadas ao sincronismo so sugeridas pela taxa fixa em que cada dado isossncrono recebido e transferido. Este tipo de dado deve ser distribudo de acordo com a taxa de recepo para que o seu sincronismo seja mantido. Alm disso, a taxa de distribuio deve ser sensvel a atrasos nesta atividade. Para pipes isossncronos a banda de transmisso se baseia em amostras caractersticas das funes associadas. Um exemplo tpico de dado isossncrono a voz. Caso a taxa de distribuio destes dados no seja mantida, iro ocorrer "saltos" na corrente de dados. Ainda se o dado distribudo na taxa apropriada pelo hardware USB, atrasos de distribuio introduzidos por software podem degradar aplicaes que necessitam de transmisses em tempo real, como telefonia e udio conferncias. Correntes isossncronas de dados so alocados em uma determinada poro da banda de transmisso para assegurar que os dados sero distribudos na taxa desejada. [3].
2.1.12.1.
Caracterizao de dispositivos
Todos os dispositivos USB so acessados por um endereo atribudo durante sua conexo e enumerao. Cada componente adicionado suporta um ou mais pipes, atravs dos quais o host pode se comunicar com os componentes. Todo componente USB suporta um canal especialmente
30 designado no ponto final zero para que seja includo o canal de controle (control pipe). Atravs deste pipe de controle, dispositivos USB suportam um mecanismo de acesso comum para obter informaes. O canal de controle no endpoint zero a informao necessria para descrever completamente o dispositivo USB. A informao dividida em trs categorias: Standard: A definio comum para todos os perifricos USB e inclui itens como a identificao do vendedor, classe do dispositivo e o gerenciamento de alimentao. Configuraes, interface e descries de endpoint dos dispositivos carregam informaes relacionadas sobre o mesmo. Class: A definio desta informao varia, dependendo das classes de dispositivos. Vendedores USB: O vendedor de dispositivos USB livre para adicionar qualquer informao desejada. [3].
2.1.12.2.
Existem duas classes majoritrias de dispositivos: hubs e funes. Somente os hubs possuem a caracterstica de fornecer pontos adicionais de conexo ao barramento. Funes propiciam um aumento de capacidade ao host.
2.1.12.2.1.
Hubs
Hubs so elementos chave na arquitetura plug and play do USB e servem para simplificar a conectividade de acordo com as perspectivas dos usurios, alm de oferecer segurana a baixo custo e complexidade. Fios concentrados constituem os hubs. Estes por sua vez ativam as caractersticas de conexo do USB. Pontos de conexo so chamados de portas. Cada hub converte um simples ponto de conexo em vrios outros. A arquitetura suporta a concatenao de hubs.
31 A porta principal (upstream port) de um hub o conecta como o host. Cada porta secundria (downstream port) permite a conexo de outro hub ou funo. Os hubs podem detectar a conexo e a remoo de um dispositivo, tanto de baixa quanto de alta velocidade, nas portas secundrias, alm de distribuir energia para estes. Duas partes constituem um hub: o controlador e o repetidor. Este ltimo um protocolo de mudana controlado entre as portas secundrias e a primria. Tambm possui suporte de hardware para reiniciar e suspender a transmisso de sinais. O controlador do host propicia aos registradores da interface permitir a comunicao de, ou, para o host. Comandos de controle e estados especficos permitem ao host configurar um hub, alm de monitorar e controlar as suas portas. [3].
2.1.12.2.2.
Funes
Uma funo um dispositivo que capaz de transmitir ou receber dados ou informaes de controle do barramento, estando conectado, por um cabo, a uma porta ou hub. Alm disso, um pacote fsico pode conter funes mltiplas e possuir hosts embutidos. Estes so conhecidos como dispositivos compostos e aparecem para o host como um hub com um ou mais dispositivos noremovveis. Cada funo contm informaes de configuraes que descrevem suas capacitaes e recursos exigidos. Antes de poder utilizar uma funo, o host
32 deve configur-la Esta configurao inclui a alocao da banda de transmisso e a seleo das opes especficas para a configurao da funo. Abaixo seguem alguns exemplos de funes: Um dispositivo localizador, como um mouse. Um dispositivo de entrada, como um teclado. Um dispositivo de sada, como uma impressora. Um adaptador de telefonia, como um ISDN. [3].
33
34
3. ARQUITETURA DO PROTTIPO
A arquitetura definida para este prottipo foi a de um microcontrolador com comunicao via USB e conversor analgico/digital internos. Para a placa foi definido o layout de apenas uma face de trilhas. Na arquitetura do microcontrolador com conversor analgico/digital interno, o microcontrolador o responsvel em converter o sinal analgico capturado por qualquer uma das entradas do dispositivo em digital. Como a amplitude do sinal capturado pode ser varivel, usado um amplificador para cada entrada do dispositivo, com ganho varivel ajustado pelo microcontrolador. O ganho definido atravs de seleo feita pelo usurio no software, esta seleo gera um sinal que vai do PIC para o multiplexador, selecionando o resistor correspondente ao ajuste de escala desejado, e este resistor por sua vez, quem define o ganho do amplificador. A comunicao e o envio de sinais entre o dispositivo e o computador so feitos atravs da comunicao USB do microcontrolador com o computador.
Figura 13: Diagrama do dispositivo com comunicao USB e conversor analgico/digital Fonte: ttcsope
35
Figura 14: Diagrama de blocos do conversor analgico/digital Fonte: Datasheet do microcontrolador PIC18F2550
3.1. Circuito
Os principais componentes deste circuito, e que sero analisados a seguir, so: Microcontrolador Multiplexador Amplificador Operacional
36
3.1.1.
Foram
Escolha do microcontrolador
microcontroladores dos fabricantes ATMEL,
analisados
MICROCHIP e TEXAS INSTRUMENTS. As pesquisas foram feitas atravs das ferramentas de auxlio para verificao de modelos disponveis no site de cada fabricante, nestas ferramentas coloca-se os dados que interessam para o projeto e a ferramenta mostra o que o respectivo fabricante tem que possua as caractersticas desejadas. No site da ATMEL encontra-se o microcontrolador AT91CAP7E Caractersticas principais: 256 kbytes de memria ROM interna 160 kbytes de memria SRAM interna USB 2.0 Conversor analgico/digital de 10-bits Clock varivel de 8 a 16 MHz Programao in circuit Encapsulamento LFBGA com 225 pinos
No
site
da site
TEXAS
INTRUMENTS
no
foi
obtido
nenhum
microcontrolador que apresentasse as caractersticas desejadas (USB e CAD). J no da MICROCHIP foram encontradas 2 opes de microcontroladores, PIC18F2550 e PIC18F4550, ambos continham as principais caractersticas desejadas, comunicao via USB e conversor analgico/digital. Caractersticas principais: - PIC18F2550: USB 2.0 Clock varivel de 8 a 48 MHz Conversor analgico/digital de 10-bits Programao in circuit
37 - PIC18F4550: USB 2.0 Clock varivel de 8 a 48 MHz Conversor analgico/digital de 10-bits Programao in circuit 32 kbytes de memria FLASH 2048 bytes de memria SRAM 256 bytes de memria EEPROM 35 portas de entrada/sada Encapsulamentos PDIP de 40 pinos e TQFP e QFN de 44 pinos Dentre estes citados foi escolhido o PIC18F2550, pois alm de ter as caractersticas desejadas, dois exemplares foram emprestados equipe pelo engenheiro Jefferson Chochi Zembovici da empresa HENRY. Posteriormente foi conseguido o contato de um distribuidor MICROCHIP em So Paulo, Bevian comercial e importadora LTDA, com quem, entrando em contato, foram conseguidas amostras do componente, sendo pago apenas as despesas de envio. Duas amostras do componente com encapsulamento DIP e duas em SMD foram enviadas pelo distribuidor, com isso, um total de seis microcontroladores ficaram disposio da equipe para que esta pudesse fazer testes com diferentes programaes e para possvel reposio, backup, em caso de queima de algum dos microcontroladores. 32 kbytes de memria FLASH 2048 bytes de memria SRAM 256 bytes de memria EEPROM 24 portas de entrada/sada Encapsulamentos PDIP e SOIC de 28 pinos
3.1.2.
Escolha do multiplexador
Os multiplexadores analisados para o projeto so todos da empresa MAXIM. Os modelos analisados foram o MAX308, MAX4638 e MAX4051, todos com oito portas multiplexveis.
38 O motivo da escolha destes componentes do referido fabricante foi o fato de que este enviaria amostras dos componentes sem custo algum. Caractersticas principais: - MAX308: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia de canal menor que 5omhs Proteo contra descarga eletrosttica maior que 2000 V Tempo de chaveamento o Ton = 100ns o Toff = 75ns - MAX4638: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia de canal de 0,4 ohms Tempo de chaveamento o Ton = 18ns o Toff = 7ns
- MAX4051: 8 canais multiplexados Compatvel com lgica TTL e CMOS Resistncia mxima de canal de 12 omhs Tempo de chaveamento o Ton = 50ns o Toff = 40ns
Para usar no projeto restaram duas opes, o MAX4638 e o MAX4051, pois foram estes os modelos enviados pelo fabricante, ambos em SMD. A escolha do componente usado no dispositivo, MAX4638, foi devido a este possuir menor tempo de chaveamento e menor resistncia de canal.
3.1.3.
39 O amplificador operacional utilizado no dispositivo o TL072 da TEXAS INSTRUMENTS, este componente foi escolhido pelo fato de que a equipe j possua o componente, reduzindo assim despesas com componente e otimizando os custos do projeto. Caractersticas principais: Dual AmpOp Baixo rudo Proteo contra curto-circuito na sada Baixa distoro harmnica total (0,003% tpico) Alta impedncia de entrada (JFET) Slew rate tpico = 13 V/us
3.2.
HARDWARE
Para o hardware decidiu-se usar placa com apenas uma face, componentes discretos e circuitos integrados com encapsulamento DIP, isto pelo motivo de que era de interesse da equipe confeccionar a placa.
3.2.1.
Desenvolvimento do Dispositivo
O circuito foi desenhado, esquemtico e layout das trilhas, no software EAGLE V.5.5.0 que disponibilizado gratuitamente atravs do site do fabricante (www.cadsoft.de). O diagrama eltrico do circuito foi feito com base nos datasheets dos componentes, no trabalho de final de curso usado de base para este e em conversas entre os membros da equipe. A placa foi planejada de tal forma que se pudesse testar os principais componentes separadamente, por meio de jumpers, com os quais consegue-se bypassar alguns CIs e com isso testar cada parte do circuito. Tambm foram usados soquetes para todos os CIs, o que facilita caso algum deles venha a dar problema.
40 A placa foi feita de modo artesanal, usando o sistema de transfer, impresso a laser em papel polister e transferido para a placa por processo trmico, com o auxlio de um ferro de passar roupas comum.
3.2.2.
Fotos da Placa
Para confeco do circuito forma usadas placas de fibra de face nica, na figura 15 pode-se ver o aspecto das trilhas do circuito, e na sequncia, na figura 16, pode-se ver como ficou a distribuio dos componentes sobre a placa.
41
3.2.3.
Correes do Circuito
Algumas correes foram necessrias no hardware do dispositivo para que este pudesse captar sinais positivos e negativos. Fazendo testes e analisando o circuito foi visto que este apenas funcionaria para sinais positivos, ento foi acrescentado uma nova placa para tratamento de sinal ao dispositivo e uma fonte externa para que se obtivesse alimentao negativa, desta forma conseguiu-se fazer com que o dispositivo funcionasse tanto para sinais positivos como para sinais negativos.
3.2.4.
42
A fonte foi montada em uma caixa plstica, externa do dispositivo de captura de sinais, enquanto a placa para tratamento de sinal foi colocada juntamente com as outras partes, na caixa do dispositivo.
Figura 17 Layout das Trilhas das Placas de Correo Fonte: Autoria Prpria
43
Figura 18 Layout dos Componentes das Placas de Correo Fonte: Autoria Prpria
3.2.5.
O dispositivo foi montado em uma caixa de alumnio com dimenses de 18cm x 12cm x 9cm, aps tratamento da superfcie metlica a caixa foi pintada com tinta spray. Para dar o acabamento final ao prottipo foram usados adesivos impressos aplicados por sobre a caixa, e a seguir vemos as imagens da montagem e do aspecto final do dispositivo.
44
45
3.2.6.
Relao de Componentes
3.2.6.1. Resistores
RESISTOR R1 R2, R21, R22 R10, R18 R9, R17 R8, R16 R7, R15 R6, R14, R19, R20, R23, R24 R5, R13 R4, R12 R3, R11
Fonte: Autoria Prpria
3.2.6.2. Capacitores
CAPACITOR C3, C4 VALOR 15pF
46 C2 C1, C6, C7, C8, C9 C10, C11 C5, C12 470nF 100nF 22nF 10F
47
3.2.7.
FIRMWARE
Firmware o conjunto de instrues operacionais programadas diretamente no hardware de um equipamento eletrnico. Nesse projeto foi necessrio desenvolver e compilar o programa com as instrues especficas ao microcontrolador PIC 18F2550.
48
49
Utilizamos o software livre PICPgm verso 1.0.1.5 para realizar a gravao do firmware no PIC. Esse programa reconhece automaticamente o programador PICPlus e at mesmo o modelo de microcontrolador utilizado.
50
Figura 26 Tela de interface do PICPgm Develop. Programmer V1.0.1.5 Fonte: Autoria Prpria
51
Descrio Entrada de reset, em nvel baixo reseta o sistema Entrada de tenso da programao Entrada analgica 0 Entrada analgica 1 Sada Digital A0 para controle do MUX1 Sada Digital A2 para controle do MUX2 Sada Digital A1 para controle do MUX2 Sada Digital A0 para controle do MUX2 Referncia terra para a lgica e os pinos de i/o Entrada do oscilador de cristal 20MHz Conecta o cristal 20MHz ou ressonador Sada Digital A2 para controle do MUX1 Sada Digital A1 para controle do MUX1 Regulador de tenso interno do USB 3.3V Linha diferencial negativa do USB (input/output) Linha diferencial positiva do USB (input/output) Referncia terra para a lgica e os pinos de i/o Fonte positiva para a lgica e os pinos de i/o Sada Digital Sada Digital Sada Digital Sada Digital Sada Digital Pino que permite a programao em baixa tenso ICSP Clock de programao ICSP
52
28 PGD Pino de dados da programao ICSP Quadro 5 Pinos Utilizados no PIC Fonte: Autoria Prpria
3.2.7.5. Fluxograma
De acordo com as necessidades de utilizao no projeto, os principais registradores configurados foram os relacionados s definies de clock (CONFIG1L, CONFIG1H, OSCCON), USB (UCON, UCFG, USTAT, UADDR, UFRMH:UFRML), Serial (SSPSTAT, SSPCON1) e na configurao de portas como entrada e sada (TRISA, TRISB, TRISC).
53
Realiza a chamada do arquivo de definio de todos os registradores endereados para o 18F2550, existente no banco de dados do compilador CCS. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1, VREGEN Configura vrios registradores do microcontrolador, principalmente aos que diz respeito ao oscilador. HSPLL - oscilador de cristal de alta freqncia com PLL habilitado. NOWDT - watchdog desabilitado. NOPROTECT - proteo de cdigo desabilitada. LVP programao em baixa tenso habilitada. DEBUG - RB6 e RB7 dedicados para In Circuit Debug USBDIV - clock USB do 96MHz PLL/2 PLL5 - cristal de 20MHz PLL prescaler /5 CPUDIV1 - clock do ncleo 96MHz PLL/2 VREGEN - regulador interno de tenso USB habilitado #define #define #define #define USB_EP1_TX_ENABLE USB_ENABLE_BULK USB_EP1_RX_ENABLE USB_ENABLE_BULK USB_EP1_TX_SIZE USB_EP1_RX_SIZE 64 3
54 Determina o tamanho de 64 e 3 bytes reservado para o Buffer Tx e RX, respectivamente, do Endpoint1. #include #include #include <pic18_usb.h> <PicUSB.h> <usb.c>
Inclui as bibliotecas de configurao da USB e descritores, existentes no banco de dados do compilador CCS para o hardware da famlia PIC18. set_tris_a(0b00000011); set_tris_b(0b00000000); set_tris_a(0b00000000); setup_adc_ports(AN0_TO_AN1) Configura apenas as portas A0 e A1 como entrada analgica, as demais como sada digital. usb_init() usb_task() usb_wait_for_enumeration() Inicia, habilita os perifricos e interrupes e aguarda o PIC ser enumerado pelo sistema operacional. for (i=1;i<TXSIZE;i+=2) { set_adc_channel(1); delay_us(10); txdata[i]=read_adc(); set_adc_channel(0); delay_us(10); txdata[i+1]=read_adc(); } usb_puts(1,txdata,TXSIZE,USB_DTS_TOGGLE); Rotina de leitura das entradas analgicas e envio para o computador atravs da porta de comunicao USB.
55
3.2.8.
SOFTWARE
Foi desenvolvido um software de interface grfica para funcionar na plataforma Windows cuja funo a visualizao das diversas formas de ondas capturadas pelo dispositivo, bem como ajustes de escalas e controle das sadas digitais.
Figura 29 Tela de interface grfica do Borland Delphi Second Edition verso 7.2 Fonte: Autoria Prpria
56
//Loop Infinito para captura de pacotes de dados while true do begin if GetUSBData then begin UpdateDrawBuffer; ClearScreen; DrawData; end; Sleep(25); end; O cdigo Main basicamente cria os procedimentos para cada evento da janela principal e fica em um loop infinito onde espera o PIC enviar dados ao programa.
57 procedure TForm1.onoff_buttonClick(Sender: TObject); begin if not usb_connected then begin ShowMessage('Dispositivo inicializado.'); exit; end; if onoff_button.Caption = 'ON' then begin onoff_button.Caption := 'OFF'; hold_button.Enabled:=true; DXTimer1.Enabled:=true; CleanDrawBuffer1; CleanDrawBuffer2; th.Resume; end Essa rotina executada quando o evento de clicar sobre o boto ON realizado. Ela verifica se o dispositivo USB est conectado e depois habilitam outros botes de controle, tambm limpa os buffers do grfico. No cdigo USB, est centralizado todos os comandos relacionados a essa comunicao. function 'mpusbapi.dll'; function function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;pEP:PCHAR8;dwDir: DWORD;dwReserved:DWORD):THANDLE; stdcall;external 'mpusbapi.dll'; function_MPUSBRead(handle:THANDLE;varpData:PBYTE;dwLen:D WORD;varpLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBReadInt(handle:THANDLE;varpData: _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD; stdcall;external 'mpusbapi.dll'; _MPUSBGetDLLVersion():DWORD; stdcall;external no conectado ou no
58 PBYTE;dwLen:DWORD;var pLength:PDWORD;dwMilliseconds:DWORD):DWORD; 'mpusbapi.dll'; function _MPUSBWrite(handle:THANDLE;pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; 'mpusbapi.dll'; function _MPUSBClose(handle:THANDLE):DWORD; stdcall;external 'mpusbapi.dll'; Esses so alguns comandos contidos na biblioteca mpusbapi.dll fornecida pelo fabricante do microcontrolador. As funes precisam ser reconhecidas pelo Delphi para futura utilizao. vid_pid:PCHAR8='vid_04d8&pid_2525'; // VID e PID Indica ao software qual dispositivo USB reconhecer. Vendor ID 04d8 o padro para produtos Microchip j o Product ID 2525 foi definido pela equipe para identificao desse projeto. function StartUSB: boolean; if (_MPUSBGetDeviceCount(vid_pid)=0) then exit; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe exit; // testa a conexo - envia ping send_buffer[0] := PING; _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000); tmp:=IntToStr(SentLength); _MPUSBRead(myInPipe,recv_buffer,MAXSIZE,ReceiveLength,1000); Funo para incio do dispositivo USB se conectado. Para verificar a comunicao, o programa envia um ping e em seguido recebe uma resposta pr-definida. = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then stdcall;external stdcall;external
59
send_buffer[0] := LED_CONTROL; send_buffer[1] := led1; send_buffer[2] := led2; if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error led control'); Exemplo de envio de bytes de controle dos dispositivos externos (representado por LEDs) para o microcontrolador PIC. if(_MPUSBRead(myInPipe, 1000)<>1)then begin ShowMessage('error get usb data 3'); exit; end; for i:=1 to ReceiveLength do begin if ((i mod 2)=0) then //ndex par begin usb_buffer2[buf2] := recv_buffer[i-1]; inc(buf2); end else begin // ndex impar usb_buffer1[buf1] := recv_buffer[i-1]; inc(buf1); end; end; Captura dos pacotes enviados pelo PIC. Onde realiza a diferenciao dos canais analgicos 1 e 2. O microcontrolador envia os sinais do canal 1 atravs dos bytes de indexao par, enquanto os sinais do canal 2 pelos bytes de indexao impar, assim mantendo a mesma velocidade de captura em ambos os canais. recv_buffer, MAXSIZE, ReceiveLength,
60 Por ltimo tem-se o cdigo de desenho do grfico precisa realizar a normalizao dos nveis de sinais para as amplitudes mximas apresentadas na tela. x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); A cada ponto desenhado, realizada a ligao entre ele e o ponto anterior atravs de uma reta, assim fazendo com que o grfico fique contnuo e no pontilhado.
61
Na figura 31 mostrada a tela do Dispositivo de Aquisio de Sinais e Controle Digital via USB com as seguintes funes: Boto ON/OFF inicia a visualizao grfica ou encerra o aplicativo grfico. Seletor de escala de tenso independente para os canais 1 e 2, com uma faixa de 0,02 V a 0,5 V por diviso. Seleo de escala de tempo independente em segundos por diviso. Check Box para habilitar os canais 1 e/ou 2. Hold Permite o congelamento instantneo do grfico para melhor analise do sinal amostrado Tela de visualizao grfica dos canais 1 e 2, com dez divises no eixo X e no eixo Y.
62 Antes de iniciar o desenvolvimento do firmware foi estudado qual o mtodo de comunicao USB seria adotado. Existem trs mtodos: USB Communication Device Class (USB CDC) Basicamente o driver emula uma porta COM, fazendo com que a comunicao entre o software e o firmware seja realizada como se fosse uma porta serial padro. o mtodo mais simples para compilao do programa, porm a velocidade de comunicao muito baixa 115 kbps (~14,4 kB/s). Human Interface Device (EasyHID) - O dispositivo USB seria reconhecido automaticamente pelo Windows como um Dispositivo de Interface Humana (HID), no sendo necessrio desenvolver driver especiais para a aplicao, mas teria uma limitao de velocidade de 64 kB/s. USB Bulk - Driver customizado que permite a comunicao USB apenas com a limitao de velocidade do prprio USB 2.0 (480 Mbps). Esta foi a escolha para o desenvolvimento do projeto. O driver disponibilizado pela prpria Microchip e utilizado em dois momentos. O primeiro na instalao do dispositivo no sistema operacional, onde faz o reconhecimento, enumerao e configurao USB do microcontrolador. O segundo a utilizao da biblioteca mpusbapi.dll para o desenvolvimento do software de interface grfica, o qual serve para comunicao entre o computador e o prprio PIC18F2550.
63
4. CONCLUSES
Neste trabalho foi desenvolvido um dispositivo de aquisio de sinais analgicos e controle digital via USB. Esse tema envolveu conhecimentos de diversas disciplinas do curso de engenharia eltrica, como circuitos eltricos, instrumentao, microcontroladores, circuitos lineares e no lineares, entre outros. Por esse motivo somado ao uso da comunicao USB, tornou o projeto muito interessante, pois atualmente a interface mais utilizada para troca de dados digitais entre os diversos equipamentos eletrnicos. O aprofundamento nesse e em outros assuntos relacionados ao projeto, acabou ampliando a viso de possibilidades para aplicaes desses conhecimentos em dispositivos futuros. Vrias linguagens de programao e diversos softwares foram utilizados, o que proporcionou um aprendizado muito grande nessa rea. Tambm foi um enorme desafio a confeco completa dispositivo, desde a placa de circuito impresso at a caixa protetora, todo desenvolvimento foi realizado pela equipe, o que trouxe muita satisfao para a mesma. O prottipo e software sofreram vrias alteraes e ajustes para alcanar o objetivo definido inicialmente. Com os testes finais, conseguimos obter as seguintes caractersticas: Um taxa de amostragem de aproximadamente 32kSPS;
64 Tenso de entrada AC de 50Vpp; Escala de tempo ponto a ponto real de 2ms; Escala mnima de tenso de 0,1V/div. Controle de ganho em tempo real; Controle dos dispositivos externos simultaneamente com aquisio de dados; Programao do firmware ICSP
Com um maior tempo de desenvolvimento seria possvel melhorar as caractersticas citadas acima, principalmente implementando um conversor analgico digital externo acoplado a uma memria intermediria, aumentando assim a taxa de amostragem. Algumas funes no tratamento de sinal atravs do software de interface grfica tambm foram discutidas, entre elas, um trigger, clculos de valores RMS, filtros, FFT, entre outros.
4.1.
PERSPECTIVAS
Para avanar com o dispositivo e uma possvel evoluo para um produto comercial pode-se citar algumas melhorias a serem implementadas: melhor aumentado entradas Reduo do tamanho do dispositivo Protees contra surtos Incorporao de filtros Eliminao da necessidade de fonte externa FFT Boto de Trigger Clculos matemticos entre os sinais das 2 Limite mximo de tenso de entrada Maior velocidade de aquisio com um CAD
65
REFERNCIAS BIBLIOGRFICAS
[1] ESPNDOLA, Walter Luciano; PIECARZ, Leandro Silva. USBSCOPE. Trabalho de concluso de curso (Graduao em Engenharia Eltrica) UFPR, Curitiba. 2007. [2] Topologia do USB. Disponvel em: http://www.gta.ufrj.br/grad/07_1/wusb/TopologiadoUSB.html. Acesso em: 1 de junho de 2009. [3] Arquitetura USB. Disponvel em: http://www.pads.ufrj.br/~rapoport/usb/usb4.html. Acesso em: 1 de junho de 2009. [4] Interfaces e Perifricos USB. Disponvel em: http://www.laercio.com.br/artigos/hardware/hard-051/hard-051c.htm. Acesso em: 2 de junho de 2009. [5] Como Funcionam as Portas USB. Disponvel em: http://informatica.hsw.uol.com.br/portas-usb1.htm. Acesso em: 3 de junho de 2009.
66
[6] CARVALHO, Felipe Monteiro et al. Osciloscpio Digital em Placa ISA. USP. So Paulo. Disponvel em: http://incubadora.fapesp.br/frs/download.php/707/OsciloscopioISA.pdf. Acesso em: 1 de junho de 2009. [7] Instrumento de Medidas Eltricas em CA Parte II Osciloscpio. Disponvel em: http://www.ucg.br/acad_web/professor/sitedocente/admin/arquivosUpload/7502/ material/Lab2%20circuitos%20elet%20ii.pdf. Acesso em: 1 de junho de 2009. [8] Eletricidade Bsica Osciloscpio. Disponvel em: http://www.inep.ufsc.br/eletbas/aula05.pdf. Acesso em: 1 de junho de 2009. [9] Converso Analgica Digital. Disponvel em: http://www.universiabrasil.net/mit/6/6071/PDF/f02-lec20a_val.pdf. Acesso em: 3 de junho de 2009. [10] Conversor Analgico Digital A/D. Disponvel em: http://www.colegiouberaba.com.br/apostilas/subsidios_eletronica/conversor %20a_d.pdf. Acesso em: 3 de junho de 2009.
67 COSTA, Alexandre. Gravadores de PIC. Disponvel em: http://br.geocities.com/alexrobotica/eletronic_robotica_grava_pics.html. Acesso em: 23 de abril de 2009. Create USB Interface. Disponvel em: http://www.create.ucsb.edu/~dano/CUI/. Acesso em 24 de abril de 2009. Entendendo USB Firewire. Disponvel em: http://www.gdhpress.com.br/blog/entendendo-usb-firewire.html. Acesso em: 2 de junho de 2009. HOFFMAN, Pablo. Osciloscpio USB Documentacin. Disponvel em: http://pablohoffman.com/cgi-bin/twiki/bin/view/Oscusb/OscusbDocumentacion. Acesso em: 28 de abril de 2009. IN-Circuit Serial Programming (ICSP). Disponvel em: http://www.embedinc.com/picprg/icsp.htm. Acesso em: 23 de abril de 2009. Iniciando PIC USB. Disponvel em: http://www.edaboard.com/ftopic313796.html. Acesso em: 23 de abril de 2009. Intel. Desktop Boards Portas USB. Disponvel em: http://www.intel.com/support/pt/motherboards/desktop/sb/CS-023466.htm. Acesso em: 2 de junho de 2009. Jonis Project PIC+USB. Disponvel em: http://www.jonis.com.br/novo/index.php? option=com_content&view=article&id=53:pic-usb-bootloaderfacil&catid=38:eletronica. Acesso em: 24 de abril de 2009. MICROCHIP. Microchip Advanced Parts Selection. Disponvel em: http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1924. Acesso em: 11 de maro de 2009. OBJECTIVE DEVELOPMENT. Power Switch. Disponvel em: http://www.obdev.at/products/vusb/powerswitch.html. Acesso em: 11 de maro de 2009. PIC 18 USB Support. Disponvel em: http://www.oshonsoft.com/pic18usb.html. Acesso em: 21 de abril de 2009. PICPgm. Disponvel em: http://members.aon.at/electronics/pic/picpgm/. Acesso em: 23 de abril de 2009. Programas de PIC com USB. Disponvel em: http://www.electronicfr.com/index.php/Microcontrollers-and-USB/-Part-3-Howto-build-a-USB-thermometer-and-barometer-with-PIC-18F4550-or18F2550.html. Acesso em: 23 de abril de 2009.
68 SOUZA, Emmanuel C. O. Criando Textos Segundo a ABNT. Disponvel em: http://www.scribd.com/doc/1816529/Normas-ABNT-no-Word?page=7. Acesso em: 28 de maio de 2009. TEXAS INSTRUMENTS. MCU Selection Tool. Disponvel em: http://focus.ti.com/en/multimedia/flash/selection_tools/mcu/mcu.html. Acesso em: 10 de maro de 2009. UNISO. Manual de Normalizao de Apresentao de Teses, Dissertaes e Trabalhos de Concluso de Curso (TCC) da Universidade de Sorocaba. Disponvel em: http://www.scribd.com/doc/4076862/ABNT-Manual-I. Acesso em: 22 de junho de 2009. Universal Serial Bus USB Eletronline. Disponvel em: http://eletronline.blogspot.com/2009/02/universal-serial-bus-usb.html. Acesso em: 2 de junho de 2009. USB. Disponvel em: http://www.gdhpress.com.br/hardware/leia/index.php? p=cap3-18. Acesso em: 2 de junho de 2009. USB Boot-Loader on a PIC 18F2550. Disponvel em: http://techsanctuary.com/node/64. Acesso em 23 de abril de 2009. USB Especifications. Disponvel em: http://www.usb.org/developers/usb20/developers/whitepapers/usb_20g.pdf. Acesso em: 21 de abril de 2009. USB Explicao. Disponvel em: http://www.rogercom.com/PortaUSB/MotorPasso.htm. Acesso em: 24 de abril de 2009.
69
ANEXOS
70 Maio/2009 Possveis correes, testes, calibrao do dispositivo, testes preliminares do software e possveis melhorias a serem implementadas. Junho/2009 Correes finais, layout externo do produto, ltimos testes e modificaes, elaborao do relatrio e verificao final do produto. Julho/2009 Apresentao.
71
72
ANEXO
Diagrama
Esquemtico
do
Circuito
de
Tratamento de Sinais
73
74
#define MUX_ON output_high #define MUX_OFF output_low #define SAMPLE 0x00 #define LED_CONTROL 0x01 #define MUX_CONTROL1 0x02 #define MUX_CONTROL2 0x03 #define PING 0x05 #define NO1 #define NO2 #define NO3 #define NO4 #define NO5 #define NO6 #define NO7 #define NO8 #defineTXSIZE 64 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
75
int8 rxdata[5]; int8 txdata[TXSIZE]; int8 txdata2[TXSIZE]; int8 txdata3[TXSIZE]; int8 txdata4[TXSIZE]; int8 txdata5[TXSIZE]; int8 txdata6[TXSIZE]; int8 txdata7[TXSIZE]; int8 txdata8[TXSIZE]; int8 txdata9[TXSIZE]; int8 txdata10[TXSIZE]; int8 send_buf[5]; void TesteUSB(void) { //Verifica se o USB est conectado e enumerado
int8 enumerou; usb_task(); // Hab. o perif. usb e as interrupes usb_wait_for_enumeration(); // Aguarda o Pic ser configurado pelo PC enumerou=usb_enumerated(); if (enumerou) LED_ON(LED2ENUM); else LED_OFF(LED2ENUM); } void TXAnalog(void) { int8 i; LED_ON(LED3USB); set_adc_channel(0); delay_us(10); txdata[0]=read_adc(); for (i=1;i<TXSIZE;i+=2) { set_adc_channel(1); delay_us(10); txdata[i]=read_adc(); set_adc_channel(0); delay_us(10); txdata[i+1]=read_adc(); } usb_puts(1,txdata,TXSIZE,USB_DTS_TOGGLE); LED_OFF(LED3USB); } void MuxCH1(void) { //Seleciona o ganho do CH1 if (rxdata[1]==NO1){ MUX_OFF(MUX1A2); MUX_OFF(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO2){ MUX_OFF(MUX1A2); MUX_OFF(MUX1A1); MUX_ON(MUX1A0); } // Canal A0 // Retardo //Realiza a captura e transmisso das portas analgicas
76
if (rxdata[1]==NO3){ MUX_OFF(MUX1A2); MUX_ON(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO4){ MUX_OFF(MUX1A2); MUX_ON(MUX1A1); MUX_ON(MUX1A0); } if (rxdata[1]==NO5){ MUX_ON(MUX1A2); MUX_OFF(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO6){ MUX_ON(MUX1A2); MUX_OFF(MUX1A1); MUX_ON(MUX1A0); } if (rxdata[1]==NO7){ MUX_ON(MUX1A2); MUX_ON(MUX1A1); MUX_OFF(MUX1A0); } if (rxdata[1]==NO8){ MUX_ON(MUX1A2); MUX_ON(MUX1A1); MUX_ON(MUX1A0); } } void MuxCH2 (void) { //Seleciona o ganho do CH2 if (rxdata[1]==NO1){ MUX_OFF(MUX2A2); MUX_OFF(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO2){ MUX_OFF(MUX2A2); MUX_OFF(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO3){ MUX_OFF(MUX2A2); MUX_ON(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO4){ MUX_OFF(MUX2A2); MUX_ON(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO5){ MUX_ON(MUX2A2); MUX_OFF(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO6){ MUX_ON(MUX2A2);
77
MUX_OFF(MUX2A1); MUX_ON(MUX2A0); } if (rxdata[1]==NO7){ MUX_ON(MUX2A2); MUX_ON(MUX2A1); MUX_OFF(MUX2A0); } if (rxdata[1]==NO8){ MUX_ON(MUX2A2); MUX_ON(MUX2A1); MUX_ON(MUX2A0); } } void main(void) { int8 cont=1; set_tris_a(0b00000011); set_tris_b(0b00000000); set_tris_c(0b00000000); // Programa Principal
// AN0, AN1 entradas e RA2,RA3,RA4,RA5 sadas // RB Todas sadas // RC0 Todas sadas // configura IN analog.do conversor A/D // configura clock interno para o ADC
setup_adc_ports( AN0_TO_AN1 ); setup_adc(ADC_CLOCK_INTERNAL); LED_ON(LED1ON); LED_OFF(LED2ENUM); LED_OFF(LED3USB); LED_OFF(LED4OUT1); LED_OFF(LED5OUT2); usb_init(); while (TRUE) { TesteUSB(); if(usb_enumerated()) {
if (usb_kbhit(1)) { // Verifica se h algo no USB usb_get_packet(1,rxdata,5); //Captura os dados da USB e coloca //na varivel rxdata // sample if(rxdata[0]==SAMPLE) { TXAnalog(); } // led control if(rxdata[0]==LED_CONTROL) { if(rxdata[1]) LED_ON(LED4OUT1); else LED_OFF(LED4OUT1); if(rxdata[2]) LED_ON(LED5OUT2); else LED_OFF(LED5OUT2); } // Mux Control CH 1
78
if(rxdata[0]==MUX_CONTROL1) { MuxCH1(); } // Mux Control CH 2 if(rxdata[0]==MUX_CONTROL2) { MuxCH2(); } // PING - PONG if(rxdata[0]==PING) { send_buf[0] = PING; usb_put_packet(1,send_buf,1,USB_DTS_TOGGLE); } } } } }
79
//==Cdigo Fonte do Software de Interface Grfica compilado no Delphi============ //===================Incio da Rotina MAIN============================== unit main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DXDraws, DXClass, ComCtrls, {draw,} ExtCtrls, Menus, Buttons, usb, draw; type TForm1 = class(TForm) DXDraw1: TDXDraw; GroupBox1: TGroupBox; led1_checkbox: TCheckBox; led2_checkbox: TCheckBox; DXTimer1: TDXTimer; GroupBox2: TGroupBox; en_canal1: TCheckBox; en_canal2: TCheckBox; onoff_button: TButton; Label1: TLabel; usb_led: TPanel; hold_button: TButton; GroupBox3: TGroupBox; hscale_bar1: TTrackBar; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label2: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label20: TLabel; Label21: TLabel; GroupBox4: TGroupBox; vscale_bar1: TTrackBar; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; hscale_bar2: TTrackBar; vscale_bar2: TTrackBar; procedure led_c(Sender: TObject); procedure DXTimer1Timer(Sender: TObject; LagCount: Integer); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure onoff_buttonClick(Sender: TObject); procedure FormResize(Sender: TObject); procedure FormCreate(Sender: TObject);
80
procedure hold_buttonClick(Sender: TObject); procedure hscale_bar2Change(Sender: TObject); procedure hscale2Change(Sender: TObject); procedure vscale_bar1Change(Sender: TObject); procedure vscale_bar2Change(Sender: TObject); private { Private declarations } public { Public declarations } end; main_thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; var Form1: TForm1; th: main_thread; // escalas hscale1: double = 0.005; hscale2: double = 0.005; vscale1: double = 0.02; vscale2: double = 0.02; hscale_default: double = 0.005; vscale_default: double = 0.02; implementation {$R *.dfm} procedure TForm1.led_c(Sender: TObject); var led1, led2: integer; begin if led1_checkbox.Checked then led1:=1 else led1:=0; if led2_checkbox.Checked then led2:=1 else led2:=0; led(led1,led2); end; procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin if DXDraw1.CanDraw then DXDraw1.Flip; end; procedure main_thread.Execute; begin if hold and usb_connected then exit; while true do
81
begin if GetUSBData then begin UpdateDrawBuffer; ClearScreen; DrawData; end; Sleep(25); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin DXTimer1.Enabled:=false; // th.Suspend; end; procedure TForm1.onoff_buttonClick(Sender: TObject); begin if not usb_connected then begin ShowMessage('Dispositivo no conectado ou no inicializado.'); exit; end; if onoff_button.Caption = 'ON' then begin onoff_button.Caption := 'OFF'; hold_button.Enabled:=true; DXTimer1.Enabled:=true; CleanDrawBuffer1; CleanDrawBuffer2; th.Resume; end else begin onoff_button.Caption := 'ON'; hold_button.Enabled:=false; DXTimer1.Enabled:=false; ClearScreen; DXDraw1.Flip; //th.Suspend; end; end; procedure TForm1.FormResize(Sender: TObject); begin DXDraw1.Flip; end; procedure TForm1.FormCreate(Sender: TObject); begin if StartUSB then begin th:=main_thread.Create(true); end else begin usb_connected := false; end;
82
ClearScreen; end; procedure TForm1.hold_buttonClick(Sender: TObject); begin if hold then begin DXTimer1.Enabled := true; hold := false; end else begin hold := true; DXTimer1.Enabled := false; end; end; procedure TForm1.hscale_bar2Change(Sender: TObject); begin CleanDrawBuffer1; case hscale_bar1.Position of 6: hscale1:=0.500; 5: hscale1:=0.200; 4: hscale1:=0.100; 3: hscale1:=0.050; 2: hscale1:=0.020; 1: hscale1:=0.010; 0: hscale1:=0.005; end; end; procedure TForm1.hscale2Change(Sender: TObject); begin CleanDrawBuffer2; case hscale_bar2.Position of 6: hscale2:=0.500; 5: hscale2:=0.200; 4: hscale2:=0.100; 3: hscale2:=0.050; 2: hscale2:=0.020; 1: hscale2:=0.010; 0: hscale2:=0.005; end; end; procedure TForm1.vscale_bar1Change(Sender: TObject); begin change_mux1(vscale_bar1.Position); end; procedure TForm1.vscale_bar2Change(Sender: TObject); begin change_mux2(vscale_bar2.Position); end; end. //===================Fim Rotina MAIN==================================== //===================Incio da Rotina USB================================= unit usb;
83
interface uses Classes, Windows, SysUtils, Dialogs, Graphics; Const MAXSIZE=64; MPUSB_FAIL=0; MPUSB_SUCCESS=1; MP_WRITE:DWORD=0; MP_READ:DWORD=1; MAX_NUM_MPUSB_DEV=127; SAMPLE = $00; LED_CONTROL = $01; MUX_CONTROL1 = $02; MUX_CONTROL2 = $03 N01 = $00 N02 = $01 N03 = $02 N04 = $03 N05 = $04 N06 = $05 N07 = $06 N07 = $07 PING = $05; type DWORD = LongInt; PCHAR8 = array[0..MAXSIZE] of char; PBYTE = array[0..MAXSIZE] of BYTE; PDWORD = array[0..MAXSIZE] of DWORD; PVOID = Pointer; UINT = Cardinal; usb_thread = class(TThread) private { Private declarations } protected procedure Execute; override; end; function _MPUSBGetDLLVersion():DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBGetDeviceCount(pVID_PID:PCHAR8):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBOpen(instance:DWORD;pVID_PID:PCHAR8;pEP:PCHAR8;dwDir:DWORD;dwReserv ed:DWORD):THANDLE; stdcall;external 'mpusbapi.dll'; function _MPUSBRead(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBReadInt(handle:THANDLE;var pData:PBYTE;dwLen:DWORD;var pLength:PDWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBWrite(handle:THANDLE;pData:PBYTE;dwLen:DWORD;var pLength:DWORD;dwMilliseconds:DWORD):DWORD; stdcall;external 'mpusbapi.dll'; function _MPUSBClose(handle:THANDLE):DWORD; stdcall;external 'mpusbapi.dll'; var vid_pid:PCHAR8='vid_04d8&pid_2525'; // VID e PID out_pipe:PCHAR8='\MCHP_EP1'; in_pipe:PCHAR8='\MCHP_EP1';
84
usb_buffer1: array[1..320] of byte; usb_buffer2: array[1..320] of byte; usb_connected: boolean = false; function StartUSB: boolean; function GetUSBData: boolean; procedure led(led1, led2: byte); procedure change_mux1(value: byte); procedure change_mux2(value: byte); implementation uses main, draw; var send_buffer, recv_buffer: PBYTE; myOutPipe:THANDLE; myInPipe:THANDLE; tmp: string; //=============Inicia a USB============================================== function StartUSB: boolean; var ReceiveLength, SentLength:DWORD; begin Form1.usb_led.Color := clRed; usb_connected := false; result := false; if (_MPUSBGetDeviceCount(vid_pid)=0) then exit; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then exit; // testa a conexo - envia ping send_buffer[0] := PING; _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000); tmp:=IntToStr(SentLength); _MPUSBRead(myInPipe,recv_buffer,MAXSIZE,ReceiveLength,1000); if (ReceiveLength<>1) or (recv_buffer[0]<>PING) then exit; _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; Form1.usb_led.Color:=clGreen; usb_connected := true; Form1.led1_checkbox.Enabled:=true; Form1.led2_checkbox.Enabled:=true; result := true; end;
85
//=============Controla a sada Digital (LEDs)=============================== procedure led(led1, led2: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error led control'); exit; end; send_buffer[0] := LED_CONTROL; send_buffer[1] := led1; send_buffer[2] := led2; if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error led control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; //============= Captura os dados da USB =============================== function GetUSBData: boolean; var i, c, buf1, buf2: integer; ReceiveLength, SentLength:DWORD; begin result:=false; myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error get usb data 1'); exit; end; // solicita os dados send_buffer[0] := SAMPLE; if _MPUSBWrite(myOutPipe,send_buffer,1,SentLength,1000)<>1 then begin ShowMessage('error get usb data 2'); exit; end; tmp:=IntToStr(SentLength); // le os dados buf1 := 1; buf2 := 1;
86
for c:=1 to (2*length(usb_buffer1)div length(recv_buffer)) do begin if(_MPUSBRead(myInPipe, recv_buffer, MAXSIZE, ReceiveLength, 1000)<>1)then begin ShowMessage('error get usb data 3'); exit; end; tmp:=IntToStr(ReceiveLength); if ReceiveLength<>0 then result:=true; for i:=1 to ReceiveLength do begin if ((i mod 2)=0) then //par begin usb_buffer2[buf2] := recv_buffer[i-1]; inc(buf2); end else begin // impar usb_buffer1[buf1] := recv_buffer[i-1]; inc(buf1); end; end; end; _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; procedure change_mux1(value: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error mux control'); exit; end; {send_buffer[0] := MUX_CONTROL1; case value of 0: send_buffer[1] := N01; // 0.002V/div 1: send_buffer[1] := N02; // 0.005V/div 2: send_buffer[1] := N03; // 0.1V/div 3: send_buffer[1] := N04; // 0.2V/div 4: send_buffer[1] := N05; // 0.5V/div 5: send_buffer[1] := N06; // 1V/div 6: send_buffer[1] := N07; // 2V/div 7: send_buffer[1] := N08; // 5V/div end; } if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then
87
ShowMessage('error mux control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; procedure change_mux2(value: byte); var SentLength: DWORD; begin myOutPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_WRITE,0); myInPipe:= _MPUSBOpen(0,vid_pid,out_pipe,MP_READ,0); if ((myOutPipe = INVALID_HANDLE_VALUE) or (myInPipe = INVALID_HANDLE_VALUE)) then begin ShowMessage('error mux control'); exit; end; {send_buffer[0] := MUX_CONTROL2; case value of 0: send_buffer[1] := N01; // 0.002V/div 1: send_buffer[1] := N02; // 0.005V/div 2: send_buffer[1] := N03; // 0.1V/div 3: send_buffer[1] := N04; // 0.2V/div 4: send_buffer[1] := N05; // 0.5V/div 5: send_buffer[1] := N06; // 1V/div 6: send_buffer[1] := N07; // 2V/div 7: send_buffer[1] := N08; // 5V/div end; } if _MPUSBWrite(myOutPipe,send_buffer,3,SentLength,1000)<>1 then ShowMessage('error mux control'); tmp:=IntToStr(SentLength); _MPUSBClose(myOutPipe); _MPUSBClose(myInPipe); myInPipe:= INVALID_HANDLE_VALUE; myOutPipe:=INVALID_HANDLE_VALUE; end; //=============Loop Infinito para leitura do USB=============================== procedure usb_thread.Execute; begin {while true do begin GetUSBData; Sleep(10); end;} end; end. //===================Fim da Rotina USB=================================== //===================Incio da Rotina DRAW================================
88
unit draw; interface uses Graphics, Windows, Classes, SysUtils, Dialogs; type draw_thread = class(TThread) private // Private declarations protected procedure Execute; override; end; procedure UpdateDrawBuffer; procedure DrawData; procedure ClearScreen; procedure CleanDrawBuffer1; procedure CleanDrawBuffer2; var hold: boolean = false; next_start_h_scale: integer = 0; implementation uses main, usb; var draw_buffer1: array[1..320] of smallint; // guarda os pontos j lidos draw_buffer2: array[1..320] of smallint; draw_buffer1_index: integer = 1; draw_buffer2_index: integer = 1; procedure draw_thread.Execute; begin {while true do begin UpdateDrawBuffer; ClearScreen; DrawData; Form1.DXDraw1.Flip; end;} end; //=================Esvazio buffer do desenho 1=============================== procedure CleanDrawBuffer1; var i: integer; begin for i:=1 to length(draw_buffer1) do begin draw_buffer1[i] := -1; draw_buffer2[i] := -1; end; end; //=================Esvazio buffer do desenho 2===============================
89
procedure CleanDrawBuffer2; var i: integer; begin for i:=1 to length(draw_buffer2) do begin draw_buffer1[i] := -1; draw_buffer2[i] := -1; end; end; //=================Atualiza o buffer do desenho============================== procedure UpdateDrawBuffer; var usb_buf, draw_buf, i: integer; begin ///////////// // canal 1 // ///////////// draw_buf:=-1; // acha o inicio do buffer 1 for i:=1 to length(draw_buffer1) do if draw_buffer1[i]=-1 then begin draw_buf:=i; break; end; // buffer cheio, apaga if draw_buf=-1 then begin CleanDrawBuffer1; draw_buf:=1; end; // skip := hscale/hscale_default; // copia todo o USB buffer usb_buf := 1; while true do//draw_buf <= length(draw_buffer1) do begin if usb_buf > length(usb_buffer1) then break; if draw_buf > length(draw_buffer1) then begin CleanDrawBuffer1; draw_buf:=1; end; draw_buffer1[draw_buf] := usb_buffer1[usb_buf]; draw_buffer2[draw_buf] := usb_buffer2[usb_buf]; inc(draw_buf); inc(usb_buf); end; end; //=================Limpa a tela e desenha os eixos=========================== procedure ClearScreen;
90
var hdivs, vdivs: integer; // numero de divisoes horizontais e verticais i: integer; begin vdivs := 10; hdivs := 10; if not Form1.DXDraw1.CanDraw then exit; // pinta a tela de branco Form1.DXDraw1.Surface.Fill( Form1.DXDraw1.Surface.ColorMatch(rgb(255,255,255)) ); Form1.DXDraw1.Surface.Canvas.Pen.Color:=clGray; Form1.DXDraw1.Surface.Canvas.Pen.Style := psdot; // desenha as escalas verticais do canal 1 for i := 1 to vdivs-1 do with Form1.DXDraw1.Surface.Canvas do begin MoveTo(i*(Form1.DXDraw1.Width)div(vdivs), 0); LineTo(i*(Form1.DXDraw1.Width)div(vdivs), Form1.DXDraw1.Height); end; // desenha as escalas horizontais do canal 1 for i := 1 to hdivs-1 do with Form1.DXDraw1.Surface.Canvas do begin MoveTo(0, i*(Form1.DXDraw1.Height)div(hdivs)); LineTo(Form1.DXDraw1.Width, i*(Form1.DXDraw1.Height)div(hdivs)); end; Form1.DXDraw1.Surface.Canvas.Pen.Color := clBlack; Form1.DXDraw1.Surface.Canvas.Pen.Style := pssolid; // eixo vertical Form1.DXDraw1.Surface.Canvas.Pen.Width:=1; Form1.DXDraw1.Surface.Canvas.MoveTo(Form1.DXDraw1.Width div 2, 0); Form1.DXDraw1.Surface.Canvas.LineTo(Form1.DXDraw1.Width div 2, Form1.DXDraw1.Height); // eixo horizontal Form1.DXDraw1.Surface.Canvas.MoveTo(0, Form1.DXDraw1.Height div 2); Form1.DXDraw1.Surface.Canvas.LineTo(Form1.DXDraw1.Width, Form1.DXDraw1.Height div 2); // mini divises - horizontal for i:=0 to hdivs*5 do begin Form1.DXDraw1.Surface.Canvas.MoveTo(i*Form1.DXDraw1.Width div hdivs div 5, (Form1.DXDraw1.Height div 2) - 3); Form1.DXDraw1.Surface.Canvas.LineTo(i*Form1.DXDraw1.Width div hdivs div 5, (Form1.DXDraw1.Height div 2) + 3); end; // mini divises - vertical for i:=0 to vdivs*5 do begin
91
Form1.DXDraw1.Surface.Canvas.MoveTo((Form1.DXDraw1.Width div 2) - 3, i*Form1.DXDraw1.Height div vdivs div 5); Form1.DXDraw1.Surface.Canvas.LineTo((Form1.DXDraw1.Width div 2) + 3, i*Form1.DXDraw1.Height div vdivs div 5); end; end; //=================Desenha o Canal1================================== procedure DrawData; var i, x, y, h_factor: integer; begin // muda a cor do traado para verde Form1.DXDraw1.Surface.Canvas.Pen.Color := clGreen; Form1.DXDraw1.Surface.Canvas.Pen.Width := 2; if not Form1.DXDraw1.CanDraw then exit; ///////////// // canal 1 // ///////////// h_factor := round(hscale1/hscale_default); i:=1; if Form1.en_canal1.Checked then while i <= (length(draw_buffer1) div h_factor) do begin // se chegou no fim do buffer, sai do loop if draw_buffer1[i] = -1 then break; x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer1[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); inc(i); end; Form1.DXDraw1.Surface.Canvas.Pen.Color := clBlue; //=================Desenha o Canal2=================================== h_factor := round(hscale2/hscale_default); i:=1; if Form1.en_canal2.Checked then while i <= (length(draw_buffer2)/h_factor) do begin // se chegou no fim do buffer, sai do loop if draw_buffer2[i] = -1 then break;
92
x := (i-1)*(Form1.DXDraw1.Width div (length(draw_buffer2) div h_factor)); y := draw_buffer2[i-1]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.MoveTo(x,y); x := (i)*(Form1.DXDraw1.Width div (length(draw_buffer1) div h_factor)); y := draw_buffer2[i]; y := round((y/255)*Form1.DXDraw1.Height); // condicionamento do sinal Form1.DXDraw1.Surface.Canvas.LineTo(x,y); inc(i); end; end; end. //==================Fim da Rotina DRAW================================