145
UNIVERSIDADE DE SÃO PAULO ESCOLA DE ENGENHARIA DE SÃO CARLOS DEPARTAMENTO DE ENGENHARIA ELÉTRICA Projeto e construção de um medidor de distorção harmônica total Autor: Julio Cesar Cerri Orientador: Prof. Edson Gesualdo São Carlos 2016

UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Embed Size (px)

Citation preview

Page 1: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

UNIVERSIDADE DE SÃO PAULO

ESCOLA DE ENGENHARIA DE SÃO CARLOS

DEPARTAMENTO DE ENGENHARIA ELÉTRICA

Projeto e construção de um medidor de distorção

harmônica total

Autor: Julio Cesar Cerri

Orientador: Prof. Edson Gesualdo

São Carlos

2016

Page 2: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 3: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Julio Cesar Cerri

Projeto e construção de um medidor de

distorção harmônica total

Trabalho de Conclusão de Curso apresentado

à Escola de Engenharia de São Carlos, da

Universidade de São Paulo

Curso de Engenharia Elétrica

ORIENTADOR: Prof. Edson Gesualdo

São Carlos

2016

Page 4: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

AUTORIZO A REPRODUÇÃO TOTAL OU PARCIAL DESTE TRABALHO,POR QUALQUER MEIO CONVENCIONAL OU ELETRÔNICO, PARA FINSDE ESTUDO E PESQUISA, DESDE QUE CITADA A FONTE.

Cerri, Julio Cesar C417p Projeto e construção de um medidor de distorção

harmônica toral / Julio Cesar Cerri; orientador Edson Gesualdo. São Carlos, 2016.

Monografia (Graduação em Engenharia Elétrica com ênfase em Eletrônica) -- Escola de Engenharia de SãoCarlos da Universidade de São Paulo, 2016.

1. Distorção harmônica. 2. Caracterização de equipamentos de áudio. 3. Filtro notch. 4. Filtro devariáveis de estado. I. Título.

Page 5: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 6: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 7: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Agradecimentos

Agradeço a todos que contribuíram, direta ou indiretamente, para a realização deste trabalho.

Ao meu pai Antonio, à minha mãe Rosemeire e meu irmão João Paulo que sempre me

incentivaram e apoiaram em todos os momentos.

Aos amigos Felipe Marques, Fernando Lahoz, Eric Alcalai e Victória Velame pelo compa-

nheirismo, apoio, e presença nos momentos difíceis - sem vocês a graduação seria muito difícil

e bem menos alegre.

Ao amigo Mauricio Degrande, que gentilmente enviou componentes eletrônicos do exterior

para o Brasil.

Aos colegas da USP São Carlos, de todos os cursos, pelas boas risadas e experiências.

Ao professor e orientador Edson Gesualdo por ter me guiado nas dificuldades.

Ao técnico dos laboratórios Rosenberg da Silva, pela paciência e solicitude, me aturando

por dezenas de horas durante os testes.

A secretária de graduação Jussara Zoia pelo incontável número de informações, sendo sem-

pre muito prestativa.

A todos os professores da USP, que participaram da minha formação acadêmica.

Aos membros da banca.

Julio Cesar Cerri.

Page 8: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 9: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Resumo

O índice de distorção harmônica total é considerado a principal maneira de qualificar a

degradação que um circuito amplificador ou componente eletrônico impõe a um sinal elétrico.

O equipamento que mede essa grandeza é o analisador de distorção harmônica. Ao contrário

dos analisadores de espectro, os analisadores de distorção harmônica são os equipamentos que

fornecem diretamente o valor de (THD+N). Devido à complexidade e o uso específico esses

equipamentos são altamente dispendiosos. O presente trabalho de conclusão de curso propõe

o desenvolvimento e a construção de um medidor de distorção harmônica com capacidade de

realizar medições de THD+N em qualquer frequência do espectro audível. O equipamento visa

o baixo custo final, fornecendo assim uma alternativa aos equipamentos comerciais. Integrado

ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione

varredura em frequência e amplitude, permitindo que o medidor de distorção armazene em um

computador os valores de THD+N para a construção de gráficos de (THD+N) x f e (THD+N)

x Vin. Como principal motivação deste trabalho de conclusão de curso têm-se o estudo e a

construção de um filtro rejeita faixa de sintonia por quadratura, a partir de um filtro de variáveis

de estado.

Palavras-Chave: Distorção harmônica, Filtro notch, Filtro de variáveis de estado, Caracteri-

zação de equipamentos de áudio.

Page 10: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 11: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Abstract

The total harmonic distortion is considered the main way to qualify the degradation that

an amplifier or electronic circuit component enforces to an electrical signal. The equipment

that measures this amount of signal degradation is the harmonic distortion analyzer. Unlike

spectrum analyzers, harmonic distortion analyzers are devices that directly provides the reading

of (THD + N). Due to their complexity and specific use those equipments are highly expensive.

This end-of-graduation-course paper proposes the development and construction of a harmonic

distortion meter capable of measuring THD + N at any frequency in the audible spectrum. The

equipment is aimed to have low cost, thus providing an alternative to commercial equipments.

This work intends to build a sinusoidal generator with low distortion that is integrated to the

meter, which will provide sweeping in frequency and amplitude, allowing the distortion meter

store in a computer the THD + N value to plot graphics of (THD+N) x f and (THD+N) x Vin.

The main motivation of this end-of-graduation-course paper is the study and development of a

notch filter based on a state variable filter.

Keywords: Harmonic distortion, Notch filter, State variable filter, Audio equipment charac-

terization.

Page 12: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 13: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Lista de Figuras

1.1 Relação entre os dominios do tempo e frequência . . . . . . . . . . . . . . . . 26

1.2 Comparação entre entrada e saída para curvas de transferência real e ideal . . . 27

1.3 Diagrama simplificado de um medidor de distorção harmônica . . . . . . . . . 28

1.4 Diagrama de blocos do filtro de variáveis de estado . . . . . . . . . . . . . . . 29

1.5 Obtenção da resposta notch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.1 Esquema de um filtro de variáveis de estado e suas saídas . . . . . . . . . . . . 33

2.2 Construção de um filtro notch a partir de um filtro de variáveis de estado . . . . 35

2.3 Magnitude das respostas em função da frequência . . . . . . . . . . . . . . . . 36

2.4 Fase das respostas em função da frequência . . . . . . . . . . . . . . . . . . . 36

2.5 Princípio básico de funcionamento da síntese digital direta . . . . . . . . . . . 38

2.6 Princípio de funcionamento da síntese digital direta . . . . . . . . . . . . . . . 39

2.7 Senoide obtida por síntese digital direta . . . . . . . . . . . . . . . . . . . . . 40

2.8 Espectro na saída do circuito DDS . . . . . . . . . . . . . . . . . . . . . . . . 40

2.9 Filtro de saída do DDS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.10 Método térmico de determinação de valor RMS . . . . . . . . . . . . . . . . . 43

2.11 Método direto de determinação de valor RMS . . . . . . . . . . . . . . . . . . 43

2.12 Método indireto de determinação de valor RMS . . . . . . . . . . . . . . . . . 44

2.13 Método Delta Sigma de determinação de valor RMS . . . . . . . . . . . . . . 45

2.14 Filtro passa baixas de terceira ordem . . . . . . . . . . . . . . . . . . . . . . . 46

2.15 Comunicação SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

2.16 Ilustração de comunicação serial - SPI . . . . . . . . . . . . . . . . . . . . . . 49

2.17 Polaridade e fase da comunicação SPI . . . . . . . . . . . . . . . . . . . . . . 49

2.18 Comunicação I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

2.19 Transmissão no barramento I2C . . . . . . . . . . . . . . . . . . . . . . . . . 51

3.1 Diagrama de blocos do equipamento a ser construído . . . . . . . . . . . . . . 53

Page 14: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

3.2 Simulação de Monte Carlo para resistores com tolerância de 1% - 100 valores . 56

3.3 Resistência controlada por tensão construída usando LED e LDR . . . . . . . . 56

4.1 Bloco funcional do DDS AD9850 - Imagem retirada do datasheet . . . . . . . 62

4.2 Diagram básico interno do DDS AD9850 - Imagem retirada do datasheet . . . 62

4.3 Gráfico de THD x P, do LME49600 com VCC = 15V , RL = 32Ω, f = 1kHz -

Imagem retirada do datasheet . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4.4 Reed Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.5 Resposta espectral do GL5516 - Imagem retirada do datasheet . . . . . . . . . 66

4.6 Erro de linearidade - Imagem retirada do datasheet . . . . . . . . . . . . . . . 67

4.7 Erro de ganho - Imagem retirada do datasheet . . . . . . . . . . . . . . . . . . 67

4.8 Diagram básico interno do LTC1968 - Imagem retirada do datasheet . . . . . . 67

4.9 Plataforma Arduino Nano que emprega o microcontrolador ATmega328 . . . . 68

4.10 Diagrama de blocos do PCF8574 - Imagem retirada do datasheet . . . . . . . . 69

4.11 Diagrama de blocos do ADS1115 - Imagem retirada do datasheet . . . . . . . 70

4.12 Encoder rotativo para ajuste de frequência e amplitude do gerador senoidal . . . 70

4.13 Tela de LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5.1 Diagrama de blocos e divisão dos circuitos . . . . . . . . . . . . . . . . . . . . 73

5.2 Esquema do circuito gerador e amplificador de saída . . . . . . . . . . . . . . 74

5.3 Fluxograma de configuração do DDS . . . . . . . . . . . . . . . . . . . . . . . 75

5.4 Esquema parcial do circuito de entrada . . . . . . . . . . . . . . . . . . . . . . 76

5.5 Esquema do circuito de entrada - Detalhe do autorange . . . . . . . . . . . . . 77

5.6 Simulação para VB3 = 60mV . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

5.7 Simulação para VB3 = 0,7V . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

5.8 Simulação para VB3 = 1,2V . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

5.9 Fluxograma para a seleção de escala. . . . . . . . . . . . . . . . . . . . . . . . 80

5.10 Esquema do filtro de variáveis de estado . . . . . . . . . . . . . . . . . . . . . 81

5.11 Disposição das frequências de pré ajuste na escala 1 (20Hz - 200Hz) . . . . . . 82

5.12 Esquema do circuito de sintonia automática por quadratura . . . . . . . . . . . 83

5.13 Esquema do circuito de entrada - Detalhe conversor RMS-DC e filtro passa baixa 84

5.14 Resposta em frequência do filtro passa baixa de terceira ordem da Figura 5.13 . 84

5.15 Esquema do circuito amplificador de distorção . . . . . . . . . . . . . . . . . . 85

5.16 Fluxograma de ajuste do circuito de distorção . . . . . . . . . . . . . . . . . . 86

Page 15: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

5.17 Esquema do circuito de controle . . . . . . . . . . . . . . . . . . . . . . . . . 87

6.1 Placas de circuito impresso do analisador de distorção . . . . . . . . . . . . . . 89

6.2 Saída do gerador senoidal, 1kHz, 1Vp . . . . . . . . . . . . . . . . . . . . . . 90

6.3 Correlação entre frequência medida e programada . . . . . . . . . . . . . . . . 90

6.4 Correlação entre amplitude medida e programada . . . . . . . . . . . . . . . . 91

6.5 Distorção Harmônica do gerador senoidal em 100Hz e 1kHz, em função da

amplitude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

6.6 Varredura em frequência de 1kHz a 10kHz . . . . . . . . . . . . . . . . . . . 93

6.7 Varredura em amplitude de 10mVp a 1Vp . . . . . . . . . . . . . . . . . . . . 93

6.8 Teste do medidor de distorção - Sinal de entrada e harmônicos pós filtro notch . 94

6.9 THD do gerador senoidal em 100Hz - Medições com analisador de espectro e

com o medidor construído . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

6.10 THD do gerador senoidal em 1kHz - Medições com analisador de espectro e

com o medidor construído . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

6.11 Display do analisador de distorção . . . . . . . . . . . . . . . . . . . . . . . . 97

6.12 Interface graficadora para o modo de varredura . . . . . . . . . . . . . . . . . 98

A.1 Placa de circuito impresso - Circuito gerador - Placa A . . . . . . . . . . . . . 105

A.2 Esquema - Circuito gerador - Placa A . . . . . . . . . . . . . . . . . . . . . . 106

B.1 Placa de circuito impresso - Circuito de entrada - Placa B . . . . . . . . . . . . 107

B.2 Esquema - Circuito de entrada - Placa B . . . . . . . . . . . . . . . . . . . . . 108

C.1 Placa de circuito impresso - Circuito de distorção - Placa C . . . . . . . . . . . 110

C.2 Esquema do circuito de distorção. . . . . . . . . . . . . . . . . . . . . . . . . 111

D.1 Placa de circuito impresso - Circuito do microcontrolador - Placa D . . . . . . 114

D.2 Esquema - Circuito do microcontrolador - Placa D . . . . . . . . . . . . . . . 115

E.1 Placa de circuito impresso - Circuito da fonte - Placa E . . . . . . . . . . . . . 117

E.2 Esquema - Circuito da fonte - Placa E . . . . . . . . . . . . . . . . . . . . . . 118

Page 16: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 17: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Lista de Tabelas

2.1 Fator de crista de alguns sinais . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.2 Modos de operação da comunicação SPI . . . . . . . . . . . . . . . . . . . . . 50

3.1 Escalas ideais do circuito de entrada . . . . . . . . . . . . . . . . . . . . . . . 55

3.2 Escalas do amplificador de distorção . . . . . . . . . . . . . . . . . . . . . . . 57

4.1 Características do amplificador operacional LME49710 . . . . . . . . . . . . . 63

4.2 Características do buffer LME49600 . . . . . . . . . . . . . . . . . . . . . . . 64

4.3 Características do conversor RMS-DC LTC1968 . . . . . . . . . . . . . . . . . 67

5.1 Escalas reais do atenuador de entrada . . . . . . . . . . . . . . . . . . . . . . 79

5.2 Escalas de frequência do filtro de variáveis de estado . . . . . . . . . . . . . . 81

5.3 Pré ajuste de frequência do filtro de variáveis de estado . . . . . . . . . . . . . 82

5.4 Escalas reais do amplificador de distorção . . . . . . . . . . . . . . . . . . . . 86

6.1 Componentes harmônicos de 100Hz em diferentes amplitudes . . . . . . . . . 91

6.2 Componentes harmônicos de 1kHz em diferentes amplitudes . . . . . . . . . . 92

6.3 Componentes harmônicos de 1kHz em diferentes amplitudes . . . . . . . . . . 95

Page 18: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 19: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

Siglas

ADC Analog-to-digital converter - Conversor analógico-digital

DDS Direct digital synthesis - Síntese digital direta

DAC Digital-to-analog converter - Conversor digital-analógico

I2C Inter-Integrated circuit - Circuitos inter integrados

LCD Liquid crystal display - Display de cristal líquido

LDR Light dependent resistor - Resistor dependente de luz

LED Light emitting diode - Diodo emissor de luz

MSOP Micro small outline package - Micro encapsulamento

PCB Printed circuit board - Placa de circuito impresso

RMS Root mean square - Raiz do valor quadrático médio

ROM Read Only Memory - Memória somente de leitura

SFV State variable filter - Filtro de variáveis de estado

SPI Serial peripheral interface - Interface periférica serial

THD Total harmonic distortion - Distorção harmônica total

THD+N Total harmonic distortion + noise - Distorção harmônica total + ruído

USB Universal serial bus - Barramento serial universal

VCO Voltage controlled oscillator - Oscilador controlado por tensão

Page 20: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano
Page 21: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

21

Sumário

1 Introdução 25

1.1 Revisão Bibliográfica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

1.2 Hipóteses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.3.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.3.2 Objetivo Específico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.3.3 Metas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.4 Justificativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.5 Organização do trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2 Embasamento Teórico 33

2.1 Filtro de variáveis de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.1.1 Resposta passa-baixa . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.1.2 Resposta passa-alta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.1.3 Resposta passa-banda . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.1.4 Resposta notch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.1.5 Diagrama de Bode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.1.6 Características do filtro de variáveis de estado . . . . . . . . . . . . . . 37

2.1.7 Condição de Quadratura e Sintonia Automática . . . . . . . . . . . . . 37

2.2 Síntese Digital Direta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.3 Conversão RMS-DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.3.1 Definição de valor eficaz . . . . . . . . . . . . . . . . . . . . . . . . . 41

2.3.2 Fator de crista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.3.3 Conversores RMS-DC . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.3.4 Características e especificações de conversores RMS-DC . . . . . . . . 45

2.3.5 Filtro passa baixas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Page 22: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

22

2.4 Comunicação Serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

2.4.1 Comunicação SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

2.4.2 Comunicação I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3 Especificações do Projeto 53

3.1 Circuito gerador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.2 Circuito de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.3 Circuito de distorção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.4 Microcontrolador e controle . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.4.1 Aquisição de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.4.2 Dispositivos de entrada e saída . . . . . . . . . . . . . . . . . . . . . . 58

3.5 Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4 Materiais e Métodos 61

4.1 Circuito gerador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.1.1 Gerador senoidal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4.1.2 Amplificador de saída . . . . . . . . . . . . . . . . . . . . . . . . . . 63

4.2 Circuito de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4.3 Circuito de distorção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.3.1 Filtro Notch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.3.2 Controle automático de sintonia . . . . . . . . . . . . . . . . . . . . . 65

4.3.3 Conversor RMS-DC I e II . . . . . . . . . . . . . . . . . . . . . . . . 66

4.3.4 Amplificador de distorção . . . . . . . . . . . . . . . . . . . . . . . . 68

4.4 Microcontrolador e controle . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

4.4.1 Microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

4.4.2 Expansor de portas I/O . . . . . . . . . . . . . . . . . . . . . . . . . . 68

4.4.3 Aquisição de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

4.4.4 Dispositivos de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4.4.5 Dispositivo de saída . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4.5 Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

5 Projeto do medidor de THD 73

5.1 Circuito gerador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

5.2 Circuito de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5.3 Circuito de distorção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

Page 23: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

23

5.4 Microcontrolador, controle, aquisição de dados, dispositivos de entrada e saída 87

5.5 Fonte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

6 Resultados 89

6.1 Gerador Senoidal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.1.1 Precisão do Gerador . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6.1.2 Distorção produzida pelo gerador senoidal . . . . . . . . . . . . . . . . 91

6.1.3 Testes de varredura . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

6.2 Atenuador de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.3 Medidor de Distorção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6.4 Display e modo manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

6.5 Gráficos e modo de varredura . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

7 Conclusão 99

Apêndice A Circuito gerador 105

Apêndice B Circuito de entrada 107

Apêndice C Circuito de distorção 109

Apêndice D Microcontrolador 113

Apêndice E Fonte 117

Apêndice F Codificação - Arduino 119

Apêndice G Codificação - Python 125

Page 24: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

24

Page 25: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

25

Capítulo 1

Introdução

Desde o início da eletrônica no século passado, impulsionada pela invenção do rádio, medidas

são realizadas em circuitos de áudio a fim de verificar o desempenho, determinar características

ou ainda identificar a necessidade de ajustes ou reparos [1]. Portanto, realizar medições em

áudio é uma parte fundamental dentro da engenharia de áudio. Muitos parâmetros são impor-

tantes em dispositivos de áudio e merecem atenção no processo de medição. As medidas mais

comum são a resposta em frequência, ganho, nível de ruído, resposta a transientes e distorção

harmônica. A medição precisa de distorção harmônica, tema de interesse neste trabalho, exige o

uso de equipamento específicos, os quais são extremamente caros. Por exemplo, o equipamento

Keysight U8903B Audio Analyzer, atualmente o mais usado em medições de distorção harmô-

nica, foi cotado em mais de 13 mil dólares durante a redação do presente projeto. O objetivo

deste trabalho de conclusão de curso é projetar e construir um medidor de distorção harmônica

de baixo custo.

1.1 Revisão Bibliográfica

A maioria dos testes realizados em equipamentos de áudio é feita a partir da análise da

resposta de estímulos na entrada do sistema. Um sinal de características bem conhecidas é

aplicado na entrada do dispositivo sob teste enquanto a saída é observada. O desempenho do

dispositivo é então determinado [2].

Se o equipamento sob teste é composto por circuito cuja função de transferência é linear,

a saída produzida por este dispositivo é um sinal de mesma forma de onda que a entrada, mas

com amplitude ampliada ou reduzida, dependendo do ganho do dispositivo. No entanto, se a

função de transferência é não linear, a forma de onda de saída será diferente da de entrada [3].

Através da análise espectral da saída de um dispositivo com função de transferência não

Page 26: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

26

linear é possível observar a existência de outros sinais além do sinal referente a entrada senoi-

dal. Tais sinais são indesejáveis e produzidos pelo dispositivo sob teste [4]. Quantificando a

intensidade desses sinais é possível estabelecer um método de qualificação e comparação da

qualidade de equipamentos eletrônicos, principalmente daqueles voltados para aplicações em

áudio. A Figura 1.1 ilustra a combinação, no domínio do tempo e da frequência, de uma onda

senoidal (fundamental) e um harmônico produzido por um dispositivo não linear.

Figura 1.1: Relação entre os dominios do tempo e frequência

Distorção harmônica é o mais antigo e mais aceito método de medição de não linearida-

des em circuitos eletrônicos, e pode ser definido como qualquer degradação da forma de onda

devido a geração de harmônicos. Distorção harmônica em amplificadores é principalmente cau-

sada por não linearidades dos elementos ativos, que não amplificam igualmente cada um dos

pontos da forma de onda de entrada, fazendo com que a saída seja distorcida [5].

O mecanismo de distorção harmônica em um componente eletrônico pode ser ilustrado atra-

vés das características de transferência de um circuito ou componente eletrônico. A Figura 1.2

mostra a relação de transferência entre o sinal de entrada e saída para um amplificador hipoté-

tico. A forma de onda de saída é uma projeção do sinal de entrada sobre a curva de transferência

característica. Idealmente a curva de transferência é linear, de modo que o sinal de saída tem

a mesma forma do sinal de entrada, independente da excursão. No entanto, como a curva de

transferência é não linear, uma versão distorcida do sinal de entrada aparece na saída [6].

Page 27: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

27

Figura 1.2: Comparação entre entrada e saída para curvas de transferência real e ideal

A medição de distorção harmônica consiste em excitar o dispositivo sob teste com um sinal

senoidal e observar o espectro de saída. O sinal de saída do dispositivo terá então sua forma de

onda alterada pelas não linearidades do circuito, e a análise espectral do sinal de saída mostrará

que além do sinal correspondente a entrada senoidal, haverá componentes harmônicos múlti-

plos da frequência fundamental de entrada. A amplitude de cada harmônico é proporcional a

quantidade de distorção produzida pelo equipamento sob teste [7].

A grandeza Distorção Harmônica Total, ou THD, do inglês Total Harmonic Distortion, é

formalmente definida como a razão entre o valor eficaz dos harmônicos pelo valor eficaz da

onda fundamental [8]. Matematicamente:

T HD =

√V 2

2 f +V 23 f +V 2

4 f + ...+V 2n f

Vf(1.1)

O valor obtido a partir da expressão acima é comumente apresentando em porcentagem ou

em escala logarítmica, onde

T HD% = 100×T HD T HDdB = 20logT HD

A determinação dos valores eficazes dos componentes e da onda fundamental pode ser rea-

lizada com o auxílio de um analisador de espectro, ou de um osciloscópio digital com a função

FFT integrada. A amplitude do componente fundamental é ajustada para 0dB, e a amplitude

dos harmônicos são medidos e convertidos para a escala linear. A soma eficaz desses valores

corresponde ao numerador da equação (1.1).

No entanto, os analisadores de espectro são equipamentos extremamente caros e em geral

possuem frequência mínima de operação superior ao espectro de áudio (20Hz a 20kHz), que é

justamente a faixa de frequência onde se deseja determinar o comportamento do dispositivo sob

Page 28: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

28

teste. Já os osciloscópios digitais mais modestos que realizam FFT possuem desempenho limi-

tado em baixa frequência [9], devido a resolução insuficiente. Por outro lado, a determinação da

quantidade de distorção harmônica produzida por um dado equipamento pode ser determinada

usando um analisador de distorção [10], instrumento esse que é a motivação deste projeto.

Um analisador de distorção é um equipamento capaz de remover o componente fundamental

de um sinal e determinar o valor eficaz do sinal restante. A remoção do sinal fundamental é

realizado por um filtro notch, e o valor eficaz dos componentes harmônicas é determinado por

um conversor RMS-DC. A Figura 1.3 ilustra o princípio de funcionamento de um analisador

de distorção. Circuitos auxiliares necessários para o adequado controle e condicionamento de

sinais foram omitidos por simplicidade.

Figura 1.3: Diagrama simplificado de um medidor de distorção harmônica

O sinal restante após a filtragem é composto pelos componentes harmônicos produzidos pela

não linearidade do circuito sob teste e pelo ruído agregado no processo. Portanto, essa medida

de distorção é comumente chamada de THD+N para enfatizar a contribuição do ruído. Filtros

adicionais podem ser incluídos para reduzir ruídos indesejáveis.

O filtro notch para rejeição do sinal fundamental em um analisador de distorção pode ser

implementado, dentre outras possibilidades, a partir de um filtro de variáveis de estado. Um

filtro de variáveis de estado é composto de uma combinação de blocos que executam operações

matemáticas (amplificação, inversão, soma, e integração). Esta combinação oferece simultane-

amente saídas com filtragem do tipo passa-baixa, passa-alta e passa banda. A Figura 1.4 mostra

o diagrama de blocos do filtro de variáveis de estado [11].

Page 29: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

29

Figura 1.4: Diagrama de blocos do filtro de variáveis de estado

Através da combinação dessas saídas é possível obter um filtro notch, como mostrado na

Figura 1.5, para ser usado na construção de um medidor de distorção harmônica.

Figura 1.5: Obtenção da resposta notch

A saída passa banda do filtro de variáveis de estado apresenta o sinal correspondente ao

denominador da Equação (1.1), e a saída notch apresenta o sinal correspondente ao numerador

da Equação (1.1).

1.2 Hipóteses

Em virtude das saídas (respostas em frequência) oferecidas pelo filtro de variáveis de estado

o presente projeto propõe o estudo e a construção de um filtro notch, baseado em um filtro de

variáveis de estado como o da Figura 2.1, mas com sintonia variável para ser empregado em

medições de distorção harmônica.

Propõe-se então a construção de um equipamento composto de um gerador e um medidor

de distorção harmônica, capazes de realizar medições de THD+N em função da frequência e/ou

amplitude, com a capacidade de armazenamento de dados para a construção de gráficos úteis

na caracterização da distorção produzida por circuitos eletrônicos.

Page 30: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

30

1.3 Objetivos

1.3.1 Objetivo Geral

O objetivo geral deste trabalho de conclusão de curso é a construção de um equipamento

capaz de realizar medições de THD+N em função da frequência e/ou amplitude do sinal de

teste, com baixo custo final. Este equipamento deve possuir a capacidade de gerar um sinal

senoidal, enviá-lo ao dispositivo sob testes, receber o sinal distorcido e avaliar o índice THD+N

e posterior transferir esses dados a um computador, de modo que possibilite, com o auxílio de

um software graficador, a construção de gráficos de distorção harmônica, úteis na caracterização

da distorção produzida por circuitos eletrônicos.

1.3.2 Objetivo Específico

Para que o objetivo geral seja alcançado é essencial a construção de um filtro notch, que é

parte integrante do medidor de THD+N. Portanto, têm-se como objetivo específico a utilização

da técnica de sintonia por quadratura na construção de um filtro de variáveis de estado.

1.3.3 Metas

As metas que devem ser cumpridas para que os objetivos sejam alcançados podem ser re-

sumidas como o estudo teórico de filtros de variáveis de estado de sintonia por quadratura; a

realização prática desses filtros, a fim de se observar experimentalmente seu comportamento e

suas características; e por fim, a comparação entre estudos teóricos e resultados experimentais

e avaliação de suas aplicações.

1.4 Justificativa

Paralelamente ao estudo e a construção do filtro notch, será necessário o desenvolvimento

dos demais circuitos que compõem o medidor de THD+N, como atenuadores com autorange,

circuitos de controle, amplificadores de baixo ruído, conversores RMS-DC, conversores AD,

microcontroladores, e comunicação com computador.

Desta forma, o projeto se justifica através da oportunidade de estudo e síntese filtros de

variáveis de estado, tema que não é profundamente abordado nas ementas da maioria dos cursos

de graduação em engenharia elétrica, e do forte aspecto prático relacionado a instrumentação

eletrônica e condicionamento de sinais, necessários para a construção do medidor proposto.

Page 31: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

31

1.5 Organização do trabalho

O capítulo 2 apresenta a teoria de filtro de variáveis de estado, e demais conceitos necessá-

rios para a construção do equipamento de medição de distorção harmônica. O capítulo 3 traz as

especificações detalhadas de todas as funcionalidades e características que o equipamento deve

ter. O capítulo 4 apresenta uma descrição dos componentes eletrônicos empregados na constru-

ção do equipamento, bem como a justificativa para a escolha desses componentes. O capítulo

5 apresenta o projeto dos circuitos, e suas considerações. O capítulo 6 traz a caracterização do

equipamento construído, bem como testes e comparações. Por fim, o capítulo 7 apresenta as

conclusões do trabalho e perspectivas futuras.

Page 32: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

32

Page 33: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

33

Capítulo 2

Embasamento Teórico

2.1 Filtro de variáveis de estado

O filtro de variáveis de estado é um tipo de filtro que usa três amplificadores operacionais e

possui a capacidade de produzir simultaneamente respostas passa-baixa, passa-banda e passa-

alta. A Figura 2.1 mostra o esquema do filtro de variáveis de estado [12] .

Figura 2.1: Esquema de um filtro de variáveis de estado e suas saídas

A partir da figura acima é possível obter

VHP =−R2

R3VLP−

R2

R1Vin +

R7

R7 +R6

(1+

R2

R3+

R2

R1

)VBP (2.1)

VBP =− 1sRC

VHP (2.2)

VLP =− 1sRC

VBP (2.3)

Page 34: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

34

2.1.1 Resposta passa-baixa

Subistituindo as equações (2.2) e (2.3) em (2.1), tem-se que:

s2R2C2VLP =−R2

R3VLP−

R2

R1Vin +

R7

R7 +R6

(1+

R2

R3+

R2

R1

)sRCVLP

ou ainda [s2R2C2 +

R2

R3+

R7

R7 +R6

(1+

R2

R3+

R2

R1

)sRC

]VLP =−R2

R1Vin

e portanto,

HLP(s) =VLP

Vin=−

R2

R1

s2R2C2 +R7

R7 +R6

(1+

R2

R3+

R2

R1

)sRC+

R2

R3

(2.4)

E de maneira resumida

HLP(s) =−K1

s2 +as+b(2.5)

onde

K1 =1

R2C2R2

R1a =

R7

R7 +R6

(1+

R2

R3+

R2

R1

)1

RCb =

1R2C2

R2

R3

2.1.2 Resposta passa-alta

Subistituindo a equação (2.2) em (2.3), tem-se que:

VLP =− 1sRC

(− 1

sRCVHP

)=

1s2R2C2VHP

que substituido na equação (2.1) resulta

VHP =−R2

R3

1s2R2C2VHP−

R2

R1Vin−

R7

R7 +R6

(1+

R2

R3+

R2

R1

)1

sRCVHP

ou ainda, [1+

R2

R3

1s2R2C2 +

R7

R7 +R6

(1+

R2

R3+

R2

R1

)1

sRC

]VHP =−R2

R1Vin

e portanto,

HHP(s) =VHP

Vin=−

R2

R1s2R2C2

s2R2C2 +R7

R7 +R6

(1+

R2

R3+

R2

R1

)sRC+

R2

R3

(2.6)

E de maneira resumida

HLP(s) =−K2s2

s2 +as+b(2.7)

onde

K2 =R2

R1a =

R7

R7 +R6

(1+

R2

R3+

R2

R1

)1

RCb =

1R2C2

R2

R3

Page 35: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

35

2.1.3 Resposta passa-banda

Subistituindo as equações (2.2) e (2.3) em (2.1), tem-se que:

−sRCVBP =−R2

R3

(− 1

sRC

)VBP−

R2

R1Vin−

R7

R7 +R6

(1+

R2

R3+

R2

R1

)VBP

ou ainda, [sRC+

R2

R3

1sRC

+R7

R7 +R6

(1+

R2

R3+

R2

R1

)]VBP =

R2

R1Vin

e portanto,

HBP(s) =VBP

Vin=−

R2

R1sRC

s2R2C2 +R7

R7 +R6

(1+

R2

R3+

R2

R1

)sRC+

R2

R3

(2.8)

E de maneira resumida

HBP(s) =K3s

s2 +as+b(2.9)

onde

K3 =1

RCR2

R1a =

R7

R7 +R6

(1+

R2

R3+

R2

R1

)1

RCb =

1R2C2

R2

R3

2.1.4 Resposta notch

A resposta notch é obtida através da soma das respostas das saídas passa-baixa e passa-alta,

como mostrado na Figura 2.2

Figura 2.2: Construção de um filtro notch a partir de um filtro de variáveis de estado

Matemamaticamente

HN(s) = HLP +HHP (2.10)

logo:

HN(s) =−K1

s2 +as+b− K2s2

s2 +as+b=− K2s2 +K1

s2 +as+b(2.11)

Page 36: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

36

2.1.5 Diagrama de Bode

As Figuras 2.3 e 2.4 mostram a resposta em frequência das equações (2.5), (2.7), (2.9) e

(2.11), considerando K1 = K2 = K3 = 1, a =√

2 e b = 1.

Figura 2.3: Magnitude das respostas em função da frequência

Figura 2.4: Fase das respostas em função da frequência

Page 37: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

37

2.1.6 Características do filtro de variáveis de estado

A equação (2.12) mostra a dependência do fator de qualidade da saída passa banda em

função dos componentes do filtro de variável de estado. É possível observar que o fator de

qualidade independe da frequência de ressonância, o que é imprescindível na determinação do

valor eficaz da onda fundamental.

Q =ω0

∆ω=

R6

R7√

R2R3

(1

R1+

1R2

+1

R3

)(2.12)

Os ganhos das saídas passa baixa, passa banda e passa alta são dados pelas equações (2.13),

(2.14) e (2.15).

ALP = HLP(ω→ 0) =−R2

R1(2.13)

AHP = HHP(ω→ ∞) =−R3

R1(2.14)

ABP = HBP(ω0) =

R6 +R7

R7

R1

(1

R1+

1R2

+1

R3

) (2.15)

A partir das equações (2.5), (2.7), (2.9), (2.11), 2.12, (2.13), (2.14) e (2.15) é possível

concluir que o ganho de cada uma das saídas, o fator de qualidade e a frequência de ressonância

do filtro de variáveis de estado podem ser ajustados de maneira independente. Como esses

parâmetros são independentes é possível implementar um controle eletrônico de sintonia ou

ganho.

2.1.7 Condição de Quadratura e Sintonia Automática

A Figura 2.4 mostra que a defasagem entre as saídas HLP, HBP e HHP é constante em função

da frequência do sinal de entrada do filtro de variáveis de estado. No entanto, uma transição

de fase abrupta pode ser observada na saída notch quando a frequência do sinal de entrada é

exatamente igual a frequência de ressonância do filtro.

Se a frequência do sinal de entrada for menor que a frequência de ressonância do filtro de

variáveis de estado, a defasagem entre as saídas HLP e HN é nula. Nessa situação um medidor

de fase do tipo conversor fase-tensão conectado entre as saídas HLP e HN produzirá uma tensão

+A. No entanto, se a frequência do sinal de entrada for maior que a frequência de ressonância,

os sinais se encontram em contra fase e a tensão produzida pelo medidor será −A.

Page 38: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

38

No caso particular onde a frequência do sinal de entrada é exatamente igual a frequência de

ressonância do filtro de variáveis de estado (desejado para a medição de THD), a tensão de saída

do medidor de fase oscilará entre −A e +A, ou seja, resultará em uma onda quadrada de valor

médio nulo. Com o auxílio de um filtro passa baixa essa onda quadrada pode ser convertida em

uma tensão contínua de valor médio nulo. Essa tensão contínua nada mais é do que uma tensão

de erro de um circuito realimentado, e pode, através de um compensador/planta atuar sobre um

dos componentes do filtro de variáveis de estado a fim de tornar a tensão de erro nula, ou seja,

sintonizar automaticamente o medidor de THD.

2.2 Síntese Digital Direta

A síntese digital direta (DDS) é uma técnica de processamento digital capaz gerar sinais

periódicos a partir de um clock de referência. Atualmente, devido a evolução dos processos de

fabricação de circuitos integrados é possível desenvolver sintetizadores digitais diretos de alto

desempenho, de tamanho reduzido e baixo custo, e por isso esses circuitos vem se tornando

uma alternativa muito mais atrativa que os osciladores analógicos convencionais [13].

As principais vantagens da tecnologia DDS são: solução integrada que exige um pequeno

número de componentes externos, resolução de frações de hertz, alta estabilidade, controle

totalmente digital, possibilidade de ajuste de fase que proporciona fácil sincronia entre vários

DDS, rápida resposta de sintetização que permite a criação de formas de ondas arbitrárias.

Como desvantagem têm-se a necessidade de um filtro de reconstrução na saída do sintetizador

[14].

Em [15] é possível encontrar o principio de funcionamento dessa tecnologia. Um gerador

senoidal de síntese direta é composto de um clock de referência, um contador de pulsos, uma

memória ROM e um conversor D/A. O princípio básico de de funcionamento desses sintetiza-

dores é ilustrado na Figura 2.5.

Figura 2.5: Princípio básico de funcionamento da síntese digital direta

O contador de pulsos incrementa suas saídas a cada subida do sinal de clock, e com isso fun-

ciona como um gerador de endereços de N bits. A memória ROM armazena sequencialmente

Page 39: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

39

as amostras de um período discretizado da função seno. A cada pulso de clock um endereço é

gerado pelo contador de pulsos, que seleciona um endereço da memória. O conteúdo desse en-

dereço é enviado ao conversor D/A que produz a tensão correspondente a amostra selecionada.

Esse processo se repete a cada subida de clock, e com isso obtêm-se na saída do conversor D/A

uma senoide discretizada com frequência fc

O diagrama de blocos idealizado da figura 2.5 apresenta uma limitação devido a sua simpli-

cidade, nele só é possível sintetizar a onda senoidal armazenada na memória ROM na mesma

frequência do clock de referência. Para que essa técnica tenha aplicações práticas é desejável

que o circuito seja capaz de sintetizar qualquer frequência dentro de um certo intervalo. Isso

pode ser obtido acrescentando um acumulador de fase ao circuito, como mostra a figura 2.6.

Figura 2.6: Princípio de funcionamento da síntese digital direta

No diagrama da figura 2.6 a frequência desejada é ajustada de acordo com a palavra de sinto-

nia Wsint , tipicamente de 32 bits, armazenada pelo usuário no registrador do circuito. O somador

é responsável por somar a palavra de sintonia com a saída do acumulador, também de 32 bits.

O acumulador armazena em sua saída, a cada pulso do clock de referência, o resultado obtido

pelo somador. Com isso, obtêm-se na saída do acumulador uma escada que é incrementada, a

cada pulso de clock, da mesma quantidade Wsint armazenada no registrador.

O clock de referência fclk é fornecido por um circuito de grande estabilidade, como um

oscilador a cristal de quartzo. A precisão e a estabilidade do sintetizador dependem diretamente

do clock de referência.

Os bits mais significativos do acumulador de fase são usados para acessar os endereços da

memória ROM, que armazena a forma de onda discretizada. Em seguida as amostras discretiza-

das são convertidos para valores analógicos através do conversor D/A. Quanto maior Wsint mais

rápido o acumulador transborda, e mais rápido a tabela na memória ROM é percorrida. Para

uma palavra de sintonia de 32 bits, com valor Wsint = 0000....0001 o acumulador transborda

Page 40: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

40

após 232 pulsos de clock. Se a palavra de sintonia for 0111...1111 o acumulador transborda de-

pois de 2 pulsos de clock. Assim, a relação entre a frequência sintetizada, a palavra de sintonia

Wsint e a frequência do clock de referência é dada por

fsint =Wsint fres fres =fclk

2N (2.16)

onde fsint é a frequência sintetizada, fres é a resolução do sintetizador, fclk é a frequência do

clock de referência, e N o tamanho do acumulador, em bits.

A Figura 2.7 ilustra a forma de onda obtida na saída do circuito da Figura 2.6.

Figura 2.7: Senoide obtida por síntese digital direta

Na Figura 2.9 é possível observar um filtro de reconstrução após o conversor D/A. O objetivo

desse filtro é construir uma senoide eliminando componentes imagens produzidas no processo

de síntese digital direta. A Figura 2.8 mostra o espectro de saída de um DDS com clock de

referência de 300MHz, ajustado para sintetizar um frequência fsint=80MHz.

Figura 2.8: Espectro na saída do circuito DDS

Page 41: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

41

As frequências imagens são geradas em n fclk± fsint , onde n é um número inteiro, e a mag-

nitude desses componentes de frequência obedecem uma lei do tipo sinπ fπ f . Para aplicações onde

fsint fclk um simples filtro passa baixa de primeira ordem é capaz de atenuar satisfatoria-

mente as frequências imagens [15]. Em geral, os DDS apresentam saída de corrente no modo

complementar, como mostra a figura 2.9. Um amplificador de diferenças é empregado para

combinar as saídas complementares dobrando a tensão de saída do DDS.

Figura 2.9: Filtro de saída do DDS

De acordo com [16], o capacitor C f e os resistores Rsa e Rsb formam um filtro passa baixa

de frequência de corte

f−3dB =1

2π(Rsa +Rsb)C f

Portanto, a grande vantagem da tecnologia DDS é que todos os blocos da Figura 2.6 podem

ser integrados em único chip, sendo necessário apenas fornecer alimentação, o clock de refe-

rência e a palavra de sintonia. Como o controle é totalmente digital e a estabilidade depende do

clock de referência, essa tecnologia vem se tornando cada vez mais comum. A empresa Analog

Devices produz circuitos integrados de DDS capazes de sintetizar diversas formas de onda, com

frequência de até 500MHz.

2.3 Conversão RMS-DC

2.3.1 Definição de valor eficaz

O valor eficaz, ou RMS, do inglês Root Mean Square, é uma importante grandeza rela-

cionada a sinais alternados. O valor eficaz de um sinal elétrico pode ser definido como uma

Page 42: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

42

quantidade de sinal que é capaz de produzir a mesma quantidade de calor que um sinal de 1V

de corrente contínua, considerando uma mesma carga [17]. Ou seja, um sinal CA de 1 VRMS

produz a mesma quantidade de calor sobre um resistor de 1Ω que um tensão de 1V de CC.

Matematicamente o valor eficaz de um sinal elétrico x(t) é definido em termos da raiz qua-

drada do valor médio quadrático do sinal

VRMS =

√1

T2−T1

∫ T2

T1

[x(t)]2dt (2.17)

2.3.2 Fator de crista

O fator de crista de um sinal elétrico é definido como a razão entre o seu valor de pico e o

seu valor eficaz [18]. A tabela 2.1 mostra os fatores de crista de alguns sinais comuns.

Tabela 2.1: Fator de crista de alguns sinais

Onda (1 Vp) Valor Eficaz Fator de Crista

Senoidal Vp/√

2√

2

Quadrada Vp 1

Triangular Vp/√

3√

3

2.3.3 Conversores RMS-DC

A seguir serão apresentados os principais métodos de determinação de valores eficazes de sinais

alternados.

Detector de valor médio

A maneira mais simples para estimar o valor eficaz de um sinal alternado é através de um

retificador de precisão acoplado a filtro passa baixa. Esse sistema produz uma tensão contínua

proporcional ao valor médio da onda. Conhecendo a forma de onda do sinal é possível calibrar

a escala de leitura para valores eficazes ao invés do valor médio [19].

No entanto, apesar de simples esse tipo de medidor apresenta um grave problema. A de-

terminação do valor eficaz por meio de um medidor de valor eficaz funciona adequadamente

desde que a forma de onda do sinal medido seja conhecida e não distorcida, caso contrário erros

de medição são inevitáveis. Por isso, circuitos para medição precisa de valores eficazes foram

desenvolvidos ao longo dos anos, e alguns deles são mostrados nas seções a seguir.

Page 43: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

43

Método térmico

De acordo com [19], o método térmico é teoricamente o método mais simples de determi-

nação do valor eficaz de um sinal, pois aplica a definição de valor eficaz. O método térmico,

ilustrado na Figura 2.10, consiste em comparar a quantidade de calor gerada pelo sinal de en-

trada com uma quantidade de referência. Quando a tensão produzida pelo sensor do aquecedor

de referência anula a tensão produzida pelo sensor do aquecedor do sinal de entrada, a mesma

potência é dissipada nos dois aquecedores, e a tensão contínua Vout corresponde ao valor eficaz

do sinal de entrada.

Figura 2.10: Método térmico de determinação de valor RMS

No entanto, o método ilustrado na Figura 2.10 proporciona ótimos resultados, porém apre-

senta grandes dificuldades práticas e um alto preço de implementação, e por conta disso é usado

apenas em aplicações específicas.

Método direto

As operações matemáticas da equação (2.17) podem ser implementadas através de circui-

tos eletrônicos compostos de amplificadores operacionais e multiplicadores analógicos, como

mostra a figura 2.11.

Figura 2.11: Método direto de determinação de valor RMS

Page 44: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

44

O método ilustrado acima apresenta bons resultados em largura de banda e velocidade de

conversão, mas possui limitações com relação a faixa dinâmica. Dependendo da intensidade

do sinal a ser convertido, o sinal representado por V 2in pode alcançar valores que facilmente sa-

turaram o estágio seguinte, por causa do resultado da operação de elevar ao quadrado. Essa

limitação restringe as aplicações desse método à medidores de sinais com baixa variação dinâ-

mica [19].

Método indireto

Outro método de determinação do valor eficaz de um sinal é mostrado na Figura 2.12, onde

a realimentação do sinal de saída diminui o inconveniente da pequena faixa dinâmica do método

direto.

Figura 2.12: Método indireto de determinação de valor RMS

O sinal V 2in é divido pelo sinal de saída Vout e então aplicado a um filtro para obtenção de

Vout = V 2in/Vout , que corresponde ao valor eficaz do sinal de entrada. Esse tipo de conversor

RMS-DC apresenta grande faixa dinâmica, porém apresenta a desvantagem de uma largura de

banda menor que a alcançado pelo método direto [19].

Método Delta Sigma

Ao contrário dos conversores apresentados anteriormente, os conversores ∆Σ não realizam

operações matemáticas através de circuitos eletrônicos, e por conta disso não linearidades de-

correntes dos efeitos de temperatura e excursão de sinal são eliminados. Nesses conversores

um modulador ∆Σ atua como um divisor e uma chave atua como multiplicador, como mostra a

Figura 2.13.

Page 45: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

45

Figura 2.13: Método Delta Sigma de determinação de valor RMS

De acordo com [20], o modulador ∆Σ produz uma onda quadrada cujo ciclo de trabalho é

proporcional à razão entre o sinal de entrada e o sinal de saída. E essa onda quadrada atua sobre

uma chave que funciona como seguidor de tensão ou amplificador inversor com ganho -1. A

multiplicação desses dois sinais cria um terceiro sinal, que após ser filtrado por um filtro passa

baixa, corresponde a Vout =V 2in/Vout , que é o resultado da conversão RMS-DC.

Esse método de conversão é mais estável mais linear que os métodos apresentados anterior-

mente.

2.3.4 Características e especificações de conversores RMS-DC

Erros associados aos conversores RMS-DC

Um conversor RMS-DC ideal produz em sua saída uma tensão contínua idêntica ao valor

eficaz do sinal de entrada. No entanto, os conversores reais apresentam erros de conversão.

Esses erros são chamados de estáticos e podem ser divididos em offset de tensão, erro de es-

cala e erros de não linearidades. O erro de offset de tensão compromete a precisão da medida

principalmente durante a leitura de sinais de baixa intensidade. O erro de escala ocorre quando

a função de transferência vi/vout se desvia da ideal, principalmente devido à temperatura. E os

erros de não linearidade são observados na excursão de um sinal de frequência constante, ou na

variação de frequência de um sinal com valor eficaz constante [19].

O conhecimento da contribuição desses erros é fundamental para a caracterização da pre-

cisão e exatidão final do equipamento em que o conversor será empregado. Em geral o efeito

desses erros é informado pelos fabricantes como uma porcentagem da leitura, ou através de

gráficos, nas folhas de dados dos componentes.

Largura de banda e faixa dinâmica

Para aplicações em baixas frequências os erros estáticos podem ser desconsiderados em

Page 46: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

46

algumas situações, mas conforme a frequência do sinal aumenta, a característica de largura

de banda do conversor se torna importante. Em todos os conversores citados anteriormente a

resposta em frequência dos conversores é atenuada conforme a intensidade do sinal de entrada

diminui. Para obter a maior largura de banda possível, o conversor RMS-DC deve receber

um sinal de intensidade adequada e, para tanto, se faz necessário o uso de um circuito pré-

amplificador para o adequado condicionamento do sinal.

A faixa dinâmica do circuito conversor também deve ser observada durante a construção

de sistemas medidores. O conjunto pre-amplificador + conversor deve ser projetado de modo

que um sinal com fator de crista, definido na seção 2.3.2, não provoque saturação dos circuitos

durante as medições.

2.3.5 Filtro passa baixas

O ripple presente na saída do conversor RMS-DC pode ser muito maior que o erro de offset

do componente, e nesse caso é necessário filtrar o sinal de saída do conversor antes da aquisição

da medida [19]. Essa tarefa é realizada por um filtro passa baixas. Diversas topologias de filtros

podem ser encontradas na literatura, sendo a topologia de Sallen-Key muito conhecida. Essa

configuração oferece boa estabilidade, exige um pequeno número de componentes, possui baixa

impedância de saída, que permite o cascateamento de vários estágios de filtragem minimizando

os efeitos de carregamento [12].

A Figura 2.14 mostra um filtro de terceira ordem composto de uma seção passiva de primeira

ordem seguida de uma seção ativa de segunda ordem, de topologia de Sallen-Key.

Figura 2.14: Filtro passa baixas de terceira ordem

Aplicando a lei dos nós aos pontos A, B e C é possível obter:

vA− vin

R1+

vA

1/sC1+

vA− vB

R2= 0 (2.18)

vB− vA

R2+

vB− vC

R3+

vB− vo

1/sC2= 0 (2.19)

vC− vB

R3+

vC

1/sC3= 0 (2.20)

Page 47: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

47

Como o amplificador operacional é configurado como buffer é possível escrever

vC = vo (2.21)

Isolando vA na equação (2.18) e vC na equação (2.20), têm-se

vA =R1vB +R2vin

sC1R1R2 +R1 +R2(2.22)

vC = vo(1+ sC3R3) (2.23)

Substituindo as equações (2.22) e (2.23) na equação (2.19) é possível obter H(s) = vovin

H(s)=1

C1C2C3R1R2R3s3 +[C1R1(R2 +R3)+C2R3(R1 +R2)]C3s2 +[R1(C1 +C3)+C3(R2 +R3)]s+1(2.24)

ou ainda, de forma mais simplificada

H(s) =1

as3 +bs2 + cs+1(2.25)

Os coeficientes a, b e c da equação (2.25) definem a resposta do filtro passa baixas. Segundo

[12], um filtro passa baixas de terceira ordem com resposta do tipo Butterworth, normalizado a

uma frequência de corte de 1rad/s, é dada por

H(s) =1

s3 +2s2 +2s+1(2.26)

Por comparação das equações (2.25) e (2.26) é possível concluir queC1C2C3R1R2R3 = 1

C1C3R1(R2 +R3)+C2C3R3(R1 +R2) = 2

R1(C1 +C3)+C3(R2 +R3) = 2

A desnormalização dos componentes é dada por

R′n = RnK C′n =Cn

2π fcK(2.27)

onde fc é a frequência de corte deseja e K é o fator de escala das resistências.

2.4 Comunicação Serial

Em aplicações onde a velocidade de comunicação é um fator limitante a comunicação para-

lela é essencial. Porém, essa comunicação apresenta a inconveniente necessidade de barramen-

tos com muitas linhas de transmissão. A comunicação serial apesar de menos veloz simplifica

consideravelmente o processo de comunicação, já que dados, endereços e sinais de controle são

transmitidos um bit de cada vez. A seguir serão apresentados dois protocolos de comunicação

serial, o SPI e o I2C, que hoje estão presentes em praticamente todos os microcontroladores

disponíveis no mercado.

Page 48: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

48

2.4.1 Comunicação SPI

A comunicação SPI, do inglês Serial Peripheral Interface, é uma forma de comunicação

serial síncrona full duplex para curtas distâncias. A comunicação SPI foi desenvolvida pela

Motorola e rapidamente se tornou um padrão muito usado na comunicação entre periféricos e

microcontroladores. A comunicação SPI não possui especificações ou normas internacionais

de regulamentação, de modo que isso permite uma grande flexibilização na implementação do

procolo de comunicação SPI como, por exemplo, o tamanho da palavra código empregada .

A comunicação SPI é aplicada em uma grande variedade de periféricos como: sensores de

temperatura e pressão, conversores AD e DA, memórias EEPROM e displays de LCD e LED

[21].

A comunicação SPI, ilustrada na Figura 2.15, se dá através de um barramento de 4 vias,

composto das seguintes linhas de comunicação:

SCK - Serial Clock. É o canal de clock da comunicação, usado para sincronizar o dispositivo

mestre e o escravo.

SDI - Serial Data Input. É o canal usado para transferir dados serialmente para dentro do

dispositivo.

SDO - Serial Data Output. É o canal usado para transferir dados serialmente para fora do

dispositivo.

SS - Slave Select. É o canal usado para habilitar ou desabilitar o dispositivo escravo.

Figura 2.15: Comunicação SPI

A comunicação é estabelecida quando o dispositivo mestre aciona o dispositivo escravo

desejado colocando nível lógico 0 no canal SS do periférico. Logo em seguida o dispositivo

mestre disponibiliza o sinal de clock no canal SCK do barramento, e a comunicação se inicia.

Page 49: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

49

A cada pulso de clock ocorre uma transmissão full duplex , onde o dispositivo mestre envia

pelo canal seu SDO um bit pra o dispositivo escravo, e recebe do dispositivo escravo um bit

pelo seu canal SDI. Tanto no dispositivo mestre quanto no escravo os bits são armazenados em

registradores de deslocamento, que são incrementados a cada pulso de clock. Ao final de oito

pulsos de clock o dispositivo mestre recebe um byte do escravo e vice-versa. O processo de

transmissão é ilustrado na Figura 2.17.

Figura 2.16: Ilustração de comunicação serial - SPI

Apesar de proporcionar uma transmissão bidirecional, a comunicação SPI pode ser redu-

zida sem prejuízos para o modo unidirecional, bastando apenas desconectar o canal de dados

apropriado (SDI ou SDO).

É importante observar que a comunicação SPI permite a existência de apenas um disposi-

tivo mestre por barramento, e quantos dispositivos escravos forem necessários. No entanto, a

comunicação só pode ser realizada com um periférico por vez. O dispositivo mestre, que em

geral é um microcontrolador, deve garantir que o canal SS de dois ou mais dispositivos escravos

jamais sejam acionados ao mesmo tempo.

Quatro modos de operação são possíveis, dependendo da fase e polaridade do sinal de clock.

O fabricante de cada periférico informa em suas folhas de dados o modo de operação de seus

produtos [22]. A figura 2.17 ilustra esses 4 modos de operação.

Figura 2.17: Polaridade e fase da comunicação SPI

Page 50: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

50

A polaridade do clock CPOL e sua CPHA podem ser identificados como 0 ou 1, como

mostra a Tabela 2.2.

Tabela 2.2: Modos de operação da comunicação SPI

Modo Valor Eficaz Fator de Crista

0 0 0

1 0 1

2 1 0

3 1 1

2.4.2 Comunicação I2C

A comunicação serial I2C, do inglês Inter-Integrated Circuit, é um protocolo de comuni-

cação de curta distância, desenvolvido pela Philips em 1982, com o objetivo de interligar pe-

riféricos dentro de equipamentos eletrônicos. A grande vantagem da comunicação I2C é que

toda a transmissão de dados emprega apenas um barramento de dois canais, por causa dessa

simplicidade o protocolo I2C se tornou muito comum em equipamentos de audio e vídeo.

Segundo [23], diferentemente da comunicação SPI, a comunicação I2C permite o endereça-

mentos de periféricos pelo próprio barramento, e com isso os pinos SS (Slave select) da comu-

nicação SPI não são necessários. Logo, a comunicação se dá através de apenas duas linhas, a

de clock SCL e dados SDA. O sinal SCL serve para sincronizar os dispositivos enquanto que

os dados são transportadas pela linha SDA tanto na transmissão quanto na recepção. A Figura

2.18 ilustra a comunicação I2C entre um dispositivo mestre (microcontrolador) e 3 dispositivos

escravos, que podem ser sensores, conversores AD, displays e memórias.

Figura 2.18: Comunicação I2C

Cada periférico I2C possui um endereço de 7 ou 10 bits, predefinido pelo fabricante e espe-

cificado nas folhas de dados do componente. Por conta disso, o endereçamento na comunicação

Page 51: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

51

I2C é feito através do próprio barramento. Durante a comunicação, além do endereço o dispo-

sitivo mestre informa ao periférico se a operação de comunicação é de escrita ou leitura, e um

bit extra chamado de R/W é responsável por carregar essa informação. O dispositivo mestre lê

dados do periférico fazendo R/W=0 e escreve no periférico fazendo R/W=1. Apesar de o en-

dereçamento ser de 7+1 bits ou 10+1 bits, toda transferência é feita em pacotes de 8 bits, logo,

no caso de endereços de 10 bits o segundo byte é preenchido com 5 bits 1 na posições menos

significativas. Depois que o periférico recebe cada byte ele transmite para o dispositivo mestre

um bit de retorno de acknowledge ACK, que informa que o byte anterior foi adequadamente

recebido.

Enquanto o barramento I2C está ocioso, tanto a linha SCL quanto SDA permanecem em

nível lógico alto. O início da comunicação acontece após a condição de START, onde o dispo-

sitivo mestre realizada uma transição negativa na linha SDA enquanto mantém SCL em nível

lógico alto. Em seguida é enviado o endereço e o bit de R/W, e ocorre o recebimento do bit

ACK. Inicia-se então a transmissão de dados, tantos bytes quantos forem necessários, inter-

calados com um bit de ACK. A comunicação é encerrada com uma condição de STOP, onde

uma nova transição negativa ocorre na linha SDA enquanto SCL permanece em nível lógico

alto. O processo de transmissão com endereçamento de 7 bits é mostrado na Figura 2.19. O

endereçamento em 10 bits é análogo.

Figura 2.19: Transmissão no barramento I2C

Como foi dito anteriormente cada tipo de periférico possui um endereço interno determi-

nado pelo fabricante, e para que seja possível empregar dois periféricos idênticos no mesmo

barramento parte desse endereço é definida pelo usuário através dos pinos do componente. No

caso de um dispositivo com endereço de 10 bits geralmente o fabricante fixa internamente os 7

primeiros bits de endereço do dispositivo, permitindo que os outros 3 bits de endereços sejam

configurados via hardware. Dessa forma é possível empregar até 8 dispositivos idênticos no

barramento I2C. No entanto, segundo [24], que regulamenta as características do protocolo I2C,

Page 52: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

52

o fator que limitante do número de periféricos conectados ao barramento de comunicação I2C

é a capacitância associada a linha, que não pode ser superior a 400pF, o que limita o alcance da

comunicação.

Page 53: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

53

Capítulo 3

Especificações do Projeto

O medidor de THD+N que é tema deste projeto pode ser divididos em sub circuitos, mos-

trados na Figura 3.1. As subseções a seguir descrevem detalhadamente as características e

funcionalidades de cada um destes circuitos.

Figura 3.1: Diagrama de blocos do equipamento a ser construído

3.1 Circuito gerador

O circuito gerador consiste de um Sintetizador Digital Direto (DDS) acoplado a um ampli-

ficador de ganho variável, ambos controlados digitalmente pelo microcontrolador do equipa-

mento. Os valores de frequência e amplitude desejados para o teste, ou os limites de varredura,

Page 54: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

54

são informados pelo usuário através de teclas no painel. Em seguida o sinal senoidal de frequên-

cia e amplitude desejada é encaminhado ao dispositivo sob teste através de um conector BNC

localizado no painel frontal do equipamento.

O gerador deve produzir ondas senoidais entre 20Hz e 20kHz. Como se trata de uma fonte

de sinal para testes de distorção harmônica, o gerador senoidal deve possuir o menor índice de

THD possível.

O amplificador de saída acoplado ao gerador tem dupla função: é responsável por fornecer

uma onda senoidal na amplitude desejada para o teste, ao mesmo tempo em que proporciona o

adequado casamento de impedância com a entrada do dispositivo sob testes.

Para testes em circuitos de áudio é necessário que o amplificador de saída forneça uma

onda senoidal com amplitude de até 2.5V sobre uma impedância mínima de saída de 600Ω.

Como o amplificador de saída está situado no caminho do sinal que será enviado ao dispositivo

sobre teste é necessário que o mesmo possua baixo índice de distorção harmônica a fim de não

degradar o sinal de teste.

3.2 Circuito de entrada

O sinal que retorna do dispositivo sob teste é encaminhado ao atenuador de entrada através

de um conector BNC localizado no painel frontal do equipamento.

Se por exemplo o dispositivo sob teste for um amplificador de potência o sinal que retorna

para o equipamento medidor de THD pode ter amplitudes da ordem de dezenas de volts, muito

superior aos limites que os circuitos integrados do medidor podem suportar com segurança.

Logo, se faz necessário um atenuador capaz de adequar o sinal para leitura.

No entanto, se o dispositivo sob teste for um preamplificador, provavelmente o sinal a ser

analisado é da ordem de dezenas de milivolts, e isso invariavelmente dificulta a leitura precisa

dos níveis de distorção. Sendo assim se faz necessário amplificar o sinal a ser analisado.

A tabela 3.1 mostra 5 escalas desejadas para o atenuador de entrada do medidor de THD. A

cada uma delas é associado um ganho de tensão, de modo que selecionando o ganho apropriado

é possível condicionar o sinal de entrada dentro de uma faixa de tensão ideal (0,1V a 0,9V) a

ser aplicada aos estágios seguintes do equipamento medidor de THD.

Por exemplo, qualquer sinal de entrada com valor de pico entre 11,1mV e 0,1V é amplificado

9 vezes, resultando em valores entre 0,1V a 0,9V na saída do atenuador. Da mesma forma,

qualquer sinal de entrada com valor de pico entre 0,1V e 0,9V sofre um ganho de tensão unitário,

resultando em valores entre 0,1V a 0,9V na saída do atenuador, e assim sucessivamente para as

Page 55: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

55

Tabela 3.1: Escalas ideais do circuito de entradaEntrada (Vp) Ganho Saída (Vp)

min max V/V min max

0,0000 0,0111 81 0,1 0,9

0,0111 0,1000 9 0,1 0,9

0,1000 0,9000 1 0,1 0,9

0,9000 8,1000 0,1111 0,1 0,9

8,1000 72,9000 0,0123 0,1 0,9

demais escalas de ganho do atenuador de entrada.

Com as escalas de ganho da tabela 3.1 sinais de até 72V de pico podem ser condicionados

a um adequado valor de leitura. Essa ampla faixa dinâmica permite a medida de distorção

harmônica de amplificadores de alta potência. Um sinal de áudio de 72V de pico em uma carga

de teste de 4Ω corresponde a máxima potência de saída de um amplificador de 650W eficazes.

Como a função de varredura em frequência e amplitude é desejada para o medidor de THD,

o circuito denominado de atenuador de entrada deve possuir a capacidade de ajustar automati-

camente a escala apropriada de ganho para o ideal de funcionamento dos estágios seguintes. O

circuito que executa essa tarefa é chamado de circuito de detecção de escala, e é composto de

comparadores de janela, os quais constantemente verificam a amplitude do sinal de entrada e

atuam sobre o ganho do atenuador de entrada, condicionando o sinal de entrada dentro da faixa

ideal de funcionamento (0,1V a 0,9V) dos demais circuitos do equipamento .

3.3 Circuito de distorção

Uma vez que o sinal oriundo do dispositivo sob teste foi condicionado à amplitude adequada,

o mesmo é encaminhado ao filtro de variáveis de estado, o qual disponibiliza em sua saída passa

banda o componente fundamental do sinal de entrada, livre dos componentes harmônicos. O

circuito somador adicionado ao filtro de variáveis de estado atenuará o componente fundamental

do sinal de teste, liberando em sua saída notch a composição dos harmônicos produzidos pelo

dispositivo sob teste.

A resposta em frequência da saída notch é fortemente dependente dos valores dos resistores

e capacitores do filtro de variáveis de estado. A Figura 3.2 mostra o resultado da simulação,

em LTspice, por método de Monte Carlo, da saída notch com sintonia teórica de 1kHz, para

100 testes com resistores de 1% de tolerância. Um pequeno descasamento nos valores desses

Page 56: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

56

componentes proporciona um pequeno deslocamento na frequência de sintonia do filtro, que

por sua vez corresponde a uma grande variação na rejeição do sinal a ser filtrado. A situação

se torna ainda mais complicada quando se trata de um filtro notch de sintonia variável, que é

o caso deste trabalho. Nessa situação se faz necessário um controle automático de sintonia,

que constantemente compensa o descasamento dos componentes, proporcionando a máxima

rejeição na saída notch.

Figura 3.2: Simulação de Monte Carlo para resistores com tolerância de 1% - 100 valores

O controle automático de sintonia escolhido é conhecido como ajuste por detecção de qua-

dratura, e é baseado na condição de quadratura entre as saídas do filtro de varáveis de estado,

abordado na seção 2.1.7. A comparação entre os sinais de duas saídas produz uma tensão de

erro que depende da defasagem entre esses sinais. Esse sinal de erro altera uma das resistências

do filtro (resistência controlada por tensão), até que as saídas assumam a condição de quadra-

tura. Uma maneira simples de criar uma resistência controlada por tensão é mostrada na Figura

3.3, onde um LED é posicionado sobre um LDR.

Figura 3.3: Resistência controlada por tensão construída usando LED e LDR

Como o filtro deve possuir frequência de sintonia variável e ao mesmo tempo controle au-

Page 57: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

57

tomático de sintonia, o ajuste de frequência deve ser feito em duas etapas. O pré ajuste da

frequência de sintonia do filtro se dá através da combinação de resistores e capacitores dos inte-

gradores do filtro de variáveis de estado. Posteriormente, a sintonia fina, para máxima rejeição

da onda fundamental, se dá através do circuito de controle que opera a partir do princípio de

detecção de quadratura.

O sinal obtido na saída passa banda é encaminhado ao conversor RMS-DC I, que produzirá

uma tensão contínua proporcional ao valor eficaz do sinal fornecido pelo dispositivo sob teste.

A constante de proporcionalidade é dada pelo ganho do estágio atenuador de entrada, ajustada

pelo circuito de detecção de escala. Na prática, o sinal na saída do conversor RMS-DC não é um

sinal perfeitamente contínuo, pois apresenta pequenas ondulações oriundas do sinal senoidal de

entrada. Para uma medição mais precisa do valor eficaz é necessário filtrar a saída do conversor

RMS-DC através de um filtro passa baixa. Esse filtro deve ter uma frequência de corte menor

que a menor frequência do sinal de entrada e um tempo de acomodação suficientemente pequeno

para não comprometer as medições no modo varredura.

Ja no sinal obtido na saída notch necessita de um pouco mais de atenção. Para pequenos va-

lores de THD+N, o valor eficaz dos componentes harmônicos obtidos na saída do filtro notch é

de apenas alguns milivolts, ou seja, abaixo do limite ideal de conversão da maioria dos converso-

res RMS-DC disponíveis no mercado. Assim, é necessário amplificar este sinal adequadamente

antes da conversão, e para tanto se faz necessário um estágio amplificador com ganho ajustável,

análogo ao discutido no estágio atenuador de entrada. As escalas de ganho para a amplificação

dos harmônicos são mostradas na Tabela 3.2

Tabela 3.2: Escalas do amplificador de distorção

Entrada (Vp) Ganho Saída (Vp)

min max V/V min max

0 0,00041 2187 0,1 0,9

0,00041 0,00370 243 0,1 0,9

0,00370 0,03333 27 0,1 0,9

0,03333 0,30000 3 0,1 0,9

Assim como no atenuador de entrada um circuito de detecção de escala verifica a amplitude

do sinal filtrado e atua sobre o ganho do amplificador de distorção, condicionando esse sinal

dentro de uma faixa de 0,1V e 0,9V.

Depois de condicionar devidamente a amplitude do sinal para leitura, o conversor RMS-

Page 58: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

58

DC II, idêntico ao conversor RMS-DC I, produz uma tensão proporcional ao valor eficaz dos

componentes harmônicos produzidos pelo dispositivo sob teste.

3.4 Microcontrolador e controle

O microcontrolador é responsável por controlar todos os circuitos do equipamento. Ele mo-

nitora constantemente as informações dos detectores de autorange e ajusta a escala de acordo

com a necessidade, controla o sinal senoidal produzido pelo gerador de acordo com as solici-

tações do usuário, atua sobre os conversores AD realizando a aquisição dos dados, calcula as

grandezas de interesse a partir dos dados adquiridos, e por fim, informa o resultado das medidas

realizadas através dos dispositivos de saída.

Em geral, o número de portas I/O de um microcontrolador de baixo custo são insuficien-

tes para controlar tantos circuitos periféricos. Provavelmente será necessário recorrer a uma

expansão de portas I/O por meio de um circuito integrado dedicado.

3.4.1 Aquisição de dados

As tensões contínuas produzidas pelos dois conversores RMS-DC são convertidas para va-

lores digitais através de um conversor analógico-digital de duas entradas.

Através da leitura dos valores eficazes produzidos pelos conversores RMS-DC e lançando

mão da equação (1.1), o microcontrolador é capaz de determinar o valor de THD referente ao

dispositivo sob teste.

3.4.2 Dispositivos de entrada e saída

O dispositivo de entrada do circuito medidor de THD é composto de um conjunto de chaves

e um encoder rotativo fixados no painel frontal do equipamento. Através das chaves é possível

selecionar as funções de medição desejadas e através do encoder rotativo as configurações de

amplitude e frequência do gerador.

O medidor de THD se comunica com o usuário através de dois dispositivos de saída: o

display frontal do equipamento e o a comunicação USB com um computador.

Para medições sem varredura o display do painel frontal informa a frequência e amplitude

do gerador e o respectivo nível de THD que o dispositivo sob testes apresenta naquele momento,

nenhuma informação é enviada para o computador pela conexão USB.

Para medições com varredura, os pares de pontos da varredura são enviados ao computador

Page 59: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

59

e nenhuma medida é mostrada no display do painel frontal.

3.5 Fonte

A fonte de alimentação fornece alimentação para todos os circuitos do equipamento. A ten-

são da rede elétrica é reduzida, filtrada e regulada para proporcionar o adequado funcionamento

dos circuitos que compõem o equipamento. A fonte deve dispor de saídas simétricas de 5V, e

uma corrente mínima de 150mA.

Page 60: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

60

Page 61: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

61

Capítulo 4

Materiais e Métodos

A seguir serão descritos os componentes empregados na construção de cada bloco do equipa-

mento, e a motivação para a escolha desses componentes.

4.1 Circuito gerador

4.1.1 Gerador senoidal

Para a construção do gerador senoidal foi escolhido o circuito integrado AD9850, da Analog

Devices, cujas características estão disponíveis em [25]. O AD9850 é um dispositivo sinteti-

zador de frequência digitalmente programado que emprega a tecnologia DDS acoplada a um

conversor D/A de 10 bits de alto desempenho, cujo bloco funcional é mostrado na Figura 4.1.

O AD9850 permite a utilização de clock de referência de até 125MHz, quando alimentado com

5V. O dispositivo é sintonizado através de uma palavra de sintonia de 32 bits, que resulta em

uma resolução de sintonia de 0.0291Hz para um clock de referência de 125MHz. Devido a sua

alta precisão e estabilidade, o AD9850 pode ser usado como fonte de sinal para o projeto do

gerador senoidal.

Tecnicamente o AD9850 permite a geração de frequências de até metade da frequência do

clock de referência, ou seja, no máximo 62.5MHz, e uma taxa de atualização de frequência da

ordem de 23 milhões de novas amostras por segundo. O DDS em questão supera com folga a

necessidade de geração pretendida para o equipamento medidor de THD, de 10Hz a 100kHz.

Além dos 32 bits de sintonia é necessário encaminhar mais 8 bits de controle, responsáveis

pelas funções de modulação do sinal de saída e ajuste fase, funções essas que não são neces-

sárias para o projeto em questão. A comunicação paralela é realizada através de 5 remessas

de 1 byte, onde o primeiro byte controla fase, modulação, e a habilitação do dispositivo, e e os

Page 62: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

62

Figura 4.1: Bloco funcional do DDS AD9850 - Imagem retirada do datasheet

demais bytes compõem a palavra de sintonia de 32 bits. Já no modo serial, um pacote de 40 bits

é enviado por um único pino, o que proporciona uma grande simplificação do gerador.

Um diagrama básico interno do AD9850 é mostrado na Figura 4.2, onde é possível observar

um divisor de frequência, denominado de acumulador de fase acoplado a memória que contém

uma função senoidal discretizada pré armazenada, seguida de um conversor D/A e um filtro de

reconstrução. O acumulador de fase é um contador de pulso que divide a frequência do clock de

acordo com o módulo do contador. O modulo do contador é ajustado pela palavra de sintonia de

32 bits. O clock resultante incrementa a posição de memória que é encaminhada ao conversor

D/A. A saída do conversor D/A passa por um filtro reconstrução a fim de eliminar componentes

espectrais da senoide sintetizada.

Figura 4.2: Diagram básico interno do DDS AD9850 - Imagem retirada do datasheet

O AD9850 apresenta saídas complementares em modo de corrente e a corrente máxima

que circula por essas saídas durante a sintetização pode ser ajustada externamente pelo pino

de controle RSET . Segundo as folhas de dados do componente, a corrente máxima em cada

uma das saída é dada por Iout = 32IRSET . Dessa forma, controlando a corrente IRSET é possível

controlar a máxima excursão do sinal sintetizado, uma vez que o DDS apresenta saídas em

Page 63: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

63

modo de corrente.

Portanto, a grande capacidade de resolução, aliada a possibilidade de comunicação serial

tornam o AD9850 ideal para a construção do gerador senoidal do equipamento medidor de

THD. A combinação de um DDS e um microcontrolador proporciona um gerador senoidal

mais estável e de mais fácil sintonia que osciladores controlados por tensão (VCO).

4.1.2 Amplificador de saída

O circuito amplificador de saída é composto de um estágio de ganho de tensão e um estágio

ganho de corrente. Para estágio de ganho de tensão foi escolhido o amplificador operacional

LME49710, e para ganho de corrente o buffer LME49600, ambos da Texas Instruments. As

características técnicas estão disponíveis, respectivamente, em [26] e [27].

O LME49710 foi escolhido pois é um amplificador operacional de baixa distorção, baixo

ruído e alto slew rate desenvolvido para aplicações de alto desempenho em áudio. A tabela 4.1

mostra as principais características desse amplificador operacional.

Tabela 4.1: Características do amplificador operacional LME49710

Alimentação 2.5V a 17V

THD+N (Av = 1, VOUT = 3VRMS,1kHz) 0.00003%

Densidade de ruído 2.5nV/√

Hz

Largura de banda 55MHz

Slew rate 20V/µs

Ganho em malha aberta 140dB

Corrente de polarização de entrada 7nA

Offset de tensão 0.05mV

Apesar das características do LME49710, ele não é adequado para operar diretamente como

etapa de saída do gerador senoidal, para tanto foi decidido o emprego de um LME49600, um

buffer especialmente desenvolvido para esse tipo aplicação. As principais características desse

circuito integrado são mostradas na tabela 4.2

A figura 4.3, retirada do datasheet do circuito integrado, mostra que o buffer apresenta baixa

distorção harmônica em função da potência fornecida em sua saída.

Page 64: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

64

Tabela 4.2: Características do buffer LME49600

Alimentação 2.25V a 18V

THD+N (Av = 1, VOUT = 3VRMS,1kHz) 0.00003%

Corrente de saída 250mA

Largura de banda 110MHz

Slew rate 2000V/µs

Figura 4.3: Gráfico de THD x P, do LME49600 com VCC = 15V , RL = 32Ω, f = 1kHz - Imagem retirada

do datasheet

4.2 Circuito de entrada

Para a construção do circuito atenuador de entrada foi escolhido, por conveniência, o mesmo

amplificador operacional a ser empregado no amplificador de saída do circuito gerador senoidal,

o LME49710. O LME49710 será empregado como amplificador não inversor em conjunto

com relês, que proporcionarão ganho adequado de acordo com a solicitação do circuito de

autorange. Inevitavelmente, quando o circuito de realimentação é alterado a tensão de offset na

saída do amplificador operacional muda, e isso pode influenciar o funcionamento dos circuitos

subsequentes. A fim de evitar esse desvio de tensão será empregado um circuito integrado

OP07, da Analog Devices, para o controle automático de offset do LME49710.

O OP07 é um amplificador operacional de baixo offset de tensão e alto ganho de malha

aberta, muito empregado em circuitos de instrumentação. Possui alta impedância de entrada

que proporciona grande precisão quando operado na configuração não inversora. Suas caracte-

rísticas técnicas estão disponíveis em [28].

O circuito de detecção de escala do atenuador de entrada funciona a partir de detectores

de níveis, construídos a partir de circuitos comparadores de tensão. Esses comparadores mo-

Page 65: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

65

nitoram o sinal de entrada e informam ao controle do equipamento a escala apropriada para o

correto condicionamento de sinal. Os comparadores, no entanto, não possuem a capacidade de

armazenar variações em suas saída, uma vez que essas acompanham as variações do sinal de

entrada. A função de armazenar essas informações, que indicariam uma possível sobretensão

de entrada, pode ser atribuída a um flip-flop do tipo D. Para a construção do circuito de auto-

range do atenuador do entrada foram escolhidos o comparador de tensão LM319, e o flip-flop

74HC74.

O LM319 é um comparador de tensão duplo, com saídas em coletor aberto, desenvolvimento

para operar com fontes simples ou simétricas [29]. Já o integrado 74HC74, da família TTL, é

um flip-flop duplo, com set e reset, e acionamento por borda de subida [30].

4.3 Circuito de distorção

4.3.1 Filtro Notch

O filtro de variáveis de estado empregará o amplificador operacional LME49710, pelas mes-

mas razões anteriormente apresentadas. Para que o filtro de variáveis de estado da Figura 2.1 do

Capítulo 2 possua frequência de sintonia ajustável é necessário variar simultaneamente os com-

ponentes R4, R5 , C1 e C2. Os capacitores determinam as faixas de operação do filtros. Como é

desejada a cobertura de 3 décadas (20Hz a 20kHz), 3 pares de capacitores são necessários. Esse

capacitores serão selecionados através de reed relay, do tipo SIP-1A05. O SIP-1A05, mostrado

na Figura 4.4 apresenta um contato normalmente aberto, e é comutado por uma tensão contínua

de 5V, fornecida pelo microcontrolador do equipamento.

Figura 4.4: Reed Relay

O ajuste de frequência dentro de uma das três escalas é realizado através da variação dos

resistores R, do esquema da Figura 2.1. Um conjunto de resistores é combinado através de reed

relay , do tipo SIP-1A05.

4.3.2 Controle automático de sintonia

A máxima rejeição na saída notch ocorre quando a condição de quadratura entre as saídas

Page 66: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

66

do filtro de variáveis de estado é alcançado. Essa condição é indicada pela tensão de erro

gerada a partir da comparação entre a fase desses sinais. Essa tensão de erro atua sobre uma das

resistência do filtro, corrigindo o desbalanceamento causado pela dispersão dos componentes

Essa resistência controlada por tensão é construída usando um LDR GL5516 acoplado a um

LED amarelo. A Figura 4.5 retirada de [31] mostra a resposta espectral do LDR. O comprimento

de onda do amarelo (570 - 590 nm) proporciona a máxima sensibilização do elemento foto

resistivo.

Figura 4.5: Resposta espectral do GL5516 - Imagem retirada do datasheet

A tensão de erro que atua sobre o LED e varia a resistência do LDR é obtida através de um

detector de quadratura construído usando comparadores LM319, amplificadores operacionais

TL072 e JFET BF245.

4.3.3 Conversor RMS-DC I e II

Para a conversão RMS-DC foi escolhido o circuito integrado LTC1968, da Linear Techno-

logy, que emprega o método de conversão delta sigma. O LTC1968 apresenta alta linearidade,

grande largura de banda. O circuito suporta sinais com fator de crista até 4, podendo operar

com entrada diferencial ou simples [32]. A tabela 4.3 resume as principais características desse

conversor RMS-DC.

A figuras 4.7 e 4.8 foram retiradas da folha de dados do componente e mostram os erros

estáticos de linearidade e ganho do LTC1968, em função da temperatura e a tensão de entrada,

respectivamente.

O circuito LTC1968 apresenta apenas 8 terminais no formato MSOP, e exige poucos com-

ponentes externos para funcionar, como mostra a Figura 4.8. O capacitor CAV E em conjunto

Page 67: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

67

Tabela 4.3: Características do conversor RMS-DC LTC1968Alimentação 6V Offset de tensão 0,2mV

Linearidade 0,05% Entrada mínima 5mVRMS

Largura de banda 500kHz Impedância de entrada 1,2MΩ

Entrada máxima 1Vp Impedância de saída 12,5kΩ

Figura 4.6: Erro de linearidade - Imagem re-

tirada do datasheet

Figura 4.7: Erro de ganho - Imagem reti-

rada do datasheet

com a resistência de saída do circuito formam o primeiro estágio de filtro passa baixa do con-

versor. Para necessidades mais exigentes, outros estágios de filtragem podem ser adicionados

externamente.

Figura 4.8: Diagram básico interno do LTC1968 - Imagem retirada do datasheet

Para a construção do filtro passa baixa localizado após a conversão RMS-DC foi escolhido

o amplificador operacional OP07 por sua característica de baixo offset de tensão. O OP07 foi

mencionado na descrição dos materiais do atenuador de entrada.

Page 68: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

68

4.3.4 Amplificador de distorção

O circuito amplificador de distorção tem como objetivo amplificar o sinal resultante da fil-

tragem para que o conversor RMS-DC seja capaz de detectá-lo. Como o sinal na saída do filtro

notch pode possui uma grande faixa dinâmica é necessário que o ganho do amplificador de dis-

torção seja ajustado pelo microcontrolador. Isso pode ser obtido substituindo os resistores de

realimentação de um amplificador não inversor. Para comutar os resistores de realimentação

serão usados reed relay do tipo SIP-1A05, anteriormente mencionados.

O amplificador operacional LME49710 foi escolhido para integrar o circuito amplificador de

distorção por suas boas características elétricas, apresentadas na seção de materiais do atenuador

de entrada.

4.4 Microcontrolador e controle

4.4.1 Microcontrolador

Para o controle de todos os circuitos do equipamento foi escolhido o microcontrolador de

baixo custo ATmega328, da Atmel. Segundo [33], o ATmega328 é um microcontrolador de 8

bits, com 14 portas digitais I/O, 6 portas analógicas, 32 kB de memória flash, 2 kB de memória

RAM e 1 kB de memória EEPROM.

O ATmega328 é empregado em plataformas de desenvolvimento Arduino Nano, e esse fator

foi decisivo na escolha desse microcontrolador, devido a facilidade de desenvolvimento que

essa plataforma oferece.

Figura 4.9: Plataforma Arduino Nano que emprega o microcontrolador ATmega328

4.4.2 Expansor de portas I/O

O microcontrolador em questão apresenta um total de 14 portas de entrada e saída digitais.

Ao microcontrolador serão conectados todos os estágios descritos no capítulo 2. Logo, o total

de portas é insuficiente para estabelecer todos as conexões com os periféricos. A saída para esse

Page 69: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

69

problema pode ser alcançada através da utilização de um circuito expansor de portas I/O, como

o PCF8574, da Philips.

O circuito integrado PCF8574 é um expansor de portas I/O de 8 canais, com interface de

comunicação I2C. O protocolo de comunicação I2C, desenvolvido Philips, emprega um barra-

mento de dois fios (serial clock (SCL) e serial data (SDA)) para realizar a comunicação entre

periféricos [34]. O diagrama funcional do circuito é mostrado na figura 4.10

Figura 4.10: Diagrama de blocos do PCF8574 - Imagem retirada do datasheet

O PCF8574 possui 3 terminais de configuração de endereços (A0, A1 e A2), os quais tor-

nam possível a conexão de até 8 circuitos integrados PCF8574 no mesmo barramento I2C. Isso

possibilita a transformação de 2 portas do microcontrolador em até 64 portas de I/O. O pino

INT pode ser conectado ao terminal de interrupção do microcontrolador para informar que uma

alteração de nível lógico ocorreu em uma das portas I/O do PCF8574.

Cada porta I/O do PCF8574 apresenta uma capacidade de de 20mA, o que o torná apropriada

para o acionamento de LEDs ou até mesmo relês do tipo micro switch.

4.4.3 Aquisição de dados

O microcontrolador ATmega328 possui internamente conversores AD de 8 e 10 bits, cuja

resolução é insuficiente para a leitura da tensão contínua produzida pelos conversores RMS-

DC. Em vista disso, foi escolhido um conversor analógico de digital de maior resolução, o

ADS1115, da Texas Instruments. O ADS1115 é um conversor AD de 16 bits de quatro entradas

multiplexadas com ganho programável, que opera com referência interna. O dispositivo possui

comunicação I2C, e é capaz de realizar até 860 amostras por segundo [35]. A Figura 4.11 mostra

o diagrama de blocos do ADS1115.

Page 70: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

70

Figura 4.11: Diagrama de blocos do ADS1115 - Imagem retirada do datasheet

4.4.4 Dispositivos de entrada

Para a configuração manual de frequência e amplitude foi escolhido um encoder rotativo

com chave, mostrado na Figura 4.12.

Figura 4.12: Encoder rotativo para ajuste de frequência e amplitude do gerador senoidal

Para a habilitação das demais funções do aparelho foram escolhidas chaves momentâneas

do tipo Push Button.

4.4.5 Dispositivo de saída

Painel

Para compor o painel do equipamento medidor de THD escolheu-se uma tela de LCD co-

lorida de 1,8"com resolução de 160 x 128 pixels, mostrada na Figura 4.13. A tela emprega um

controlador ST7735 que permite o uso comunicação SPI, com isso, é possível transferir e atu-

alizar um grande número de informações na tela usando apenas 4 vias de comunicação, como

mostrado na Seção 2.4.1.

Ao contrário dos displays de LED convencionais a tela de LCD dispensa multiplexação. O

controlador ST7735 possui internamente uma memória RAM que armazena os dados corres-

pondentes a cada pixel da tela.

Page 71: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

71

Figura 4.13: Tela de LCD

USB

Os microcontroladores de baixo custo disponíveis no mercado não apresentam comunica-

ção USB nativa. Apresentam apenas comunicação UART, do inglês Universal Asynchronous

Receiver/Transmitter, que não permite conexão direta com computadores. No passado, a co-

municação serial RS232 era largamente empregada nesse tipo de tarefa mas, com o advento da

comunicação por USB, o protocolo RS232 perdeu espaço. A plataforma Arduino Uno apre-

senta um conversor USB/UART, que permite que o ATmega328 envie e receba dados de um

computador por meio de uma comunicação USB

4.5 Fonte

Para a fonte de alimentação foram escolhidos os reguladores 7805, 7905 e 7809, 7909, para

tensões positiva e negativa, respectivamente. Um transformador com primário de 127/220V e

secundário de 24V com derivação central, com potência de 30VA. Os demais componentes da

fonte de alimentação são convencionais e dispensam maior detalhamento.

Page 72: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

72

Page 73: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

73

Capítulo 5

Projeto do medidor de THD

A seguir será apresentado detalhadamente os circuitos desenvolvidos usando os componentes

descritos no capítulo 4 . Todos os circuitos especificados no capítulo 3 foram agrupados em

blocos funcionais na Figura 5.1, representando as placas de circuito impresso do equipamento

medidor de THD.

Figura 5.1: Diagrama de blocos e divisão dos circuitos

As setas entre os blocos da Figura 5.1 indicam a interligações entre as placas de circuito

impresso. As conexões de todas as placas com a fonte de alimentação foram omitidas a fim de

simplificar a representação.

Page 74: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

74

5.1 Circuito gerador

O circuito gerador senoidal do medidor de THD é montado na placa de circuito nomeada de

Placa A, e é composto pelo DDS e pelo amplificador de saída. A Figura 5.2 mostra o esquema

parcial desse circuito.

Figura 5.2: Esquema do circuito gerador e amplificador de saída

O conector GERADOR interliga a placa do gerador senoidal com a placa do microcontrola-

dor. A palavra de sintonia é enviada serialmente pelo microcontrolador até o terminal DATA do

AD9850. O clock no terminal CLK sincroniza a comunicação de cada bit da transmissão. Um

pulso no terminal FUDPT aciona a sintetização e um pulso em RST sinaliza ao DDS que uma

nova palavra de sintonia está a caminho.

O ajuste da amplitude do sinal sintetizado é feito controlando a corrente drenada pelo termi-

nal RSET do integrado U001. No terminal RSET do integrado U001 existe uma tensão de 1,248V

produzida internamente. A corrente que circula por RSET é então

IRSET =1,248−VA3

R001

onde a tensão no nó A3 é produzida pelo DAC U006 de acordo com a solicitação do usuário.

As correntes complementares de saída do DDS dependem de IRSET , como citado na seção 4.1.

Essas correntes produzem tensões em contra fase nós A1 e A2 sobre os resistores R002 e R003.

O capacitor C001 forma junto com esses resistores o primeiro estágio do filtro de reconstrução,

configurado para uma frequência de corte de 200kHz.

O amplificador operacional U002, configurado como amplificador de diferença subtrai os

Page 75: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

75

sinais dos nós A1 e A2 eliminando a componente contínua produzida pelo DDS, além de pro-

porcionar um ganho de tensão de 2 V/V.

O integrado U003 opera como amplificador de corrente, e é capaz de liberar correntes de até

250mA. O resistor R009 torna a resistência de saída do gerador proxima de 50Ω, e o capacitor

C005 forma um filtro passa baixas configurado para uma frequência de corte de 800kHz. A

saída do sinal senoidal se dá por um conector BNC indicado como SAIDA, localizado no painel

do instrumento.

O processo configuração do sintetizador é ilustrado no fluxograma da Figura 5.3.

Figura 5.3: Fluxograma de configuração do DDS

No Apêndice A é mostrado o esquema completo do circuito gerador senoidal, e a sua res-

pectiva placa de circuito impresso.

5.2 Circuito de entrada

O circuito de entrada do medidor de THD, montado na placa de circuito indicada por Placa

B, é composto dos seguintes blocos: atenuador de entrada, limitador, amplificador, controle de

offset, circuito de detecção de escala. A seguir serão apresentados os esquemas de cada um

desses blocos, e no Apêndice B o esquema completo do circuito de entrada, conectando todos

os blocos aqui descritos.

O sinal a ser medido entra no circuito de entrada pelo conector ENTRADA do esquema

da Figura 5.4. Em seguida o capacitor de desacoplamento C101 bloqueia tensões contínuas e

Page 76: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

76

permite apenas a passagem de sinais alternados para dentro do circuito. O sinal de entrada é

enviada a um conjunto de divisores resistivos com saídas em 1V/V , 0,1V/V e 0,01V/V do

sinal de entrada.

Figura 5.4: Esquema parcial do circuito de entrada

Os relês RL101, RL102 e RL103 são responsáveis por colocar no nó B1 a adequada atenu-

ação de entrada, de acordo com as solicitações fornecidas pelo microcontrolador com base nas

saídas do circuito detector de escala. Os componentes R105, D101 e D102 são responsáveis por

limitar o sinal de entrada durante o ajuste de escala, a fim de proteger a entrada do amplificador

operacional conectada ao nó B2.

O amplificador operacional U102 é responsável por proporcionar ganho de tensão de 1V/V ,

11V/V e 84,333V/V , de acordo com o estado dos relês RL104 e RL105, também ajustados

pelo microcontrolador de acordo com as solicitações do circuito de detecção de escala. O

Page 77: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

77

amplificador operacional U101 opera como controle automático de offset do amplificador U102.

O sinal amplificado por U102, disponível no nó B3, é enviado ao detetor de escala esque-

matizado da Figura 5.5. O circuito detector de escala é mostrado na Figura 5.5, e é composto

de dois comparadores e dois flip-flops tipo D. O sinal alternado presente no nó B3 é compa-

rado com as tensões de referência de 900mV e 70mV, proporcionadas pelos divisores de tensão

formados pelos resistores R111 a R114. Essas tensões de referência formam duas janelas de

comparação, de 70mV < VB3<900mV. E com essas janelas três situações são possíveis para o

sinal em B3.

Figura 5.5: Esquema do circuito de entrada - Detalhe do autorange

Quando o sinal em B3 é tal que VB3 < 70mV significa que o sinal em ENTRADA é muito

baixo, e que outra combinação dos relês RL101 a RL106 deve ser ajustada a fim de amplificar

esse sinal. Essa condição de baixo sinal de entrada é indicada pelo estado lógico 00 na saída dos

flip-flops U104. A Figura 5.6 mostra a simulação em LTspice do comportamento do detector

de escala da Figura 5.5 para um sinal senoidal de 60mV de pico em B3. A linha tracejada

representa a tensão de referência do comparador.

Quando o sinal em B3 é tal que VB3 > 900mV significa que o sinal em ENTRADA é muito

alto, e que outra combinação dos relês RL101 a RL106 deve ser ajustada para atenuar esse sinal.

Essa condição de alto sinal de entrada é indicada pelo estado lógico 11 na saída dos flip-flops

Page 78: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

78

Figura 5.6: Simulação para VB3 = 60mV

U104. A Figura 5.7 mostra a simulação em LTspice do comportamento do detector de escala

da Figura 5.5 para um sinal senoidal de 1,2V de pico em B3. A linha tracejadas representa a

tensão de referência do comparador.

Figura 5.7: Simulação para VB3 = 0,7V

Por fim, quando o sinal em B3 está contido dentro do intervalo 70mV < VB3 < 900mV

significa que a configuração dos relês RL101 a RL106 proporciona a correta escala de leitura,

e essa condição é indicada pelo estado lógico 01 na saída dos flip-flops U104. A Figura 5.8

Page 79: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

79

mostra a simulação em LTspice do comportamento do detector de escala da Figura 5.5 para um

sinal senoidal de 700mV de pico em B3. A linha tracejadas representa a tensão de referência do

comparador.

Figura 5.8: Simulação para VB3 = 1,2V

Portanto, o microcontrolador verifica constantemente os níveis lógicos na saída de U104

e atua sobre os relês RL101 a RL106 a fim de tornar 70mV < VB3 < 900mV. Os ganhos e

atenuações ideais foram apresentados nas especificações do projeto, na Tabela 3.1. Na prática,

devido ao emprego de resistores de valor comercial os ganhos e atenuações sofreram alterações,

e os valores reais são apresentados na Tabela 5.1. A Tabela 5.1 mostra que qualquer tensão de

entrada entre 0.9mV e 92V é convertida para o intervalo 70mV < VB3 < 900mV, através das

cinco escalas disponíveis. Isso proporciona uma faixa dinâmica de entrada de mais de 100dB.

Tabela 5.1: Escalas reais do atenuador de entradaEntrada (Vp) Ganho VB3 (Vp)

min max V/V min max

0,0009 0,0107 84,333 0,072 0,904

0,0066 0,0822 11,00 0,072 0,904

0,0725 0,9040 1,000 0,072 0,904

0,6762 8,4376 0,1071 0,072 0,904

7,3182 91,3131 0,0099 0,072 0,904

O processo de seleção de escala realizado pelo microcontrolador é ilustrado no fluxograma

Page 80: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

80

da Figura 5.9.

Figura 5.9: Fluxograma para a seleção de escala.

O Apêndice B mostra o esquema completo do circuito de entrada, e sua respectiva placa de

circuito impresso, identificada por Placa B.

5.3 Circuito de distorção

O sinal condicionado pelo estágio de entrada é obtido no conector SFV, do esquema da

figura 5.4. Esse sinal é enviado ao filtro de variáveis de estado mostrado na Figura 5.10.

Page 81: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

81

Figura 5.10: Esquema do filtro de variáveis de estado

No nó C2 é obtido a composição dos harmônicos e no nó C3 a onda fundamental. A razão

entre o valor eficaz das tensões nesses dois nós é o índice THD do sinal de entrada.

Os relês RL209 a RL214 são responsáveis por selecionar os capacitores C201 a C206 que

determinam as três escalas de frequência do equipamento. Essas escalas são selecionadas atra-

vés de um código binário no conector ESCALA, como mostrado na Tabela 5.2.

Tabela 5.2: Escalas de frequência do filtro de variáveis de estado

Escala Código Faixa

1 001b 20Hz - 200Hz

2 010b 200Hz - 2kHz

3 100b 2kHz - 20kHz

Os relês RL201 a RL208 selecionam os resistores R204 a R207 e R212 a R215 que deter-

minam o pré ajuste de frequência. Os relês são selecionados por um código binário no conector

FREQ, como mostrado na Tabela 5.3.

Page 82: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

82

Tabela 5.3: Pré ajuste de frequência do filtro de variáveis de estado

Frequência [Hz]

Código 1 2 3

0000b 21 217 2179

0001b 34 346 3466

0010b 47 476 4762

0011b 60 604 6049

0100b 71 710 7100

0101b 83 838 8387

0110b 96 968 9683

0111b 109 1097 10971

1001b 122 1228 12288

1010b 135 1358 13585

1011b 148 1487 14872

1100b 159 1592 15922

1101b 172 1720 17209

1110b 185 1850 18506

1111b 197 1979 19793

Os resistores R204 a R207 e R212 a R215 foram escolhidos de modo a proporcionar uma

distribuição uniforme dos pontos de pré ajuste de frequência dentro de cada escala. A Figura

5.11 mostra a disposição das frequências de pré ajuste na escala 1.

Figura 5.11: Disposição das frequências de pré ajuste na escala 1 (20Hz - 200Hz)

Page 83: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

83

O circuito de sintonia automática por quadratura mostrado na Figura 5.12 atua sobre o LDR

do filtro preenchendo os espaços entre as frequências de pré ajuste da Tabela 5.3, tornado as

escalas contínuas. Dessa forma, é possível ajustar o filtro de variáveis de estado para medir

THD em qualquer frequência entre 20Hz e 20kHz.

Figura 5.12: Esquema do circuito de sintonia automática por quadratura

O sinal da saída passa baixa disponível no nó C1 é transformado em uma onda quadrada

que atua sobre os transistores FET Q201 e Q202, recortando o sinal da saída notch. Quando C1

e C2 estão em quadratura a tensão média na entrada do integrador é nula. Se a defasagem em

relação a C1 é maior que 90, a tensão se torna positiva, e negativa para defasagem menor que

90. O integrador atua como compensador do circuito realimentado. A saída do integrador é

conectada a um conversor tensão-corrente, que alimenta o LED que ilumina o LDR, alterando

a sintonia do filtro até que a defasagem seja de 90, nessa condição ocorre a máxima rejeição

da fundamental na saída notch.

O sinal referente a saída passa banda presente em C3 é encaminhado para o conversor RMS-

DC como mostra a Figura 5.13. O circuito integrado U211 é responsável pela conversão RMS-

DC discutida na seção 2.3. O amplificador operacional U212 compõem um filtro passa-baixas,

abordado na seção 2.3.5.

Page 84: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

84

Figura 5.13: Esquema do circuito de entrada - Detalhe conversor RMS-DC e filtro passa baixa

Os componentes do filtro passa baixa foram determinados a partir do equacionamento da

seção 2.3.5. O resistor R1 da figura 2.14 corresponde a resistência de saída do conversor RMS-

DC. O capacitor C209 de 2.2µF é uma recomendação do fabricante, contida na folha de dados

do componente. A Figura 5.14 mostra a resposta do filtro passa baixa do conversor RMS-DC.

Figura 5.14: Resposta em frequência do filtro passa baixa de terceira ordem da Figura 5.13

No conector RMS_FUND da figura 5.13 é obtida uma tensão contínua proporcional ao valor

eficaz da onda fundamental do sinal de entrada, que corresponde ao denominador da equação

(1.1).

O sinal após a remoção da onda fundamental, disponível no nó C2 do circuito da Figura

5.10, é enviado ao circuito amplificador de distorção da Figura 5.15. Esse estágio consiste de

três seções de amplificadores não inversores com ganho ajustado pelos relês RL215 a RL217.

Esses relês são controlados pela placa do microcontrolador.

Page 85: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

85

Os três estágios são desacoplados a fim de evitar ceifamentos devido a uma eventual pre-

sença de offset de tensão.

Figura 5.15: Esquema do circuito amplificador de distorção

As combinações possíveis de ganho do amplificador de distorção da Figura 5.15 e suas

respectivas faixas de entrada e saída são mostradas na Tabela 5.4. O estágio somador da Figura

5.10, que produz a resposta notch, também é responsável por proporcionar um ganho de tensão

fixo de 3V/V, já contabilizado nas combinações de ganho mostrada na Tabela 5.4.

Page 86: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

86

Tabela 5.4: Escalas reais do amplificador de distorção

Entrada (Vp) Ganho VB3 (Vp)

min max V/V min max

0,000037 0,000379 2382 0,088 0,904

0,000341 0,003509 257,543 0,088 0,904

0,003150 0,032458 27,843 0,088 0,904

0,029136 0,300233 3,010 0,088 0,904

Durante a seleção da escala ideal de leitura o microcontrolador verifica as saída dos flip-flops

do circuito detector de escala, mostrado na Figura 5.15, e atua sobre o ganho do amplificador

de distorção, segundo a Tabela 5.4. Todo o processo é ilustrado na Figura 5.16.

Figura 5.16: Fluxograma de ajuste do circuito de distorção

Page 87: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

87

Após a conversão RMS-DC e a filtragem, é obtida no conector RMS_DIST do circuito da

Figura 5.15 uma tensão contínua proporcional ao valor eficaz dos componentes harmônicos do

sinal de entrada, onde a constante de proporcionalidade é dada pelo ganho do estágio amplifi-

cador de distorção. O valor eficaz obtido corresponde ao numerador da equação (??).

O conector MONITOR é um conector BNC no painel do equipamento que possibilita a

visualização da forma de onda da distorção do sinal de entrada em um osciloscópio.

No Apêndice C é mostrado o esquema completo do circuito de distorção e sua respectiva

placa de circuito impresso, identificada por Placa C.

5.4 Microcontrolador, controle, aquisição de dados, dispositivos de en-

trada e saída

A Figura 5.17 mostra as conexões entre o microcontrolador e todos os periféricos do equi-

pamento.

Figura 5.17: Esquema do circuito de controle

A tela de LCD e o DDS se comunicam com o microcontrolador por meio da conexão SPI

disponível nos pinos D11 e D13. Os pinos D6 a D10 operam como Enable e Reset nesses

Page 88: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

88

dois periféricos. Os pinos A0 a A3 e A6 e A7 são conectados aos dois encoders rotativos, de

ajuste de frequência e amplitude do gerador, e provocam interrupções durante a execução das

rotinas do microcontrolador. Os relês do circuitos de entrada e distorção são controlados pelos

expansores I/O PCF8574, que se comunica com o microcontrolador por meio de conexão I2C,

disponível nos pinos A5 e A6. O conversor AD de 16 bits ADS1115 responsável pela leitura dos

valores eficazes dos sinais filtrados também se comunicam com o microcontrolador por meio

de conexão I2C. No modo varredura em frequência ou amplitude o microcontrolador transfere

dados para o computador graficador por meio de comunicação USB.

O Apêndice VI apresenta o código fonte programado no microcontrolador

5.5 Fonte

O esquema da fonte de alimentação de todos os circuitos do equipamento é mostrado na Fi-

gura E.2 do Apêndice V. O transformador possui um secundário de 24V com derivação central,

e uma potência de 30VA. Os integrados 7805 e 7905 são responsáveis por regular as saídas da

fonte me +5V , -5V , +9V e -9V, e possuem capacidade de 1A. A Figura E.1 do Apêndice V

mostra a placa de circuito impresso da fonte de alimentação, denominada de Placa E.

Page 89: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

89

Capítulo 6

Resultados

A Figura 6.1 mostra as placas de circuito do analisador de distorção em funcionamento. Nas

seções a seguir serão apresentados os resultados obtidos juntamente com suas respectivas dis-

cussões.

Figura 6.1: Placas de circuito impresso do analisador de distorção

No canto superior esquerdo é mostrada a placa do gerador senoidal, no centro superior a

placa dos circuitos de distorção, no canto superior direito a placa do atenuador de entrada, e na

parte inferior o microcontrolador e o display.

Page 90: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

90

6.1 Gerador Senoidal

6.1.1 Precisão do Gerador

Testes de bancada foram realizados a fim de verificar o funcionamento do gerador senoidal.

Experimentalmente observou-se que o gerador é capaz de sintetizar senoides de até 2.5V de

amplitude, com resolução de 10mV, e frequência entre 20Hz e 20kHz, com resolução de 10Hz.

A Figura 6.2 mostra o sinal obtido no conector BNC do gerador para a condição de 1kHz e 1V

de amplitude.

Figura 6.2: Saída do gerador senoidal, 1kHz, 1Vp

A fim de se verificar experimentalmente a precisão do gerador senoidal foram comparados

os valores de amplitude e frequência programados com aqueles os medidos experimentalmente.

A Figura 6.3 mostra a correlação entre frequência medida e programada, e a Figura 6.4 mostra

a correlação entre amplitude medida e programada.

Figura 6.3: Correlação entre frequência medida e programada

Page 91: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

91

Figura 6.4: Correlação entre amplitude medida e programada

A partir dos gráficos das Figuras 6.3 e 6.4 é possível concluir que o gerador senoidal cons-

truído apresenta boa precisão tanto em frequência quanto em amplitude, pois as retas ajustadas

possuem inclinação de 1.0005 no gráfico de frequência e 1.00325 no gráfico de amplitude.

6.1.2 Distorção produzida pelo gerador senoidal

A fim de quantificar o nível de distorção harmônica produzido pelo gerador senoidal, obteve-

se, usando um analisador de espectro HP3582A, a intensidade de cada um das componentes

harmônicas presentes na saída do gerador para dois casos em particular: 100Hz e 1kHz. As

Tabelas 6.1 e 6.2 mostram as medidas obtidas.

Tabela 6.1: Componentes harmônicos de 100Hz em diferentes amplitudes

Amplitude Harmonicos (dB) THD

(V) 100Hz 200Hz 300Hz 400Hz 500Hz 600Hz 700Hz (%)

0,1 0 -65,4 -67,2 -70,0 -75,0 -78,0 -80,0 0,0797

0,2 0 -65,3 -67,0 -71,0 -75,0 -80,0 -80,0 0,0793

0,3 0 -65,5 -68,0 -69,7 -72,3 -78,3 -80,0 0,0795

0,6 0 -65,3 -67,3 -71,0 -74,0 -78,2 -80,0 0,0793

1,0 0 -65,1 -67,0 -70,0 -79,1 -82,3 -85,6 0,0792

2,0 0 -65,8 -67,2 -69,2 -74,6 -77,9 -80,2 0,0796

2,4 0 -65,3 -67,8 -71,2 -75,4 -78,0 -80,0 0,0769

Nos dois casos os dados tabulados contemplam a onda fundamental normalizada em 0dB

e mais seis componentes harmônicos. A justificativa para desconsiderar harmônicos de ordem

Page 92: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

92

superior a 7 baseia-se na limitação da faixa dinâmica do analisador de espectro empregado na

medição, onde o oitavo harmômico se torna indissociável do ruído de fundo presente (grama).

Tabela 6.2: Componentes harmônicos de 1kHz em diferentes amplitudes

Amplitude Harmonicos (dB) THD

(V) 1kHz 2kHz 3kHz 4kHz 5kHz 6kHz 7kHz (%)

0,1 0 -65,5 -67,1 -70,5 -74,6 -78,2 -79,3 0,0790

0,2 0 -64,9 -67,5 -71,4 -74,7 -79,2 -79,7 0,0800

0,3 0 -65,8 -68,7 -69,3 -72,5 -78,9 -80,4 0,0797

0,6 0 -64,7 -67,3 -70,5 -73,4 -77,8 -80,6 0,0800

1 0 -64,5 -66,5 -70,0 -79,7 -83,1 -85,7 0,0803

2 0 -65,5 -67,0 -69,6 -74,6 -78,3 -80,7 0,0798

2,4 0 -65,8 -67,4 -71,6 -74,9 -78,1 -79,5 0,0784

A partir dos medidas contidas nas Tabelas 6.1 e 6.2 foi possível determinar o valor de THD

para cada caso. Os resultados são mostrados nas mesmas tabelas, e apresentados graficamente

na Figura 6.5.

Figura 6.5: Distorção Harmônica do gerador senoidal em 100Hz e 1kHz, em função da amplitude

A partir do gráfico da Figura 6.5 é possível concluir que o gerador senoidal construído pro-

duz THD em torno de 0,08%, para qualquer valor de amplitude. Para a aplicação em questão,

o nível de THD produzido pelo gerador é um pouco alto, mas aceitável considerando a simpli-

cidade e o custo do circuito gerador. Talvez a inserção de um filtro passa-baixa mais elaborado

na saída do gerador proporcione resultados mais adequados à medição de THD.

Page 93: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

93

6.1.3 Testes de varredura

Quando controlado remotamente pelo computador, para a confecção de gráficos, o gerador

deve operar no modo varredura de amplitude ou frequência. Testes foram realizados a fim de

verificar essa função. A Figura 6.6 mostra o gerador senoidal operando no modo de varredura

em frequência, de 1kHz a 10kHz, e 1V de amplitude.

Figura 6.6: Varredura em frequência de 1kHz a 10kHz

A Figura 6.6 mostra o gerador senoidal operando no modo de varredura em amplitude,

10mVp a 1Vp , e frequência de 1kHz.

Figura 6.7: Varredura em amplitude de 10mVp a 1Vp

A partir das Figuras 6.6 e 6.7 é possível concluir que o gerador desenvolvido é capaz de

operar no modo varredura, e, portanto, atende as necessidades do projeto.

Page 94: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

94

6.2 Atenuador de Entrada

O atenuador de entrada foi testado com o auxílio de um Variac de bancada conectado a

um divisor resistivo. O conector do atenuador de entrada foi conectado ao divisor resistivo, e

o divisor resistivo foi conectado ao Variac. Girando a manivela do Variac foi possível testar o

funcionamento do detector de escalas do atenuador de entrada, o qual funcionou como esperado.

De acordo com a amplitude do sinal de entrada o microcontrolador escolheu a combinação de

relês de ganho e atenuação que proporcionou o maior sinal possível, sem saturar os estágios

seguintes do medidor de distorção.

6.3 Medidor de Distorção

A fim de verificar o funcionamento do filtro notch a entrada do analisador de distorção foi

diretamente conectada à saída do gerador senoidal configurado para 1kHz e 1Vp. O circuito

atenuador de entrada foi ajustado de forma a não ocorrer overload, como explicado na seção

5.2. O filtro de variáveis de estado foi então pré-ajustado da maneira mencionada na seção 5.3,

e em seguida a frequência de sintonia foi corretamente corrigida pelo circuito automático de

sintonia. O sinal resultante da filtragem foi amplificado segundo as condições abordadas na

Tabela 5.4, também da seção 5.3. A Figura 6.8 mostra os sinais obtidos nos conectores SFV e

DIST, do esquema da Figura III.2 do Apêndice III.

Figura 6.8: Teste do medidor de distorção - Sinal de entrada e harmônicos pós filtro notch

Como citado na seção 5.3, o detector de escala do circuito de amplificador de distorção

seleciona para o sinal em questão a adequada escala de ganho. Logo, para o cálculo de THD o

Page 95: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

95

sinal residual, mostrado em verde na Figura 6.8, deve ser dividido pelo ganho do amplificador

de distorção. Para o caso da Figura 6.8 o ganho ajustado pelo detector de escala foi de 2385V/V,

o que resulta em um valor de THD de 0.096%.

Foram realizadas medições do valor eficaz da onda fundamental e do sinal residual para

diversos níveis de amplitude do gerador, nas frequência de 100Hz e 1kHz. Os resultados são

mostrados na Tabela 6.3.

Tabela 6.3: Componentes harmônicos de 1kHz em diferentes amplitudes

Amplitude THD (%)

(V) 100Hz 1kHz

0,1 0,0899 0,0887

0,2 0,0904 0,0898

0,3 0,0910 0,0897

0,6 0,0905 0,0899

1 0,0911 0,0903

2 0,0905 0,0912

2,4 0,0885 0,0891

A partir das Tabelas 6.1, 6.2 e 6.3 foram construídos os gráficos das Figuras 6.9 e 6.10,

que comparam os valores de THD medidos usando o analisador de espectro e o medidor de

distorção construído.

Figura 6.9: THD do gerador senoidal em 100Hz - Medições com analisador de espectro e com o medidor

construído

Page 96: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

96

Figura 6.10: THD do gerador senoidal em 1kHz - Medições com analisador de espectro e com o medidor

construído

A partir dos gráficos das Figuras 6.9 e 6.10 é possível concluir que as medidas obtidas

usando o medidor de distorção construído são compatíveis com as obtidas usando o analisador

de espectro. No entanto, nos dois casos se observa que as medições obtidas usando o anali-

sador construído aparentam estar constantemente deslocadas em relação as medições usando o

analisador de espectro. Isso provavelmente se deve a inserção de ruído no circuito, principal-

mente nos amplificadores do circuito de distorção. O ruído é indissociável dos componentes

harmônicos, e por conta disso acaba sendo contabilizado pelo conversor RMS-DC do circuito

de distorção. Uma maneira de minimizar o efeito do ruído seria através da inserção de filtros

para limitar a largura de banda do circuito de distorção.

6.4 Display e modo manual

A Figura 6.11 mostra o display do equipamento durante a medição de THD do próprio

gerador senoidal. O display é divido ao meio, sendo a seção superior reservada ao gerador e a

seção inferior associada ao medidor de THD.

Do lado esquerdo da seção do gerador é possível observar o ajuste atual de amplitude e

frequência. No lado direito é mostrado o passo de frequência e amplitude do gerador. Rota-

cionando os encoders é possível incrementar e decrementar amplitude e frequência pelos seus

respectivos passos. Os passos podem ser modificados através do botão presente no eixo de cada

encoder. Os passos possíveis para frequência são 10Hz, 50Hz, 100Hz, 500Hz e 1kHz, e os

Page 97: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

97

Figura 6.11: Display do analisador de distorção

passos de amplitude são 10mV, 50mV, 100mV e 500mV.

A seção do medidor de THD mostra a quantidade de distorção presente no sinal analisado

em duas escalas, em porcentagem e decibéis. As medições de THD são atualizadas a cada 1

segundo.

6.5 Gráficos e modo de varredura

No modo de varredura, tanto em frequência quanto em amplitude, as leituras de distorção

são encaminhadas para o computador por meio de uma porta USB. Foi desenvolvido uma soft-

ware em linguagem Python, disponível no Apêndice VII, para controlar o microcontrolador e

ao mesmo tempo plotar as leituras obtidas pelo equipamento construído. O modo varredura

nada mais é do que a automatização do modo manual. A Figura 6.12 mostra uma varredura em

amplitude onde se encontram plotados os índices de THD do gerador senoidal, em 1Khz, no

intervalo de 100mV a até 2.1V.

As funções dos botões presentes na janela da Figura 6.12 são:

• Media - Clicando neste botão é possível configurar quantas medidas são realizadas para

cada frequência, ou amplitude;

• Congela - Este botão permite que uma curva seja mantida na tela enquanto uma nova

curva é plotada;

• Auto ajuste - Verifica os valores máximo e mínimo do gráfico e dimensiona adequada-

mente a escala vertical;

Page 98: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

98

Figura 6.12: Interface graficadora para o modo de varredura

• Liga - Inicia a varredura;

• Desliga - Desliga a varredura;

• Amp inicial ou Freq inicial - Ajusta a amplitude ou frequência inicial da varredura;

• Amp Inicial ou Freq Inicial - Ajusta a amplitude ou frequência inicial da varredura;

• +0.01% ou -0.01% - Desloca a curva 0.01 para cima ou para baixo;

• +0.1% ou -0.1% - Desloca a curva 0.01 para cima ou para baixo;

• +%/div ou %/div - Aumenta ou diminui o número de divisões na janela;

• +amostras ou -amostras - Aumenta ou diminui o passo da varredura;

Page 99: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

99

Capítulo 7

Conclusão

Este trabalho de conclusão de curso apresentou o desenvolvimento e a construção de um

medidor de distorção harmônica de baixo custo. Este equipamento se faz necessário na caracte-

rização de circuitos eletrônicos que operam em baixa frequência, principalmente equipamentos

de áudio.

Dada a complexidade do tema em questão todo o trabalho foi dividido e organizado sequen-

cialmente. Primeiramente foi realizada uma revisão bibliográfica sobre conceitos relacionados

à medição de distorção harmônica. Em seguida foram definidas as hipóteses e objetivos do

trabalho. A partir dos objetivos foi possível recorrer novamente à literatura técnica a fim de

se obter o embasamento teórico necessário para propor as especificações do projeto. De posse

das especificações foi possível escolher os materiais usados no projeto, bem como os circuitos

onde esses materiais foram aplicados. Após a construção física dos circuitos foi possível obter

resultados experimentais que validaram as hipóteses inicias do trabalho.

O equipamento construído engloba um gerador senoidal, um circuito medidor de distorção

e uma interface gráfica por meio de um computador. O gerador senoidal possui ajuste de am-

plitude e frequência, e fornece o sinal de referência usando na medição de THD. O circuito

medidor de THD é composto de um filtro analógico que separa os componentes harmônicos e

fundamental do sinal distorcido, tornando possível o cálculo de THD segundo sua definição. O

circuito de controle gerencia tanto o gerador como o medidor, além de possibilitar a comunica-

ção com computadores. De modo geral, os circuitos desenvolvidos e apresentados no Capítulo

5 funcionaram em acordo com o previsto pelo embasamento teórico do Capítulo 2, atendendo

as especificações determinadas no Capítulo 3.

Apesar de possuir um gerador senoidal com distorção harmônica acima do ideal o equipa-

mento construído é capaz de medir THD com razoável precisão. O custo final dos componentes

Page 100: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

100

foi de aproximadamente R$500, e portanto, pode-se dizer que o objetivo do trabalho foi alcan-

çado, pois os resultados obtidos mostram que é possível construir um equipamento capaz de

medir THD com baixo custo.

Um aspecto bastante positivo encontrado no desenvolvimento do projeto foi a oportunidade

de trabalhar com uma grande variedade de disciplinas, entre elas, eletrônica analógica e digital,

instrumentação eletrônica, programação de microcontroladores, programação em Python, e por

fim a confecção de placas de circuito impresso.

As principais melhorias futuras estão relacionados a diminuição da distorção harmônica

do gerador senoidal por meio de filtros de reconstrução, e a diminuição do ruído presente no

circuito medidor, por meio de limitação da largura de banda. Além disso, a construção de uma

caixa com colmeias metálicas para cada PCB é desejável para minimizar a captação de ruídos

eletromagnéticos.

Page 101: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

101

Referências Bibliográficas

[1] METZLER, B. Audio measurement handbook. 2. ed. Beaverton, Oregon: Audio Precision,

Inc., 2005.

[2] WHITAKER, J.; BENSON, B. Standard handbook of audio and radio engineering. 2. ed.

New York: McGraw-Hill Education, 2002.

[3] OTALA, M. Transient distortion in transistorized audio power amplifiers. IEEE Transac-

tions on Audio and Electroacoustics, v. 18, n. 3, p. 234–239, Sep 1970.

[4] MARCHAND, S. Fourier-based methods for the spectral analysis of musical sounds. In:

. c2013. p. 1–5.

[5] CABOT, R. C. Fundamentals of modern audio measurement. Beaverton, Oregon: Audio

Precision, Inc, 1992.

[6] MACDONALD, J. On making accurate measurements with a harmonic distortion meter.

IRE Transactions on Audio, v. AU-5, n. 6, p. 160–161, November 1957.

[7] HIRATA, T. Quantifying amplifier sound. Wireless World, v. 4, p. 72–75, May 1981.

[8] SHMILOVITZ, D. On the definition of total harmonic distortion and its effect on measu-

rement interpretation. IEEE Transactions on Power Delivery, v. 20, n. 1, p. 526–528, Jan

2005.

[9] GLISSON, T.; BLACK, C.; SAGE, A. The digital computation of discrete spectra using

the fast fourier transform. IEEE Transactions on Audio and Electroacoustics, v. 18, n. 3,

p. 271–287, Sep 1970.

[10] WHITAKER, J.; BENSON, B. Electronics handbook of audio. 3. ed. New York: McGraw-

Hill Education, 2005.

[11] TOW, J. Active RC filters - A state-space realization. Proceedings of the IEEE, v. 56, n.

6, p. 1137–1139, June 1968.

Page 102: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

102

[12] PACTITIS, S. Active filters: theory and design. 2. ed. Boca Raton: CRC Press, 2002.

[13] ADAD, W.; IUZZOLINO, R. Low distortion signal generator based on direct digital

synthesis for adc characterization. International Measurement Confederation (IMEKO),

v. 1, n. 1, p. 59–64, July 2012.

[14] SANTOS, G.; BATISTA, P. Análise do desempenho do AD9835 para a geração de um

sinal senoidal. Centro Brasileiro de Pesquisas Físicas - Notas Técnicas, v. 3, n. 1, p.

15–19, Junho 2013.

[15] DEVICES, A. A technical tutorial on digital signal synthesis. Norwood: Analog Devices,

Inc., 1999.

[16] KESTER, W. The data conversion handbook. Newnes: Elsevier, 2005.

[17] TIPLER, P.; MOSCA, G. Física para cientistas e engenheiros: Eletricidade e magne-

tismo, Óptica. 6. ed. Rio de Janeiro: LTC, 2011. v. 2.

[18] HAYT, W.; KEMMERLY, J.; DURBIN, S. Análise de circuitos em engenharia. 8. ed. Rio

de Janeiro: AMGH Editora, 2014.

[19] KITCHIN, C.; COUNTS, L. Analog devices rms to dc conversion application guide. 1.

ed. Analog Devices, Inc, 1983.

[20] WILLIAMS, J. Instrumentation circuitry using RMS-TO-DC converters. Application

Note 106, February 2007. RMS Converters Rectify Average Results.

[21] DE SOUZA, D.; LAVINIA, N. Conectando o pic 16f877a: recursos avançados. São

Paulo: Editora Érica, 2005.

[22] INTERSIL. SPI protocol and BUS configuration. Application Note 1340, August 2007.

[23] ZANCO, W. Microcontroladores pic - técnicas de software e hardware para projetos de

circuitos eletrônicos. 2. ed. São Paulo: Editora Érica, 2008.

[24] SEMICONDUCTORS, P. I2c manual. Application Note 10216-01, March 2003.

[25] DEVICES, A. AD9850 - CMOS, 125 mhz complete dds synthesizer.

http://www.analog.com/media/en/technical-documentation/data-sheets/AD9850.pdf,

2004.

Page 103: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

103

[26] INSTRUMENT, T. LME49710 - High-performance, high-fidelity audio operational am-

plifier. http://www.ti.com/lit/ds/symlink/lme49710.pdf, November 2006.

[27] INSTRUMENTS, T. LME49600 - High-performance, high-fidelity, high-current he-

adphone buffer. http://www.ti.com/lit/ds/symlink/lme49600.pdf, January 2008.

[28] DEVICES, A. OP07 - Ultralow offset voltage operational amplifier.

http://www.analog.com/media/en/technical-documentation/data-sheets/OP07.pdf, Fe-

bruary 2002.

[29] INSTRUMENT, T. LM319 - High speed dual comparator.

http://www.ti.com/lit/ds/symlink/lm319-n.pdf, August 2000.

[30] SEMICONDUCTORS, N. 74HC74 - Dual d flip-flop with set and reset, positive edge-

trigger. http://www.nxp.com/documents/data_sheet/74HC_HCT74.pdf, December 2015.

[31] ELECTRONIC, S. O. . Gl5516 - CdS Photoresistor.

http://akizukidenshi.com/download/ds/senba/GL55%20Series%20Photoresistor.pdf.

[32] TECHNOLOGY, L. LTC1968 - Precision wide bandwidth RMS-to-DC converter.

http://cds.linear.com/docs/en/datasheet/1968f.pdf, 2004.

[33] ATMEL. Atmega328 - 8 bit microcontroller. http://www.atmel.com/images/doc8161.pdf,

March 2012.

[34] SEMICONDUCTORS, N. PCF8574 - Remote 8-bit I/O expander for I2C-BUS.

http://www.nxp.com/documents/data_sheet/PCF8574.pdf, November 2002.

[35] INSTRUMENT, T. ADS1115 - Ultra-small, low-power, 16-bit Analog-to-Digital conver-

ter with internal reference. http://www.ti.com/lit/ds/symlink/ads1115.pdf, May 2009.

Page 104: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

104

Page 105: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

105

Apêndice A

Circuito gerador

Figura A.1: Placa de circuito impresso - Circuito gerador - Placa A

Page 106: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

106

Figura A.2: Esquema - Circuito gerador - Placa A

Page 107: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

107

Apêndice B

Circuito de entrada

Figura B.1: Placa de circuito impresso - Circuito de entrada - Placa B

Page 108: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

108

Figura B.2: Esquema - Circuito de entrada - Placa B

Page 109: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

109

Page 110: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

110

Apêndice C

Circuito de distorção

Figura C.1: Placa de circuito impresso - Circuito de distorção - Placa C

Page 111: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

111

Figura C.2: Esquema do circuito de distorção.

Page 112: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

112

Page 113: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

113

Page 114: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

114

Apêndice D

Microcontrolador

Figura D.1: Placa de circuito impresso - Circuito do microcontrolador - Placa D

Page 115: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

115

Figura D.2: Esquema - Circuito do microcontrolador - Placa D

Page 116: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

116

Page 117: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

117

Apêndice E

Fonte

Figura E.1: Placa de circuito impresso - Circuito da fonte - Placa E

Page 118: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

118

Figura E.2: Esquema - Circuito da fonte - Placa E

Page 119: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

119

Apêndice F

Codificação - Arduino

#include <Wire.h>

#include <SPI.h>

#include <Rotary.h>

#include <Adafruit_GFX.h>

#include <Adafruit_ST7735.h>

#include <Adafruit_MCP4725.h>

Adafruit_MCP4725 dac;

#define TFT_SCLK 13

#define TFT_MOSI 11

#define TFT_DC 8

#define TFT_RST 9

#define TFT_CS 10

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define AD9850_CLOCK 125000000

#define DATA 2 #define W_CLK 3

#define FQ_UD 4 #define Ampl1 A0

#define Ampl2 A1 #define Freq1 A2

#define Freq2 A3

int AmplStep = A6; int FreqStep = A7;

Rotary i = Rotary(Ampl1, Ampl2); Rotary r = Rotary(Freq1, Freq2);

long signed int freq = 1000; float freq2 = 0;

char* stepFreqText[5] = "10Hz", "50Hz","100Hz","500Hz","1kHz";

byte stepPointerFreq = 2; signed long incrFreq = 0;

Page 120: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

120

String unitsFreq = stepFreqText[stepPointerFreq];

volatile float ampl = 1000.0;

char* stepAmplText[5] = "5.0mV","10mV","25mV","100mV","250mV";

byte stepPointerAmpl = 3;float incrAmpl = 0.0;

String unitsAmpl = stepAmplText[stepPointerAmpl];

float distPercen=0.1;

float distdB=-1.0; byte j=0;

byte k=0; byte escala=B0;

byte preFreq=B0; byte ajuste=B0;

#define pulseHigh(pin) digitalWrite(pin, HIGH); digitalWrite(pin, LOW);

void setup()

dac.begin(0x60);

sendAmplitude();

pinMode(Freq1, INPUT_PULLUP);

pinMode(Freq2, INPUT_PULLUP);

pinMode(Ampl1, INPUT_PULLUP);

pinMode(Ampl2, INPUT_PULLUP);

pinMode(AmplStep, INPUT_PULLUP);

pinMode(FreqStep, INPUT_PULLUP);

pinMode(FQ_UD, OUTPUT);

pinMode(W_CLK, OUTPUT);

pinMode(DATA, OUTPUT);

pinMode(TFT_RST, OUTPUT);

pinMode(TFT_DC, OUTPUT); cli();

PCICR |= (1 << PCIE1);

PCMSK1 |= (1 << PCINT10) | (1 << PCINT11);

PCMSK1 |= (1 << PCINT8) | (1 << PCINT9); sei();

digitalWrite(W_CLK, LOW);

digitalWrite(FQ_UD, LOW);

digitalWrite(DATA, LOW); delay(5);

digitalWrite(W_CLK, HIGH); delay(5);

digitalWrite(W_CLK, LOW); delay(5);

digitalWrite(DATA, LOW);

Page 121: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

121

digitalWrite(FQ_UD, LOW); delay(5);

digitalWrite(FQ_UD, HIGH); delay(5);

digitalWrite(FQ_UD, LOW);

sendFrequency(1000);

tft.initR(INITR_BLACKTAB);

tft.setRotation(3); tft.setTextWrap(false);

tft.fillScreen(ST7735_BLACK); mascara();

updateDisplayFreq(); updateDisplayFreqStep();

updateDisplayAmpl(); updateDisplayAmplStep();

void loop(void)

if (analogRead(AmplStep)<100) stepPointerAmpl++;

if (stepPointerAmpl > 4) stepPointerAmpl=0;

updateDisplayAmplStep();

delay(250);

if (analogRead(FreqStep)<100) stepPointerFreq++;

if (stepPointerFreq > 4) stepPointerFreq=0;

updateDisplayFreqStep(); delay(250);

if(j==1)sendAmplitude(); j=0;

if(k==1)sendAmplitude();

Wire.beginTransmission(32);Wire.write(ajuste);

Wire.endTransmission(); k=0;

void getStepFreq()

switch(stepPointerFreq)

case 0: incrFreq = 10; break;

case 1: incrFreq = 50; break;

case 2: incrFreq = 100; break;

case 3: incrFreq = 500; break;

case 4: incrFreq = 1000; break;

void getStepAmpl()

switch(stepPointerAmpl)

case 0: incrAmpl = 5.0; break;

case 1: incrAmpl = 10.0; break;

case 2: incrAmpl = 25.0; break;

Page 122: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

122

case 3: incrAmpl = 100.0; break;

case 4: incrAmpl = 250.0; break;

void mascara()

tft.drawFastHLine(0,0,160, ST7735_WHITE);

tft.setCursor(53,3); tft.setTextSize(1);

tft.setTextColor(ST7735_WHITE); tft.print("Gerador");

tft.drawFastHLine(0,12,160, ST7735_WHITE);

tft.drawFastHLine(0,65,160, ST7735_WHITE);

tft.setCursor(50,69); tft.setTextSize(1);

tft.setTextColor(ST7735_WHITE);tft.print("Analisador");

tft.drawFastHLine(0,78, 160 , ST7735_WHITE);

tft.drawFastHLine(0,127,160, ST7735_WHITE);

void updateDisplayFreqStep()

unitsFreq = stepFreqText[stepPointerFreq];

tft.fillRect(120, 16, 40, 15, ST7735_BLACK);

tft.setTextColor(ST7735_RED);tft.setTextSize(1);

tft.setCursor(120, 21);tft.print(unitsFreq);

void updateDisplayAmplStep()

unitsAmpl = stepAmplText[stepPointerAmpl];

tft.fillRect(120, 41, 40, 15, ST7735_BLACK);

tft.setTextColor(ST7735_RED); tft.setTextSize(1);

tft.setCursor(120, 45);tft.print(unitsAmpl);

void updateDisplayFreq()

tft.fillRect(0, 16, 110, 25, ST7735_BLACK);

tft.setTextColor(ST7735_GREEN);

tft.setTextSize(2); if (freq < 1000)

tft.setCursor(10, 21); tft.print(freq);

tft.setCursor(40, 21); tft.print(" Hz");

else tft.setCursor(10, 21);

if (freq < 9999) tft.print((float)freq/1000, 3);

if (freq > 9999) tft.print((float)freq/1000, 2);

tft.setCursor(60, 21); tft.print(" kHz");

void updateDisplayAmpl()

Page 123: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

123

tft.fillRect(0, 41, 110, 23, ST7735_BLACK);

tft.setTextColor(ST7735_GREEN); tft.setTextSize(2);

if (ampl < 1000.0) tft.setCursor(10,45);

tft.print((float)ampl, 1); tft.setCursor(60,45);

tft.print(" mV"); else tft.setCursor(10,45);

tft.print((float)ampl/1000, 3); tft.setCursor(60,45);

tft.print(" V");

void updateDisplayGain()

tft.fillRect(0, 83, 110, 24, ST7735_BLACK);

tft.setTextColor(ST7735_GREEN); tft.setTextSize(2);

if (ampl < 10.0) tft.setCursor(10, 86);

tft.print(distPercen, 3); tft.setCursor(60, 86);

else tft.setCursor(10, 86); tft.print(distPercen, 2);

tft.setCursor(60, 86); tft.print("%");

tft.fillRect(110, 83, 50, 15, ST7735_BLACK);

tft.setTextColor(ST7735_RED); tft.setTextSize(1);

tft.setCursor(110, 86); if(distdB>-9.999) tft.print(" ");

tft.print(distdB,2); tft.print("dB");

void updateDisplayTHD()

tft.fillRect(0, 104, 110, 23, ST7735_BLACK);

tft.setTextColor(ST7735_GREEN);

tft.setTextSize(2); if (ampl < 10.0)

tft.setCursor(10,109); tft.print(distPercen, 3);

tft.setCursor(60, 109); else

tft.setCursor(10, 109); tft.print(distPercen, 2);

tft.setCursor(60, 109);

tft.print("%"); tft.fillRect(110, 105, 50, 15, ST7735_BLACK);

tft.setTextColor(ST7735_RED);

tft.setTextSize(1); tft.setCursor(110, 109);

if(distdB>-9.999) tft.print(" "); tft.print(distdB,2);

tft.print("dB");

void sendFrequency(double frequency)

unsigned long tuning_word;

Page 124: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

124

float tuneword=(frequency * pow(2, 32))

tuning_word=(unsigned long) tuneword;

shiftOut(DATA, W_CLK, LSBFIRST, tuning_word);

shiftOut(DATA, W_CLK, LSBFIRST, tuning_word >> 8);

shiftOut(DATA, W_CLK, LSBFIRST, tuning_word >> 16);

shiftOut(DATA, W_CLK, LSBFIRST, tuning_word >> 24);

shiftOut(DATA, W_CLK, LSBFIRST, 0x0);

digitalWrite (FQ_UD, HIGH); digitalWrite(FQ_UD, LOW);

void sendAmplitude()

dac.setVoltage((int) 4095-1.504*ampl, false);

void ajustaFiltro()

freq2=freq; if(freq2<=200) escala=1;if(freq2>2000) escala=4;

freq2=freq2/100.0;;if(freq2>200&freq2<=2000)escala=2;

freq2=freq2/10.0; preFreq= ceil(0.08077*freq2-0.9087);

if(preFreq>15)preFreq=15;if(preFreq<8)preFreq=preFreq-1;

escala=escala<<4; ajuste=~(escala|preFreq);

tft.fillRect(0, 104, 110, 23, ST7735_BLACK);

tft.setTextColor(ST7735_GREEN);

tft.setTextSize(2); tft.setCursor(10,109);tft.print(ajuste,BIN);

k=1;

ISR(PCINT1_vect) unsigned char result = r.process();getStepFreq();

if (result) if (result == DIR_CW)

if ((freq + incrFreq) <= 22000) freq += incrFreq;

else if((freq-incrFreq)>= 20)freq -= incrFreq;

if (freq <= 20) freq = 20;if (freq >=20000) freq = 20000;

updateDisplayFreq(); sendFrequency(freq);

ajustaFiltro(); unsigned char result2 = i.process();

getStepAmpl();

if (result2)

if(result2 == DIR_CW)if((ampl+incrAmpl)<=2500.0)ampl+= incrAmpl;

else if ((ampl - incrAmpl) >= 2.5) ampl -= incrAmpl;

if (ampl <= 2.5) ampl = 2.5;if (ampl >=2500.0) ampl = 2500.0;j=1;

updateDisplayAmpl();

Page 125: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

125

Apêndice G

Codificação - Python

Código fonte baseado no disponível em:

http://rheslip.blogspot.com.br/2015/08/the-simple-scalar-network-analyser.html

import pyaudio

import math

import time

import serial

import numpy

import tkFont

from time import sleep

from Tkinter import *

from tkFileDialog import askopenfilename

from tkSimpleDialog import askstring

from tkMessageBox import *

SERIALPORT = "COM4"

# Values that can be modified

GRWN = 1024 # Width of the grid

GRHN = 512 # Height of the grid

X0L = 20 # Left top X value of grid

Y0T = 25 # Left top Y value of grid

Vdiv = 12 # Number of vertical divisions

TRACEmode = 3 # 1 normal mode, 2 max hold, 3 average

TRACEaverage = 1 # Number of samples

TRACEreset = True # True for first new trace

Page 126: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

126

Sweepreset = False # flag to restart the sample sweep

DBdivlist = [1, 2, 3, 5, 10, 20] # dB per division

DBdivindex = 4 # 10 dB/div as initial value

DBlevel = 10 # Reference level

MAXSAMPLES=1000

Samplelist = [100, 200,500,1000] # samples per sweep

Sampleindex = 0 # initial value

SAMPLES = Samplelist[Sampleindex] # samples per sweep

# Colors that can be modified

COLORframes = "#000080" # Color = "#rrggbb" rr=red gg=green bb=blue

COLORcanvas = "#000000"

COLORgrid = "#808080"

COLORtrace1 = "#00ff00"

COLORtrace2 = "#ff8000"

COLORtext = "#ffffff"

COLORsignalband = "#ff0000"

COLORaudiobar = "#606060"

COLORaudiook = "#00ff00"

COLORred = "#ff0000"

COLORMarker1 = "#ff0000"

COLORMarker2 = "#ffff00"

# Button sizes that can be modified

Buttonwidth1 = 12

Buttonwidth2 = 8

# Initialisation of general variables

STARTfrequency = 20.0 # Startfrequency

STOPfrequency = 20000.0 # Stopfrequency

# Other global variables required in various routines

GRW = GRWN # Initialize GRW

GRH = GRHN # Initialize GRH

CANVASwidth = GRW + 2 * X0L # The canvas width

CANVASheight = GRH + 80 # The canvas height

DBmreadings = [0 for x in range(MAXSAMPLES)]

Page 127: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

127

REFreadings = [0 for x in range(MAXSAMPLES)]

T1line = [] # Trace line channel 1

T2line = [] # Trace line channel 2

S1line = [] # Line for start of signal band indication

S2line = [] # line for stop of signal band indication

RUNstatus = 1

STOREtrace = False # Store and display trace

Referenceon = 0 # apply calbration reference

REFstore = 0 # save calbration readings

Marker1x = 0 # marker pip 1 location

Marker1y = 0

Marker2x = 0 # marker pip 2

Marker2y = 0

def Zerosamples():

global DBmreadings

DBmreadings = [0 for x in range(MAXSAMPLES)]

# ================== Start widgets routines ========================

def Bnot():

print "Routine not made yet"

# handle markers when mouse is clicked in middle frame

def Bmarker1(event):

global Marker1x

global Marker1y

Marker1x=event.x

Marker1y=event.y

def Bmarker2(event):

global Marker2x

global Marker2y

Marker2x=event.x

Marker2y=event.y

#print "button 2 clicked at", event.x, event.y

def BAveragemode():

global TRACEmode

Page 128: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

128

global TRACEaverage

global TRACEreset

TRACEreset = True

TRACEmode = 3

s = askstring("Distorcao Harmonica", "Valor: " + str(TRACEaverage) + "x\n\nNovo valor:\n(1-n)")

if (s == None):

return()

try: v = int(s)

except:

s = "erro"

if s != "erro":

TRACEaverage = v

if TRACEaverage < 1:

TRACEaverage = 1

if TRACEaverage > 30:

TRACEaverage = 30 # avoid very long sweep times

UpdateScreen() # Always Update

def Calibrateref():

global REFstore

global RUNstatus

global Sweepreset

if REFstore == 0:

REFstore = 1

Sweepreset= True # force a new sweep

else:

REFstore = 0

UpdateAll() # Always Update

def Calonoff():

global Referenceon

global RUNstatus

if Referenceon == 0:

Referenceon = 1

Page 129: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

129

else:

Referenceon = 0

if RUNstatus == 0: # Update if stopped

UpdateScreen()

def BSTOREtrace():

global STOREtrace

global T1line

global T2line

if STOREtrace == False:

T2line = T1line

STOREtrace = True

else:

STOREtrace = False

UpdateTrace() # Always Update

def BAutoY(): # auto adjust offset and range

global Vdiv

global DBlevel

global DBdivlist

global DBdivindex

global DBmreadings # samples

global REFreadings # reference samples

global Referenceon

global SAMPLES

readings=numpy.array(DBmreadings[0:SAMPLES])

ref = numpy.array(REFreadings[0:SAMPLES])

if Referenceon:

readings=readings-ref

maxDB=max(readings)

minDB=min(readings)

DBlevel=int (maxDB) # round down to nearest int

DBperdivision=(maxDB-minDB)*1.2/Vdiv

#tricky way to find closest value in a list

print DBdivindex

Page 130: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

130

UpdateTrace() # Always Update

def BSNmode():

global RUNstatus

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def BSNfreq1():

global RUNstatus

global CENTERsignalfreq

global SNfreqstep

global SNmeasurement

CENTERsignalfreq = CENTERsignalfreq - SNfreqstep

if CENTERsignalfreq < 0:

CENTERsignalfreq = 0

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def BStart():

global RUNstatus

if (RUNstatus == 0):

RUNstatus = 1

UpdateScreen() # Always Update

def Blevel1():

global RUNstatus

global DBlevel

DBlevel = DBlevel - 1

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def Blevel2():

global RUNstatus

global DBlevel

DBlevel = DBlevel + 1

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def Blevel3():

Page 131: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

131

global RUNstatus

global DBlevel

DBlevel = DBlevel - 10

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def Blevel4():

global RUNstatus

global DBlevel

DBlevel = DBlevel + 10

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def BStop():

global RUNstatus

global Sweepreset

if (RUNstatus == 1):

RUNstatus = 0

elif (RUNstatus == 2):

RUNstatus = 3

elif (RUNstatus == 3):

RUNstatus = 3

elif (RUNstatus == 4):

RUNstatus = 3

Sweepreset=True # stop the sweep

UpdateScreen() # Always Update

def BStartfrequency():

global STARTfrequency

global STOPfrequency

global Referenceon

global RUNstatus

global Sweepreset

if (s == None):

return()

try:

Page 132: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

132

v = float(s)

except:

s = "erro"

if s != "erro":

STARTfrequency = abs(v)

if STOPfrequency <= STARTfrequency:

STOPfrequency = STARTfrequency + 1

Referenceon = 0 # ref level not valid

Zerosamples() # reset sample values

Sweepreset = True # Reset trace peak and trace average

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def BStopfrequency():

global STARTfrequency

global STOPfrequency

global Referenceon

global RUNstatus

global Sweepreset

if (s == None):

return()

try:

v = float(s)

except:

s = "erro"

if s != "erro":

STOPfrequency = abs(v)

if STOPfrequency < 10: # Minimum stopfrequency 10 Hz

STOPfrequency = 10

if STARTfrequency >= STOPfrequency:

STARTfrequency = STOPfrequency - 1

Referenceon = 0 # ref level not valid

Zerosamples() # reset sample values

Sweepreset = True # Reset trace peak and trace average

Page 133: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

133

if RUNstatus == 0: # Update if stopped

UpdateTrace()

# samples per sweep can also be set via the setup dialog for custom values

def Bsamples1():

global SAMPLES

global Samplelist

global Sampleindex

global Referenceon

global RUNstatus

global Sweepreset

if (Sampleindex >= 1):

Sampleindex = Sampleindex - 1

SAMPLES=Samplelist[Sampleindex]

Referenceon=0 # reference array is no longer valid

Zerosamples() # reset sample values

Sweepreset = True # restart sweep

if RUNstatus == 0: # Update if stopped

UpdateScreen()

if RUNstatus == 2: # Restart if running

RUNstatus = 4

def Bsamples2():

global SAMPLES

global Referenceon

global Samplelist

global Sampleindex

global RUNstatus

global Sweepreset

if (Sampleindex < len(Samplelist) - 1):

Sampleindex = Sampleindex + 1

SAMPLES=Samplelist[Sampleindex]

Referenceon=0 # reference array is no longer valid

Zerosamples() # reset sample values

Sweepreset = True # restart sweep

Page 134: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

134

if RUNstatus == 0: # Update if stopped

UpdateScreen()

if RUNstatus == 2: # Restart if running

RUNstatus = 4

def BDBdiv1():

global DBdivindex

global RUNstatus

if (DBdivindex >= 1):

DBdivindex = DBdivindex - 1

if RUNstatus == 0: # Update if stopped

UpdateTrace()

def BDBdiv2():

global DBdivindex

global DBdivlist

global RUNstatus

if (DBdivindex < len(DBdivlist) - 1):

DBdivindex = DBdivindex + 1

if RUNstatus == 0: # Update if stopped

UpdateTrace()

# =============================== Main routine ======================

def Sweep(): # Read samples

global SERIALPORT

global DBmreadings

global REFstore

global REFreadings

global STARTfrequency

global STOPfrequency

global RUNstatus

global Sweepstatus

global SMPfftlist

global SMPfftindex

global SAMPLES

Page 135: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

135

global UPDATEspeed

global RXbuffer

global RXbufferoverflow

global TRACEmode

global TRACEaverage

global Sweepreset

while (True):

# RUNstatus = 1 : Open Stream

if (RUNstatus == 1):

if UPDATEspeed < 1:

UPDATEspeed = 1.0

TRACESopened = 1

try:

ser = serial.Serial(SERIALPORT, 9600, timeout=1)

RUNstatus = 2

except:

RUNstatus = 0

showerror("Nao foi possivel conectar com o arduino")

UpdateScreen()

# RUNstatus = 2: Reading data from power monitor

if (RUNstatus == 2):

adsamplecount=1

if (TRACEmode == 3): # average mode

adsamplecount=TRACEaverage

#create the list of frequencies - X axis

incr=(STOPfrequency-STARTfrequency)/SAMPLES

t = numpy.arange(STARTfrequency, STOPfrequency, incr)

j=0

step=0

# DBmreadings =[] # y axis measurements

#for frequency in t:

frequency=STARTfrequency

while ((step < SAMPLES) & (Sweepreset==False)):

Page 136: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

136

cmd = str(long(frequency))

cmd = cmd + "\n"

#print cmd

ser.write(cmd) # set DDS frequency

dbm = 0

i=0

UpdateTrace()

#sleep(0.02)

while (i < adsamplecount) :

ser.write("\n") #

line = ser.readline()

line = line.strip()

if len(line) !=0:

#print line

dbm = dbm + float(line)

i=i+1

dbm = dbm/adsamplecount

#print dbm

DBmreadings[step]= dbm

if REFstore == True:

REFreadings[step]= dbm

frequency=frequency+incr

step=step+1

cmd = str(long(STARTfrequency))

cmd = cmd + "\n"

UpdateAll()

if ((REFstore == True) & (step == SAMPLES)):

# RUNstatus = 3: Stop

# RUNstatus = 4: Stop and restart

if (RUNstatus == 3) or (RUNstatus == 4):

ser.close()

if RUNstatus == 3:

RUNstatus = 0 # Status is stopped

Page 137: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

137

if RUNstatus == 4:

RUNstatus = 1 # Status is (re)start

UpdateScreen() # UpdateScreen() call

# Update tasks and screens by TKinter

root.update_idletasks()

root.update() # update screens

def UpdateAll(): # Update Data, trace and screen

MakeTrace() # Update the traces

UpdateScreen() # Update the screen

def UpdateTrace(): # Update trace and screen

MakeTrace() # Update traces

UpdateScreen() # Update the screen

def UpdateScreen(): # Update screen with trace and text

MakeScreen() # Update the screen

root.update() # Activate updated screens

def MakeTrace(): # Update the grid and trace

global SAMPLES

global DBmreadings

global REFreadings

global Referenceon

global T1line

global T2line

global S1line

global S2line

global STOREtrace

global X0L # Left top X value

global Y0T # Left top Y value

global GRW # Screenwidth

global GRH # Screenheight

global Vdiv # Number of vertical divisions

global STARTfrequency

global STOPfrequency

global CENTERsignalfreq

Page 138: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

138

global STARTsignalfreq

global DBdivlist # dB per division list

global DBdivindex # Index value

global DBlevel # Reference level

global SAMPLErate

# Set the TRACEsize variable

TRACEsize = SAMPLES # Set the trace length

if TRACEsize == 0: # If no trace, skip rest of this routine

return()

# Vertical conversion factors (level dBs) and border limits

Yconv = float(GRH) / (Vdiv * DBdivlist[DBdivindex])

Yc = float(Y0T) + GRH + Yconv * (DBlevel -(Vdiv * DBdivlist[DBdivindex]))

Ymin = Y0T

Ymax = Y0T + GRH

# Horizontal conversion factors (frequency Hz) and border limits

Fpixel = float(STOPfrequency - STARTfrequency) / GRW

Fsample = float(STOPfrequency - STARTfrequency) / (TRACEsize - 1)

T1line = []

n = 0

while n < TRACEsize:

F = n * Fsample

if F <= STOPfrequency:

x = X0L + F / Fpixel

T1line.append(int(x + 0.5))

try:

if Referenceon:

y = Yc - Yconv * (DBmreadings[n]-REFreadings[n])

else:

y = Yc - Yconv * DBmreadings[n]

except:

y = Ymax

if (y < Ymin):

y = Ymin

Page 139: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

139

if (y > Ymax):

y = Ymax

T1line.append(int(y + 0.5))

n = n + 1

def MakeScreen(): # Update the screen with traces and text

global X0L # Left top X value

global Y0T # Left top Y value

global GRW # Screenwidth

global GRH # Screenheight

global T1line

global T2line

global S1line

global S2line

global STOREtrace

global Vdiv # Number of vertical divisions

global RUNstatus

global AUDIOstatus # 0 audio off, 1 audio on

global UPDATEspeed

global STARTfrequency

global STOPfrequency

global CENTERsignalfreq

global STARTsignalfreq

global STOPsignalfreq

global SNenabled

global SNmeasurement

global SNresult

global DBdivlist # dB per division list

global DBdivindex # Index value

global DBlevel # Reference level

global SAMPLErate

global TRACEmode # 1 normal 2 max 3 average

global TRACEaverage # Number of traces for averageing

global AUDIOlevel # Level of audio input 0 to 1

Page 140: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

140

global FFTwindow

global COLORgrid # The colors

global COLORtrace1

global COLORtrace2

global COLORtext

global COLORsignalband

global COLORaudiobar

global COLORaudiook

global COLORaudiomax

global COLORMarker1

global COLORMarker2

global CANVASwidth

global CANVASheight

global RXbuffer

global RXbufferoverflow

global REFstore

global Referenceon

global Marker1x

global Marker1y

global Marker2x

global Marker2y

# Delete all items on the screen

de = ca.find_enclosed ( 0, 0, CANVASwidth+1000, CANVASheight+1000)

for n in de:

ca.delete(n)

# Draw horizontal grid lines

i = 0

x1 = X0L

x2 = X0L + GRW

x3 = x1+2 # db labels X location

db= DBlevel

while (i <= Vdiv):

y = Y0T + i * GRH/Vdiv

Page 141: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

141

Dline = [x1,y,x2,y]

ca.create_line(Dline, fill=COLORgrid)

txt = str(db) # db labels

idTXT = ca.create_text (x3, y-5, text=txt, anchor=W, fill=COLORtext)

db = db - DBdivlist[DBdivindex]

i = i + 1

# Draw vertical grid lines

i = 0

y1 = Y0T

y2 = Y0T + GRH

freq= STARTfrequency

freqstep= (STOPfrequency-STARTfrequency)/10

while (i < 11):

x = X0L + i * GRW/10

Dline = [x,y1,x,y2]

ca.create_line(Dline, fill=COLORgrid)

txt = str(freq/1000) # freq labels in khz

txt= txt + "k"

idTXT = ca.create_text (x-10, y2+10, text=txt, anchor=W, fill=COLORtext)

freq=freq+freqstep

i = i + 1

# Draw traces

if len(T1line) > 4:

ca.create_line(T1line, fill=COLORtrace1)

if STOREtrace == True and len(T2line) > 4:

ca.create_line(T2line, fill=COLORtrace2)

# Start and stop frequency and dB/div and trace mode

txt = str(STARTfrequency) + "Hz ate " + str(STOPfrequency/1000) + " kHz"

txt = txt + " " + str(DBdivlist[DBdivindex]) + " dB/div"

txt = txt + " Level: " + str(DBlevel) + " dB "

if TRACEmode == 1:

txt = txt + " Modo normal "

if TRACEmode == 2:

Page 142: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

142

txt = txt + " Valor maximo "

if TRACEmode == 3:

txt = txt + " Media (" + str(TRACEaverage) + ") "

x = X0L +300

y = Y0T+GRH+40

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

if Referenceon == True:

txt = " Com Referencia"

x = X0L +700

y = Y0T+GRH+40

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORred)

else:

txt = " Sem referencia"

x = X0L +700

y = Y0T+GRH+40

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

if REFstore == 1:

txt = "CALIBRANDO!"

x = X0L +430

y = Y0T+40

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORred)

# Runstatus and level information

if (RUNstatus == 0) or (RUNstatus == 3):

txt = "Varredura desligada"

else:

txt = "Varredura ligada"

x = X0L

y = Y0T+GRH+40

IDtxt = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

txt = str(SAMPLES)+ " amostras por varredura "

Page 143: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

143

x = X0L + 100

y = Y0T+GRH+40

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

# show the values at the mouse cursor

# note the magic numbers below were determined by looking at the cursor values

# not sure why they don’t correspond to X0T and Y0T

cursorx = (STARTfrequency + (root.winfo_pointerx()-root.winfo_rootx()-X0L-4) * (STOPfrequency-STARTfrequency)/GRW) /1000

cursory = DBlevel - (root.winfo_pointery()-root.winfo_rooty()-Y0T-50) * Vdiv*DBdivlist[DBdivindex] /GRH

txt = "Cursor " + str(cursorx) + " kHz " + str(cursory) + " dB"

x = X0L + 40

y = Y0T -10

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

Marker1valid=False

if ((Marker1x > 20) & (Marker1y >20)): # show on screen markers

Marker1valid=True

idTXT = ca.create_text (Marker1x-3, Marker1y+4, text="^", anchor=W, fill=COLORMarker1)

Marker1freq = (STARTfrequency + (Marker1x-19) * (STOPfrequency-STARTfrequency)/GRW) /1000000

Marker1db = DBlevel - (Marker1y-20) * Vdiv*DBdivlist[DBdivindex] /GRH

txt = "Cursor 1 " + str(Marker1freq) + " kHz " + str(Marker1db) + " dB"

x = X0L + 300

y = Y0T -10

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORMarker1)

Marker2valid=False

if ((Marker2x > 20) & (Marker2y >20)): # show on screen markers

Marker2valid=True

idTXT = ca.create_text (Marker2x-3, Marker2y+4, text="^", anchor=W, fill=COLORMarker2)

Marker2freq = (STARTfrequency + (Marker2x-19) * (STOPfrequency-STARTfrequency)/GRW) /1000000

Marker2db = DBlevel - (Marker2y-20) * Vdiv*DBdivlist[DBdivindex] /GRH

txt = "Cursor 2" + str(Marker2freq) + " kHz " + str(Marker2db) + " dB"

x = X0L + 520

y = Y0T -10

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORMarker2)

# show marker delta only if both are valid

Page 144: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

144

if (Marker1valid & Marker2valid):

Deltafreq = abs(Marker2freq-Marker1freq)

Deltadb = abs(Marker2db-Marker1db)

txt = "Delta " + str(Deltafreq) + " kHz " + str(Deltadb) + " dB"

x = X0L + 750

y = Y0T -10

idTXT = ca.create_text (x, y, text=txt, anchor=W, fill=COLORtext)

# ================ Make Screen ==========================

root=Tk()

root.title("Medidor de THD")

root.minsize(100, 100)

frame1 = Frame(root, background=COLORframes, borderwidth=5, relief=RIDGE)

frame1.pack(side=TOP, expand=1, fill=X)

frame2 = Frame(root, background="black", borderwidth=5, relief=RIDGE)

frame2.pack(side=TOP, expand=1, fill=X)

frame3 = Frame(root, background=COLORframes, borderwidth=5, relief=RIDGE)

frame3.pack(side=TOP, expand=1, fill=X)

ca = Canvas(frame2, width=CANVASwidth, height=CANVASheight, background=COLORcanvas)

ca.bind("<Button-1>", Bmarker1)

ca.bind("<Button-3>", Bmarker2)

ca.pack(side=TOP)

b = Button(frame1, text="Media", width=Buttonwidth1, command=BAveragemode)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame1, text="Congela", width=Buttonwidth1, command=BSTOREtrace)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame1, text="Auto ajuste", width=Buttonwidth1, command=BAutoY)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame1, text="Ref liga/desliga", width=Buttonwidth1, command=Calonoff)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame1, text="Calibrar", width=Buttonwidth1, command=Calibrateref)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="Liga", width=Buttonwidth2, command=BStart)

b.pack(side=LEFT, padx=5, pady=5)

Page 145: UNIVERSIDADE DE SÃO PAULO - Biblioteca Digital de ... · ao medidor pretende-se desenvolver um gerador senoidal de baixa distorção que proporcione ... 4.9 Plataforma Arduino Nano

145

b = Button(frame3, text="Desliga", width=Buttonwidth2, command=BStop)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame3, text="Freq inicial", width=Buttonwidth2, command=BStartfrequency)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame3, text="Freq final", width=Buttonwidth2, command=BStopfrequency)

b.pack(side=LEFT, padx=5, pady=5)

b = Button(frame3, text="+ amostras", width=Buttonwidth2, command=Bsamples2)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="- amostras", width=Buttonwidth2, command=Bsamples1)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="+dB/div", width=Buttonwidth2, command=BDBdiv2)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="-dB/div", width=Buttonwidth2, command=BDBdiv1)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="+10dB", width=Buttonwidth2, command=Blevel4)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="-10dB", width=Buttonwidth2, command=Blevel3)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="+1dB", width=Buttonwidth2, command=Blevel2)

b.pack(side=RIGHT, padx=5, pady=5)

b = Button(frame3, text="-1dB", width=Buttonwidth2, command=Blevel1)

b.pack(side=RIGHT, padx=5, pady=5)

# self.Canvas.bind(’<Button-1>’, self.on_click) # for cursor location

# ================ Call main routine ===============================

root.update() # Activate updated screens

Sweep()