• Nenhum resultado encontrado

DESENVOLVIMENTO DE UM OSCILOSCÓPIO DIGITAL COM O RASPBERRY PI

N/A
N/A
Protected

Academic year: 2021

Share "DESENVOLVIMENTO DE UM OSCILOSCÓPIO DIGITAL COM O RASPBERRY PI"

Copied!
81
0
0

Texto

(1)

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO ACADÊMICO DE ELETRÔNICA

CURSO DE ENGENHARIA ELETRÔNICA

ALISON MICHEL FERNANDES

DESENVOLVIMENTO DE UM OSCILOSCÓPIO DIGITAL COM O

RASPBERRY PI

TRABALHO DE CONCLUSÃO DE CURSO

CURITIBA 2020

(2)

ALISON MICHEL FERNANDES

DESENVOLVIMENTO DE UM OSCILOSCÓPIO DIGITAL COM O

RASPBERRY PI

Trabalho de Conclusão de Curso de Graduação, apresentado à disciplina de TCC2, do curso de Engenharia Eletrônica do Departamento Acadêmico de Eletrônica (DAELN) da Universidade Tecnológica Federal do Paraná (UTFPR), como requisito para a obtenção do grau de Bacharel em Engenheira Eletrônica.

Orientador: Prof. Dr. Luciano Scandelari

CURITIBA 2020

(3)

ALISON MICHEL FERNANDES

DESENVOLVIMENTO DE UM OSCILOSCÓPIO DIGITAL COM O

RASPBERRY PI

Este Trabalho de Conclusão de Curso de Graduação foi apresentado como requisito parcial para obtenção do título de Engenheiro Eletrônico, do curso de Engenharia Eletrônica do Departamento Acadêmico de Eletrônica (DAELN) outorgado pela Universidade Tecnológica Federal do Paraná (UTFPR). O aluno foi arguido pela Banca Examinadora composta pelos professores abaixo assinados. Após deliberação, a Banca Examinadora considerou o trabalho aprovado.

Curitiba, 19 de agosto de 2020.

____________________________________ Prof. Dr. Robinson Vida Noronha

Coordenador de Curso Engenharia Eletrônica

____________________________________ Profª. Drª. Carmen Caroline Rasera

Responsável pelos Trabalhos de Conclusão de Curso de Engenharia Eletrônica do DAELN

BANCA EXAMINADORA

______________________________________ Prof. Dr. Luciano Scandelari

Universidade Tecnológica Federal do Paraná Orientador

_____________________________________ Prof. Dr. Guilherme de Santi Peron

Universidade Tecnológica Federal do Paraná

_____________________________________ Prof. Dr. Rubens Alexandre de Faria

Universidade Tecnológica Federal do Paraná

(4)

Aos familiares e amigos, pelo incentivo e apoio nesta incrível trajetória.

(5)

AGRADECIMENTOS

Em primeiro lugar, agradeço a Deus pela vida e por iluminar meu caminho durante esta longa caminhada.

A todos os professores que me acompanharam durante a graduação, em especial ao orientador desta dissertação, Prof. Dr. Luciano Scandelari, por sua dedicação e suporte.

Aos professores da banca avaliadora Dr. Guilherme de Santi Peron e Dr. Rubens Alexandre de Faria, por apontarem os erros e sugestões que resultaram na melhoria do trabalho.

Aos meus amigos e familiares por dedicarem o tempo, dedicação e por estarem sempre me apoiando nos momentos mais difíceis.

Por fim, a todos os profissionais da Universidade Tecnológica Federal do Paraná que em algum momento me auxiliaram nesta esplêndida trajetória.

(6)

Nossas virtudes e nossos defeitos são inseparáveis, assim como a força e a matéria. Quando se separam, o homem deixa de existir. (TESLA, Nikola)

(7)

RESUMO

FERNANDES, Alison M. Desenvolvimento de um osciloscópio digital com o Raspberry Pi. 81 f. Trabalho de Conclusão de Curso (Graduação) – Engenharia Eletrônica, Universidade Tecnológica Federal do Paraná, Curitiba, 2020.

Este trabalho aborda o desenvolvimento de um osciloscópio digital com o Raspberry Pi. Para o desenvolvimento das aplicações serão apresentados conceitos a respeito do conversor analógico digital, bem como informações referentes a taxa de amostragem, protocolos de comunicação de rede e ferramentas de desenvolvimento. No que diz respeito à aquisição dos dados será utilizado o microcontrolador STM32F4 bem como suas características de operação. Um circuito de condicionamento de sinal será elaborado com o intuito de preservar os limites de tensão suportados pelas placas de desenvolvimento. Com base nas simulações e nos resultados obtidos através de experimentos realizados, verifica-se que o osciloscópio digital fundamentado em placas de baixo custo se apresenta como alternativa para o estudo do comportamento de circuitos eletrônicos.

Palavras-chave: Raspberry Pi. STM32F4. Osciloscópio Digital. Conversor Analógico Digital. Comunicação Serial Síncrona. Protocolo TCP/IP.

(8)

ABSTRACT

FERNANDES, Alison M. Development of a digital oscilloscope with the Raspberry Pi. 81 f. Conclusion Work of Course (Graduation) – Electronic Engineering, Federal University of Technology – Paraná, Curitiba, 2020.

This work deals with the development of a digital oscilloscope with the Raspberry Pi. For the development of applications, concepts about the analog to digital converter will be presented, as well as information about the sampling rate, network communication protocols and development tools. With regard to data acquisition, the STM32F4 microcontroller will be used as well as its operating characteristics. A signal conditioning circuit will be developed in order to preserve the voltage limits supported by development boards. Based on the simulations and the results obtained through experiments carried out, it’s appears that the digital oscilloscope based on low cost plates is an alternative for studying the behavior of electronic circuits.

Keywords: Raspberry Pi. STM32F4. Digital Oscilloscope. Analog to Digital Converter. Synchronous Serial Communication. TCP/IP Protocol.

(9)

LISTA DE SIGLAS

ADC Analog to Digital Converter (Conversor Analógico Digital)

API Application Programing Interface (Interface de Programação de Aplicativos)

CPOL Clock Polarity (Polaridade de Clock) CPHA Clock Phase (Fase de Clock)

DAC Digital to Analog Converter (Conversor Digital Analógico) DMA Direct Access Memory (Acesso Direto à Memória)

DFT Discrete Fourier Transform (Transformada Discreta de Fourier)

IDE Integrated Development Environment (Ambiente de Desenvolvimento Integrado)

IP Internet Protocol (Protocolo de Internet)

I2C Inter-Integrated Circuit (Circuito Inter-Integrado)

FFT Fast Fourier Transform (Transformada Rápida de Fourier) Qt Software de desenvolvimento embarcado

SAR Successive Approximation Register (Registrador de Aproximações Sucessivas)

SPI Serial Peripheral Interface (Interface Periférica Serial)

UART Universal Asynchronous Receiver/Transmitter (Receptor/Transmissor Universal Assíncrono)

(10)

LISTA DE FIGURAS

Figura 1 - Diagrama do osciloscópio digital ... 21

Figura 2 - Meio ciclo de uma senóide ... 22

Figura 3 - Formas de onda sem e com trigger ... 24

Figura 4 - Representação Fasorial da DFT ... 26

Figura 5 - Estrutura Matricial da DFT ... 26

Figura 6 - Matriz da DFT Reorganizada ... 27

Figura 7 - Algoritmo FFT ... 28

Figura 8 - Fluxograma Direct Access to Memory – DMA ... 29

Figura 9 - Conexão SPI ... 31

Figura 10 - Conexão de múltiplos escravos - linha SS ... 32

Figura 11 - Conexão de múltiplos escravos – linha SS compartilhada ... 32

Figura 12 - Conexão de processo TCP/IP ... 37

Figura 13 - Buffers de envio e recebimento ... 37

Figura 14 - Primeira Versão do Raspberry Pi ... 39

Figura 15 - Pinout Raspberry Pi 3 B+ ... 40

Figura 16 - Placa STM32F407 Discovery e diagrama de blocos ... 41

Figura 17 - Configuração ADC ... 43

Figura 18 - Configuração de clock ... 44

Figura 19 – Função de callback ... 45

Figura 20 – Função HAL SPI ... 45

Figura 21 – Função Time Start... 46

Figura 22 - Função de callback do temporizador ... 46

Figura 23 - IRQ do temporizador... 46

Figura 24 - Recursos do Qt Designer ... 47

Figura 25 - Exemplos de gráficos QCustomplot ... 47

Figura 26 - Fluxograma Geral ... 48

Figura 27 – Biblioteca SPI de aquisição de dados ... 49

Figura 28 - Interface do osciloscópio ... 50

Figura 29 – Função de aquisição de pontos ... 50

Figura 30 – Função de leitura de parâmetros elétricos ... 51

Figura 31 - Função de trigger ... 52

Figura 32 - Trigger do canal 1 ativado ... 53

Figura 33 - Fluxograma Trigger... 53

Figura 34 - Operações Matemáticas ... 54

(11)

Figura 36 - Gráfico da FFT ... 56

Figura 37 - Código da FFT ... 56

Figura 38 - Código referente a função de relatórios ... 57

Figura 39 - Código para salvar forma de onda ... 58

Figura 40 - Menu de opções ... 58

Figura 41 - Interface do aplicativo no Android ... 60

Figura 42 - Função de comunicação TCP/IP ... 61

Figura 43 - Socket para recebimento ... 61

Figura 44 - Cliente - Janela de configuração de IP... 62

Figura 45 - Layout do aplicativo ... 62

Figura 46 - Trigger do canal 1 ativado ... 63

Figura 47 - Seleção de posição de eixos ... 63

Figura 48 - Circuito de condicionamento de sinal ... 64

Figura 49 - Placa de condicionamento de sinal ... 68

Figura 50 - Diagrama de ligação ... 69

Figura 51 - Gerador de sinais NE555 ... 70

(12)

LISTA DE TABELAS

Tabela 1 – Modos SPI ... 33

Tabela 2 - Tensão de referência ... 35

Tabela 3 - Tabela de dados 1 ... 71

Tabela 4 - Tabela de dados 2 ... 71

Tabela 5 - Tabela de dados 3 ... 71

Tabela 6 - Tabela de dados 4 ... 72

Tabela 7 - Tabela de dados 5 ... 72

Tabela 8 - Tabela de dados 6 ... 72

Tabela 9 - Tabelas de dados Tektronix 1 ... 73

Tabela 10 - Tabelas de dados Tektronix 2 ... 73

Tabela 11 - Tabelas de dados Tektronix 3 ... 73

Tabela 12 - Tabelas de dados Tektronix 4 ... 74

Tabela 13 - Tabelas de dados Tektronix 5 ... 74

(13)

SUMÁRIO

INTRODUÇÃO ... 15 1.1 TEMA ... 15 1.1.1 Delimitação do Tema ... 16 1.2 PROBLEMAS E PREMISSAS ... 16 1.3 OBJETIVOS ... 17 1.3.1 Objetivo Geral ... 17 1.3.2 Objetivos Específicos ... 17 1.4 JUSTIFICATIVA ... 18 1.5 PROCEDIMENTOS METODOLÓGICOS ... 18 1.6 ESTRUTURA DO TRABALHO ... 19 FUNDAMENTAÇÃO TEÓRICA ... 20 2.1 INTRODUÇÃO ... 20 2.2 OSCILOSCÓPIO DIGITAL ... 20 2.2.1 Período ... 22 2.2.2 Frequência ... 22 2.2.3 Tensão Média ... 22 2.2.4 Tensão RMS ... 23

2.2.5 Tensão de pico a pico ... 23

2.2.6 Trigger ... 23

2.2.7 FFT – Fast Fourier Transform ... 25

2.3 DMA – Acesso Direto à Memória ... 28

2.4 COMUNICAÇÃO SERIAL SÍNCRONA... 30

2.4.1 Múltiplos escravos ... 32

2.4.2 Polaridade de Clock e Polaridade e Fase ... 33

2.5 CONVERSOR ANALÓGICO DIGITAL ... 33

2.5.1 Resolução ... 34

2.5.2 Tempo de Conversão ... 34

(14)

2.5.4 Saída de dados digital ... 35

2.5.5 Canais de entrada analógicos ... 35

2.5.6 Aproximações Sucessivas ... 36

2.6 PROTOCOLO TCP/IP ... 36

2.6.1 Buffer de envio e recebimento ... 37

2.6.2 Servidor ... 38

2.6.3 Cliente ... 38

2.7 PLACA DE DESENVOLVIMENTO RASPBERRY PI ... 39

2.8 PLACA DE DESENVOLVIMENTO STM32F407 DISCOVERY ... 41

DESENVOLVIMENTO DO OSCILOSCÓPIO DIGITAL ... 43

3.1 INTRODUÇÃO ... 43

3.2 STM32F407 – COMUNICAÇÃO ADC DMA SPI ... 43

3.3 CONTAGEM DE PULSOS ... 46

3.4 QT CREATOR E QCUSTOMPLOT ... 47

3.5 INTERFACE GRÁFICA DO OSCILOSCÓPIO ... 48

3.5.1 Aquisição de Dados... 49

3.5.2 Display de Leitura ... 51

3.5.3 Trigger ... 52

3.5.4 Controles Horizontais e Verticais ... 54

3.5.5 Operações Matemáticas... 54

3.5.6 Transformada de Fourier ... 55

3.5.7 Menu de opções – Salvar e Carregar dados ... 57

3.5.8 Funções adicionais ... 59

3.6 APLICATIVO PARA CELULAR ... 59

3.6.1 Protocolo de Comunicação TCP/IP ... 60

3.6.2 Servidor ... 60

3.6.3 Cliente ... 61

PLACA DE CONDICIONAMENTO DE SINAL E RESULTADOS ... 64

4.1 INTRODUÇÃO ... 64

(15)

4.3 EQUACIONAMENTO DO CIRCUITO ... 65

4.4 FILTRO PASSA-BAIXA ... 67

4.5 MONTAGEM DE PLACA DE CONDICIONAMENTO ... 68

4.6 CONEXÕES ENTRE AS PLACAS ... 69

4.7 CIRCUITO DE TESTE ... 70

4.8 ANÁLISE DOS RESULTADOS ... 75

CONCLUSÃO ... 77

(16)

INTRODUÇÃO

1.1 TEMA

A tecnologia desempenha papel fundamental na sociedade, atualmente temos equipamentos que auxiliam o modo de vida, seja um celular, computador ou até mesmo consoles de videogame. Apesar de todas as vantagens que esses aparelhos proporcionam, quando estes apresentam defeito em seu funcionamento se faz necessário identificá-los, para este propósito foi criado o osciloscópio que tem como finalidade representar sinais elétricos em formas de ondas. Com este equipamento se permite identificar de forma rápida e precisa qual componente que apresenta mau funcionamento apenas observando o formato da forma de onda exibida na tela.

O osciloscópio se tornou também um equipamento essencial na análise de sinais transitórios (não periódicos), como por exemplo observar o comportamento de um sensor de posição ou até mesmo para análise de vibrações de um motor no momento da partida.

Com a possibilidade de identificar como serão apresentadas as formas de onda, visualizando-as de forma gráfica na tela de um instrumento, o osciloscópio se tornou uma poderosa ferramenta de diagnóstico de defeitos e mesmo de projetos. Isso significa que as ondulações não podem ser vistas nem sentidas, mas podem ser visualizadas, ou seja, através de um “retrato” (BRAGA,2014).

Assim, com esta nova ferramenta se tornou possível observar o comportamento dos sinais elétricos envolvidos no circuito como o período, frequência e tensão média.

(17)

1.1.1 Delimitação do Tema

Os osciloscópios utilizados para representação e medição sofreram evoluções ao longo dos anos, desde os primeiros equipamentos analógicos que utilizavam tubos de raios catódicos até os digitais que são utilizados atualmente.

Neste trabalho pretende-se criar um osciloscópio digital utilizando a placa Raspberry Pi em conjunto com ferramentas de criação como o Qt. Por conta de seu processador de arquitetura de 64 bits e das ferramentas existentes que possibilitam sua programação de forma rápida e confiável, se torna possível desenvolver aplicações gráficas orientadas à comunicação com o usuário.

Para a recepção dos dados provenientes dos circuitos de medição será utilizada uma placa de suporte a STM32F407 Discovery, pois como o Raspberry Pi não dispõe em sua arquitetura de um conversor analógico digital, se faz necessário a utilização de uma placa que possua ADC integrado. Como será visto nos capítulos expostos neste trabalho, a comunicação deverá ocorrer de forma rápida, assim os dados recebidos pela STM32F407 Discovery deverão utilizar o acesso direto à memória (DMA).

1.2 PROBLEMAS E PREMISSAS

Conhecer e dominar os equipamentos eletrônicos de forma correta é primordial para os profissionais que atuam na área de eletrônica. Criar ferramentas que possibilitem a interação de forma rápida e segura é sem dúvida um dos grandes desafios existentes hoje na engenharia. Porém estes equipamentos muitas vezes não são acessíveis fora do ambiente acadêmico devido ao seu alto custo.

Assim uma maneira de contornar este problema é com a criação de um osciloscópio digital de baixo custo que atenda a maioria das necessidades do usuário e que possa garantir confiabilidades nos dados coletados e exibidos.

(18)

Para garantir também uma interação a nível de usuário bastante responsiva existe o Qt, uma IDE open source que fornece ferramentas de criação e manipulação de interface gráfica, facilitando a manipulação de estruturas de dados.

O desenvolvimento do osciloscópio permitirá compreender como os sinais elétricos se comportam e seus parâmetros que podem variar em um circuito eletrônico.

1.3 OBJETIVOS

1.3.1 Objetivo Geral

A proposta do referido projeto se baseia em desenvolver um osciloscópio digital utilizando os recursos da placa Raspberry Pi, com a finalidade de representar um osciloscópio existente, incluindo a placa de condicionamento de sinal e software embarcado.

1.3.2 Objetivos Específicos

 Desenvolver uma interface de aquisição de dados;

 Permitir a interação do usuário com controle da interface;  Salvar formas de onda em dispositivos portáteis;

 Guardar informações de dados coletados através de relatórios;

 Representar as formas de onda no domínio da frequência e do tempo;  Desenvolver aplicativo para celular.

(19)

1.4 JUSTIFICATIVA

Em geral, os osciloscópios digitais comercializados no Brasil apresentam um custo relativamente elevado, com o osciloscópio proposto neste projeto o custo inicial será bastante reduzido, fazendo sua implementação se tornar viável e acessível.

Em relação ao desempenho, o Raspberry Pi é uma das placas existentes no mercado que possuem melhor performance por conta de sua memória RAM de 1Gb e seu processador de 64 bits, deste modo é possível representar um grande número de amostras na tela e garantir versatilidade em qualquer aplicação.

E por último, o sistema operacional padrão do Raspberry Pi possui uma interface a nível de usuário bastante intuitiva e amigável, desta forma mesmo usuários iniciantes não terão problemas para utilizá-lo.

Com essas funcionalidades é possível obter leituras e ajustes fidedignos em relação a qualquer outro osciloscópio. Outro fator interessante do projeto é a possibilidade de gerar relatórios de dados a partir da interface gráfica implementada, se apresentando desta forma como uma boa alternativa.

1.5 PROCEDIMENTOS METODOLÓGICOS

Para o desenvolvimento deste trabalho foram realizadas pesquisas em teses e dissertações sobre o funcionamento e operação do osciloscópio digital. Também foram estudadas as especificações técnicas das placas de desenvolvimento Raspberry Pi 3 Model B+ e STM32F407 Discovery, bem como a forma de comunicação entre as placas que será efetuada pelo protocolo serial síncrono e a documentação existente do Qt, que será o software utilizado para a criação da interface gráfica.

Após compreender as formas de comunicação entre as placas baseadas em seus respectivos manuais técnicos, foram realizadas novas pesquisas para a compreensão do funcionamento do osciloscópio que estão disponíveis na literatura,

(20)

como a função do trigger que permite a visualização da formas de ondas de forma estática, ou seja, em sincronia para que a visualização e medição da forma de onda seja realizada de maneira mais precisa.

Assim foi possível manipular os dados e criar um dispositivo mais próximo do que é utilizado atualmente.

1.6 ESTRUTURA DO TRABALHO

Este trabalho está dividido em 5 capítulos:

 No Capítulo 1, como já visto, foi descrita a proposta do trabalho, o objetivo geral, o problema e a metodologia de pesquisa;

 No Capítulo 2 será abordado as definições do escopo do projeto, bem como o funcionamento do osciloscópio. Também estarão explicadas as características das placas de desenvolvimento Raspberry Pi 3 Model B+ e STM32F407 Discovery. No final do capítulo será discutido as formas de comunicação entre as placas;

 O Capítulo 3 apresenta o programa com a interface gráfica, explicando seu funcionamento, a entrada de dados e as variáveis de saída do programa, como também a manipulação das estruturas de dados permitidas. Neste mesmo capítulo também será apresentado o processo de criação do aplicativo para celular;

 No Capítulo 4 será apresentado o processo de desenvolvimento do circuito de condicionamento de sinal e também são descritos os testes realizados com os circuitos eletrônicos, bem como os resultados obtidos;

 No Capítulo 5 são apresentadas as conclusões finais do trabalho e sugestões para estudos futuros.

(21)

FUNDAMENTAÇÃO TEÓRICA

2.1 INTRODUÇÃO

Desde muito tempo a eletrônica tem usado equipamentos na manutenção ou projeto de equipamentos eletrônicos, umas destas ferramentas é o osciloscópio, que se constitui como uma das principais ferramentas para testes, projetos e medições de circuitos eletrônicos.

Neste capítulo será abordado seu princípio de funcionamento, bem como as especificações técnicas das placas de desenvolvimento, processos de comunicação entre as mesmas e algumas definições envolvendo o conversor analógico digital.

2.2 OSCILOSCÓPIO DIGITAL

De acordo com HICKMAN (1997), os osciloscópios digitais surgiram a partir da década de 70 e apresentam algumas similaridades com os osciloscópios analógicos. Desde seu advento os osciloscópios aumentaram sua taxa de amostragem chegando a taxas relativamente altas como 1G amostras / segundo, como também sua memória de armazenamento.

Os osciloscópios digitais apresentam algumas similaridades com os osciloscópios analógicos. No diagrama de blocos da Figura 1 é possível observar que o sinal vertical, depois de passar pela entrada do atenuador, pré-amplificador Y e pelo estágio de acionamento, onde não é roteado para o estágio de deflexão em Y. Em vez disso é amostrado em intervalos a um ADC para ser então digitalizado, ou seja, convertido em uma sequência de números. Cada número representa a tensão de entrada no instante que a amostra correspondente foi coletada. Os dados então digitalizados são armazenados em uma memória alocada.

(22)

Para fins de exibição as amostras são passadas para um DAC (conversor digital analógico) com representação na Figura 1. A partir deste momento eles são reconstituídos em uma série de níveis discretos de tensão, formando uma aproximação gradual da forma de onda original. Ressaltando que a leitura e exibição das amostras que constituem a forma de onda não precisam ocorrer necessariamente na mesma taxa de amostragem, sendo suficiente uma taxa de amostragem adequada para garantir que o sinal seja exibido em intervalos de tempos regulares.

Existem atualmente modelos de osciloscópios digitais de 12 ou 14 bits, com resolução de 4096 e 16384 respectivamente, porém não são muito rápidos se comparados aos de 8 bits com resolução de 256.

Fonte: (Adaptado de HICKMAN, 1997) Figura 1 - Diagrama do osciloscópio digital

(23)

2.2.1 Período

O conceito de período em uma onda se caracteriza como o tempo decorrido em uma oscilação completa. O período também está vinculado a velocidade e ao comprimento da onda.

2.2.2 Frequência

A frequência se caracteriza como o número de oscilações de onda em determinado período de tempo. Ela pode ser calculada como o inverso do período. Sendo sua fórmula:

= 1 [ ] (2.1)

2.2.3 Tensão Média

A tensão média de uma forma de onda periódica, sendo ela uma onda senoidal, triangular ou quadrada é definida como o quociente da área sob a forma de onda em relação ao tempo, ou seja, é média dos valores instantâneos ao longo do eixo do tempo, no qual o tempo é um período completo.

Na Figura 2 é exibido a metade do ciclo de uma onda senoidal.

Fonte: (ELECTRONIC TUTORIALS, 2019) Figura 2 - Meio ciclo de uma senóide

(24)

Para o cálculo da tensão média pode-se dividir a área da Figura 2 em pequenas subáreas na qual a tensão media é o total da soma destas áreas dividido pelo número de subdivisões.

= + + +. . . + (2.2)

2.2.4 Tensão RMS

A tensão RMS assim como a tensão média pode ser calculada utilizando o método gráfico. A fórmula correspondente se estabelece como a raiz quadrada da soma das áreas elevada ao quadrado dividido pelo número total de subdivisões correspondentes.

= + + +. . . + (2.3)

2.2.5 Tensão de pico a pico

A tensão de pico a pico é a medida considerando uma onda periódica de seu comprimento vertical completo desde o pico positivo até o pico negativo.

2.2.6 Trigger

A finalidade do trigger em um osciloscópio é sincronizar a varredura horizontal no ponto correto do sinal. Os controles de disparo permitem estabilizar formas de ondas repetitivas ou através do disparo único. O trigger faz com que as formas de onda pareçam estáticas no osciloscópio exibindo repetidamente a mesma

(25)

parte do sinal de entrada. O disparo de borda está disponível nos osciloscópios analógicos e digitais, sendo este o tipo mais comum no qual é possível selecionar se o disparo ocorrerá na borda de subida ou na borda de descida. Além do disparo de borda oferecidos, muitos osciloscópios digitais oferecem configurações especializadas para o trigger. Eles respondem a condições específicas do sinal de entrada, facilitando a detecção caso a sinal não seja periódico.

Controles de trigger avançados permitem isolar eventos específicos de interesse para otimizar a taxa de amostragem.

Os controles de nível e inclinação do trigger fornecem o ponto básico e determinam como a onda será exibida na tela. O circuito de trigger funciona como um comparador, em que se seleciona o nível de tensão de entrada. Se esta tensão estiver dentro do limiar entre os valores mínimos e máximos e a inclinação (borda de subida ou descida) for selecionada o disparo é então iniciado. A Figura 3 exibe um comparativo entre as formas de onda sem e com trigger.

Fonte: (XYZ OF OSCILLOSCOPES, 2019) Figura 3 - Formas de onda sem e com trigger

(26)

2.2.7 FFT – Fast Fourier Transform

Entre as principais funções de um osciloscópio está a Transformada de Fourier em seu modelo discreto que permite a visualização de formas de onda no domínio da frequência. Como o processamento das informações é muito oneroso foi criado um algoritmo denominado FFT (Fast Fourier Transform).

Ao longo dos anos o tempo computacional dos algoritmos passou a exigir um custo de processamento da ordem de .

Segundo INGLE e MONOLAKIS (2011), como o tempo de computação dos algoritmos se torna muito grande para valores maiores de N, é preciso encontrar algoritmos computacionais que reduzam o número de operações. No passado, a complexidade computacional era dominada principalmente pelo número de multiplicações, seguida pelo número de adições como uma medida de complexidade computacional. No entanto, com a tecnologia atual de computadores, arquitetura e design de compiladores outros fatores também são considerados na implementação para redução da complexidade computacional.

Conhecido como FFT, esses algoritmos usam uma abordagem “dividir e conquistar”, ou seja, decompõem a DFT (Discrete Fourier Transform) que demanda um tempo de processamento maior, em uma sequência de comprimento N em DFTs de menor comprimento que “mescladas” podem reconstituir novamente a FFT.

A maioria dos algoritmos para computação eficiente da DFT exploram a periodicidade e simetria. Estas propriedades são:

= ( ) = ( ) (periodicidade em k e n) (2.4)

( ) = = ( ) (simetria do complexo conjugado) (2.5)

Onde:

representa o twiddle factor (termo matemático que representa os coeficientes constantes trigonométricos que são multiplicados no decorrer do algoritmo).

(27)

As propriedades de periodicidade e simetria da matriz de DFT podem ser visualizadas representando cada twiddle factor como um fasor no plano complexo. Para uma matriz " a representação assume a seguinte forma, na qual o ângulo fasorial de 0 é mostrado verticalmente para cima e o fasor gira no sentido horário, como demonstrado na Figura 4.

Na Figura 5 é demonstrado como explorar a estrutura da matriz para desenvolver algoritmos eficientes para cálculo da DFT, assim tem-se:

Nota-se que se ao alterar a ordem das colunas da matriz e os elementos do vetor do lado direito isto não altera o resultado o final. Deste modo se pode colocar as colunas para as amostras #[0], #[2], #[4], #[6] (pares) primeiro e depois as colunas

Fonte: (INGLE; MANOLAKIS, 2011)

Fonte: (INGLE; MANOLAKIS, 2011) Figura 4 - Representação Fasorial da DFT

(28)

para #[1], #[3], #[5], #[7] (ímpares). Usando a identidade ", = −1 e reorganizando a matriz visualizada na Figura 6 se obtém:

Assim a matriz anterior pode ser particionada em uma matriz 2x2 com 4x4 blocos. Usando a identidade " = ,, expressasse as equações da seguinte forma:

.//012 = 3 , 4" , , −4" ,5 .

#6

#72 (2.6)

Onde , é a matriz DFT de 4 pontos e 4" a matriz diagonal, em que cada uma é representada como:

,= ⎣ ⎢ ⎢ ⎡1 11 , 1, 1, 1 , 1 , 1 , , ,⎦ ⎥ ⎥ ⎤ e 4" = ⎣ ⎢ ⎢ ⎡1 00 " 0 00 0 0 0 0 0 0" 0"⎦ ⎥ ⎥ ⎤ (2.7)

Usando os subscritos T, B, E e O, denotando superior, inferior, par e ímpar respectivamente como entradas do vetor, definido para N/2 pontos da DFT (N=8), assim se obtém:

/6 = #6 (2.8)

/7 = #7 (2.9)

A DFT para N- pontos da equação 2.6 pode ser expressa como:

/0 = /6+ 4 /7 (2.10)

/1 = /6+ 4 /7 (2.11)

Fonte: (INGLE; MANOLAKIS, 2011) Figura 6 - Matriz da DFT Reorganizada

(29)

Na Figura 7, é representado o fluxograma do algoritmo da FFT.

2.3 DMA – Acesso Direto à Memória

O emprego de interrupções resolve o problema de determinar o momento exato em que um dispositivo de entrada e saída necessita da atenção do processador, entretanto não auxilia na execução de outra tarefa bastante importante nas operações de entrada e saída: a transferência de dados. O processador ainda é responsável pela leitura dos valores na interface (controlador) e por sua transferência a memória, ou pela leitura na memória e transferência para a interface. Quando o volume de dados a ser transferido é elevado, esse procedimento torna-se ineficaz pois, além de envolver o processador, essa transferência representa dois movimentos de dados: um da interface (controlador) ao processador, e outro do processador à memória. Uma solução para isto é transferir diretamente os dados da interface (controlador) para a memória. Esse mecanismo é conhecido como acesso direto à memória (DMA – direct memory access) (OLIVEIRA; CARISSIMI; TOSCANI,2010).

Fonte: (INGLE; MANOLAKIS, 2011) Figura 7 - Algoritmo FFT

(30)

A técnica de DMA baseia-se no emprego de um hardware especial, o controlador de DMA, para realizar a transferência de dados entre um dispositivo de entrada e saída e a memória. Para tanto o controlador de DMA deve possuir a capacidade de acessar diretamente a memória, sendo então conectado fisicamente ao barramento de dados e de endereços. O controlador de DMA possui internamente uma série de registradores utilizados pelo processador para programar a transferência de dados. Tipicamente, encontra-se um par de registradores para o armazenamento dos endereços, fonte e destino da transferência, um registrador que irá determinar quantos dados devem ser transferidos, além de registradores de comando e estado (OLIVEIRA; CARISSIMI; TOSCANI,2010).

Para que ocorra uma transferência de DMA é necessário que, em primeiro lugar, o processador inicialize o controlador de DMA fornecendo informações como quantidade dados a transferir (tamanho do bloco), a origem e o destino destes blocos, e ainda qual o sentido da transferência, se memória para o dispositivo ou vice-versa. Após essa programação, o processador dispara a execução da DMA, iniciando a transferência. Enquanto o controlador de DMA efetua a transferência, o processador pode dedicar-se a outra tarefa. Ao término da transferência, o controlador de DMA sinaliza o processador através de uma interrupção de hardware (OLIVEIRA; CARISSIMI; TOSCANI,2010).

Em seguida é apresentado um fluxograma (Figura 8) de como ocorre o acesso direto à memória.

Fonte: Autoria Própria

(31)

2.4 COMUNICAÇÃO SERIAL SÍNCRONA

Os protocolos de comunicação são invariavelmente utilizados em diversas áreas tecnológicas, pois se caracterizam pelo transporte de informação entre dispositivos. Entre os diversos protocolos existentes estão o I2C, SPI e UART.

Para a elaboração deste trabalho o protocolo que servirá de comunicação entre as placas de desenvolvimento será o SPI, ou seja, Serial Peripheral Interface.

Segundo MAZIDI, NAIMI, NAIMI (2011) algumas terminologias são adotadas no que se refere ao protocolo de comunicação serial dentre eles podem ser citados:

 Half-duplex e full-duplex: Em uma transmissão, quando os dados podem ser recebidos e transmitidos, os mesmos recebem a denominação de duplex. Este tipo de transmissão pode ser dividido em duas categorias: half-duplex, onde os bytes podem ser transmitidos apenas um de cada vez, como é o caso do UART e full-duplex, onde os dados podem ser transmitidos e recebidos simultaneamente, sendo o protocolo SPI um exemplo disso.

O protocolo SPI como foi exposto opera em full-duplex, este protocolo foi desenvolvido pela Motorola. Diferente dos protocolos UART e I2C, o SPI opera com taxas de transmissão bastante elevadas superiores a 10 MHz. Desta maneira ele pode transferir dados sem interrupção através de um fluxo contínuo de bits, ao contrário da UART e I2C onde é necessário determinar bits de início e término.

No SPI cabe ressaltar que entre os dispositivos de comunicação sempre existirá um dispositivo mestre que gera o relógio e um ou mais escravos.

O funcionamento do protocolo é síncrono, ou seja, ele usa conexões separadas para os dados e um relógio compartilhado para manter o mestre e escravos sincronizados. O relógio compartilhado funciona como um sinal oscilante que informa ao receptor quando amostrar os bits de dados. Um bit de dados é transferido em cada ciclo do relógio, o que significa que a velocidade da transferência de dados está sendo determinada pela frequência do sinal do relógio que está sendo gerado pelo mestre.

Quando o escravo receptor detectar o sinal do relógio, ele estará pronto para ler os bits de dados na linha dos dados.

(32)

O sinal proveniente do relógio poderá ser modificado usando as propriedades da polaridade e fase do relógio, que funcionam em conjunto para definir quando os bits são emitidos e quando são amostrados.

O SPI é composto de 4 linhas para comunicação entre mestre e escravo, observado na Figura 9, sendo eles:

 MISO e MOSI – são linhas de dados em que MOSI é responsável por transmitir dados do mestre para o escravo e MISO tem a finalidade de transmitir dados do escravo para o mestre. Quando o escravo precisar retornar uma resposta ao mestre, ele primeiro gerará um número previamente combinado de ciclos de relógio antes de o escravo transmitir dados na linha MISO;

 SCLK – é o sinal de relógio propriamente dito, é gerado pelo mestre para o escravo para sinalizá-lo que já é possível ler os bits de dados. Como dito anteriormente apenas um mestre fica encarregado de gerar o sinal do relógio para um ou mais escravos;

 SS/CSS – tem a mesma funcionalidade que o chip select, usado como uma função de endereçamento. Ele seleciona qual escravo irá receber os dados.

Fonte: (SPARKFUN, 2019) Figura 9 - Conexão SPI

(33)

Como pode ser observado a linha SS normalmente é mantida alta, o que desconecta o escravo do barramento SPI, essa lógica é utilizada para redefinir as linhas.

2.4.1 Múltiplos escravos

Existem duas maneiras de conectar vários escravos a um barramento SPI:  Em geral cada escravo precisará de uma linha separada. Para se comunicar com um escravo em particular, será necessário colocar a linha em nível baixo e o restante em nível alto, como é demonstrado na Figura 10.

 Outra forma de conexão, ilustrada na Figura 11, é quando ocorre em encadeamento, onde a MISO (saída) é conectada a MOSI mais próxima. Neste caso a linha SS é compartilhada entre escravos e mestre. Este tipo de configuração permite que todos os escravos recebam os mesmos dados e é geralmente utilizada em pequenas aplicações como o acionamento de LEDS.

Figura 10 - Conexão de múltiplos escravos - linha SS

Fonte: (SPARKFUN, 2019)

Fonte: (SPARKFUN, 2019)

(34)

2.4.2 Polaridade de Clock e Polaridade e Fase

No protocolo SPI o mestre pode selecionar a polaridade e a fase do relógio. O CPOL bit define a polaridade do sinal do relógio durante o estado inativo. O estado inativo é definido como o período em que o CS está em nível alto fazendo a transição para o nível baixo no início da transmissão e quando CS estiver em nível baixo para nível alto no fim da transmissão.

O bit CPHA, é definido como a borda utilizada pelo relógio podendo ser de subida ou descida, sendo ela utilizada para amostrar ou mudar os dados. O mestre deve selecionar a polaridade do relógio, conforme a exigência do escravo. Dependendo do bit CPOL e CPHA, na seleção quatro modos estarão disponíveis conforme a Tabela 1.

Tabela 1 – Modos SPI SPI

Mode CPOL CPHA Polaridade de Clock em Idle Polaridade de Fase

0 0 0 Nível lógico baixo Dados amostrados na borda de subida e alterados na borda de descida

1 0 1 Nível lógico baixo

Dados amostrados na borda de descida e alterados na borda de

subida

2 1 1 Nível lógico alto Dados amostrados na borda de descida e alterados na borda de subida

3 1 0 Nível lógico alto Dados amostrados na borda de subida e alterados na borda de descida

Fonte: (ANALOGUE DIALOGUE, 2019)

2.5 CONVERSOR ANALÓGICO DIGITAL

De acordo com MAZIDI, NAIMI e NAIMI (2011) conversores analógicos digitais são dispositivos mais amplamente utilizados para aquisição de dados. Computadores digitais usam valores binários (discreto), mas no mundo real tudo é analógico. Temperatura, pressão, umidade, e velocidade são alguns exemplos. Uma

(35)

quantidade física é convertida em um sinal elétrico (tensão, corrente) usando um dispositivo denominado transdutor. Transdutores também são referidos como sensores. Sensores de temperatura, velocidade, pressão, luz entre outros produzem uma saída de tensão (ou corrente). Entretanto, precisamos de um conversor analógico digital para traduzir os sinais analógicos para números digitais para que o microcontrolador possa lê-los e processá-los.

2.5.1 Resolução

Um conversor analógico digital (analog to digital converter – ADC) possui n-bit de resolução, onde n pode ser 8,10,12,16, ou mesmo 24 bits. Maiores resoluções do ADC fornecem menor step size, que diz respeito à diferença de tensão entre um nível de tensão e o próximo. Cabe ressaltar que a resolução de ADC não pode ser alterada.

2.5.2 Tempo de Conversão

Além da resolução, tempo de conversão é outro fator de um ADC. É definido como o tempo em que o ADC converte o sinal analógico para um número digital (binário) e é ditado pelo clock da fonte conectada ao ADC.

2.5.3 Tensão de referência

Tensão de referência ( >?) é a tensão de entrada usando como referência. A tensão conectada ao pino, juntamente a resolução do ADC, determina o tamanho da etapa (step size). Para 8-bit o step size é >?/256, sendo 2 elevado a 8, resultando em 256. A relação tensão de referência e step size pode ser observada na Tabela 2.

(36)

Tabela 2 - Tensão de referência >?( ) A BCDEF( ) GHFI GJ F (K ) 5,00 0 a 5 5/256 = 19,53 4,0 0 a 4 4/256 = 15,62 3,0 0 a 3 3/256 = 11,71 2,56 0 a 2,56 2,56/256 = 10 2,0 0 a 2 2/256 = 7,81 1,28 0 a 1,28 1,28/256 = 5 1,0 0 a 1 1/256 = 3,90 GHFI LJ F >?/256

Fonte: (Adaptado de MAZIDI; NAIMI; NAIMI, 2011)

2.5.4 Saída de dados digital

Em um ADC de 8-bit, a saída digital é representada por D0-D7. Para calcular o valor da saída digital, se utiliza a seguinte fórmula:

4MNO = LHFI LJ FA (2.12)

Onde:

4MNO = saída digital (em decimal);  A = entrada analógica de tensão;  LHFI LJ F = resolução.

2.5.5 Canais de entrada analógicos

Muitas aplicações de aquisições de dados necessitam mais do que um ADC. Por esta razão, temos ADC com 2,4,8 ou mesmo 16 canais em um único chip. Entradas analógicas multiplexadas são as mais utilizadas, onde existe a combinação de dois ou mais canais de informação por apenas um meio de transmissão.

(37)

2.5.6 Aproximações Sucessivas

Segundo LANOT (2014) a técnica de aproximações sucessivas consiste em utilizar um algoritmo de busca binária que percorre os possíveis níveis de quantização do sinal analógico amostrado. Para isto um circuito deve fornecer níveis de tensões que serão comparados com o sinal analógico de entrada. Tais níveis são gerados através de frações de uma tensão de referência pré-determinada, que podem ser obtidas através de diversas técnicas, como por exemplo uma rede R-2R, ou capacitores chaveados.

Para o funcionamento correto do algoritmo, é necessário um circuito que irá efetuar decisões de acordo com as comparações realizadas no processo. Tal circuito é denominado lógica de controle. Esta lógica irá decidir os níveis de tensões a serem comparados com o sinal de entrada até convergir no valor binário desejado. O termo “Register” da sigla SAR (Successive Approximation Register) vem do fato que o resultado é armazenado em registradores.

2.6 PROTOCOLO TCP/IP

Devido a comunicação do aplicativo para celular se basear integralmente no protocolo de comunicação de TCP/IP se faz necessário abordar os conceitos presentes neste tipo de comunicação.

De acordo com FOROUZAN, Transmission Control Protocol (TCP) é um protocolo confiável e orientado a conexão. O TCP define explicitamente as fases de estabelecimento da conexão, transferência de dados e encerramento. Para fornecer confiabilidade ele utiliza uma ferramenta denominado checksum (verificação de erro), retransmissão de pacotes perdidos ou corrompidos, confirmações cumulativas e seletivas e temporizadores. O TCP é o protocolo mais comum da camada de transporte na Internet.

O TCP é um protocolo orientado ao fluxo. Assim sendo ele permite que o processo de envio entregue dados como um fluxo de bytes e permite que o processo

(38)

de recebimento obtenha dados também como um fluxo de bytes. O protocolo cria um ambiente que estabelece uma conexão entre dois processos, na Figura 12 é possível verificar como ocorre o processo de conexão.

2.6.1 Buffer de envio e recebimento

Como os processos de envio e recebimento podem não necessariamente escrever ou ler dados na mesma taxa, o TCP precisa de buffers de armazenamento. Existem dois buffers, um para envio e outra para recepção, um em cada direção. A maneira de implementar um buffer é usar uma matriz circular de 1 byte.

A Figura 13 mostra o movimento dos dados em uma direção. No remetente, o buffer possui três tipos de seções. A seção branca contém espaços vazios que podem ser preenchidos pelo processo de envio. A seção azul contém os bytes que

Fone: (FOROUZAN, 2013)

Fonte: (FOROUZAN, 2013) Figura 12 - Conexão de processo TCP/IP

(39)

foram enviados, mas ainda não reconhecidos. O remetente TCP mantém esses bytes no buffer até que receba um reconhecimento. Por fim a seção sombreada contém os bytes a serem enviados. No entanto o protocolo poderá apenas enviar parte de conteúdo desta seção. Isso ocorre devido a lentidão do processo de recebimento ou congestionamento da rede. Observe que, após os bytes das seções coloridas serem reconhecidas, as seções são reutilizadas e disponíveis novamente para o processo de envio (FOROUZAN, 2013).

2.6.2 Servidor

FOROUZAN explica que um programa rodando uma estação remota provém serviços aos clientes. Quando é iniciado ele permite que ocorra as requisições por parte dos clientes, mas nunca inicia um serviço até que seja solicitado.

Um programa servidor executa continuamente, até que um eventual problema surja. Quando uma solicitação acontece, ele pode responder simultaneamente ou iterativamente.

2.6.3 Cliente

Um programa rodando em uma máquina local realiza requisições de serviço para o servidor. Um programa cliente tem duração finita, o que quer dizer que será iniciado pelo usuário (ou outra aplicação) e termina sua execução quando o serviço é completo. Normalmente, o cliente abre o canal de comunicação usando um endereço de IP do host remoto. Após o canal de comunicação estar aberto, o cliente envia a requisição e recebe a resposta. Entretanto a requisição e a resposta podem ser repetidas por diversas vezes, todo processo realizado é de duração finita e eventualmente chegará ao fim.

(40)

2.7 PLACA DE DESENVOLVIMENTO RASPBERRY PI

O Raspberry Pi é uma placa de desenvolvimento concebida pela Raspberry Pi Foundation, sediada no Reino Unido que tem por suas palavras colocar o poder da computação e da criação digital nas mãos das pessoas. Trabalham com a premissa de fornecer computadores de baixo custo e alto desempenho.

Os primeiros modelos foram lançados entre 2012 e 2013 e possuíam um processador ARM de 700 MHz, com 256 MB de RAM e suporte para cartões SD. Na Figura 14 é possível observar o design da primeira versão.

Com o desenvolvimento da tecnologia novas versões foram lançadas, a versão utilizada neste trabalho é a Raspberry Pi 3 Model B+, umas das mais recentes. Assim como suas antecessoras ela dispõe de protocolos de comunicação serial UART, I2C e SPI.

Um detalhe importante é que se torna possível a instalação de um sistema operacional no cartão SD, permitindo assim mais facilidades aos usuários iniciantes. O sistema operacional utilizado para a realização deste trabalho é o Raspbian.

Fonte: (RASPBERRY PI FOUNDATION, 2020) Figura 14 - Primeira Versão do Raspberry Pi

(41)

Na Figura 15 observa-se os pinos de saída da placa Raspberry Pi 3 Model B+.

Abaixo seguem as especificações mais relevantes da placa de desenvolvimento:

 Processador Broadcom BCM2837B0, Cortex-A53, 64 bits SoC @ 1,4 GHz;  Memória 1 GB LPDDR2 SDRAM;

 40 pinos GPIO Header;

 Alimentação – 5V/2,5A DC via conector micro USB;  Saída de Vídeo HDMI full size;

 Suporte a dispositivos portáteis como cartão micro SD e flash drive;  2,4 GHz e 5 GHz IEEE 802.11.b/g/n/ac wireless LAN;

 Gigabit Ethernet (taxa máxima de 300 Mbps).

Fonte: (Adaptado de RASPBERRY PI FOUNDATION, 2020) Figura 15 - Pinout Raspberry Pi 3 B+

(42)

Figura 16 - Placa STM32F407 Discovery e diagrama de blocos 2.8 PLACA DE DESENVOLVIMENTO STM32F407 DISCOVERY

O STM32F407 Discovery foi utilizado neste trabalho como placa de suporte, pois apesar das diversas possibilidades oferecidas pelo Raspberry Pi, o mesmo não conta com um conversor analógico digital. Por este motivo foi escolhida devido as suas especificações de hardware e a possibilidade de utilizar o ADC em conjunto com a DMA, fornecendo maior capacidade leitura e escrita independente da CPU, sendo imprescindível em nosso projeto, pois necessitamos de grande velocidade na aquisição de dados.

Segundo informações da fabricante STMicroelectronics esta linha de placas foi projetada para aplicações médicas, industriais e de consumo, nos quais é necessário alto nível de integração e desempenho, garantindo eficiência energética e baixo consumo de corrente.

Na Figura 16 estão ilustrados os pinos de placa e suas respectivas funções. Cabe ressaltar que a função dos pinos poderá ser selecionável, tópico que será abordado nos próximos capítulos.

(43)

Segue logo abaixo algumas especificações da placa STM32F407 Discovery:

 Processador ARM Cortex – M4, 32-bit com memória flash 1-Mbyte, 192-Kbyte de RAM;

 Fonte de alimentação USB 3V e 5V DC;

 15 interfaces de comunicação (incluindo 6x USARTs executando até 11,25 Mbit/s, 3x SPI executando até 45 Mbit/s, 3x I2C);

 17 temporizadores: 16 e 32 bits em execução até 168 MHz;

 Analógico: 2 DACs de 12 bits, 3 ADCs de 12 bits atingindo 2,4 MS/S ou 7,2 MS/S no modo de intervalo;

(44)

DESENVOLVIMENTO DO OSCILOSCÓPIO DIGITAL

3.1 INTRODUÇÃO

Neste capítulo será abordado o desenvolvimento do código para a placa STM32F407, que irá realizar a aquisição dos dados de medição através do ADC em conjunto com a DMA. Também será explicado como ocorreu a elaboração da interface gráfica no Raspberry Pi e quais ferramentas de criação foram utilizadas.

No decorrer do capítulo será apresentada a interface de criação usando o Qt Creator.

3.2 STM32F407 – COMUNICAÇÃO ADC DMA SPI

A finalidade da placa STM32F407 se resume à aquisição de dados via ADC e consequente envio das informações coletadas via DMA e logo em seguida inicia-se o processo de comunicação serial através do protocolo SPI. Neste momento utilizou-se a ferramenta gráfica STM32CubeMX deutilizou-senvolvida pela STMicroelectronics, a qual tem como principal função a inicialização de funções e estruturas.

Para a configuração do ADC foram realizadas a seguintes alterações exibidas na Figura 17.

Fonte: Print screen do programa STM32CubeMX Figura 17 - Configuração ADC

(45)

Foi necessária a configuração da DMA no modo circular para suportar um fluxo contínuo de dados, pois a fonte, o endereço de destino e o número de dados a serem transferidos são recarregados automaticamente após a transferência completa. Deste modo é possível enviar os dados coletados pelo ADC através da interface SPI. Cabe ressaltar que foram utilizados dois canais de ADC para aquisição dos valores de tensão e que a resolução do ADC foi escolhida para ser executada em 8 bits devido ao transporte de dados via protocolo serial.

Da mesma forma alguns parâmetros de configuração foram também selecionados para a comunicação SPI como full-duplex slave, pois o Raspberry Pi só permite a configuração como mestre e o recebimento do fluxo de dados pela DMA também em modo circular.

Outro detalhe é que foram utilizadas duas interfaces SPI, uma para cada ADC desta forma ocorre um fluxo de dados independente.

Na Figura 18 é possível observar a interface de configuração de clock.

Para se definir a taxa de amostragem do sinal foi utilizada a seguinte fórmula de acordo com o datasheet do STM32F407:

HPHCQ_S4T_LCKI_HJKF = LCKI_HJKF +1UQPUV UWUQFXJH_P _YFL ∗ XJHL_P _YFL (3.1)

S4TTZ[ = \ZT[2/IYFLUCQFY (3.2)

Considerando uma resolução de 8 bits (11 ADC Clock cycles) com PCLK2 = 36Mhz e prescaler = 2 assim se obtém:

HPHCQ_S4T_LCKI_HJKF = 3 + 8XJHL = 3 + 8 = 11 S4TTZ[ UWUQFL Figura 18 - Configuração de clock

(46)

S4TTZ[ = 36^ /2 = 18 ^ 1/18^ = ~55,56DL/UQPUV UWUQF

11 S4TTZ[ UWUQFL ∗ 55,56DL/UQPUV UWUQF = 61,11`L

LCKIQF O> =61,11`L = 1,636 ^1 (3.3) Por fim foi definido o temporizador de coleta de dados com valor de prescaler de 36000, assim a fonte de frequência do contador será 144MHz/36000. Como o contador será de 400, a interrupção acontece a cada 100 ms.

Após gerados os parâmetros inicias se utilizou a IDE Keil para compilação e desenvolvimento do restante do código. Os códigos parcialmente gerados pelo STM32CubeMX estão no formato HAL que segundo a STMicroelectronics é composta de APIs genéricas capazes de interagir em várias instâncias e que garantem a fácil portabilidade entre dispositivos.

Na Figura 19 verifica-se o acréscimo da função de callback, que tem por finalidade continuar a execução do código após o evento ter sido iniciado, neste caso ela terá a função de armazenar os valores coletados pelo buffer.

Na inicialização do método main são chamadas as funções conforme a Figura 20 que tem as funções de coleta de dados do ADC usando a DMA, o evento do temporizador e posterior envio de dados via protocolo SPI respectivamente. A cada chamada da função do SPI o loop é executado até que a transferência termine.

Figura 19 – Função de callback

Figura 20 – Função HAL SPI Fonte: Autoria Própria

(47)

3.3 CONTAGEM DE PULSOS

Quando se está operando em altas frequências as técnicas de cálculo de período através do cruzamento de eixos não são tão precisas levando a valores pouco confiáveis. Desta forma utilizando a placa STM32F407 foi realizada a técnica de contagem de pulsos. Dois temporizadores são acionados por interrupção conforme trecho de código na Figura 21.

A premissa de cálculo se resume da seguinte forma, sempre que uma borda de subida é detectada, uma função de callback é acionada. Dentro da função caso o temporizador esteja ativo o valor capturado é armazenado em uma variável. Para calcular a frequência leva-se em conta o clock interno do microcontrolador. O processo é visualizado na Figura 22.

Como a variável de armazenamento é de 32 bits foi necessário dividir a variável de frequência em 4 partes de 8 bits, enviá-las pela interface SPI e reconstruí-la posteriormente para 32 bits. A função é acionada na interrupção do temporizador, como é observado na Figura 23.

Figura 22 - Função de callback do temporizador

Figura 23 - IRQ do temporizador Fonte: Autoria Própria Figura 21 – Função Time Start

Fonte: Autoria Própria

(48)

3.4 QT CREATOR E QCUSTOMPLOT

Para a elaboração da interface gráfica foi utilizada a IDE open source Qt Creator, esta IDE é totalmente voltada para aplicações envolvendo sistemas embarcados. Na interface de design é possível criar objetos, textos e botões de forma rápida e eficiente, na Figura 24 é possível observar alguns recursos da IDE.

No desenvolvimento de um osciloscópio, é necessária a utilização de um gráfico em tempo real que nos possibilita manipular e ajustar as formas de onda apresentadas na tela. Para isso utilizamos uma biblioteca denominada QCustomPlot, elaborada em C++, ela permite criar gráficos que possibilitem a interação com o usuário. Na Figura 25 são ilustrados alguns exemplos de aplicações.

Fonte: Print screen da biblioteca gráfica QCustomplot Figura 25 - Exemplos de gráficos QCustomplot

Figura 24 - Recursos do Qt Designer

(49)

3.5 INTERFACE GRÁFICA DO OSCILOSCÓPIO

O fluxograma geral de operação do osciloscópio se apresenta na Figura 26. Salientando que como o sistema é acionado baseando-se em eventos e temporizador, o fluxograma apresentará as principais funções necessárias para seu funcionamento.

Fonte: Autoria Própria Figura 26 - Fluxograma Geral

(50)

3.5.1 Aquisição de Dados

Inicialmente uma das primeiras etapas de desenvolvimento da interface gráfica do osciloscópio foi estabelecer a comunicação SPI com a placa STM32F407, para isto foi criada uma biblioteca spi_port. Como pode ser observado no trecho de código da Figura 27. Para coleta dos dados provenientes do ADC, a função spi_reader é lida periodicamente através de eventos.

A função SpiWriteAndRead permite que a cada chamada sejam recebidos novos dados. Devido a leitura simultânea de dois canais, os mesmos foram separados em dois vetores que armazenam estas informações diretamente do buffer. No processo de leitura o deslocamento de tensão DC é levado em consideração. Os quatro primeiros bytes são informações relativas à contagem de pulsos que foi explicado anteriormente.

A próxima etapa de desenvolvimento foi utilizar as ferramentas do Qt Creator para criar o modelo de interface, apresentado na Figura 28.

Fonte: Autoria Própria

(51)

Para que os dados recebidos fossem desenhados na tela foi utilizada função Signal/Slot do Qt que tem a finalidade de se comunicar entre dois objetos, esse método de comunicação consiste em emitir um sinal de determinada função para que outra retorne uma chamada, ou seja, permite que dois objetos se comuniquem. Na configuração de chamadas da função foi utilizada um temporizador que a cada 16 ms executa a função reatimeDataSlot.

Em se tratando da aquisição de pontos pela interface no trecho de código, presente na Figura 29, é possível visualizar através da função addData. Cabe ressaltar que em conjunto com a addData foi utilizada a função replot para que a forma de onda permaneça em movimento.

Fonte: Autoria Própria Fonte: Autoria Própria Figura 28 - Interface do osciloscópio

(52)

3.5.2 Display de Leitura

Utilizando-se dos conceitos abordados no Capítulo 2 no que se refere ao período, frequência, tensão média entre outros, foi elaborada as opções de leitura dos parâmetros elétricos do osciloscópio. A premissa básica da função de leitura, vista no trecho de código da Figura 30, é encontrar o período entre três pontos que cruzam o eixo para depois verificar se este ponto permite a leitura. Assim como as outras funções explicitadas anteriormente ela depende da execução de um temporizador exclusivo, que se inicia a cada intervalo de tempo de 100 ms.

As informações referentes à frequência são obtidas nos quatro primeiros bytes recebidos pela SPI e posteriormente reconstruído em uma variável double.

Como forma de prevenir que o loop seja executado até o final, pois o número de pontos é extremamente alto, foi criada uma condicional que interrompe o loop quando o período for encontrado. Quanto a leitura de frequência a mesma é realizada pela placa STM32F407 pela premissa de contagem de pulso.

Fonte: Autoria Própria

(53)

3.5.3 Trigger

A finalidade do trigger em osciloscópio é permitir que a forma de onda seja exibida na tela de forma estacionária. No osciloscópio desenvolvido o trigger foi elaborado via software, conforme código da Figura 31. A função responsável por seu acionamento leva em consideração algumas situações sendo elas: a borda de subida ou descida (rising edge ou falling edge), o nível de disparo e o canal selecionado. A premissa de acionamento acontece quando o botão trigger é pressionado. Assim como a função de cálculo dos parâmetros elétricos o trigger percorre todo o vetor de dados para encontrar o ponto de disparo.

Quando esta função é chamada o vetor de tempo é zerado e o desenho da forma de onda percorre somente até o fim da tela, reiniciando logo em seguida.

Nas Figuras 32 e 33 são apresentados o funcionamento do trigger bem como seu fluxograma.

Fonte: Autoria Própria Figura 31 - Função de trigger

(54)

Fonte: Autoria Própria

Figura 33 - Fluxograma Trigger

(55)

3.5.4 Controles Horizontais e Verticais

A interface gráfica do osciloscópio permite seleção de tempo base através do controle horizontal, correspondendo ao intervalo entre 50DL e 2L. Além do modo de ajuste horizontal para cada canal existe um controle similar vertical permitindo selecionar a escala de tensão exibida no gráfico. Estas rotinas de controle estão ligadas ao sistema Signal/Slot que foi explicado anteriormente. Além dos supracitados controles existem também os botões de Auto que tem a finalidade de condicionar a imagem ao espaço delimitado pelo gráfico. No QCustomplot existe uma função que realiza esta operação denominada rescale. Para o botão Run/Stop foi implementada uma flag que ativa e desativa o temporizador.

3.5.5 Operações Matemáticas

Nos osciloscópios atuais existem operações matemáticas entre os canais. No programa desenvolvido foi estruturada as seguintes operações exibidas na Figura 34, sendo selecionadas através da interface.

Fonte: Autoria Própria Figura 34 - Operações Matemáticas

(56)

Em relação ao código programado existe um loop que é verificado se uma das operações foi selecionada, caso seja, os dados são apresentados na tela em um novo gráfico. O código representando as operações pode ser verificado na Figura 35.

3.5.6 Transformada de Fourier

Como prerrogativa para a maioria dos osciloscópios foi desenvolvida a opção de gráficos da Transformada de Fourier, utilizando o algoritmo de FFT “dividir e conquistar” explicado no capítulo anterior. As opções existentes no programa são as seleções de canais, onde a forma de onda é apresentada individualmente na tela e rescale que enquadra a forma de onda dentro da tela de exibição. Um exemplo do gráfico exibido é mostrado na Figura 36.

Fonte: Autoria Própria Figura 35 - Código de operações

(57)

No que se refere ao código, presente na Figura 37, sua implementação é bastante semelhante aos gráficos no domínio do tempo. Os pontos são coletados pela biblioteca spi_port, logo em seguida são armazenados em buffer. A partir deste momento os dados passam pela função realtimeDataFFT, que por sua vez realiza a chamada da função fast_fourier_transform. Neste momento através de operações utilizando recursividade os dados são recombinados e apresentados na tela.

Fonte: Autoria Própria Fonte: Autoria Própria Figura 36 - Gráfico da FFT

(58)

3.5.7 Menu de opções – Salvar e Carregar dados

Um dos objetivos deste trabalho, foi implementação da opção de gerar relatórios das formas de onda. Nele é possível determinar o local onde serão salvos estes dados, sejam em um pen drive ou no próprio sistema operacional do Raspberry Pi contido no cartão micro SD.

O número de pontos salvos no relatório depende diretamente do tamanho do buffer serial. O arquivo será gerado com a extensão *.csv e poderá ser aberto por qualquer software de planilha eletrônica. O trecho de código da Figura 38 exibe a estrutura da função de relatórios.

Cabe ressaltar que o nome do arquivo será gerado automaticamente com o dia corrente e hora exata da operação.

Também é possível salvar o estado atual do gráfico através do botão Save. A imagem salva conterá o desenho da forma de onda e informações relativas aos parâmetros elétricos medidos. O segmento de código referente a opção de salvar a forma de onda pode ser visto na Figura 39.

Fonte: Autoria Própria

(59)

Entre as opções destacadas é possível reconstituir a forma de onda através de uma planilha com a extensão *.csv previamente formatada. A Figura 40 demonstra o funcionamento do menu de opções.

Fonte: Autoria Própria Fonte: Autoria Própria

Figura 39 - Código para salvar forma de onda

(60)

3.5.8 Funções adicionais

Algumas funções adicionais foram implementadas neste projeto. A primeira delas é a função de interação com gráfico, onde é possível selecionar qualquer um dos eixos verticais ou horizontais e manipular a área de plotagem. Aumentado a proporção ou alterando a base de tempo enquanto o gráfico está em modo pausa. Esta ferramenta é muito importante para salvar a forma de onda em determinada parte do gráfico. Outra opção merece ser destacada é o botão View Position, que exibe as coordenadas da forma de onda no gráfico com valores instantâneos.

3.6 APLICATIVO PARA CELULAR

Para o desenvolvimento do aplicativo para celular foi necessário a adição do kit de desenvolvimento SDK. Este programa possibilita o vínculo com o Qt Creator permitindo que seja criado o aplicativo no formato suportado pelo Android. Assim sendo, todo o código foi elaborado em C++ e posteriormente convertido para a linguagem suportada pelo sistema operacional.

Como premissas iniciais ficou estabelecido que a interface não teria tantas opções como o programa rodando no Raspberry Pi, desta somente as funções essenciais de funcionamento foram implementadas para que o aplicativo não deixasse de ser responsivo. Toda a estrutura de design foi criada através das ferramentas presentes no Qt Designer.

Como a tela de celular possui uma densidade de pixels relativamente grande, se fez necessário usar a propriedades de alta densidade presentes no Qt Creator, caso contrário o aplicativo teria problemas de resolução durante sua exibição.

(61)

3.6.1 Protocolo de Comunicação TCP/IP

Entre as prerrogativas para o correto funcionamento do aplicativo foi necessário estabelecer a comunicação do mesmo com o Raspberry Pi através do protocolo TCP/IP.

3.6.2 Servidor

O Raspberry Pi executa a função de servidor, onde recebe os dados através da interface SPI com o formato QByteArray, a partir desta etapa estas mesmas informações são enviadas pela camada de transporte. Em um primeiro momento são estabelecidas as conexões de temporizador selecionadas, para que executem a cada 100 ms e também para o socket. Logo após os dados são continuamente lidos da porta serial SPI através da função spi_reader que por fim os envia por socket. Ressaltando que a porta de comunicação ficou determinada como sendo 3333. Na Figura 42 segue o trecho do código executando esta operação.

Fonte: Autoria Própria

(62)

3.6.3 Cliente

O Android neste ponto irá atuar como cliente somente recebendo os dados enviados pelo servidor. Para que isto ocorra é fundamental definir os parâmetros de conexão do socket através da estrutura connect que irá realizar a leitura dos dados vindos do socket. O processo de aquisição de dados pode ser verificado na Figura 43.

O aplicativo inicia suas operações com o endereço de IP “127.0.0.1” que poderá ser modificado pelo botão TCP na aba Main. Quando selecionado o mesmo habilita uma nova tela, observada na Figura 44. Nesta tela é possível selecionar um novo endereço de IP. Assim o sinal anterior é desconectado do host e então reconectado com um novo endereço. O novo endereço do servidor só será definido após confirmação.

Fonte: Autoria Própria Figura 43 - Socket para recebimento

(63)

3.6.3.1 Funções do aplicativo

As funções presentes no aplicativo são similares às encontradas na versão desktop, porém com algumas ressalvas. Dois canais para o ADC ainda podem ser escolhidos, quanto às informações relativas à tensão média, período, frequência, as mesmas podem ser verificadas no display no canto superior direito da tela. A interface do aplicativo é ilustrada na Figura 45.

Figura 45 - Layout do aplicativo Fonte: Autoria Própria

Figura 44 - Cliente - Janela de configuração de IP

Referências

Documentos relacionados