osciloscópio usb

91
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO DEPARTAMENTO DE ENGENHARIA ELÉTRICA PROJETO DE GRADUAÇÃO DESENVOLVIMENTO DE UM OSCILOSCÓPIO VIRTUAL DE BAIXO CUSTO COM INTERFACE USB IGOR VESCOVI DEVENS

Upload: joycecris

Post on 09-Aug-2015

226 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Osciloscópio USB

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO

CENTRO TECNOLÓGICO DEPARTAMENTO DE ENGENHARIA ELÉTRICA

PROJETO DE GRADUAÇÃO

DESENVOLVIMENTO DE UM OSCILOSCÓPIO VIRTUAL DE BAIXO CUSTO COM INTERFACE USB

IGOR VESCOVI DEVENS

Page 2: Osciloscópio USB

VITÓRIA – ES FEVEREIRO/2008

IGOR VESCOVI DEVENS

DESENVOLVIMENTO DE UM OSCILOSCÓPIO VIRTUAL DE BAIXO CUSTO COM INTERFACE USB

Parte escrita do Projeto de Graduação do aluno Igor Vescovi Devens, feito sob a orientação do Professor Dr. Evandro Ottoni Teatini Salles, apresentado ao Departamento de Engenharia Elétrica do Centro Tecnológico da Universidade Federal do Espírito Santo, para obtenção do grau de Engenheiro Eletricista.

Page 3: Osciloscópio USB

VITÓRIA – ES

FEVEREIRO/2008

IGOR VESCOVI DEVENS

DESENVOLVIMENTO DE UM OSCILOSCÓPIO VIRTUAL DE BAIXO CUSTO COM INTERFACE USB

COMISSÃO EXAMINADORA: ___________________________________ Prof. Dr. Evandro Ottoni Teatini Salles Orientador ___________________________________ Eng. Marcelo Souza Fassarella Co-orientador ___________________________________ Prof. Dr. Teodiano Freire Bastos Filho Examinador ___________________________________ Prof. Dr. Hans-Jorg Andreas Schneebeli Examinador

Vitória - ES, 11, Fevereiro, 2008

Page 4: Osciloscópio USB

i

DEDICATÓRIA

Aos meus amigos da Engelite.

Page 5: Osciloscópio USB

ii

AGRADECIMENTOS

Agradeço a Deus, meus pais, Torricelli e Angela e meu irmão, Arthur, pelo

apoio. Sem esquecer dos amigos e da namorada, que tiveram muita paciência durantes

os meses e meses em que me ocupei deste projeto e me ausentei de tantas cervejas.

Obrigado também a Marcelo Fassarella pela sugestão do tema e profissionalismo, ao

meu Orientador Evandro, pela sua paciência e apoio, e a equipe da Geocontrol pela

confiança e experiência que lá adquiri.

Page 6: Osciloscópio USB

iii

LISTA DE FIGURAS

Figura 1 - Sinal Analógico. .......................................................................................... 17

Figura 2 - Sinal Discretizado no Tempo. ..................................................................... 17

Figura 3 - Sinal Discretizado no tempo e na Amplitude. ............................................ 18

Figura 4 - Diagrama de blocos de um ADC por Aproximação Sucessiva. ................. 20

Figura 5 - Stellaris LM3S811 Evaluation Board. ........................................................ 25

Figura 6 -Diagrama de blocos do Hardware do Osciloscópio Virtual via USB. ......... 26

Figura 7 - Osciloscópio Virtual via USB conectado ao computador. ......................... 27

Figura 8 - Circuito Divisor de tensão. ......................................................................... 29

Figura 9 - Filtro RC. .................................................................................................... 30

Figura 10 - Filtro RC utilizado. ................................................................................... 31

Figura 11 - Circuito semi-completo de tratamento do sinal de entrada....................... 32

Figura 12 - Circuito completo de tratamento do sinal de entrada. .............................. 33

Figura 13 - Análise no tempo do circuito. ................................................................... 33

Figura 14 - Análise na freqüência do circuito. ............................................................ 34

Figura 15 - Circuito de tratamento do sinal na placa. .................................................. 34

Figura 16 - Circuito do oscilador independente. ......................................................... 35

Figura 17 - Circuito do oscilador independente na placa. ........................................... 35

Figura 18 - Fluxograma do programa principal. .......................................................... 38

Figura 19 - Fluxograma da interrupção do conversor AD. .......................................... 39

Figura 20 - Interface gráfica do Software. ................................................................... 40

Figura 21 - Manipulação da biblioteca gráfica. ........................................................... 41

Figura 22 - Manipulação do Software do Osciloscópio Virtual via USB. .................. 42

Figura 23 - Senoidal de 10 Hz, osciloscópio USB. ..................................................... 45

Figura 24 - Senoidal de 10 Hz, osciloscópio analógico. ............................................. 45

Figura 25 - Senoidal de 220Hz, osciloscópio USB. .................................................... 46

Figura 26 - Senoidal de 220 Hz, osciloscópio analógico. ........................................... 47

Figura 27 - Senoidal de 10 Khz, osciloscópio USB. ................................................... 47

Figura 28 - Senoidal de 10 KHz, osciloscópio analógico. ........................................... 48

Figura 29 - Quadrada de 51 Hz, osciloscópio USB. .................................................... 49

Page 7: Osciloscópio USB

iv

Figura 30 - Quadrada de 51 Hz, osciloscópio analógico. ............................................ 49

Figura 31 - Quadrada de 6 KHz, osciloscópio USB. ................................................... 50

Figura 32 - Quadrada de 6 KHz, osciloscópio analógico. ........................................... 51

Figura 33 - Quadrada de 10 KHz, osciloscópio USB. ................................................. 51

Figura 34 - Quadrada de 10 KHz, osciloscópio analógico. ......................................... 52

Figura 35 - Triangular de 52 Hz, osciloscópio USB. .................................................. 53

Figura 36 - Triangular de 52 Hz, osciloscópio analógico. ........................................... 53

Figura 37 - Triangular de 5,06 KHz, osciloscópio USB. ............................................ 54

Figura 38 - Triangular de 5,06 KHz, osciloscópio analógico. ..................................... 55

Figura 39 - Análise de amplitude Máxima. ................................................................. 55

Figura 40 - Análise de amplitude Mínima. .................................................................. 56

Figura 41 - Senoidal de 30 KHz no Osciloscópio USB. ............................................. 57

Figura 42 - Quadrada de 30 KHz no Osciloscópio USB. ............................................ 57

Figura 43 - Triangular de 30 KHz no Osciloscópio USB. ........................................... 58

Figura 44 - Diagrama de blocos do projeto futuro. ..................................................... 63

Figura 45 - Memória SRAM auto-incrementável. ....................................................... 64

Figura 46 - Futura versão do Osciloscópio Virtual via USB em fase de

desenvolvimento. ......................................................................................................... 65

Figura 47 - Esquemático do LM3S811 da Kit da Luminary Micro. ........................... 87

Figura 48 - Esquemático do CI FTDI2232c do Kit (Serial x USB). ........................... 88

Page 8: Osciloscópio USB

v

LISTA DE TABELA

Tabela 1 - Codificação Binária da Tensão. .................................................................. 19

Tabela 2 - Classes USB. .............................................................................................. 22

Tabela 3 - Custo Aproximado do Hardware do Osciloscópio Virtual via USB. ......... 62

Page 9: Osciloscópio USB

vi

GLOSSÁRIO

1. AD: Analog to Digital.

2. ADC: Analog to Digital Converter.

3. ARM: Advanced RISC Machine.

4. Bluetooth especificação industrial para áreas de redes pessoais sem fio

(Wireless Personal Area Networks – PANs).

5. bps: Bits per Second.

6. CDC: Connected Device Configuration.

7. COM port: Porta de comunicação.

8. FFT: Fast Fourier Transform

9. Filtro RC: Filtro Resistivo e Capacitivo.

10. Half Duplex: Sistema que oferece comunicação em duas direções, mas apenas

uma por vez. Ex: Walkie Talkie.

11. HID: Human Interface Device.

12. Hub USB: Periférico que permite que vários outros periféricos USB se

conectem a uma mesma porta USB.

13. IrDA: Infrared Data Association.

14. JTAG: Joint Test Action Group.

15. MP3: MPEG-1 Audio Layer 3.

16. PenDrive: Memória Flash para armazenamento de dados com conexão USB.

17. Plotar: Desenhar.

18. Plug and Play: Característica de um periférico que pode ser adicionado a um

computador sem a necessidade de configuração ou instalação.

19. RISC: Reduced Instruction Set Computer.

20. Smart Card: Cartão com circuito embarcado capaz de processar dados.

21. RS232: Recommended Standard 232.

22. Trigger: Gatilho.

23. UART: Universal Asynchronous Receiver and Transmitter.

24. Wifi: Tecnologia de redes sem fios embarcadas.

Page 10: Osciloscópio USB

vii

Page 11: Osciloscópio USB

viii

SUMÁRIO

DEDICATÓRIA ........................................................................................................... I

AGRADECIMENTOS .............................................................................................. II

LISTA DE FIGURAS ............................................................................................... III

LISTA DE TABELA .................................................................................................. V

GLOSSÁRIO ............................................................................................................. VI

RESUMO ..................................................................................................................... X

1 INTRODUÇÃO .............................................................................................. 11

1.1 Motivação.......................................................................................................... 11

1.2 Objetivo ............................................................................................................. 13

1.3 Metodologia ...................................................................................................... 13

1.4 Divisão da Monografia ..................................................................................... 14

2 CONVERSÃO ANALÓGICA DIGITAL .................................................... 16

2.1 Tipos de conversores AD .................................................................................. 18

2.2 Aproximação Sucessiva .................................................................................... 18

3 UNIVERSAL SERIAL BUS (USB) .............................................................. 21

3.1 Versões da USB ................................................................................................ 21

3.2 Classes dos Periféricos USB ............................................................................. 21

3.3 Características elétricas da USB ....................................................................... 23

3.4 Conversor USB para Serial (UART) ................................................................ 24

4 O PROJETO DESENVOLVIDO ................................................................. 25

4.1 Hardware ........................................................................................................... 25

4.2 Microcontrolador .............................................................................................. 27

4.3 Circuito de Tratamento do Sinal de Entrada ..................................................... 28

4.3.1 Circuito Divisor de Tensão ...................................................................... 28

4.3.2 Dimensionamento do Filtro ..................................................................... 29

4.3.2.1 Filtro passa baixas RC ................................................................ 30

4.3.3 Circuito de Offset de Tensão ................................................................... 31

4.3.4 Oscilador Independente – Ponta de prova ............................................... 35

4.4 Firmware ........................................................................................................... 36

Page 12: Osciloscópio USB

ix

4.4.1 Explicação da lógica e Fluxograma ........................................................ 36

4.4.2 Continuidade da Análise ......................................................................... 39

4.5 Software ............................................................................................................ 40

4.5.1 Características do Gráfico ....................................................................... 40

4.5.2 Configurações do Osciloscópio ............................................................... 41

5 RESULTADO ................................................................................................. 44

5.1 Ondas Senoidais ................................................................................................ 44

5.1.1 Onda Senoidal a 10 Hz ............................................................................ 44

5.1.2 Ondas Senoidais 220 Hz .......................................................................... 45

5.1.3 Onda Senoidal a 10 KHz ......................................................................... 47

5.2 Ondas Quadradas .............................................................................................. 48

5.2.1 Ondas Quadradas 51 Hz .......................................................................... 48

5.2.2 Ondas Quadradas 6 KHz ......................................................................... 50

5.2.3 Ondas Quadradas 10 KHz ....................................................................... 51

5.3 Ondas Triangulares ........................................................................................... 52

5.3.1 Ondas Triangulares 52 Hz ....................................................................... 52

5.3.2 Ondas Triangulares 5,06 KHz ................................................................. 54

5.4 Análise das Amplitudes Máxima e Mínima ..................................................... 55

5.5 Análise com freqüência acima da Projetada ..................................................... 56

6 CONCLUSÃO E MELHORIAS FUTURAS ............................................... 59

6.1 Melhorias Futuras de Hardware ........................................................................ 62

6.2 Melhorias Futuras de Firmware e Software ...................................................... 65

REFERÊNCIAS BIBLIOGRÁFICAS ..................................................................... 67

APÊNDICE A ............................................................................................................. 69

APÊNDICE B ............................................................................................................. 73

APÊNDICE C ............................................................................................................. 86

Page 13: Osciloscópio USB

x

RESUMO

Este Projeto de Graduação teve como pressuposto a proposta de integrar o

conhecimento adquirido durante o curso de Engenharia Elétrica com ênfase em

eletrônica e telecomunicações, com um projeto interessante e de grande utilidade.

Foi desenvolvido um Osciloscópio Virtual via USB envolvendo o projeto de

circuitos eletrônicos, filtros eletrônicos, firmwares, softwares, comunicação Serial ×

USB. O projeto permite que se capture sinais previamente digitalizados por uma placa

conectada a uma porta USB de um computador pessoal. A placa utilizada para captura

(kit Stellaris) está baseada em um microcontrolador LM3S811 que possui núcleo

ARM Cortex M3, utilizando a tecnologia Thumb 2. Foram desenvolvidos tanto o

firmware do microcontrolador quanto o software que é executado no computador

pessoal, para permitir a visualização da onda capturada. Realizaram-se testes com

diversos tipos de ondas periódicas padronizadas para avaliar o desempenho do sistema.

A largura de banda máxima do sinal de entrada foi de 10KHz, limitada pela taxa de

conversão do módulo A/D do microcontrolador. Os resultados foram satisfatórios,

demonstrando a viabilidade da proposta. A base teórica adquirida durante a graduação

e o estímulo de se projetar e construir um equipamento primordial ao Engenheiro

Eletricista, foi o alicerce central deste projeto.

Page 14: Osciloscópio USB

11

1 INTRODUÇÃO

1.1 Motivação

Em projetos eletrônicos, o Osciloscópio é um equipamento muito importante,

pois permite ao desenvolvedor e ao técnico observar o formato do sinal em estudo.

Contudo, seja ele Analógico ou Digital, é uma ferramenta de alto custo, por isso nem

sempre se tem acesso a este aparelho.

Quando se trata de um Osciloscópio Analógico tem-se um preço um pouco

mais acessível do que os Osciloscópios Digitais. Entretanto, são ferramentas de

tecnologia antiga, grandes, pesados e possuem pouca aplicação para um desenvolvedor

que deseje além de visualizar a onda, salvar a imagem do sinal, imprimir, ou mesmo

armazenar os pontos coletados para utilizar em algum software para pós-

processamento.

Em contrapartida, temos os Osciloscópios Digitais, com um desempenho

melhor, e com a possibilidade de contar com analisador de espectro embutido, tela

colorida, vários canais, interface com o computador e um valor de custo maior,

proporcional a todas suas vantagens.

Atualmente, é possível encontrar osciloscópios analógicos, de baixa qualidade,

com preço girando em torno de R$1.200,00 (2 canais de entrada e largura de banda de

20MHz) e osciloscópios digitais de ótima qualidade com preços em torno de

R$3.500,00 (2 canais, largura de banda de 60MHz, tela colorida, 500M amostras por

segundo de captura em cada canal e recursos matemáticos como transformada rápida

de Fourier). Caso se deseje osciloscópios analógicos de boa qualidade, o preço sobe

consideravelmente (em alguns casos mais que duplica), o que acaba por reforçar ainda

mais a migração de um osciloscópio analógico para o digital. Na verdade, observa-se

que os fabricantes tradicionais de osciloscópios, que produziam instrumentos

analógicos de excelente qualidade, migraram quase todos para produzir

exclusivamente equipamentos digitais. De todas as formas, pese ao preço dos

equipamentos tanto analógicos como digitais, o custo ainda é elevado para boa parte

dos usuários.

Page 15: Osciloscópio USB

12

Por outro lado, no estágio atual da tecnologia, onde o computador portátil

deixou de ser um luxo para se tornar um instrumento de trabalho para o técnico e o

desenvolvedor, é interessante aproveitar seu potencial de cálculo e armazenamento nas

atividades que envolvam desenvolvimento e manutenção de equipamentos eletro-

eletrônicos. Assim, hoje em dia é comum integrar ao computador instrumentos de

medições, conhecidos agora como instrumentos virtuais que, no nosso caso torna-se

um osciloscópio virtual.

Portanto, o usuário interessado em um osciloscópio digital mais simples, capaz

de ir a campo integrado por exemplo a um notebook (ou mesmo para uso laboratorial),

mas com funções consideradas essenciais ao desenvolvedor ou projetista moderno,

pode empregar este tipo de equipamento. Um dispositivo deste tipo permite que

inclusive algoritmos típicos de processamento digital de sinais sejam realizados in loco

no computador, o que pode contribuir para uma rápida avaliação de um sinal, recurso

este impensável para Osciloscópios Analógicos.

A fim de se preencher essa necessidade de um Osciloscópio de baixo custo,

com desempenho mediano (largura de banda pequena) e interface com um computador

surgem como opção os Osciloscópios Virtuais, onde a visualização dos sinais

analisados é exibida em um software executado em um computador comum.

O BitScope (www.bitscope.com) é o exemplo mais difundido deste tipo de

equipamento. No sitio do fabricante, além de ser vendido, são também fornecidos os

esquemas elétricos para quem quiser construir o seu próprio equipamento (o esquema

fornecido utiliza comunicação via porta paralela para com o PC). Os preços

atualmente giram em torno de US$425,001, o que daria algo em torno de R$765,00

reais (na data da confecção desta monografia, US$1,00 ≈ R$1,80), valor este sem as

taxas de importação e frete que podem chegar a até 100%.

Neste sentido, o projeto aqui apresentado mostra o desenvolvimento de um

Osciloscópio Virtual, projeto este que apresenta avanços quando comparado a um

Projeto de Graduação anterior intitulado, Uso Do Computador Pessoal No

1 Sinal de entrada de, no máximo 100 MHz de largura de banda, 2 canais A/D de 40 Mega-Amostras por

segundo, 32 kB de buffer de memória.

Page 16: Osciloscópio USB

13

Desenvolvimento De Um Analisador De Espectro De Baixa Freqüência, desenvolvido

por Walter Anjos em [15]. Este utilizava comunicação via porta paralela com o

computador, para assim transferir os dados coletados por um hardware de aquisição de

dados com conversor A/D dedicado. A análise de espectro nesse projeto anterior era

feita através de uma Transformada Rápida de Fourier (FFT). E como era necessário

capturar uma seqüência de amostras do sinal, esse equipamento também funcionava

como um Osciloscópio. Contudo, sua interface gráfica era complicada e tanto o

Osciloscópio quanto o Analisador de Espectro não permitiam análises ininterruptas.

Neste novo projeto a comunicação utilizada é a USB, mantendo-se, portanto,

compatível com o padrão de comunicação atual dos computadores. O software possui

uma interface gráfica (GUI) amigável e compatível com o Windows 98, 2000 e XP,

permite análises ininterruptas do sinal amostrado e funções de Trigger. Além disso, o

microcontrolador utilizado possui uma tecnologia mais avançada e o circuito de

aquisição de dados mantém uma comunicação bidirecional com o computador.

Contudo, não há a função de Analisador de Espectro nesta versão. Entretanto,

melhorias diversas devem ser feitas como proposta futura, levando o Osciloscópio

Virtual aqui apresentado a ter desempenho capaz de satisfazer até mesmo usuários

mais exigentes.

1.2 Objetivo

O objetivo deste projeto é construir um Osciloscópio Virtual via USB, que é

uma porta de comunicação rápida e padrão, além de um software de visualização.

Todo o projeto foi baseado sobre a plataforma de desenvolvimento Stellaris

LM3S811 Evaluation Board da Luminary Micro, que possui um microcontrolador

ARM7 Thumb2 e um circuito integrado de comunicação Serial x USB.

1.3 Metodologia

Foi feita inicialmente uma pesquisa na internet para analisar projetos

semelhantes, analisando idéias e possibilidades de arquiteturas do projeto. Arquiteturas

simples e complexas foram pesquisadas, assim como a disponibilidade de material

Page 17: Osciloscópio USB

14

para desenvolvimento do projeto, componentes e exemplos de códigos. Estes foram os

pontos iniciais para o início do desenvolvimento do trabalho.

Duas arquiteturas de hardware mostraram-se interessantes a princípio, contudo

a mais otimizada foi descartada durante a fase de desenvolvimento de hardware,

devido a sua alta complexidade. A utilização de um kit de desenvolvimento mostrou-

se mais atrativa e facilitou a finalização da primeira fase do projeto.

A segunda etapa do desenvolvimento voltou-se para uma implementação em

conjunto do firmware e do software. Antes, entretanto, foi necessário decidir qual seria

a plataforma de desenvolvimento utilizada, assim como a linguagem de programação.

Optou-se pela linguagem C e a plataforma de desenvolvimento da Keil, µVision 3,

devido aos códigos de exemplos pré-existentes para esta plataforma. Quanto ao

software optou-se pelo Borland C++ Builder, devido às facilidades gráficas da

plataforma e devido à biblioteca gráfica utilizada, que fora desenvolvida para a

plataforma da Borland.

Com o hardware, firmware e software operando, iniciou-se a etapa mais

simples do hardware, que foi o desenvolvimento do circuito de tratamento de sinal de

entrada e o oscilador independente. Nesta fase, fez-se o uso intenso do Pspice para

simulação. Apenas quando verificado em simulação todo o funcionamento desses dois

circuitos, os protótipos foram criados e testados.

A etapa final do projeto foi focada em uma bateria de testes e comparação

entre as capacidades do Osciloscópio USB e de um osciloscópio analógico comum de

20 MHz. Realizados todos os testes a monografia foi preparada.

1.4 Divisão da Monografia

Esta monografia está divida em capítulos teóricos, desenvolvimento, testes,

conclusão e apêndices.

Nos Capítulos 2 e 3, temos a teoria de conversores AD e comunicação USB.

Todo o desenvolvimento do hardware, firmware e software do projeto está

descrito no Capítulo 4. No Capítulo 5 temos os teste e resultados obtidos com o

Osciloscópio Virtual projetado.

Page 18: Osciloscópio USB

15

Conclusão e Melhorias Futuras estão descritas no Capítulo 6. Os Apêndices A

e B contêm o código fonte do firmware e do software, respectivamente, enquanto no

Apêndice C temos alguns esquemáticos do kit da Luminary Micro utilizado.

Page 19: Osciloscópio USB

16

2 CONVERSÃO ANALÓGICA DIGITAL

A necessidade de se coletar dados do mundo real que estão em formato

analógico e arquivá-los em formas digitais nos força a utilizar conversores analógico-

digital, também conhecidos como ADC (Analog to Digital Converter – A/D).

Um sinal analógico é contínuo na amplitude e no tempo, possuindo qualquer

valor de amplitude dentro da sua faixa de variação para qualquer instante de tempo.

Coletar dados com tal precisão e constância infinitesimal é impossível. O que os ADCs

fazem é amostrar repetidas vezes o sinal, sendo que o valor da amplitude de cada

amostragem é discretizada, ou seja, só pode medir valores específicos.

Portanto, como não temos uma cópia digital fiel do sinal real, podemos perder

qualidade do sinal amostrado. Um método de se precaver contra isso é obedecer ao

Teorema de Nyquist2.

De acordo com o Teorema de Nyquist a quantidade de amostras por unidade

de tempo de um sinal, chamada taxa de amostragem, deve ser maior que o dobro da

largura de banda contida no sinal a ser amostrado, para que possa ser reproduzido

fielmente. A metade da taxa de amostragem é chamada taxa de Nyquist e corresponde

ao limite máximo de freqüência do sinal que pode ser reproduzido. Como não é

possível garantir que o sinal não contenha sinais acima deste limite (distorções,

interferências, ruídos, etc...), é necessário filtrar o sinal com um filtro passa baixo com

freqüência de corte igual (ou menor) à taxa de Nyquist, ou filtro anti-aliasing.

Ressalta-se que teoricamente, um sinal contínuo, limitado em banda, se

amostrado conforme o teorema, possui erro de reconstrução (retornando do domínio

discreto para o contínuo) igual a zero, ou seja, a reconstrução é perfeita. Entretanto,

para se considerar um sinal digital, é necessário discretizar também a amplitude de

cada amostra. Esta segunda discretização, entretanto, introduz erros que impedem a

2 Este teorema foi enunciado por Claude Shannon, que homenageou Nyquist, dando seu nome a ele pelos desenvolvimentos

realizados anteriormente, dos quais Shannon se valeu. O procedimento de amostragem, mas com caráter mais matemático,

sob o ponto de vista de aproximação de funções contínuas, também foi enunciado, independentemente, por Whittaker e

Kotel’nikov, [12[

Page 20: Osciloscópio USB

17

reconstrução do sinal com erro zero (retornando do domínio digital para o contínuo),

uma vez que somos obrigados a associar uma palavra binária de dimensão finita para

cada amostra. O erro introduzido por este passo é irrecuperável e dá origem a uma das

maiores fontes de ruído em sinais digitais que é conhecido como ruído de quantização.

Modelos demonstram que, em quantização uniforme, que é bastante empregada em

instrumentos de medição, para cada bit extra na palavra binária, a relação sinal/ruído

eleva-se em 6dB [2].

Nas Figuras 1, 2 e 3 [1] pode-se observar graficamente o efeito da

digitalização em um sinal analógico.

Figura 1 - Sinal analógico.

Figura 2 - Sinal discretizado no tempo.

Page 21: Osciloscópio USB

18

Figura 3 - Sinal discretizado no tempo e na amplitude.

Os valores permissíveis (discretos) estão (geralmente) igualmente espaçados

ao longo de toda a faixa dinâmica de conversão, e o número de valores discretos é

dependente do número de bits (largura da palavra) do conversor usado.

2.1 Tipos de conversores AD

Os tipos mais importantes de conversores AD são:

Rampa ou Integração (simples e dupla);

Aproximação Sucessiva;

Paralelo (ou Flash).

Assim, como na maioria dos microcontroladores, o conversor AD utilizado

pelo LM3S811 da Luminary Micro utiliza o método de Aproximação Sucessiva. Este é

o método mais utilizado em microcontroladores por oferecer uma taxa de amostragem

satisfatória para a maioria das aplicações e também por ser de baixo custo e baixo

consumo quando comparado com os ADC flash.

Algumas características do ADC do LM3S811 são os seus quatro canais de

entrada, capacidade de amostragem de até 500.000 amostras por segundo e uma faixa

de 0 a 3 Volts com precisão de 10 bits, sendo que 0 V é convertido para o valor binário

de 0000000000b e 3 V 1111111111b.

2.2 Aproximação Sucessiva

O método da aproximação sucessiva precisa de um número fixo de ciclos de

clock para chegar a um resultado. Como o próprio nome sugere, opera através de

Page 22: Osciloscópio USB

19

comparações que iniciam por um valor pré-determinado e, através de comparações

sucessivas, encontra o dado equivalente ao valor analógico de entrada.

Um diagrama de blocos do funcionamento interno do ADC por Aproximação

Sucessiva pode ser visualizado na Figura 4 [1].

Figura 4 - Diagrama de blocos de um ADC por Aproximação Sucessiva.

Para analisar o funcionamento do conversor A/D por aproximação sucessiva,

tomemos um projeto que consiste em um conversor com intervalo de 0V a 15V e um

degrau de tensão de 1V. Deste modo, obtêm-se 16 níveis e são necessários 4 bits, que

geram a relação da Tabela 1.

Tabela 1 - Codificação Binária da Tensão.

Tensão (V) bit3 bit2 bit1 bit0

0 0 0 0 0

1 0 0 0 1

2 0 0 1 0 3ª

3 0 0 1 1 4ª

4 0 1 0 0 2ª

5 0 1 0 1

6 0 1 1 0

7 0 1 1 1

Page 23: Osciloscópio USB

20

8 1 0 0 0 1ª

9 1 0 0 1

10 1 0 1 0

11 1 0 1 1

12 1 1 0 0

13 1 1 0 1

14 1 1 1 0

15 1 1 1 1

De acordo com a Tabela 1, o valor de tensão central é de 8V, sendo o ponto de

partida para a comparação com o sinal analógico de entrada. Os próximos níveis de

comparação, que são definidos pelo valor de entrada (Vin), têm os bits remanejados de

forma a resultar em um dado de saída correspondente ao valor analógico de entrada.

Se a entrada Vin for menor que a tensão com a qual está sendo comparada

(Vin<Vcomp), então torna-se o bit respectivo igual a 0 e o próximo igual a 1. Se

Vin>Vcomp, mantém-se o bit em questão e coloca-se o próximo bit em 1.

Por exemplo, se tivermos um valor de entrada igual a 3,7 volts, (1ª passo) o

conversor compara com 8 volts (na Tabela 1 é representado pelo valor binário 1000b),

verifica que é menor, torna o bit3=0 e o bit2=1. (2ª passo), ficando desta maneira com

4V (na Tabela 1 é representado pelo valor binário 0100b). Uma nova comparação é

realizada e, como 4V ainda é maior que 3,7V, deve-se tornar o bit2=0 e o bit1 =1 (3ª

passo). Em seguida tem-se 2V (na Tabela 1 é representado pelo valor binário 0010b),

que é menor que 3,7V, e o sistema mantém bit1=1 e coloca bit0=1 (4ª passo). Desta

forma, tem-se 3V (na Tabela 1 é representado pelo valor binário 0011b). Como o

conversor possui um degrau de 1V, o valor de saída correspondente aos 3,7V de

entrada, será 3V. Observe que, neste caso, o sistema ainda considera Vin = 3,7V maior

que 3V. Como anteriormente já foi verificado que este valor é menor do que 4V e

maior do que 2V, logicamente, para o sistema, a tensão de saída só poderá ser 3V.

Page 24: Osciloscópio USB

21

3 UNIVERSAL SERIAL BUS (USB)

A tecnologia USB fornece a facilidade da conexão plug and play além da

enorme taxa de comunicação de dados. A sua compatibilidade também é algo

fundamental, visto que atualmente a IEEE não exige mais que um computador pessoal

tenha portas serial e paralela. Portanto, nos computadores mais modernos é comum

encontrarmos apenas portas USB para conectar periféricos ao computador.

3.1 Versões da USB

A comunicação USB é classificada em quatro tipos:

USB 1.0 – Foi a primeira geração da comunicação USB e é capaz de atingir

taxas de 1.5 Mbps (USB LOW SPEED) e 12 Mbps (FULL SPEED).

USB 1.1 – Versão com correções da USB 1.0.

USB 2.0 – USB HIGH SPEED. Possui capacidade de comunicação de 480

Mbps (60 MBps). É a tecnologia mais aplicada nos periféricos de alta

velocidade, tais como HDs externos, WebCams, Câmeras Digitais e Pen

Drives.

USB 3.0 – USB SUPER-SPEED que ainda está em caráter experimental.

Sua taxa de comunicação chegará a mais de 4.8 Gbps (600MBps) e utilizará

fibra óptica, ultrapassando até as altas taxas atingidas na comunicação

SATA2 e FireWire.

3.2 Classes dos Periféricos USB

Os periféricos USB podem ter uma classe totalmente dedicada pelo

desenvolvedor ou pertencer a uma classe padrão, usando assim um driver genérico

passando a ser reconhecido sem a necessidade de pré-instalação de drivers.

Na Tabela 2 temos a lista de classes de configuração do periférico USB.

Page 25: Osciloscópio USB

22

Tabela 2 - Classes USB.

Classe Uso Descrição Exemplo

00h Periférico Informação da classe utilizada -

01h Interface Áudio Microfone, placas de som

02h Duplo Comunicação e controle CDC Ethernet e modem

03h Interface

Interface Homem - Máquina -

Human Interface Device

(HID)

Teclado e mouse

05h Interface Físico -

06h Interface Imagem -

07h Interface Impressora -

08h Interface Armazenamento de dados -

Mass Storage

Pen Drive USB, Leitor de cartão de

memória, Tocador de MP3

09h Periférico Hub USB

0Ah Interface CDC-Data

Essa classe é utilizada em conjunto

com a 02h - Comunicação e controle

CDC

0Bh Interface Smart Card -

0Dh Interface Segurança -

0Eh Interface Vídeo Webcam

DCh Duplo Periférico de Diagnóstico -

E0h Interface Controlador Sem Fio –

(Wireless) Adaptador Wi-Fi, Bluetooth

EFh Duplo Diversos ActiveSync

FEh Interface Aplicação Específica IrDA

Page 26: Osciloscópio USB

23

FFh Duplo Específico do Vendedor

3.3 Características elétricas da USB

O cabo USB pode chegar a até 5 metros de comprimento sem

comprometimento da comunicação High Speed. Esse limite de comprimento se deve

ao tempo de resposta máximo de 1500ns para que um dado enviado seja considerado

recebido ou perdido. Contudo, com a utilização de Hubs podem-se atingir maiores

distâncias.

O cabo é constituído de quatro fios, sendo dois para sinais de dados e os outros

dois para alimentação. A alimentação é constituída de um fio GND (comum) e outro

de +5Volts, capaz de fornecer inicialmente apenas 100mA, mas com requisição de

mais corrente pode chegar a até 500mA drenados do computador. Isso traz uma

enorme vantagem comparada com as comunicações serial RS232 e paralela, pois agora

o periférico não só é capaz de se comunicar em uma taxa de comunicação mais alta e

ser plug and play, como também pode ser alimentado pelo mesmo cabo que o conecta

ao computador.

A comunicação USB acontece de maneira serial por um par trançado com

impedância de 90 Ohms +/- 15%. Os fios de dados são chamados de D+ e D-. A

sinalização utilizada é Half Duplex diferencial, onde o sinal propagado no fio D+

possui seu sinal complementar (invertido) no fio D-. Ao chegar ao circuito os fios D+

e D- entram, respectivamente, nas entradas não-inversora e inversora de um circuito

subtrator. Como o ruído é igual em ambos os fios do par trançado, ao chegar no

subtrator o seu sinal é cancelado enquanto o módulo das Amplitudes dos sinais D+ e

D- são somados. Deste modo, evitam-se os efeitos do ruído eletromagnético em cabos

longos.

Os níveis de tensão variam de acordo com padrão USB utilizado. Para as

comunicações Low Speed e Full Speed o nível lógico baixo é dado de 0 a 0,3 volts e o

nível lógico alto é dado de 2,8 a 3,6 volts. Já na comunicação High Speed os sinais

variam de ± 400mV, com uma impedância de 45 ohms para o comum ou uma

impedância diferencial de 90 Ohms.

Page 27: Osciloscópio USB

24

A USB utiliza um protocolo especial para negociar o modo High Speed,

chamado de Chirping. Um periférico que utiliza USB HS (High Speed), a princípio

sempre inicia a comunicação em modo FS (Full Speed). Após receber um sinal de

reset é feita uma negociação com o Hub ou outro controlador da USB onde o

periférico saberá se poderá ou não comunicar-se em HS.

Outra característica importante da USB é que ela permite que até 127

periféricos se comuniquem no mesmo barramento USB do hospedeiro. Para conseguir

isto basta utilizar hubs USB para, além de prolongar o cabo, possibilitar novas

conexões.

Mesmo com todos os prós a comunicação USB possui um problema. Devido

às enormes facilidades que oferece ao usuário final ela requer uma maior

complexidade de hardware e software ao desenvolvedor. Mesmo que já tenhamos um

hardware USB pronto, ainda assim é necessário desenvolver um driver (caso o

hardware não utilize uma classe padrão) e um software de maior complexidade quando

comparado com as tradicionais comunicações serial e paralela.

3.4 Conversor USB para Serial (UART)

A fim de aproveitar a conectividade do padrão USB e ainda manter a

facilidade de desenvolvimento dos dispositivos seriais RS232, dispositivos que não

necessitam das taxas de transmissão de dados tão altas como as da USB 1.1 e 2.0,

podem utilizar conversores USB para UART.

Visto que os protocolos são diferentes, é necessário utilizar um circuito

integrado que faz essa conversão. Com isso, podemos utilizar a tradicional UART em

uma extremidade e a USB na outra extremidade, bastando apenas a instalação de um

driver no computador para que assim o computador passe a reconhecer o periférico

como uma ComPort virtual, mantendo desta forma a compatibilidade com diversos

periféricos.

O hardware do kit fornecido pela Luminary Micro utiliza esse tipo de solução

para o desenvolvedor. O CI (circuito integrado) utilizado é o FT2232C que contém

duas UARTs e uma USB 2.0 (Full Speed).

Page 28: Osciloscópio USB

25

4 O PROJETO DESENVOLVIDO

4.1 Hardware

O projeto foi desenvolvido com base em um kit de desenvolvimento da

Luminary Micro, Stellaris LM3S811 Evaluation Board (Figura 5), que contém um

circuito com um microcontrolador ARM LM3S811 da Luminary Micro, um CI de

comunicação Serial × USB, FT2232C, fabricado pela FTDI e capaz de se conectar a

um computador via porta USB, mas manter o protocolo de comunicação serial

(UART) com o Microcontrolador e com os softwares do computador através de drivers

fornecidos pela própria FTDI.

Figura 5 - Stellaris LM3S811 Evaluation Board.

Toda a programação JTAG da placa de desenvolvimento pode ser feita

utilizando a conexão USB existente na placa, servindo tanto para programação quanto

para comunicação. A fonte de alimentação do circuito vem dos 5 V fornecidos pela

porta USB.

O Kit conta ainda com um display de OLED (Organic Led) monocromático de

96 colunas x 16 linhas. O display pode ser programado serialmente via UART ou por

I2C. Contudo, este display não chegou a ser utilizado no projeto do osciloscópio USB.

Alguns esquemáticos do Stellaris LM3S811 Evaluation Board encontram-se

no Apêndice C.

O projeto do Osciloscópio ainda conta com um circuito de tratamento do sinal

de entrada que é composto por um circuito divisor de tensão para reduzir o sinal de

Page 29: Osciloscópio USB

26

entrada de 20 para 1,5 V e de -20 para -1,5 V; e um circuito para introduzir um offset

de 1,5 V no sinal de entrada, para que o valor do sinal de entrada fique na faixa de

leitura do ADC do LM3S811, que vai de 0 a 3 volts. Em série com esses 2 circuitos foi

adicionado um filtro RC passa baixas, para atenuar as freqüências acima da capacidade

do Osciloscópio.

Há ainda um circuito que utiliza para gerar uma onda quadrada periódica

independente do microcontrolador, a fim de servir como pino de teste para o

Osciloscópio. Desta forma, a geração da onda de teste é independente do circuito do

microcontrolador, de modo a permitir averiguar se o microcontrolador está

funcionando corretamente.

Na Figura 6 é apresentado um diagrama de blocos do hardware do projeto

seguido de uma foto sua implementação na Figura 7.

Figura 6 -Diagrama de blocos do hardware do Osciloscópio Virtual via USB.

Page 30: Osciloscópio USB

27

Figura 7 - Osciloscópio Virtual via USB conectado ao computador.

4.2 Microcontrolador

O microcontrolador LM3S811 possui núcleo ARM Cortex M3 que utiliza a

tecnologia Thumb 2. A linha Cortex M3 é baseada no núcleo ARMv7-M e foi

desenvolvida para ter alto desempenho e baixo custo. Parte disso é devido à tecnologia

Thumb 2 que, em troca de uma pequena perda de desempenho, reduz o consumo de

energia e também o uso de memória, diminuindo o custo do CI. Outra característica da

tecnologia Thumb é a de permitir que o núcleo ARM de 32 bits trabalhe com

memórias de 16 e de 8 bits.

A seguir listam algumas características do microcontrolador utilizado. Para

mais informações ver o data sheet do LM3S811 [13].

Memória Flash de 64 Kbytes;

Memória SRam de 8 Kbytes;

Freqüência máxima de operação de 50 MHz;

Possui 3 Timers de 32 bits;

Possui 2 UART por hardware;

Possui 1 I2C por hardware;

Possui 1 SPI por hardware;

Page 31: Osciloscópio USB

28

Quatro canais de entrada no ADC de 10 bits;

Taxa de amostragem do ADC pode chegar a 500.000 amostras por

segundo;

Possui 1 sensor e temperatura;

Possui 1 comparador analógico;

Pode ter de 1 a 32 pinos destinados a GPIO;

Seu encapsulamento é de 48 pinos LQFP;

Interface JTAG.

Características Elétricas básicas:

Alimentação nominal de 3,3 V, podendo chegar ao mínimo de 3,0 V e

máximo de 3,6 V;

Consumo para características nominais executando “while (1);” 70

mA.

4.3 Circuito de Tratamento do Sinal de Entrada

A entrada analógica do Osciloscópio USB está definida para analisar uma

faixa de +20 V a -20 V. Contudo, o conversor AD do LM3S811 possui uma faixa de

leitura de tensão de 0 a 3 V apenas. Portanto, é necessário um circuito para reduzir os

+ 20 V para 1,5 V, -20 V para -1,5 V, e um circuito para deslocar o nível de tensão de

-1,5 a +1,5 para 0 a 3 V.

Em série a esses circuitos há também um filtro RC passa baixas com a

finalidade de filtrar sinais de alta freqüência, devido ao fato de a largura de banda

analisada ser de apenas 10 kHz.

4.3.1 Circuito Divisor de Tensão

O Circuito divisor de tensão é composto por apenas 2 resistores para gerar

uma queda de tensão de no máximo 1,5 Volts para uma tensão de entrada de 20 Volts

conforme se vê na Figura 8.

Page 32: Osciloscópio USB

29

Figura 8 - Circuito Divisor de tensão.

4.3.2 Dimensionamento do Filtro

Um filtro elétrico é um circuito seletivo de freqüência que permite a passagem

de ondas elétricas que tenham freqüência dentro de uma determinada faixa, e que

atenua ondas elétricas que possuam outras freqüências.

“A resposta em freqüência de um filtro é caracterizada por uma faixa de

passagem e uma faixa de rejeição havendo normalmente uma região de transição entre

elas. As freqüências dentro da faixa de passagem são transmitidas com baixa

atenuação e distorção reduzida, enquanto que as freqüências compreendidas na faixa

de rejeição sofrem atenuação elevada” (CARVALHO, Rogério Muniz. Princípios de

Comunicações, Vitória, 2003, p.77)

Os filtros podem ser:

Filtro passa baixas: quando atenua apenas as freqüências acima da

freqüência de corte.

Filtro passa altas: quando atenuas apenas as freqüências abaixo da

freqüência de corte.

Filtro passa faixa: Quando permite passagem de um sinal apenas em

uma certa faixa de freqüência, atenuando os sinais com freqüência

menor que a freqüência de corte inferior e os sinais com freqüência

acima da freqüência de corte superior.

Filtro rejeita faixa: É o filtro que atenua apenas os sinais com

freqüência dentro de uma certa faixa de valores.

Page 33: Osciloscópio USB

30

4.3.2.1 Filtro Passa Baixas RC

O filtro RC é um filtro de 1ª Ordem que atenua 6dB por década após a

freqüência de corte. O cálculo de sua freqüência de corte é dado por:

. (1)

Na Figura 9 tem-se um circuito de um Filtro RC.

Figura 9 - Filtro RC.

Nas baixas freqüências existe muito tempo para que o capacitor se

carregue fazendo com que ele se comporte como um circuito aberto.

Logo Vout valerá o mesmo que Vin.

Nas altas frequências, o capacitor não tem tempo de se carregar

totalmente. Por isso, o circuito em questão funciona como um divisor

de tensão, e quando a freqüência se torna muito mais alta do que a

freqüência de corte, ele passa a se comportar como um curto, fazendo

com que Vout valha zero.

Embora testes demonstraram que o osciloscópio desenvolvido, por limitações

da taxa de amostragem do ADC, não tratou sinais com largura de banda maior que 10

KHz, a freqüência de corte do filtro utilizado não foi de 10 kHz, isso devido ao fato de

Page 34: Osciloscópio USB

31

que no ponto da freqüência de corte o filtro apresenta uma queda de 3dB de

magnitude. Portanto, a fim de manter o sinal de 10 kHz com perdas mínimas, foi

utilizada uma freqüência de corte mais alta. No caso, a freqüência de 80 kHz atendeu

os requisitos desejados. Na figura 10 são apresentados os valores do filtro RC

calculado para o projeto.

Figura 10 - Filtro RC utilizado.

Cálculo da freqüência de corte utilizando a Equação 1:

Para Fc = 80 KHz, e C = 1 nF, temos R = 2 K Ohms.

Embora todos os cálculos e Figuras apresentadas sugerem que a resistência

utilizada no filtro RC é de 2 K ohms, no momento da construção do circuito foi

utilizado o valor comercial de 2,2 K ohms. Isto faz com que a freqüência de corte do

circuito seja aproximadamente 73 kHz.

4.3.3 Circuito de Offset de Tensão

A soma de um offset de 1,5 Volts é feita colocando-se uma fonte CC de 1,5

Volts em série com o sinal de analógico de entrada. O sinal de entrada passa a ter um

Page 35: Osciloscópio USB

32

terra virtual que na verdade está 1,5 V acima do terra do circuito geral do

Osciloscópio.

Figura 11 - Circuito semi-completo de tratamento do sinal de entrada.

Na Figura 11 a fonte V1 adiciona um offset de +1,5 V ao sinal analógico V2,

como pode ser visto em toda análise CC do circuito.

Como é necessária uma fonte de 1,5 V para gerar o offset no sinal analógico de

entrada e temos à disposição apenas um pino de 3,3 V para uso geral, utilizou-se um

divisor de tensão neste pino de 3,3 V para termos nossa fonte de 1,5 V. Optou-se por

um simples divisor resistivo uma vez que é necessário apenas deslocar a onda de

entrada, posto que a impedância de entrada do circuito de conversão do µC é bastante

elevada. Sendo assim, o circuito de tratamento do sinal de entrada fica como o da

Figura 12, onde a impedância R4 simboliza a carga, no caso, o conversor analógico

digital.

Page 36: Osciloscópio USB

33

Figura 12 - Circuito completo de tratamento do sinal de entrada.

O resultado obtido com esse circuito, em uma análise no tempo, com V2

sendo uma senoidal de 20 V e 20 kHz é apresentado na Figura 13.

Figura 13 - Análise no tempo do circuito.

Fazendo uma análise na freqüência, obtemos o resultado esperado, que é o

inicio da atenuação do sinal por volta de 10 kHz. A escala em Y do gráfico da Figura

14 é o ganho em dB, e em X temos a freqüência por década.

Page 37: Osciloscópio USB

34

Figura 14 - Análise na freqüência do circuito.

A fim de reduzir ruídos e também de manter um conector padrão de

osciloscópio (Conector de Painel - BNC), foi incluído no PCB final da placa de

tratamento do sinal o Conector de Painel, conforme se vê na Figura 15.

Figura 15 - Circuito de tratamento do sinal na placa.

Page 38: Osciloscópio USB

35

4.3.4 Oscilador Independente – Ponta de prova

Assim como outros osciloscópios o Osciloscópio USB projetado também

possui uma ponta de prova para verificar se o mesmo está operando corretamente, e

para verificar a integridade do cabo coaxial utilizado.

Para garantir sua função de teste, este circuito é quase totalmente independente

do resto do Osciloscópio, utilizando apenas a alimentação de 5 V (4,6 Volts

aproximadamente) fornecida pela porta USB. O circuito foi projetado utilizando um CI

555 para gerar uma onda de aproximadamente 1 kHz a partir do equacionamento de

circuitos astáveis encontrado em [10].

Figura 16 - Circuito do oscilador independente.

Na Figura 16 temos o esquema do circuito oscilador de 1 kHz, e na Figura 17

o protótipo em placa.

Figura 17 - Circuito do oscilador independente na placa.

Page 39: Osciloscópio USB

36

4.4 Firmware

O firmware de controle do LM3S811 foi desenvolvido utilizando as

bibliotecas fornecidas pela Luminary Micro para a Stellaris LM3S811 Evaluation

Board. Esta biblioteca, DriverLib.lib, permite a manipulação de todos os periféricos:

UART, SPI, Timers, ADC, etc.

Outra facilidade fornecida pela Luminary Micro foi uma enorme quantidade

de exemplos de códigos para facilitar a compreensão das bibliotecas e encurtar o

tempo de desenvolvimento do projeto.

Todo o código do firmware foi desenvolvido em Linguagem C, a mesma

linguagem em que foi desenvolvida a biblioteca do kit da Luminary Micro. O

ambiente de desenvolvimento utilizado foi o µVision, e o compilador foi o RealView

C/C++ Compiler, ambos de propriedade da Keil TM.

O código fonte do firmware encontra-se no apêndice A.

4.4.1 Explicação da lógica e Fluxograma

O programa do firmware do Osciloscópio USB divide-se em duas partes

principais, uma é o main, cujo fluxograma encontra-se na Figura 18, e a outra é o

código de interrupção do conversor AD, cujo fluxograma encontra-se na Figura 19.

No main são definidas as configurações de trabalho do microcontrolador e de

seus periféricos, são inicializadas as variáveis globais e o programa entra em loop

infinito esperando que o buffer de leitura do conversor AD seja preenchido para depois

enviá-lo via interface serial da UART0 para o CI FT2232C, onde o dado é enviado ao

PC. Vale lembrar que ao final de cada envio de dados o buffer de entrada da UART0 é

verificado para saber se houve ou não mudança na escala de leitura do sinal.

Na interrupção do ADC é feita a leitura do sinal do conversor cada vez que

essa função é acionada pela interrupção gerada pelo Timer1. Durante essa rotina, é

verificado se o buffer com os dados recolhidos anteriormente está sendo transmitido

(variável ‘selec’); caso não esteja sendo transmitido nenhum dado, o dado lido do

ADC é deslocado, aproveitando-se apenas os 8 bits mais significativos dos 10 bits, e

Page 40: Osciloscópio USB

37

esse byte é armazenado no buffer (de acordo com a escala utilizada), que tem o seu

ponteiro incrementado.

O fato de ser utilizado apenas 8 bits dos 10 bits convertidos deve-se ao fato de

que a utilização de apenas 8 bits por amostra facilita e agiliza a transmissão via porta

serial, deste modo caso fosse feita uma função de captura e transmissão direta de

dados ao PC, sem pré-armazenamento em um buffer, a utilização de apenas 8 bits por

amostra diminuiria o gargalo criado pela transmissão da porta serial. Contudo essa

rotina ficou para uma próxima versão e o conversor A/D acabou subutilizado.

Quando o buffer está cheio, ou seja, 800 pontos lidos, a rotina main se

encarrega de transmiti-lo.

Figura 18 - Fluxograma do programa principal.

Page 41: Osciloscópio USB

38

Figura 19 - Fluxograma da interrupção do conversor AD.

Um conceito importante que deve ser compreendido é como funciona a escala

de leitura do sinal. O interesse de se implementar este artifício foi o de manter um

número pequeno de pontos armazenados no buffer seja qual fosse a freqüência do sinal

que se deseja visualizar. Para melhor compreensão, é feita uma análise do problema

real; como vemos a seguir.

O conversor AD do LM3S811 no projeto está trabalhando a cerca de 130.000

amostras por segundo. Caso seja analisada uma onda de 10 kHz, significa que serão

feitas aproximadamente 13 amostras por período de onda. Para um microcontrolador

ARM trabalhando a 50 MHz, uma taxa de transferência da UART de 460.800 bps e

um Microcomputador de 1GHz, armazenar, transmitir, efetuar cálculos e desenhar 13

pontos na tela não será um grande problema.

Page 42: Osciloscópio USB

39

Contudo, caso o sinal em questão seja de baixa freqüência, como 10 Hz, é

necessário armazenar, transmitir, efetuar cálculos e desenhar 13000 pontos para ver

um período completo do sinal. O que não é tão simples. Isso exigiria hardwares mais

potentes e softwares otimizados.

Este problema é resolvido com o sistema de escalas. Se o usuário do software

seleciona uma opção de grandeza do sinal de ‘alta freqüência’, o firmware passa a

armazenar todos os pontos lidos e transmiti-los ao PC, onde serão desenhados.

Caso o usuário selecione opções de mais baixa freqüência o firmware passa a

armazenar no buffer de transmissão apenas 1 ponto a cada 10 (ou mais) pontos lidos,

fazendo um processo de descarte de amostras conhecido como sub-amostragem.

A escala é mantida proporcional para que a quantidade de pontos transmitidos

seja sempre a de 800 pontos, e a quantidade de pontos desenhados tela seja no máximo

400.

O fato de o número de pontos desenhados no gráfico ser no máximo a metade

do número de pontos armazenados e enviados pelo microcontrolador está relacionado

com a função de trigger via software. Maiores detalhamentos podem ser encontrados

no Apêndice B.

Uma dificuldade encontrada no firmware foi a manipulação do conversor A/D,

pois o data sheet do LM3S811 o descreve como capaz de realizar 500 mil amostras por

segundo. Entretanto, na prática não foi possível fazê-lo trabalhar a mais que 130 mil

amostras por segundo, devido a problemas de travamento da execução do código

quando submetido a taxas mais altas e devido à dificuldades de se manipular o

periférico do conversor A/D.

4.4.2 Continuidade da Análise

Para evitar o gargalo criado pela comunicação Serial × USB, que no firmware

é de 460.800 bps (taxa máxima aceita pela UART do microcontrolador LM3S811)

todo o firmware foi projetado para:

o Primeiro Amostrar e guardar os dados amostrados.

Page 43: Osciloscópio USB

40

o Segundo Quando o buffer estiver cheio, parar o armazenamento dos

dados e enviar os dados pela porta serial.

Deste modo, o limite de amostragem não mais será ditado pela transmissão

serial, no entanto, para altas freqüências podem haver perdas de algum evento, visto

que enquanto os dados armazenados são enviados, nenhum dado do ADC será

coletado.

4.5 Software

Todo software foi desenvolvido em linguagem C++, na plataforma Borland

C++. Para fazer a parte gráfica (SCOPE) foi utilizada uma biblioteca gratuita fornecida

em [8]. A comunicação serial foi desenvolvida com o material encontrado em [11]. O

código fonte completo e comentado do software do Osciloscópio USB está no

Apêndice B.

A interface final do Software ficou como mostrado na Figura 20.

Figura 20 - Interface gráfica do Software.

Page 44: Osciloscópio USB

41

4.5.1 Características do Gráfico

Visto que a biblioteca gráfica utilizada é gratuita, mas não é código aberto (o

código é aberto apenas para quem comprar), certas características não foram possíveis

mudar, tais como o título sobre o gráfico, ‘Scope’, a inscrição no eixo X, ‘Samples’ ao

invés de Amostras, e a inscrição no eixo Y, ‘Y Axis’, quando o ideal nesse caso seria

Tensão.

No entanto, essa biblioteca fornece inúmeras vantagens como a facilidade de

programação, auto-zoom, impressão, salvar imagem do gráfico (ícone destacado na

Figura 21), além de permitir o desenho de mais de um canal no mesmo gráfico. Porém,

esta última ferramenta não foi utilizada visto que o projeto foi de um osciloscópio de

apenas um canal.

Figura 21 - Manipulação da biblioteca gráfica.

4.5.2 Configurações do Osciloscópio

Todas as configurações necessárias para se fazer uma análise correta no

Osciloscópio USB estão disponíveis no menu localizado na lateral direita (Figura 22).

Saber manipular o menu é imprescindível ao usuário.

Page 45: Osciloscópio USB

42

Figura 22 - Manipulação do Software do Osciloscópio Virtual via USB.

1 – Como a comunicação é Serial × USB, ao conectar a placa ao PC será

criada uma ComPort Virtual para a troca de dados com a placa. Portanto, para utilizar

o osciloscópio, deve-se inicialmente selecionar em qual ComPort está conectada a

placa.

2 – O modo de captura ininterrupta desenha o conteúdo lido do ADC na tela

sem passar por nenhum algoritmo para ‘gatilhar’ a onda em momentos iguais.

Portanto, disponibiliza-se um sinal atualizado na tela, porém sem nenhuma seqüência.

3 – A captura com Auto Trigger mantém a tela sempre com um sinal

atualizado, mas esse sinal passa por um algoritmo que sempre tenta iniciar o desenho

da onda a partir do primeiro ponto onde o sinal cruza o seu valor médio com derivada

positiva.

Page 46: Osciloscópio USB

43

4 – O Trigger Manual se assemelha ao Auto Trigger com a única diferença de

que ao invés de iniciar o desenho pelo valor médio, inicia-se pelo valor contido na

caixa de texto logo abaixo.

5 – A Captura Única é ideal quando se deseja uma foto estática da forma de

onda, como, por exemplo, quando se deseja calcular seu período ou amplitude. Para

atualizar o gráfico, quando esta opção estiver selecionada, basta clicar em “Capturar”.

6 – O Ajuste de Offset serve para se fazer correções no sinal de entrada. Esta

função soma o valor contido na caixa de texto, logo abaixo dela, ao valor do sinal lido

pelo ADC. Com isso, pode-se deslocar toda onda no eixo da Tensão.

7 – A Grandeza do Sinal Medido é um campo apenas para ajuste de escala e

melhor visualização do gráfico.

8 – A Escala nos mostra aproximadamente quantos micro-segundos possui

cada amostra do sinal.

9 – Na caixa de texto ‘Amostras’ deve ser inserido o número de amostras

feitas para se completar um período do sinal.

10 – Quando o item 9 for realizado basta pressionar o botão Converter que

serão fornecidos a freqüência e o comprimento de onda do sinal baseados na Escala e

no número de amostras.

Page 47: Osciloscópio USB

44

5 RESULTADO

Os testes do Osciloscópio USB foram realizados no Laboratório de Eletrônica

Digital da Universidade Federal do Espírito Santo. Para a realização dos testes foi

utilizado um Osciloscópio Analógico, de 20 MHz, um Gerador de Sinal de até 2 MHz,

um Laptop (onde foi executado o Software do Osciloscópio USB), e o circuito do

projeto em questão.

Nos testes realizados foram comparados os resultados obtidos com o

Osciloscópio USB e com o Osciloscópio Analógico para diversas formas de ondas

periódicas.

Os valores comparados foram:

Amplitude do sinal mensurado;

Freqüência do sinal mensurado;

Qualidade do sinal mensurado.

5.1 Ondas Senoidais

5.1.1 Onda Senoidal a 10 Hz

Gerador de Sinal: Senóide de 10 Hz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 5,7 Volts.

Vmin = - 8,6 Volts.

Freqüência: 10,3 Hz aproximadamente.

Qualidade: Muito ruído.

Na Figura 23 tem-se a imagem do programa em execução neste teste.

Page 48: Osciloscópio USB

45

Figura 23 - Senoidal de 10 Hz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 24):

Amplitude:

Vmax = + 5,4 Volts.

Vmin = - 8,4 Volts.

Freqüência: 10 Hz aproximadamente.

Qualidade: Ruim, o sinal é preciso, contudo não pode ser visualizado

completamente na tela por ser de baixa freqüência. Isso ocorre devido ao

método de reconstrução do sinal utilizado nos osciloscópios analógicos, onde

são necessários vários períodos de onda para a amostrar um período na tela.

Figura 24 - Senoidal de 10 Hz, osciloscópio analógico.

Page 49: Osciloscópio USB

46

5.1.2 Ondas Senoidais 220 Hz

Gerador de Sinal: Senoide de 220Hz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 5,7 Volts.

Vmin = - 8,6 Volts.

Freqüência: 218 Hz aproximadamente.

Qualidade: Com ruído.

Na Figura 25 tem-se a imagem do programa em execução neste teste.

Figura 25 - Senoidal de 220Hz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 26):

Amplitude:

Vmax = + 5,4 Volts.

Vmin = - 8,4 Volts.

Freqüência: 227 Hz aproximadamente.

Qualidade: Boa.

Page 50: Osciloscópio USB

47

Figura 26 - Senoidal de 220 Hz, osciloscópio analógico.

5.1.3 Onda Senoidal a 10 kHz

Gerador de Sinal: Senoide de 10 kHz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 5,3 Volts.

Vmin = - 8,3 Volts.

Freqüência: 10,3 kHz aproximadamente.

Qualidade: Baixa definição (poucas amostras por período).

Na Figura 27 tem-se a imagem do programa em execução neste teste.

Figura 27 - Senoidal de 10 kHz, osciloscópio USB.

Page 51: Osciloscópio USB

48

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 28):

Amplitude:

Vmax = + 5,4 Volts.

Vmin = - 8,4 Volts.

Freqüência: 10 KHz aproximadamente.

Qualidade: Boa.

Figura 28 - Senoidal de 10 KHz, osciloscópio analógico.

5.2 Ondas Quadradas

5.2.1 Ondas Quadradas 51 Hz

Gerador de Sinal: Quadrada de 51 Hz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 6,1 Volts.

Vmin = - 9,1 Volts.

Freqüência: 51 Hz aproximadamente.

Qualidade: Boa. O ruído está bem visível, contudo, devido à freqüência e

amplitude do sinal amostrado, o ruído não está interferindo negativamente na

análise do sinal.

Na Figura 29 tem-se a imagem do programa em execução neste teste.

Page 52: Osciloscópio USB

49

Figura 29 - Quadrada de 51 Hz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 30):

Amplitude:

Vmax = + 6,0 Volts.

Vmin = - 8,5 Volts.

Freqüência: 52 Hz aproximadamente.

Qualidade: Boa. Bontudo, por ser um sinal de baixa freqüência, a imagem do

sinal fica piscando na tela.

Figura 30 - Quadrada de 51 Hz, osciloscópio analógico.

Page 53: Osciloscópio USB

50

5.2.2 Ondas Quadradas 6 kHz

Gerador de Sinal: Quadrada de 6 kHz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 6,1 Volts.

Vmin = - 9,2 Volts.

Freqüência: 6,1 kHz aproximadamente.

Qualidade: Boa.

Na Figura 31 tem-se a imagem do programa em execução neste teste.

Figura 31 - Quadrada de 6 kHz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 32):

Amplitude:

Vmax = + 6,0 Volts.

Vmin = - 8,5 Volts.

Freqüência: 5,9 kHz aproximadamente.

Qualidade:Boa.

Page 54: Osciloscópio USB

51

Figura 32 - Quadrada de 6 KHz, osciloscópio analógico.

5.2.3 Ondas Quadradas 10 kHz

Gerador de Sinal: Quadrada de 10 kHz

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 6,1 Volts.

Vmin = - 9,1 Volts.

Freqüência: 10 kHz aproximadamente.

Qualidade: Ruim. Devido à baixa taxa de amostragem no circuito, a onda

quadrada passa a perder a sua forma.

Na Figura 33 tem-se a imagem do programa em execução neste teste.

Figura 33 - Quadrada de 10 kHz, osciloscópio USB.

Page 55: Osciloscópio USB

52

Resultados obtidos com o osciloscópio analógico (teste exibido na Figura 34):

Amplitude:

Vmax = + 6,0 Volts.

Vmin = - 8,5 Volts.

Freqüência: 10 kHz aproximadamente.

Qualidade:Boa.

Figura 34 - Quadrada de 10 kHz, osciloscópio analógico.

5.3 Ondas Triangulares

Não serão apresentados os resultados em freqüências de 10 kHz para as ondas

triangulares, visto que durante os testes esse tipo de sinal apresentou uma distorção

grande no Osciloscópio USB, inviabilizando comparações. A amostra do sinal a 10

kHz ficou semelhante a uma senóide.

5.3.1 Ondas Triangulares 52 Hz

Gerador de Sinal: Triangular de 52 Hz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 5,3 Volts.

Vmin = - 8,7 Volts.

Freqüência: 52 Hz, aproximadamente.

Qualidade: Boa. O ruído está bem visível, contudo, devido à freqüência e

amplitude do sinal amostrado, o ruído não está interferindo negativamente na

análise do sinal.

Page 56: Osciloscópio USB

53

Na Figura 35 tem-se a imagem do programa em execução neste teste.

Figura 35 - Triangular de 52 Hz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (Figura 36):

Amplitude:

Vmax = + 5,0 Volts.

Vmin = - 8,5 Volts.

Freqüência: 53 Hz aproximadamente.

Qualidade: Boa. Contudo, por ser um sinal de baixa freqüência, a imagem do

sinal fica piscando na tela.

Figura 36 - Triangular de 52 Hz, osciloscópio analógico.

Page 57: Osciloscópio USB

54

5.3.2 Ondas Triangulares 5,06 kHz

Gerador de Sinal: Triangular de 5,06 kHz.

Resultado obtido pelo Osciloscópio USB:

Amplitude:

Vmax = + 5,3 Volts.

Vmin = - 7,7 Volts.

Freqüência: 5,29 kHz aproximadamente.

Qualidade: Razoável. A baixa taxa de amostragem do ADC já começa a

deformar o sinal.

Na Figura 37 tem-se a imagem do programa em execução neste teste.

Figura 37 - Triangular de 5,06 kHz, osciloscópio USB.

Resultados obtidos com o osciloscópio analógico (Figura 38):

Amplitude:

Vmax = + 5,0 Volts.

Vmin = - 8,0 Volts.

Freqüência: 5,00 kHz, aproximadamente.

Qualidade: Boa. Contudo, por ser um sinal de baixa freqüência, a imagem do

sinal fica piscando na tela.

Page 58: Osciloscópio USB

55

Figura 38 - Triangular de 5,06 kHz, osciloscópio analógico.

5.4 Análise das Amplitudes Máxima e Mínima

Na análise de amplitude máxima o gerador de sinal não conseguiu gerar

nenhuma tensão capaz de saturar o Osciloscópio Virtual via USB (ver Figura 39), visto

que esse foi projetado para analisar de -20 a +20 V (o que foi comprovado em uma

análise CC).

Figura 39 - Análise de amplitude Máxima.

Durante a análise de baixa amplitude do sinal de entrada observa-se uma

relação sinal/ruído baixa, interferindo bastante na leitura do sinal. O sinal observado na

Figura 40 possui amplitude próxima a 150 mV que é o limite de funcionamento do

Osciloscópio USB, visto que embora o ADC trabalhe com uma amostragem com

Page 59: Osciloscópio USB

56

precisão de 10 bits, apenas os 8 mais significativos são utilizados. Portanto, visto que o

Osciloscópio USB pode ler uma faixa de -20 a +20 Volts e que não possui ajuste de

escala por hardware, a precisão do sinal lido é por volta de 155 mV.

Figura 40 - Análise de amplitude mínima.

5.5 Análise com freqüência acima da Projetada

Estes testes foram realizados apenas com o intuito de verificar o

comportamento do Osciloscópio em freqüências muito acima das quais foi projetado

(10 kHz). Nas Figuras 41, 42 e 43 é apresentado o Osciloscópio Virtual via USB

analisando uma onda Senoidal de 30 kHz, uma onda Quadrada de 30 kHz e uma onda

Triangular e 30 kHz, respectivamente.

Page 60: Osciloscópio USB

57

Figura 41 - Senoidal de 30 kHz no Osciloscópio USB.

Figura 42 - Quadrada de 30 kHz no Osciloscópio USB.

Page 61: Osciloscópio USB

58

Figura 43 - Triangular de 30 kHz no Osciloscópio USB.

A amostragem digital de aproximadamente 110 K amostras por segundo

permite ao Osciloscópio uma definição de menos que 4 pontos por período de onda

para um sinal de 30 KHz, o que é muito pouco para se desenhar um sinal com

qualidade3. Portanto, o gráfico fica totalmente distorcido e conforme se observa nas

Figuras 41, 42 e 43, é impossível distinguir o formato do sinal analógico com tão

poucas amostras.

3 Mas observe que, pelo teorema de Nyquist, esta taxa garante uma reconstrução do sinal analógico sem o

fenômeno de aliasing – sobreposição de cópias do sinal. Este é um dos motivos que um osciloscópio digital de

largura de banda de 60MHz exija 500M amostras por segundo de amostragem. Por exemplo, em sistemas de

energia elétrica assume-se, para efeitos de digitalização e manipulação matemática, um mínimo de 6 amostras

por cada período da onda senoidal.

Page 62: Osciloscópio USB

59

5.6 Análise dos Resultados

Nos testes de freqüência foi verificado que a freqüência máxima de análise do

Osciloscópio é por volta de 10 KHz. Isso se deve ao fato do número de amostras por

segundo do conversor analógico digital do LM3S811 ter chegado a no máximo cerca

de 110.000, o que é um valor muito abaixo das 500.000 amostras por segundo que é

dada no data sheet do microcontrolador como o limite deste ADC. Este valor foi um

compromisso entre taxa de amostragem respeitando Nyquist e a garantia de uma

quantidade mínima de amostras representadando o sinal digitalizado na tela do

computador.

Quando se testou freqüências acima de 10 KHz, o número de pontos por

período de onda desenhado na tela passou a ser muito baixo, menos de 10 por período,

caindo assim a qualidade do sinal digitalizado. Conforme se vê no sub-capitulo 5.5, a

queda da qualidade foi tal que não se diferencia mais as formas de ondas senoidais,

quadrada e triangular para sinais de freqüências próximas a 30 Khz.

Vale lembrar que estamos no domínio digital e embora o teorema de Nyquist

mostre que basta amostrar no dobro da taxa da maior freqüência do sinal para

convertê-lo posteriormente ao domínio analógico, fiel ao sinal de entrada (desde que

se empregue um filtro de reconstrução cuja resposta impulsiva seja dada pela função

sinc, irrealizável na prática por ser não causal, daí somente no plano teórico se

consegue reconstrução perfeita do sinal analógico), a representação digital fica

comprometida com poucas amostras por período E, como não há nenhum pós-

processamento no sinal amostrado, onde utilizou-se uma linha reta para interligar os

pontos, o que vemos no gráfico é apenas uma seqüência de pontos amostrados.

Ainda com relação ao aumento da distorção do sinal no gráfico do Osciloscópio

Virtual, com o aumento da freqüência, nota-se que à medida em que se aumenta a

freqüência do sinal amostrado o formato de onda que menos se distorce é a senoidal.

Isso é facilmente explicável pela série trigonométrica de Fourier:

“Uma função pediórica da variável angular θ, x(θ), com período de

repetição de 2π radianos, pode ser desenvolvida em uma série de termos em seno e

cosseno de múltiplos inteiros de θ, chamada de Série Trigonométrica de Fourier, desde

Page 63: Osciloscópio USB

60

que satisfaça às Condições de Dirichlet”. (CARVALHO, Rogério Muniz. Princípios

de Comunicações, Vitória, 2003, p.27)

As Equações 2 e 3 mostram respectivamente a Série Trigonométrica de

Fourier para uma onda triangular de amplitude A e uma onda quadrada de amplitude

A.

( )( )[ ]tfksen

kAtx

k

k

01

2

1

12212²)1(8)( −⋅−−⋅

= ∑+∞

=

ππ

, [2]

( ) ( ) ( )[ ]tfksenk

Atxk

01

12212

4−

−= ∑

+∞

=

ππ . [3]

Ou seja, sinais sinusoidais são os únicos que são representados por uma raia

espectral exatamente no valor da freqüência do sinal e valor zero para qualquer outra

freqüência. Qualquer deformação no formato de um sinal sinusoidal (inclua-se neste

caso as ondas triangular e retangular) gera componentes espectrais (harmônicos) com

valor diferente de zero para múltiplos da freqüência fundamental, o que exige uma

maior taxa de amostragem. Observe que, teoricamente, não conseguiríamos amostrar

(e talvez gerar!) uma triangular e uma retangular uma vez que estas são ilimitadas em

banda (infinitos harmônicos). Mas, aplicando-se o bom senso, com alguns harmônicos

acima da fundamental temos um sinal triangular e retangular muito próximo do

aceitável. Daí a importância do filtro de entrada, conhecido como pré-filtro, para

limitar a banda, filtro este previsto no Teorema de Nyquist. Toda a teoria de Shannon

foi feita para sinais limitados em banda, o que exige o pré-filtro.

Quanto aos níveis de tensão verifica-se no sub-capitulo 5.4 que as tensões mais

altas são menos sensíveis a ruídos, enquanto baixas tensões de entrada, 1 Volt por

exemplo, o circuito esta sujeito a muitas interferências. Isso ocorre principalmente

devido a grande faixa de tensão (+/- 20 V) que o osciloscópio é capaz de analisar.

Fazendo com que sinais de entrada com pequenos valores de tensão sejam reduzidos a

valores muito pequenos no circuito divisor de tensão. Isso faz com que o sinal

Page 64: Osciloscópio USB

61

analisado chegue ao pino de entrada do ADC com um nível de tensão muito próximo

aos níveis de tensão dos ruídos do circuito (relação sinal/ruído baixa). Fazendo com

que a análise seja de má qualidade. Ou seja, é necessário uma adapatação da faixa

dinâmica do sinal à faixa de conversão do conversor.

Outro fator que deve ser notado é de que apesar de o conversor ser de 10 bits,

apenas os 8 bits mais significativos são considerados. Portando a precisão do

Osciloscópio é de apenas 40/256, 156 mili-volts aproximadamente. Muitos

osciloscópios digitais profissionais, de baixo custo, trabalham com 8 bits por amostra

(este é o caso dos osciloscópios digitais do DEL).

Portanto, por se tratar de um projeto de baixo custo, ver Tabela 3, quando

comparado aos osciloscópios digitais e analógicos que existem no mercado, o

Osciloscópio Virtual via USB desenvolvido mostra-se como uma opção simples e

indicada para circuitos de baixa freqüência e níveis de tensão maiores que 1 Volt, visto

que é suscetível a ruídos.

Quanto ao cálculo da freqüência do sinal (micro-segundos por amostragem),

como a taxa de amostragem do sinal não é alta, quando se analisa sinais de ordem de

grandeza próximos a 10.000 Hz a precisão da medida da freqüência passa a ser

pequena, acumulando erros que tendem a aumentar com o aumento da freqüência do

sinal amostrado. No caso de uma onda de 10 KHz, como visto no sub-capitulo 5.1.3, o

erro dessa medida foi de +307 Hz.

Na Tabela 3 é apresentada uma planilha de custo aproximado do equipamento

projetado. O custo final do Osciloscópio Virtual via USB é por volta de R$ 47,00 o

que está muito abaixo do valor de mercado de Osciloscópios Analógicos (

Aproximadamente R$ 1.200,00) e Osciloscópios Digitais mais simples (por volta de

R$ 3.500,00) é mais barato também do que a versão mais simples do BitScope (US$

425,00).

Tabela 3 - Custo Aproximado do Hardware do Osciloscópio Virtual via USB.

Descrição Componente Custo unitário em lotes de 100

[4]

Page 65: Osciloscópio USB

62

Microcontrolador LM3S811 $4,20 CI USB x Serial FTDI2232L $6,92 Cristal 6 MHz HC49 $0,44

Regulador 3,3V LP3981 $0,60 Conector USB Tipo B $0,93 Cabo USB 3M A male to B male $1,87

Timer lm555 $0,66 2 Capacitores C Ceramicos SMD 50V $0,14 10 Resistores R 100mW SMD $0,70

Conector de Painel Femea $3,00 PCB 2 camadas 80mmx80mm $6,00

Custo Total $25,46

Custo Total em Reais R$ 45,83 Custo Total + Importação

100 reais / 100 peças = R$1,00 R$ 46,83

Com um aumento não muito alto no custo total do projeto, é possível fazer

inúmeras melhorias no projeto, fazendo com que seja concorrente a algumas versão do

BitScope mas mantendo-se a um custo muito abaixo.

6 CONCLUSÕES E MELHORIAS FUTURAS

Uma mudança em toda a estrutura do hardware poderia tornar o Osciloscópio

USB uma opção de uso até mesmo a usuários mais exigentes.

Inicialmente um sistema de proteção de sobre tensão na entrada analógica

utilizando diodos rápidos aumentaria a durabilidade do equipamento.

A utilização de um CI ADC tipo Flash de altíssima taxa de amostragem para

substituir o ADC do microcontrolador daria ao equipamento uma grande largura de

banda, com dezenas de milhões de amostras por segundo. Aliado ao ADC como um CI

discreto seria importante o uso de uma memória SRAM auto incrementável com taxas

de escrita compatíveis com a taxa de amostragem do ADC, com isso teríamos todo um

circuito independente de amostragem e armazenamento de dados coletados

trabalhando juntos em um clock de altíssima freqüência fornecida por um oscilador

externo.A inclusão de um trigger por hardware (CI detector de cruzamento por nível)

Page 66: Osciloscópio USB

63

poderia dar à segunda versão do projeto uma capacidade de análise de freqüências da

mesma taxa de amostragem do conversor A/D. Isso é possivel se for utilizado um

recurso muito utilizado em Osciloscópios Analógicos, onde cada amostragem do sinal

é capturado apenas um ponto por periodo de onda, de modo que a primeira amostra é

capturada em um no primeiro periodo da onda com um atraso t0, a segunda amostra é

capturada no segundo periodo da onda, mas agora com um atraso t1. E deste modo

uma sequencia de pontos é capturada e possibilita a remontagem do sinal em alta

freqüência.

A transmissão dos dados ao PC poderia ser simplificada no nível de hardware

utilizando-se um microcontrolador com uma porta USB como periférico incluso. É

claro que, além de mudanças no firmware, essas modificações exigiriam uma mudança

na comunicação do software do PC, pois deixaria de ser interpretada como uma

comunicação serial e passaria a ser USB. No mais não haveria grandes modificações.

Na Figura 44 pode-se verificar um diagrama de blocos de um projeto com as

melhorias descritas acima.

Page 67: Osciloscópio USB

64

Figura 44 - Diagrama de blocos do projeto futuro.

Vale lembrar que neste projeto futuro não há um contador externo para

atualizar a linha de endereçamento da memória SRAM, por isso ela deve ser auto-

incrementável capaz de sequenciar a escrita e leitura em todas as linhas de endereço,

diferentemente de muitas SRAMs que auto-incrementam apenas 4 endereço seguidos.

Um exemplo de CI com essas características é o CY7C09159AV (Figura 45),

produzido pela Cypress, trata-se de uma SRAM paralela que alem de ser auto-

incrementável, é dual port, ou seja, possui duas memórias auto-incrementáveis

totalmente independentes em um mesmo encapsulamento.

Figura 45 - Memória SRAM auto-incrementável.

Page 68: Osciloscópio USB

65

A utilização de um microcontrolador com núcleo ARM em um novo projeto

pode não ser necessária visto que as altas taxas de amostragem e comunicação entre o

conversor AD e a memória SRAM são independentes no microcontrolador. Contudo

seu uso ainda é interessante caso deseje-se programar em firmware algum

processamento sobre os dados amostrados, visto a alta taxa de processamento que um

microcontrolador ARM pode fornecer.

Este projeto de hardware com diversas melhorias já teve sua implementação

iniciada, conforme ve-se na Figura 46, contudo o sistema hardware e firmware ainda

não se encontra operante. O circuito possui um microcontrolador ARM7 da Atmel,

AT91SAM7S64, com porta USB Full Speed inclusa, uma memória SRAM dual-port

autoincrementavel capaz de operar a 50 MHz, CY7C09159AV, um ADC flash de 80

MHz, 8 bits, paralelo, da Analog Devices, AD9283_c, onde tanto a memória quanto o

ADC são gatilhados por um oscilador de 50MHz para trabalharem sincronizadamente.

Uma primeira versão da placa de circuito impressa ja foi feita, contudo modificações

podem ser necessárias.

Figura 46 - Futura versão do Osciloscópio Virtual via USB em fase de desenvolvimento.

6.2 Melhorias Futuras de Firmware e Software

Nenhum tratamento ao sinal digitalizado foi implementado em software, para

uma futura versão seria interessante incluir um código para realizar interpolações entre

os pontos a fim de possibilitar um gráfico de melhor qualidade para freqüências

próximas a freqüência máxima. A criação de uma função de coleta de pontos

Page 69: Osciloscópio USB

66

sequênciais para armazenamento em um arquivo também é uma importante evolução

para o software do Osciloscópio Virtual, visto que deste modo os sinais análisados

poderam ser pós-processados.

Outra melhoria possível seria a utilização de algum tipo de filtro digital com o

intuito de reduzir os ruídos. Ambas são implementações em nível de código, mas as

que exigirem maior complexidade e grandes bibliotecas matemáticas devem ser

preferencialmente realizadas em software visto que computadores pessoais possuem

muito mais potência de processamento e memória do que microcontroladores.

Fugindo um pouco das melhorias em qualidade do sinal, pode-se também

gerar códigos para dar mais funções ao projeto. O uso de uma FFT para se obter a

função de Analisador de Espectro no equipamento é interessante. O software poderia

também fornecer os dados por ele recebidos como um servidor de FTP, fazendo com

quem qualquer outro PC conectado na mesma rede, pudesse, tendo IP e porta, e com o

software do Osciloscópio instalado, ver os gráficos em tempo real estando em

qualquer lugar do mundo.

Page 70: Osciloscópio USB

67

REFERÊNCIAS BIBLIOGRÁFICAS

[1] ALMEIDA, AILSON ROSETTI DE. Conversores Digital/Analógicos (DAC)

e Analógico/Digitais (ADC). [on line]. Disponível:

http://www.ele.ufes.br/~ailson/digital2/adda.pdf [capturado em 08 out. 2007].

[2] CARVALHO, ROGÉRIO MUNIZ. Princípios de Comunicações. 3ª Ed.

Vitória, ES. 2003.

[3] UNIVERSAL SERIAL BUS. Universal Serial Bus Class Definitions. [on

line] Disponível: http://www.usb.org/developers/devclass_docs/usbcdc11.pdf

[capturado em 10 nov. 2007].

[4] DIGI-KEY.COM. Orçamento de Componentes Eletrônicos. [on line].

Disponível: http://www.digikey.com [ capturado em 10 fev. 2008].

[5] LUMINARY MICRO. Application Note AN01209-01: ADC OverSampling

Techniques. [on line]. Disponível: http://www.luminarymicro.com [capturado

em 15 out. 2007].

[6] LUMINARY MICRO. Application Note AN01247-00: Using the Stellaris

Microcontroller Analog-to-Digital Converter. [on line]. Disponível:

http://www.luminarymicro.com [capturado em 15 out. 2007].

[7] LUMINARY MICRO. Data sheet EVB_LM3S811: Eval Board User’s

Manual and Schematics. [on line]. Disponível:

http://www.luminarymicro.com [capturado em 4 out. 2007].

[8] MITOV SOFTWARE. PlotLab 3.0. [on line]. Disponível:

http://www.mitov.com/html/download_plotlab.html [capturado em 20 set.

2007]

[9] WIKIPEDIA. Universal Serial BUS. [on line]. Disponível:

http://en.wikipedia.org/wiki/USB [capturado em 28 out. 2007].

Page 71: Osciloscópio USB

68

[10] FILHO, TEODIANO FREIRE BASTOS. Apostila de Eletrônica Básica II.

Vitória, 2005.

[11] SALTEADORES. Serial Communication with Borland C++ Builder. [on

line]. Disponível: http://maikel.galeon.com/serie/bcbcomm.html [capturado em

10 set. 2007].

[12] UNSER, M. Sampling-50 years after Shannon,Proceedings of the IEEE, Vol.

88, n. 4, Abril 2000, pp. 569-587.

[13] LUMINARY MICRO. Data sheet DS-LM3S811-1972: LM3S811

Microcontroller Data Sheet. [on line]. Disponível:

http://www.luminarymicro.com [capturado em 4 out. 2007].

[14] LUMINARY MICRO. Application Note. [on line]. Disponível:

http://www.luminarymicro.com [capturado em 15 out. 2007].

[15] Anjos, W. L. F. "USO DO COMPUTADOR PESSOAL NO

DESENVOLVIMENTO DE UM ANALISADOR DE ESPECTRO DE

BAIXA FREQÜÊNCIA", Projeto de Graduação - DEL - CT - UFES, abril de

2004.

Page 72: Osciloscópio USB

69

APÊNDICE A

O código comentado do firmware implementado em C, no µVision , utilizando

as bibliotecas fornecidas pela Luminary Micro. Todas as bibliotecas podem ser

encontradas em [14].

#include "hw_ints.h" //

#include "hw_memmap.h" //

#include "hw_types.h" //

#include "adc.h" //

#include "debug.h" // Inclusão das Bibliotecas

#include "gpio.h" // da Luminary Micro

#include "interrupt.h" //

#include "sysctl.h" //

#include "timer.h" //

#include "uart.h" //

#include "globals.h" //

#include "random.h" //

unsigned char selec;

char adc_buffer1[2000];

int cont0,cont1,cont2,cont_def;

unsigned long total_data, g_ulWheel;

// Interrupção por Timer do ADC

void ADCIntHandler(void)

{

unsigned long ulData;

// Limpa a interrupção do ADC

ADCIntClear(ADC_BASE, 0);

// Leitura do Dado do Conversor AD

ADCSequenceDataGet(ADC_BASE, 0, &ulData);

if (selec == 0) // Habilita escrita no buffer de leitura do ADC

{ // somente se o flag 'selec' valer zero.

cont0++; // incrementa o contador da escala de tempo

// quando o contador da escala atingir o valor definido

Page 73: Osciloscópio USB

70

if (cont0 == cont_def) //

{ //

cont0 = 0; // zera o contador da escala

//Rotina da Luminary para diminuir o erro da leitura

RandomAddEntropy(ulData);

g_ulWheel = ((g_ulWheel * 58982) + (ulData * 6554)) / 65536;

// Transforma o valor adquirido (float) em um char e armazena no buffer

adc_buffer1[cont1] = ((ulData<<22)>>24);

// Ponteiro do buffer é incrementado.

cont1++;

}

}

}

int main(void)

{

int i;

// Configura o Clock do Sistema em 50Mhz

// onde SYSCTL_SYSDIV_4 divide a freqüência do PLL, que é de 200MHz

// por 4, gerando um clock interno de 50Mhz

SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |

SYSCTL_XTAL_6MHZ);

// Ativa Periféricos

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);

// Conversor Analógico Digital

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

// GPIO A -> Pinos da UART0

SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);// Timer 1

SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // UART0

// Configura o ADC pra amostrar o Sinal Analógico quando o Timer gatilhar

// ADC_TRIGGER_TIMER

// configura o ADC amostrar

// por tempo dado pelo Timer1

ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_TIMER, 0);

ADCSequenceStepConfigure(ADC_BASE, 0, 0,

ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END);

ADCSequenceEnable(ADC_BASE, 0);

ADCIntEnable(ADC_BASE, 0);

Page 74: Osciloscópio USB

71

IntEnable(INT_ADC0);

// Configura o Timer1 para ser o gatilho da amostragem do ADC

TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER);

TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet() / 115000);

TimerControlStall(TIMER1_BASE, TIMER_A, true);

TimerControlTrigger(TIMER1_BASE, TIMER_A, true);

TimerEnable(TIMER1_BASE, TIMER_A);

// Configura os Pinos de TX e RX da UART0

GPIODirModeSet(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1,

GPIO_DIR_MODE_HW);

// Configura a operação da UART0 para 460800bps, 8-N-1.

UARTConfigSet(UART0_BASE, 460800,

(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |

UART_CONFIG_PAR_NONE));

UARTEnable(UART0_BASE);

cont0 = 0; //

cont2 = 0; // Valores Iniciais

cont_def = 1; //

total_data = 0; //

while(1) // loop infinito

{

if (cont1 == 800)// Se o buffer do ADC estiver cheio

{ //

selec = 1; // Trava escrita no buffer do ADC

for(i = 0; i < cont1; i++)

{

// Envia todo conteúdo do buffer via UART0

UARTCharPut(UART0_BASE, adc_buffer1[i]);

}

// Se houver bytes no buffer de entrada da UART0

while(UARTCharsAvail(UART0_BASE))

{

// cont_def recebe esse dado (Dado referente a escala)

cont_def = UARTCharNonBlockingGet(UART0_BASE);

Page 75: Osciloscópio USB

72

if (cont_def > 200)

{ // caso o byte seja > 200, no caso o único

cont_def = 500; // maior que 200 enviado é 255, que deveria

} // valer 500, mas é enviado 255 pra caber em 1 byte

} .

cont1 = 0; // Zera ponteiro do buffer do ADC

selec = 0; // Destrava gravação de dados no buffer do ADC

}

}

}

Page 76: Osciloscópio USB

73

APÊNDICE B

O código comentado do software implementado em C++, no Borland C++

Builder segue abaixo.

Unit1.c

//---------------------------------------------------------------------------

#include <vcl\vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

HANDLE hComm = NULL;

TRead *ReadThread;

COMMTIMEOUTS ctmoNew = {0}, ctmoOld;

//---------------------------------------------------------------------------

#pragma link "SLScope"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ComboBox1Select(TObject *Sender)

{

char comport[10];

DCB dcbCommPort;

stop_aquire = 0;

//

StrCopy(comport,Form1->ComboBox1->Text.c_str()); // Abre a ComPort

hComm = CreateFile(comport, //

GENERIC_READ | GENERIC_WRITE, //

0,

Page 77: Osciloscópio USB

74

0,

OPEN_EXISTING,

0,

0);

// Se não for possivel abrir a ComPort selecionada ou se ela ja estiver aberta

// o aplicativo é finalizado.

if(hComm == INVALID_HANDLE_VALUE) Application->Terminate();

GetCommTimeouts(hComm,&ctmoOld); //

ctmoNew.ReadTotalTimeoutConstant = 100; //

ctmoNew.ReadTotalTimeoutMultiplier = 0; // Define os valores de

ctmoNew.WriteTotalTimeoutMultiplier = 0; // TimeOut da comunicação

ctmoNew.WriteTotalTimeoutConstant = 0; //

SetCommTimeouts(hComm, &ctmoNew); //

dcbCommPort.DCBlength = sizeof(DCB); // Define os valoresde configuração

GetCommState(hComm, &dcbCommPort); // da ComPort selecionada.

BuildCommDCB("460800,N,8,1", &dcbCommPort); // BAUD RATE = 460800

SetCommState(hComm, &dcbCommPort); // PARIDADE = NENHUMA

// TAMANHO DA PALAVRA = 8 BITS

// STOP BITS = 1

ReadThread = new TRead(false); // Ativa o THREAD para iniciar a

// comunicação serial.

escala = 10; //

TransmitCommChar(hComm, escala); //

Form1->tamanho1 = 400; // Define os valores Iniciais

Form1->tamanho2 = 800; // para desenho do gráfico.

Form1->aux = 399; //

Label2->Caption = "76,92"; //

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

ReadThread->Terminate(); // Finaliza o Thread e da um delay

Sleep(250); // para que seja terminar a finalização

// Descarta todos os dados do Buffer da ComPort

PurgeComm(hComm, PURGE_RXABORT);

// Restaura a antiga configuração de TimeOut da ComPort

SetCommTimeouts(hComm, &ctmoOld);

Page 78: Osciloscópio USB

75

CloseHandle(hComm); // Fecha a comPort.

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton5Click(TObject *Sender)

{ // Grandeza de 1 Hz.

escala = 255; // Envia ao microcontrolador a informação de escala que

TransmitCommChar(hComm, escala); // deve ser usada para amostragem do sinal -> no caso 1x500*.

Label2->Caption = "3846,52"; // -----> micro segundos por amostragem.

} // * Nesse caso é enviado 255 para que caiba

// em um char. Mas no firmware da placa esse

// dado é alterado para 500.

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton6Click(TObject *Sender)

{ // Grandeza de 10 Hz.

escala = 50; // É enviado ao circuito o valor 50,

TransmitCommChar(hComm, escala); // referente a escala de armazenar apenas

Label2->Caption = "384,62"; // 1 a cada 50 pontos adquiridos.

} // 384,62 uS por amostragem

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton7Click(TObject *Sender)

{

escala = 10;

TransmitCommChar(hComm, escala);

Label2->Caption = "76,92";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton8Click(TObject *Sender)

{

escala = 5;

TransmitCommChar(hComm, escala);

Label2->Caption = "38,31";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton9Click(TObject *Sender)

Page 79: Osciloscópio USB

76

{

escala = 1;

TransmitCommChar(hComm, escala);

Label2->Caption = "7,69";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton10Click(TObject *Sender)

{

escala = 1;

TransmitCommChar(hComm, escala);

Label2->Caption = "7,69";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton11Click(TObject *Sender)

{

escala = 1;

TransmitCommChar(hComm, escala);

Label2->Caption = "7,35";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton12Click(TObject *Sender)

{

escala = 1;

TransmitCommChar(hComm, escala);

Label2->Caption = "7,35";

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

float vl_medio;

int i,j,valor_max,trigger_pont;

if (stop_aquire == 1) // verifica se flag de escrita no buffer está travada

{ // stop_aquire = 1, significa que está travada.

/**********************************************************************************

Abaixo é especificado o tamanho do buffer a ser preenchido para exibição do gráfico

Page 80: Osciloscópio USB

77

de acordo com a seleçao da escala de tempo.

* Tamanho1 - é o numero de pontos que serão exibidos no gráfico

* Tamanho2 - é o tamanho do buffer que deve ser acumulado antes de se iniciar o

processo de desenho do gráfico - necessita ser o dobro para poder rodar o

algoritmo de auto trigger e trigger manual.

* aux - é apenas uma variavel q vale -1 do valor de tamanho 1, sua intenção é

facilitar e almentar a velocidade de certos loops poupando-as de mais uma conta

*********************************************************************************/

if (Form1->RadioButton12->Checked)

{

Form1->tamanho1 = 20;

Form1->tamanho2 = 40;

Form1->aux = 19;

}

else

{

if (Form1->RadioButton11->Checked)

{

Form1->tamanho1 = 40;

Form1->tamanho2 = 80;

Form1->aux = 39;

}

else

{

if (Form1->RadioButton10->Checked)

{

Form1->tamanho1 = 200;

Form1->tamanho2 = 400;

Form1->aux = 199;

}

else

{

Form1->tamanho1 = 400;

Form1->tamanho2 = 800;

Form1->aux = 399;

}

}

}

Page 81: Osciloscópio USB

78

if (Form1->RadioButton1->Checked) // Captura Ininterrupta

{

SLScope1->Channels->Channels[ 0 ]->Data->SetYData(buffer1, (Form1->tamanho1) );

stop_aquire = 0;

}

else

{

if (Form1->RadioButton2->Checked) // Captura com auto trigger

{

vl_medio = 0;

for (i = 0; i < aux; i++) //

{ // Cálculo do valor médio

vl_medio = vl_medio + buffer1[i]; // para ajustar o nível do

} //

vl_medio = (vl_medio/aux); //

for (i = 0; i < aux; i++) //

{ //

if ((buffer1[i] <= vl_medio) && (buffer1[i+1] >= vl_medio))

{ // Procurando o ponto

trigger_pont = i; // onde o sinal capturado

i = aux; // corta o valor médio

} // com derivada positiva

} //

j = 0;

valor_max = trigger_pont + (Form1->tamanho1); //

for (i = trigger_pont; i <= valor_max; i++) // Geração de um novo buffer a

{ // partir do novo ponto inicial

buffer2[j] = buffer1[i]; // (trigger) - Ajustado pela

j++; // derivada positiva da onda

} // onde corta o Valor médio

// Desenha os pontos no gráfico

SLScope1->Channels->Channels[ 0 ]->Data->SetYData(buffer2, (Form1->tamanho1) );

stop_aquire = 0;

}

else

{

if (Form1->RadioButton3->Checked) // Captura com trigger manual

{ // Como o trigger é manual, aqui o

vl_medio = Form1->Edit1->Text.ToDouble(); // a variável vl_médio recebe o valor

Page 82: Osciloscópio USB

79

for (i = 0; i < aux; i++) // ajustado na Edit1 - que será o nível

{ // do trigger

if ((buffer1[i] <= vl_medio) && (buffer1[i+1] >= vl_medio)) // Procurando o ponto

{ // onde o sinal capturado

trigger_pont = i; // corta o valor ajustado

i = aux; // em Edit1 com derivada positiva

}

}

j = 0;

valor_max = trigger_pont + (Form1->tamanho1);

for (i = trigger_pont; i <= valor_max; i++) // Geração do novo buffer com os pontos

{ // a partir do ponto onde ocorre o

buffer2[j] = buffer1[i]; // cruzamento com derivada positiva

j++; // do sinal analizado com o nível de

} // trigger desejado

SLScope1->Channels->Channels[ 0 ]->Data->SetYData(buffer2, (Form1->tamanho1) ); // desenha o gráfico

stop_aquire = 0;

}

}

}

stop_aquire = 0; // Flag de escrita no buffer liberado

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form1->Edit1->Text = Form1->Edit1->Text.ToDouble() + 0.2 ; // Incrementa nível de trigger manual

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Edit1->Text = Form1->Edit1->Text.ToDouble() - 0.2 ; // Decrementa o nível de trigger

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender) // Captura Única

{

while (stop_aquire == 0); // Espera o buffer estar cheio para só depois desenhar os pontos

SLScope1->Channels->Channels[ 0 ]->Data->SetYData(buffer1, (Form1->tamanho1) );

Page 83: Osciloscópio USB

80

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Enter(TObject *Sender)

{ // Habilita o botão capturar quando

Form1->Button3->Enabled = true; // o radiobutton4 (Captura Única)

} // é ativado

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{ // Desabilita o botão capturar quando

Form1->Button3->Enabled = false; // algum radiobutton do modo de captura

} // diferente do radiobutton4 é ativado

//--------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{ // Desabilita o botão capturar quando

Form1->Button3->Enabled = false; // algum radiobutton do modo de captura

} // diferente do radiobutton4 é ativado

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{ // Desabilita o botão capturar quando

Form1->Button3->Enabled = false; // algum radiobutton do modo de captura

} // diferente do radiobutton4 é ativado

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Edit3->Text = Edit2->Text.ToDouble() * Label2->Caption.ToDouble(); // uS por divisão

Edit4->Text = (1/(Edit2->Text.ToDouble() * Label2->Caption.ToDouble()))*1000000; // Frequência do sinal

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Form1->Edit5->Text = Form1->Edit5->Text.ToDouble() + 0.1; // Soma 0,1V no ajuste de offset manual

} //---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Form1->Edit5->Text = Form1->Edit5->Text.ToDouble() - 0.1; // Subtrai 0,1V no ajuste de offset manual

}

//---------------------------------------------------------------------------

Page 84: Osciloscópio USB

81

Unit1.h //---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "SLScope.h"

#include <ExtCtrls.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TSLScope *SLScope1;

TGroupBox *GroupBox1;

TComboBox *ComboBox1;

TGroupBox *GroupBox2;

TRadioButton *RadioButton1;

TRadioButton *RadioButton2;

TRadioButton *RadioButton3;

TStaticText *StaticText1;

TRadioButton *RadioButton4;

TEdit *Edit1;

TStaticText *StaticText2;

TButton *Button1;

TButton *Button2;

TButton *Button3;

TGroupBox *GroupBox3;

TRadioButton *RadioButton5;

TRadioButton *RadioButton6;

TRadioButton *RadioButton7;

TRadioButton *RadioButton8;

TRadioButton *RadioButton9;

TRadioButton *RadioButton10;

TRadioButton *RadioButton11;

TRadioButton *RadioButton12;

TTimer *Timer1;

Page 85: Osciloscópio USB

82

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TEdit *Edit2;

TButton *Button4;

TEdit *Edit3;

TEdit *Edit4;

TLabel *Label4;

TLabel *Label5;

TLabel *Label6;

TLabel *Label7;

TEdit *Edit5;

TLabel *Label8;

TButton *Button5;

TButton *Button6;

void __fastcall FormClose(TObject *Sender, TCloseAction &Action);

void __fastcall ComboBox1Select(TObject *Sender);

void __fastcall RadioButton5Click(TObject *Sender);

void __fastcall RadioButton6Click(TObject *Sender);

void __fastcall RadioButton7Click(TObject *Sender);

void __fastcall RadioButton8Click(TObject *Sender);

void __fastcall RadioButton9Click(TObject *Sender);

void __fastcall RadioButton10Click(TObject *Sender);

void __fastcall RadioButton11Click(TObject *Sender);

void __fastcall RadioButton12Click(TObject *Sender);

void __fastcall Timer1Timer(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall RadioButton4Enter(TObject *Sender);

void __fastcall RadioButton3Click(TObject *Sender);

void __fastcall RadioButton2Click(TObject *Sender);

void __fastcall RadioButton1Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button6Click(TObject *Sender);

private: // User declarations

public: // User declarations

float buffer1[2000], buffer2[2000];

Page 86: Osciloscópio USB

83

int stop_aquire,tamanho1,tamanho2,aux;

unsigned char escala;

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Unit2.c //---------------------------------------------------------------------------

#include <vcl\vcl.h>

#pragma hdrstop

// YOU MUST INCLUDE THE HEADER FOR UNIT1

#include "Unit1.h"

#include "Unit2.h"

extern HANDLE hComm;

char InBuff[100];

//---------------------------------------------------------------------------

__fastcall TRead::TRead(bool CreateSuspended)

: TThread(CreateSuspended)

{

}

//---------------------------------------------------------------------------

void __fastcall TRead::Execute()

{

float data_in;

char i,j;

DWORD dwBytesRead;

FreeOnTerminate = true;

// Destroi o Thread Object quando o thread terminar

while(1)

{

ReadFile(hComm, InBuff, 50, &dwBytesRead, NULL); // Lê o Buffer da Serial

Page 87: Osciloscópio USB

84

if(dwBytesRead) // Se houver Bytes no buffer

{

for (i = 0; i < dwBytesRead; i++) // Lê 1 a 1 todos os Bytes que houver

{ // no Buffer da ComPort.

data_in = InBuff[i];

/*********************************************************************

Para que o código abaixo seja compreendido vale lembrar que:

*O ADC do MicroControlador da Luminary Micro lê apenas de 0 a 3 Volts com precisão de 10 Bits,

contudo só utilizamos 8 Bits, para agilizar a transferência de dados.

*Como na conversão o valor 0 Volt vale 00000000, o valor logo acima vale 00000001 e assim segue até

3 Volts que é representado por 11111111, é necessário um algoritmo para transformar estas

representações em valores onde:

**0 Volt no ADC deverá valer -20 Volts no gráfico;

**1,5 Volts no ADC deverá valer 0 Volts no gráfico;

**3 Volts no ADC deverá valer 20 Volts no gráfico.

Abaixo Segue o código

********************************************************************/

if (!(InBuff[i] & 0x80))

{

data_in = InBuff[i];

data_in = (data_in/6.4)-20;

}

else

{

data_in = (InBuff[i] & 0x7f);

data_in = (data_in/6.4);

}

// Soma o Offset manual ao sinal de entrada

data_in = data_in + Form1->Edit5->Text.ToDouble();

if (Form1->stop_aquire == 0) // Quandoo flag de aquisição de dados

{ // stop_aquire valer 0, os dados coletados na serial

Form1->buffer1[cont1] = data_in; // passaram a preencher o buffer do gráfico

cont1++;

if (cont1 == Form1->tamanho2)

{ // Quando o numero de pontos coletados for suficiente pra desenhar

cont1 = 0; // o gráfico (tamanho2) o contador zera, e o armazenamento de dados

Form1->stop_aquire = 1; // no buffer do gráfico é interrompido

} // para que o gráfico seja desenhado sem risco

Page 88: Osciloscópio USB

85

} // de alterações inesperadas no conteúdo do buffer.

}

}

}

}

Unit2.h //---------------------------------------------------------------------------

#ifndef Unit2H

#define Unit2H

//---------------------------------------------------------------------------

#include <Classes.hpp>

//---------------------------------------------------------------------------

class TRead : public TThread

{

private:

protected:

void __fastcall Execute();

public:

int cont1;

__fastcall TRead(bool CreateSuspended);

};

//---------------------------------------------------------------------------

#endif

Page 89: Osciloscópio USB

86

APÊNDICE C

Os esquemáticos do circuito do microcontrolador e do CI Serial USB do kit de

desenvolvimento da Luminary Micro, Stellaris LM3S811 Evaluation Board, segue nas

Figuras 47 e 48 respectivamente.

Observa-se na Figura 47 o esquema elétrico do CI LM3S811 utilizando um

cristal de 6 MHz, pode-se visualizar também o pinos da interface JTAG. Os pinos 18 e

17, Tx e Rx respectivamente, referentes a UART0 são os que estão conectados ao CI

FTDI2232c responsável pela comunicação Serial x USB.

Na Figura 48 vale notar que além de 2 portas seriais o Chip Serial USB da

FTDI possui também saídas de interface JTAG a fim de permitir programação e debug

do microcontrolador.

Page 90: Osciloscópio USB

87

Figura 47 - Esquemático do LM3S811 da Kit da Luminary Micro.

Page 91: Osciloscópio USB

88

Figura 48 - Esquemático do CI FTDI2232c do Kit (Serial x USB).