Você está na página 1de 152

UNIVERSIDADE ESTADUAL DE CAMPINAS

Faculdade de Engenharia Mecânica


Engenharia de Controle e Automação

ES951 / ES952 - TRABALHO DE GRADUAÇÃO

“Estudo de Encoders Ópticos Baseados no Efeito Moiré


e Projeto de um Kit de Encoder Didático”

Aluno: Victor Adriano Turchetti RA: 025366

Orientador: Prof. Dr. Luiz Otávio Saraiva Ferreira

NOVEMBRO - 2007
FACULDADE DE ENGENHARIA MECÂNICA
COORDENAÇÃO DE GRADUAÇÃO
ENGENHARIA DE CONTROLE E AUTOMAÇÃO
UNICAMP
ES952 - TRABALHO DE GRADUAÇÃO II
2 o semestre de 2007

ALUNO: RA:

TÍTULO:

NOTAS DA BANCA MEMBRO MEMBRO ORIENTADOR


(1) (2)

Conteúdo do Trabalho

Apresentação do Trabalho

Seminário de Apresentação
A t r i b u ir c o n c e i t o : E x c e l e n t e , B o m, R e g u la r , I n s u f i c ie n t e
M ÉDI A
NOTA GLOBAL F IN AL
A t r ib u i r n o t a d e 0 - 1 0 ( n o t a m í n i ma p a r a a p r o v a ç ã o : 5 , 0 )

Campi nas, de de

_________________________________ _________________________________
Prof. Prof.
Membro (1) Membro (2)
Carimbo e Assinatura Carimbo e Assinatura

_________________________________ _________________________________
Prof. Prof. Dr. Eurípides G. de Oliveira Nóbrega
Orientador Coordenador de Graduação
Carimbo e Assinatura Carimbo e Assinatura

i
Agradecimentos

Gostaria de agradecer ao professor Luiz Otávio Saraiva Ferreira pelas orientações prestadas
e pela disponibilidade de atendimento para esclarecer dúvidas. Gostaria de agradecer ao Marcílio
e ao Paulo Lamim, que contribuíram quando da utilização do laboratório de mecatrônica.
Gostaria também de deixar um agradecimento aos meus pais, pelo apoio e suporte constantes.

ii
Resumo

O presente trabalho traz, inicialmente, um estudo sobre encoders ópticos baseados no efeito
moiré, apresentando os princípios de funcionamento, discutindo sistemas para aumentar a
resolução (sistemas resolvedores), mostrando as técnicas de fabricação de discos e abordando
questões relacionadas a erros e testes de encoders. Em seguida, apresenta o desenvolvimento de
um kit de encoder composto por um encoder didático de baixo custo (128 PPR), um encoder de
referência (1024 PPR), uma interface eletrônica com microcontrolador e uma interface gráfica do
usuário em MATLAB. O encoder didático é desenvolvido utilizando o efeito moiré para gerar a
defasagem de 90º elétricos entre seus canais A e B. Para isso, são utilizados dois discos, um
móvel com 32 pares de setores translúcido-opaco e outro estático com 33 pares. A diferença de 1
par de setores translúcido-opaco permite a obtenção da defasagem de 90º elétricos por meio do
posicionamento de dispositivos de leitura a 90º angulares. A resolução do encoder obtida
fisicamente (32 PPR) é ampliada (128 PPR) com a utilização de um resolvedor eletrônico via
software, implementado em um microcontrolador. O microcontrolador também é utilizado para a
transmissão de dados, via serial, a um PC executando a interface gráfica do usuário (GUI). A
GUI criada em MATLAB permitiu caracterizar o funcionamento do encoder didático através de
dois tipos de experimentos: aquisição da posição e teste de precisão. Nos experimentos de
aquisição da posição, o encoder didático foi movimentado nos dois sentidos e com velocidades
diferentes, fazendo com que os dados de posição fossem lidos e armazenados em MATLAB,
onde foram determinadas as velocidades. Cada experimento teve os resultados apresentados na
forma gráfica, refletindo, coerentemente, o movimento físico imposto ao encoder didático. Nos
experimentos de teste de precisão, o encoder didático foi movimentado juntamente com um
encoder de referência. Além das leituras da posição do encoder didático, o MATLAB recebeu as
quantidades de pulsos do encoder de referência que ocorreram entre cada duas leituras do
encoder didático. Os resultados dos experimentos também foram apresentados graficamente,
onde foi possível inferir a respeito da precisão do encoder didático, que ficou em ± 1,4º , metade
de sua resolução (360º / 128PPR = 2,8º).

Palavras-chave: encoder óptico, efeito moiré, encoder incremental, encoder absoluto, resolvedor,
fabricação de discos de encoder, erros de encoder, teste de encoder, kit didático, PIC, MATLAB.

iii
Abstract

First, the present work brings a study about optical encoders based on moiré effect, showing the
working principles, discussing systems to increase the resolution (resolving systems), showing
the manufacturing techniques of encoder disks and approaching questions related to errors and
tests of encoders. Next, it shows the development of an encoder kit composed of a low cost
didactic encoder (128 PPR), a reference encoder (1024 PPR), an electronic interface with a
microcontroller, and of a graphical user interface in MATLAB. The didactic encoder is
developed using the moiré effect to generate the difference in phase of 90 electrical degrees
between its channels A and B. Therefore, two disks are used, one moving with 32 pairs of
translucent-opaque sectors, and another one static with 33 pairs. The difference of 1 pair of
translucent-opaque sectors allows obtaining the difference in phase of 90 electrical degrees
through the positioning of the reading devices at 90 angular degrees. The resolution of the
encoder obtained physically (32 PPR) is increased (128 PPR) with the use of an electronic
resolving system via software, programmed in a microcontroller. The microcontroller is also used
to transmit data, via serial port, to a PC running the graphical user interface (GUI). The GUI
created in MATLAB allowed characterizing the operation of the didactic encoder through two
types of experiments: position acquisition and accuracy test. In the position acquisition
experiments, the didactic encoder was turned in both directions and at different speeds, so that the
position data could be read and recorded in MATLAB, where the speeds were calculated. Each
experiment had its results showed graphically, reflecting coherently the physical turn applied to
the didactic encoder. In the accuracy test experiments, the didactic encoder was turned at the
same time as the reference encoder. Besides receiving the position readings of the didactic
encoder, MATLAB received the quantities of pulses of the reference encoder that happened
between each two readings of the didactic encoder. The results of the experiments were also
showed graphically, where it was possible to infer about the accuracy of the didactic encoder, that
was in ± 1,4º, half of its resolution (360º / 128PPR = 2,8º).

Key words: optical encoder, moiré effect, incremental encoder, absolute encoder, resolving
systems, encoder disks manufacturing, encoder errors, encoder testing, didactic kit, PIC, MATLAB.

iv
Índice

1. Introdução ................................................................................................................................... 11
2. Princípio de Funcionamento de Encoders Ópticos ..................................................................... 22
2.1 O Efeito Moiré .......................................................................................................................... 22
2.2 Batimentos ................................................................................................................................ 99
2.3 Introdução aos Sistemas de Medição ...................................................................................... 16 16
2.3.1 Sistemas de Medição ........................................................................................................... 16 16
2.3.2 Transdutores ........................................................................................................................ 18 18
2.4 Encoders ................................................................................................................................. 20
20
2.4.1 Fundamentos do Encoder Incremental ................................................................................ 20 20
2.4.2 Encoder Óptico Incremental ................................................................................................ 23 23
2.4.3 Fundamentos do Encoder Absoluto ..................................................................................... 31 31
2.4.4 Encoder Óptico Absoluto .................................................................................................... 37 37
3. Resolvedores ............................................................................................................................. 39
39
3.1 Resolvedores Eletrônicos ....................................................................................................... 39 39
3.2 Resolvedores Ópticos ............................................................................................................. 47 47
4. Técnicas de Fabricação de Discos e Réguas de Encoders Ópticos .......................................... 50 50
4.1 Técnica Industrial Utilizando o Processo de Lift-off ............................................................. 50 50
4.1.1 Preparação Inicial do Disco ................................................................................................. 51 51
4.1.2 Processo de Lift-off ............................................................................................................. 53
53
4.2 Técnica para Fins Didáticos Utilizando Materiais de Baixo Custo ........................................ 60 60
5. Erros e Testes de Encoders Ópticos .......................................................................................... 62
62
5.1 Erros Associados a Encoders Ópticos Incrementais Rotativos .............................................. 62 62
5.2 Testes de Encoders Ópticos Incrementais Rotativos .............................................................. 68 68
6. Materiais e Métodos ................................................................................................................. 77
6.1 Projeto e Montagem da Mecânica do Kit de Encoder ............................................................ 77
6.2 Projeto e Montagem da Eletrônica do Kit de Encoder ........................................................... 86
6.3 Desenvolvimento do Software Embarcado ............................................................................ 91
6.4 Desenvolvimento da Interface com o Usuário ....................................................................... 98
6.5 Manual de Experimentos ...................................................................................................... 104
6.5.1 Aquisição da Posição e Determinação da Velocidade ....................................................... 105
6.5.2 Teste de Precisão Utilizando um Encoder de Referência .................................................. 107
7. Resultados e Discussão ........................................................................................................... 109
7.1 Construção do Kit de Encoder .............................................................................................. 109
7.2 Experimentos de Aquisição da Posição ................................................................................ 112
7.3 Experimentos de Teste de Precisão ...................................................................................... 115
8. Conclusões e Sugestões para Próximos Trabalhos ................................................................. 76 119
Referências Bibliográficas .......................................................................................................... 77 121
Anexos ........................................................................................................................................ 124
79

v
Lista de Figuras

Figura 2.1 - Efeito moiré ................................................................................................................ 2


Figura 2.2 - Efeito moiré em cores ................................................................................................. 3
Figura 2.3 - Surgimento das franjas moiré ..................................................................................... 4
Figura 2.4 - Efeito moiré entre duas grades de linhas retas com mesmo espaçamento e um ângulo
2α entre elas ................................................................................................................................... 6
Figura 2.5 - Padrões moiré causados pela sobreposição de duas grades de linhas retas ................ 7
Figura 2.6 - Geometria utilizada para determinar o espaçamento e o ângulo das franjas moiré .... 8
Figura 2.7 - Exemplo de batimento .............................................................................................. 11
Figura 2.8 - Exemplo de batimento. Ondas y1, y2, e resultante y=y1+y2 num mesmo gráfico .. 12
Figura 2.9 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade com n1
= 352 linhas e outra com n2 = 350 linhas ..................................................................................... 13
Figura 2.10 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade com
n1=354 linhas e outra com n2=350 linhas .................................................................................... 13
Figura 2.11 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade com
n1=358 linhas e outra com n2=350 linhas .................................................................................... 14
Figura 2.12 - Exemplo de grade circular de linhas radiais com Nlinhas=100 .............................. 15
Figura 2.13 - Exemplo de grade circular de linhas radiais com Nlinhas=101 .............................. 15
Figura 2.14 - Exemplo de batimento gerado pela sobreposição de duas grades circulares. Uma
grade com Nlinhas=100 e outra com Nlinhas=101 ...................................................................... 15
Figura 2.15 - Exemplo de batimento gerado pela sobreposição de duas grades circulares. Uma
grade com Nlinhas=100 e outra com Nlinhas=102 ...................................................................... 16
Figura 2.16 - Exemplo de batimento gerado pela sobreposição de duas grades circulares. Uma
grade com Nlinhas=100 e outra com Nlinhas=104 ...................................................................... 16
Figura 2.17 - Estrutura geral de um sistema de medição e controle ............................................. 17
Figura 2.18 - Princípio de encoder incremental rotativo e encoder incremental linear ................ 21
Figura 2.19 - Sinais fornecidos por um encoder incremental. Canais A e B em quadratura ........ 22
Figura 2.20 - Determinação da direção de movimento utilizando um flip-flop tipo D ................ 22
Figura 2.21 - Esquema de encoder com disco constituído de setores transparentes e opacos ...... 23
Figura 2.22 - Esquema de encoder com régua constituída de setores refletivos e não refletivos . 24
Figura 2.23 - Máscara, em (a), com quatro janelas dispostas de modo a gerar uma defasagem de
90º elétricos entre os sinais das fotocélulas, em (b) ..................................................................... 25
Figura 2.24 - Canais A e B ........................................................................................................... 25
Figura 2.25 - Grades com mesmo espaçamento dos setores presentes no elemento móvel ......... 26
Figura 2.26 - Máscara com quatro grades dispostas de modo a gerar uma defasagem de 90º
elétricos entre os sinais dos fotodetectores, no caso fotocélulas .................................................. 27
Figura 2.27 - Máscara com grade inclinada em relação aos setores presentes no elemento móvel,
gerando uma franja moiré ............................................................................................................. 27
Figura 2.28 - Dispositivos de leitura distribuídos verticalmente para obter os sinais defasados . 28
Figura 2.29 - Sobreposição de elementos com diferença de 1 par ............................................... 28 28
Figura 2.30 - Sobreposição de elementos com diferença de 1 par e após o deslocamento relativo
equivalente a um setor/espaçamento ............................................................................................ 29
Figura 2.31 - Exemplos comerciais de encoders ópticos incrementais lineares .......................... 30

vi
Figura 2.32 - Encoder óptico incremental rotativo ....................................................................... 30
Figura 2.33 - Encoder absoluto ..................................................................................................... 31
Figura 2.34 - Circuitos para conversão do código Gray para o código binário natural ................ 34
Figura 2.35 - Exemplo de mecanismo multi-revoluções .............................................................. 36
Figura 2.36 - Esquema básico de um encoder óptico absoluto .................................................... 37
Figura 2.37 - Sistemas básicos de focalização ............................................................................. 38 38

Figura 2.38 - Exemplos comerciais de encoders ópticos absolutos rotativos .............................. 38 38

Figura 3.1 - Obtenção de dois sinais senoidais defasados de 90º elétricos .................................. 41 41

Figura 3.2 - Transformação senóide / onda quadrada .................................................................. 41 41

Figura 3.3 - Formas de onda de um sistema resolvedor sem interpolador eletrônico .................. 42 42

Figura 3.4 - Circuito interpolador eletrônico ............................................................................... 43 43

Figura 3.5 - Formas de onda de um sistema resolvedor com interpolador eletrônico. A resolução
obtida neste exemplo é oito vezes maior ..................................................................................... 45 45

Figura 3.6 - Exemplos comerciais de circuito interpolador eletrônico ........................................ 46 46

Figura 3.7 - Obtenção de N sinais senoidais igualmente defasados, N = 4 (esq) e N = 5 (dir) ... 48 48

Figura 4.1 - Exemplos de discos de encoders ópticos .................................................................. 50 50

Figura 4.2 - Expansão em função do tipo de vidro, tamanho e temperatura ................................ 52 52

Figura 4.3 - Transmissão em função do comprimento de onda para diferentes tipos de vidro .... 52 52

Figura 4.4 - Etapas iniciais do processo de lift-off ...................................................................... 55 55

Figura 4.5 - Perfis após a exposição à radiação e revelação ........................................................ 56 56

Figura 4.6 - Perfil obtido com a aplicação de clorobenzeno sobre uma resina positiva antes da
revelação ...................................................................................................................................... 56
56

Figura 4.7 - Resultado obtido com a deposição de uma película de metal sobre um substrato, via
processo de evaporação do metal ................................................................................................. 58 58

Figura 4.8 - Etapas finais do processo de lift-off ......................................................................... 59 59

Figura 4.9 - Exemplo de disco incremental obtido com programa em MATLAB, Nlinhas=36 .. 60 60

Figura 4.10 - Exemplo de técnica para construção de um disco de encoder óptico para fins
didáticos empregando materiais de baixo custo ........................................................................... 61 61

Figura 5.1 - Sistema genérico com encoder ................................................................................. 64 64

Figura 5.2 - Excentricidade .......................................................................................................... 65 65

Figura 5.3 - Inclinação do disco/escala ........................................................................................ 67 67

Figura 5.4 - Princípio de um encoder óptico incremental rotativo ............................................... 68 68

Figura 5.5 - Relação fotodetector-graduações e amplitude do sinal de saída do fotodetector ..... 69 69

Figura 5.6 - Sistema implementado para a realização da análise ................................................. 69 69

Figura 5.7 - Imagem da intensidade de luz a uma posição L = 0,1 mm ....................................... 70 70

Figura 5.8 - Resultado analítico do sinal de saída do modelo do fotodetector ............................. 71 71

Figura 5.9 - Influência da distância entre o fotodetector e o disco graduado ............................... 71 71

Figura 5.10 - Influência da distância entre o fotodetector e o disco graduado. Resultado das
medições do sinal de saída do fotodetector em um encoder real .................................................. 72 72

Figura 5.11 - Influência da razão entre a largura da área ativa do fotodetector e o espaçamento
das graduações do disco ............................................................................................................... 72 72

Figura 5.12 - Influência da razão entre a largura da área ativa do fotodetector e o espaçamento
das graduações. Resultado das medições do sinal de saída do fotodetector em um encoder real .. 73 73

Figura 5.13 - Posição relativa entre o fotodetector e o disco graduado ........................................ 74 74

Figura 5.14 - Influência da concentricidade entre o fotodetector e o disco graduado .................. 74 74

Figura 5.15 - Teste de precisão de um encoder de menor resolução utilizando um encoder de


referência ....................................................................................................................................... 7676

vii
Figura 6.1 - Método escolhido para geração do efeito moiré ....................................................... 78
Figura 6.2 - Croqui da base metálica ............................................................................................ 79
Figura 6.3 - Croqui do eixo de plástico ......................................................................................... 34 79
Figura 6.4 - Croqui do suporte de papelão para fixar os fotodiodos ............................................ 80
Figura 6.5 - Croqui do suporte de papelão para fixar os LED´s infravermelho ........................... 37 80
Figura 6.6 - Croqui dos CD´s de plástico transparente ................................................................ 80
Figura 6.7 - Croqui do disco incremental em transparência com 33 pares de setores .................. 80
Figura 6.8 - Croqui do disco incremental em transparência com 32 pares de setores .................. 81 34
Figura 6.9 - Croqui dos suportes metálicos .................................................................................. 81
Figura 6.10 - Croqui das cantoneiras metálicas com rasgos ........................................................ 37 81
Figura 6.11 - Croqui das cantoneiras metálicas com furos .......................................................... 81
Figura 6.12 - Croqui de um conjunto de componentes ................................................................ 82
Figura 6.13 - Croqui da sub-montagem dos fotodiodos no suporte ............................................. 34 82
Figura 6.14 - Croqui da sub-montagem dos LED´s infravermelho no suporte ............................ 83
Figura 6.15 - Croquis das etapas de montagem do encoder didático ........................................... 37 84
Figura 6.16 - Circuito para ligação de um par emissor-receptor .................................................. 87
Figura 6.17 - Circuito quadrador .................................................................................................. 87
Figura 6.18 - Defasagem de 90º elétricos entre os sinais dos pares emissor-receptor ................. 34 88
Figura 6.19 - Circuito para ligação e condicionamento dos sinais dos fotodiodos e dos LED’s
infravermelho, incluindo a pinagem do CI LM324 ...................................................................... 88
Figura 6.20 - Ligação do encoder de referência ........................................................................... 37 89
Figura 6.21 - Conector de expansão ligando a protoboard ao módulo II ..................................... 89
Figura 6.22 - Formas de onda de um sistema resolvedor sem interpolador eletrônico ................ 92
Figura 6.23 - Diagrama SDL para o encoder didático ................................................................. 34 92
Figura 6.24 - Fluxograma simplificado de funcionamento do software embarcado ................... 93
Figura 6.25 - Teste de precisão de um encoder de menor resolução utilizando um encoder de
referência ..................................................................................................................................... 37
95
Figura 6.26 - Registradores de configuração da transmissão/recepção serial ............................. 97
Figura 6.27 - Desenvolvimento da interface com o usuário – GUI ............................................. 99
Figura 6.28 - Tela principal da interface com o usuário do kit de encoder didático .................. 105 34
Figura 7.1 - Mecânica do kit de encoder didático construído ..................................................... 109
Figura 7.2 - Eletrônica do kit de encoder didático construído .................................................... 110
Figura 7.3 - GUI do kit de encoder didático construído ............................................................. 34 111
Figura 7.4 - Resultados do ensaio I ............................................................................................ 112
Figura 7.5 - Resultados do ensaio II ........................................................................................... 113
Figura 7.6 - Resultados do ensaio III .......................................................................................... 114
Figura 7.7 - Resultados do ensaio IV ......................................................................................... 115
Figura 7.8 - Resultados do ensaio V ........................................................................................... 117
Figura 7.9 - Resultados do ensaio VI ......................................................................................... 118
Figura 7.10 - Resultados do ensaio VII ...................................................................................... 118

viii
Lista de Tabelas

Tabela 2.1 - Códigos comuns em discos de encoders absolutos .................................................. 32


Tabela 2.2 - Código binário natural e código Gray ...................................................................... 35
Tabela 2.3 - Exemplo de código Gray deslocado em 3 unidades ................................................ 36 36
Tabela 4.1 - Características dos principais tipos de vidro ............................................................ 51
Tabela 6.1 - Correspondência entre os segmentos dos displays e os terminais do PIC ............... 51 90
Tabela 6.2 - Correspondência entre as vias de seleção dos displays e os terminais do PIC ........ 51 91

ix
1. Introdução

Os encoders ópticos são dispositivos amplamente utilizados em aplicações que exigem o


controle de posição e velocidade, tais como em robôs industriais e máquinas ferramentas. Grande
parte deste tipo de encoder se baseia no efeito moiré, um efeito muito interessante proveniente da
sobreposição de estruturas repetitivas. Um estudo sobre encoders ópticos, além fornecer uma
base teórica para a utilização dos mesmos, permitirá o conhecimento dos princípios e tecnologias
envolvidas. O complemento do estudo através de um projeto prático de um kit de encoder
didático servirá para consolidar estes conhecimentos e outros adquiridos durante a graduação em
engenharia mecatrônica.

1
2. Princípio de Funcionamento de Encoders Ópticos

Este capítulo apresenta os conceitos básicos para a compreensão do funcionamento de


encoders ópticos. Ele começa discutindo e analisando matematicamente o efeito moiré, que surge
da sobreposição de estruturas repetitivas e encontra aplicações em diversas áreas. Em seguida,
aborda o fenômeno do batimento associado ao efeito moiré, através do equacionamento e da
apresentação de exemplos. O capítulo faz ainda uma breve introdução aos sistemas de medição,
destacando sua função e debatendo o conceito de transdutor. Finalmente, são apresentados os
fundamentos dos encoders incrementais e absolutos, dando maior ênfase aos encoders ópticos.

2.1 O Efeito Moiré

Seguramente, todos já se depararam com o efeito moiré em algum momento. Ele está
presente em situações do dia-a-dia e pode trazer curiosidade àqueles que o observam. Exemplos
clássicos do efeito moiré surgem quando uma cortina se sobrepõe à outra e enxerga-se através
delas (também se aplica a tecidos), quando é possível ver um lado treliçado de uma ponte na
frente do outro, ou simplesmente quando colocamos dois pentes de cabelo frente-a-frente. Em
todos esses casos são observados padrões constituídos de áreas mais claras e mais escuras. A
Figura 2.1, retirada de (POST et al, 1994), ilustra o caso dos dois pentes e também mostra o
efeito da sobreposição de duas peneiras finas.

(a)

(b)

Figura 2.1 - Efeito moiré. (a) Sobreposição de duas peneiras. (b) Sobreposição de dois pentes.
(POST et al, 1994).

2
Em (AMIDROR, 2000) é possível encontrar uma descrição sobre a origem do efeito moiré.
Ele nada mais é do que um “fenômeno que ocorre quando estruturas repetitivas do mesmo tipo
(como retículos, telas ou grades) são sobrepostas e visualizadas”. Consiste então, de um novo
padrão de áreas claras e escuras alternadas (franjas moiré), que são observadas apenas com a
sobreposição, ou seja, não aparecem em nenhuma das estruturas originais isoladamente.
Segundo (AMIDROR, 2000), o termo moiré é proveniente da França, onde ele
originariamente se referia a um tipo especial de seda que possuía como característica um padrão
alternado e ondulado. Muitas vezes, tal tecido era colocado em duas camadas para se fazer
determinada roupa, de modo que o movimento dessa roupa no corpo da pessoa criasse um
movimento relativo dos tecidos, gerando um efeito visual bem interessante, o efeito moiré. É dito
que esse efeito em roupas já era utilizado pelos chineses desde os tempos antigos. Diante desses
relatos, vale ressaltar que o termo moiré não se refere ao nome de um cientista que estudou o
efeito moiré. Portanto, não é necessário que se inicie a escrita desse termo com letra maiúscula.
O efeito moiré pode ser aplicado em inúmeros campos do conhecimento e tecnologia. Isso
ocorre graças à grande sensibilidade aos menores deslocamentos das estruturas sobrepostas. São
exemplos de aplicações descritas em (POST et al, 1994) e (AMIDROR, 2000) a medição de
deformações em objetos (deslocamentos no plano e fora dele), a medição de ângulos e
movimentos muito pequenos, alinhamento óptico, cristalografia, documentos anti-falsificação,
arte e diversão. Amostras do efeito moiré em cores, exibidas em (AMIDROR, 2000), podem ser
observadas na Figura 2.2, onde se vê um misto de arte e diversão. Convém lembrar que o efeito
moiré pode ser indesejado em algumas situações como, por exemplo, na imagem de monitores de
computadores e principalmente na área de impressão e reprodução colorida.

(a) (b) (c)

Figura 2.2 - Efeito moiré em cores. (a) Padrão RGB. (b) Verde e branco. (c) Vermelho e branco.
(AMIDROR, 2000).

3
Claro
Escuro
Claro
Escuro
Claro

Figura 2.3 - Surgimento das franjas moiré. (AMIDROR, 2000).

Como foi dito anteriormente, a sobreposição de estruturas repetitivas é responsável pelo


aparecimento do efeito moiré, que surge da distribuição geométrica de áreas claras e escuras. As
áreas onde os elementos escuros das estruturas originais ficam exatamente uns sobre os outros
aparecem mais claras. Quando esses elementos escuros ficam uns entre os outros, ocorre um
maior preenchimento de espaços e essa região tende a se tornar mais escura. A Figura 2.3,
adaptada de (AMIDROR, 2000), mostra o surgimento das áreas claras e escuras (franjas moiré).
Em (CREATH et al, 1992), encontra-se uma análise que apresenta como calcular o padrão
moiré para qualquer sobreposição de estruturas repetitivas (grades). A análise começa ao se
definir a “função transmissão de intensidade para duas grades f1 ( x, y ) e f 2 ( x, y ) , dadas por


f1 ( x, y ) = a1 + ∑ b1n cos[nφ1 ( x, y )]
n =1


f 2 ( x, y ) = a2 + ∑ b2 m cos[mφ2 ( x, y )] , (2.1)
m =1

onde φ ( x, y ) é a função que descreve a forma básica das linhas da grade. Para a freqüência
fundamental, φ ( x, y ) é igual a um inteiro multiplicado por 2π no centro de cada linha clara e é
igual a um inteiro e meio multiplicado por 2π no centro de cada linha escura. Os coeficientes b
determinam o perfil das linhas da grade (i. e., onda quadrada, triangular, senoidal, etc.). Para um
perfil de linha senoidal, bi1 é o único termo não nulo.
Quando essas duas grades são sobrepostas, a função transmissão de intensidade resultante é
dada pelo produto

4
f1 ( x, y ) f 2 ( x, y ) =
∞ ∞ ∞ ∞
a1a 2 + a1 ∑ b2 m cos[mφ 2 ( x, y )] + a 2 ∑ b1n cos[nφ1 ( x, y )] + ∑∑ b1n b2 m cos[nφ1 ( x, y )] cos[mφ2 ( x, y )] .
m =1 n =1 m =1 n =1
(2.2)

Os três primeiros termos da Equação 2.2 fornecem informações que podem ser
determinadas observando os dois padrões separadamente. O último termo é o termo de interesse,
e pode ser reescrito como

1
Termo 4 = b11b21 cos[φ1 ( x, y ) − φ 2 ( x, y )]
2
1 ∞ ∞
+ ∑∑ b1n b2 m cos[nφ1 ( x, y) − mφ2 ( x, y)] ;
2 m =1 n=1
n e m ambos ≠ 1
1 ∞ ∞
+ ∑∑ b1n b2m cos[nφ1 ( x, y) + mφ2 ( x, y)] x .
2 m =1 n=1
(2.3)

Esta expressão mostra que ao se sobrepor duas grades, a soma e a diferença entre as duas
grades é obtida. O primeiro termo da Equação 2.3 representa a diferença entre o padrão
fundamental e as duas grades. Ele pode ser usado para predizer o padrão moiré mostrado na
Figura 2.4. Assumindo que as duas grades estão orientadas com um ângulo 2α entre elas e com o
eixo y do sistema de coordenadas biseccionando esse ângulo, as duas funções das grades φ1 ( x, y )
e φ 2 ( x, y ) podem ser escritas como


φ1 ( x, y ) = ( x cos α + y sin α )
λ1
e

φ 2 ( x, y ) = ( x cos α − y sin α ) , (2.4)
λ2

onde λ1 e λ2 são os espaçamentos entre as linhas das duas grades.

5
y

x

λ / 2 sinα

Plano de
Observação

Figura 2.4 - Efeito moiré entre duas grades de linhas retas com mesmo espaçamento e um ângulo
2α entre elas. (CREATH et al, 1992).

A Equação 2.4 pode ser reescrita como

2π 4π
φ1 ( x, y ) − φ 2 ( x, y ) = x cos α + y sin α , (2.5)
λbeat λ

onde λ é a média dos espaçamentos entre as linhas, e λbeat é o comprimento de onda de


batimento entre as duas grades, dado por

λ1λ2
λbeat = . (2.6)
λ2 − λ1

Usando a Equação 2.3, as franjas moiré serão as linhas cujos centros satisfazem a equação

φ1 ( x, y ) − φ 2 ( x, y ) = M 2π . (2.7)

Três casos separados para o efeito moiré podem ser considerados. Quando λ1 = λ2 = λ , o primeiro
termo da Equação 2.5 é zero, e os centros das franjas são dados por

Mλ = 2 y sin α , (2.8)

6
onde M é um inteiro correspondendo à ordem da franja. Como esperado, a Equação 2.8 é a
equação de linhas horizontais igualmente espaçadas, como pode ser visto na Figura 2.4.
O outro caso simples ocorre quando as grades estão em paralelo, ou seja, α = 0 . Isso faz
com que o segundo termo da Equação 2.5 seja anulado. As franjas moiré, nesse caso, serão as
linhas que satisfazem

Mλbeat = x . (2.9)

Essas franjas são igualmente espaçadas e são linhas verticais paralelas ao eixo y .
Para o caso mais geral, onde as duas grades têm diferentes espaçamentos entre linhas e o ângulo
entre as grades é diferente de zero, a equação para as franjas moiré será

λ
Mλ = x cos α + 2 y sin α . (2.10)
λbeat

Essa é a equação de linhas retas cujo espaçamento e orientação é dependente da diferença relativa
entre os espaçamentos das duas grades e do ângulo entre as grades. A Figura 2.5 mostra os
padrões moiré para esses três casos.

Inclinado
Mesma Freqüência

Não Inclinado
Freqüências Diferentes

Inclinado
Freqüências Diferentes

Figura 2.5 - Padrões moiré causados pela sobreposição de duas grades de linhas retas. (CREATH
et al, 1992).

7
y

α
α
λ1
λ2
θ
B
A
D x

C E
Franjas
moiré
Grades

Figura 2.6 - Geometria utilizada para determinar o espaçamento e o ângulo das franjas moiré.
Uso de duas grades de freqüências diferentes e inclinadas entre si. (CREATH et al, 1992).

A orientação e o espaçamento das franjas moiré para o caso geral podem ser determinados
a partir da geometria mostrada na Figura 2.6. A distância AB pode ser escrita em termos dos
espaçamentos das duas grades,

λ1 λ2
AB = = , (2.11)
sin(θ − α ) sin(θ + α )

onde θ é o ângulo que as franjas moiré fazem com o eixo y . Depois de rearranjar os termos, o
ângulo de orientação das franjas θ é dado por

 λ +λ 
tan θ = tan α  1 2  . (2.12)
 λ1 − λ2 

Quando α = 0 e λ1 ≠ λ2 , θ = 0 o , e quando λ1 = λ2 com α ≠ 0 , θ = 90 o como esperado. O


espaçamento das franjas perpendicular às linhas das franjas pode ser encontrado igualando as
quantidades para a distância DE ,

8
λ1 C
DE = = , (2.13)
sin 2α sin(θ + α )

onde C é o espaçamento da franjas. Após rearranjar os termos tem-se,

 sin(θ + α ) 
C = λ1  . (2.14)
 sin 2α 

Substituindo a orientação das franjas θ , o espaçamento da franjas pode ser encontrado em termos
dos espaçamentos das grades e do ângulo entre as grades,

λ1λ2
C= . (2.15)
λ sin 2α + (λ2 cos 2α − λ1 ) 2
2
2
2

No limite quando α = 0 e λ1 ≠ λ2 , o espaçamento da franjas se iguala à λbeat , e no limite quando

λ1 = λ2 = λ e α ≠ 0 , o espaçamento das franjas vale λ / (2 sin α ) . Conhecendo λ1 , consegue-se


determinar λ2 e α a partir da medição do espaçamento e orientação das franjas”.

2.2 Batimentos

O fenômeno conhecido como batimento, associado ao efeito moiré, é proveniente da


sobreposição de duas grades, de diferentes espaçamentos (freqüências espaciais) e com linhas
paralelas entre si. Para efeito de análise, as duas grades serão consideradas como duas ondas
distintas de mesma amplitude. Pode-se então aplicar o princípio da sobreposição de ondas para
obter uma equação que represente os batimentos. Baseado em (HECHT, 2002), é possível iniciar
a análise sobre os batimentos com a definição das equações das duas ondas,

y1 = A cos(k1 x − ω1t )

y 2 = A cos(k 2 x − ω 2 t ) , (2.16)

9
onde A é a amplitude das ondas, ki é a freqüência espacial e ωi é a freqüência temporal. A onda

resultante da sobreposição das ondas y1 e y 2 é dada por

y = y1 + y 2 = A cos(k1 x − ω1t ) + A cos(k 2 x − ω 2 t ) = A[cos(k1 x − ω1t ) + cos(k 2 x − ω 2 t )] , (2.17)

e que pode ser escrita na forma

1  1 
y = 2 A cos [(k1 + k 2 ) x − ( ω1 + ω 2 ) t ]  cos [(k1 − k 2 ) x − ( ω1 − ω 2 ) t ] (2.18)
2  2 

com base na identidade trigonométrica

1 1
cos α + cos β = 2 cos (α + β ) cos (α − β ) . (2.19)
2 2

Rearranjando a Equação 2.18 tem-se que

 (k + k 2 ) ( ω + ω2 )   (k − k 2 ) ( ω − ω2 ) 
y = 2 A cos  1 x− 1 t  cos  1 x− 1 t , (2.20)
 2 2   2 2 

onde se nota a presença de termos que contêm a soma das freqüências e de termos que contêm a
subtração das freqüências, tanto no tempo quanto no espaço. Para existir o batimento, os valores
das respectivas freqüências devem ser diferentes, mas próximos um do outro ( k1 ≅ k 2 e ω1 ≅ ω 2 ).

A freqüência de batimento é definida como a diferença dessas freqüências ( k1 − k 2 ou ω1 − ω 2 ).


A seguir será apresentado um exemplo para visualização do fenômeno do batimento. O exemplo
foi realizado no MATLAB 7.0 e seu código se encontra no Anexo I.
Supondo as duas ondas y1 e y 2 , definidas na Equação 2.16, com A = 1 , k1 = 2π .24 ,
k 2 = 2π .20 , ω1 = ω 2 = 1 , e para um instante de tempo qualquer, que no caso foi t = 0 , a onda
resultante é dada por

10
 2π (24 + 20)   2π (24 − 20) 
y = 2 cos  x  cos  x  = 2 cos(44π x) cos(4π x) , (2.21)
 2   2 

onde é possível notar valores distintos no argumento dos cossenos. O cosseno cujo argumento é
proveniente da subtração de freqüências ( 4π ) irá modular a amplitude do sinal de maior
freqüência ( 44π ). É justamente essa modulação que causa o aparecimento dos batimentos. A
Figura 2.7 apresenta os gráficos das ondas individualmente. As três ondas plotadas no mesmo
gráfico podem ser observadas na Figura 2.8. A freqüência de batimento neste exemplo é dada por

4
y1

(a) 0

-1

-2

-3

-4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

4
y2

(b) 0

-1

-2

-3

-4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

4
y=y1+y2

(c) 0

-1

-2

-3

-4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 2.7 - Exemplo de batimento. (a) Onda y1. (b) Onda y2. (c) Onda resultante y=y1+y2.

11
4
y1
y2
y=y1+y2
3

-1

-2

-3

-4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 2.8 - Exemplo de batimento. Ondas y1, y2, e resultante y=y1+y2 num mesmo gráfico.

k1 − k 2 = 2π .24 − 2π .20 = 2π .4 = 2π . f . Nota-se que o valor de f é 4 , exatamente o número de


batimentos gerados, os quais podem ser vistos no gráfico (c) da Figura 2.7.
Para o caso da sobreposição de duas grades de linhas retas paralelas entre si, o espaçamento
entre linhas de uma grade tem valor bem próximo do espaçamento entre linhas da outra grade,
mas são valores diferentes. A mesma análise pode ser feita considerando o número de linhas de
cada grade que existem num mesmo intervalo de posição. Em ambos os casos há uma diferença
entre as freqüências espaciais. Continuando, quando há sobreposição de duas grades com essas
características, o fenômeno do batimento surge associado ao efeito moiré. Os batimentos nesse
caso são observados na forma de franjas moiré. O programa presente no Anexo II, desenvolvido
em MATLAB, ilustra bem o fenômeno do batimento. O programa gera e sobrepõe duas grades de
linhas retas paralelas entre si. O espaçamento de cada grade é definido pelo número de linhas a
serem criadas num mesmo intervalo de posição (eixo x). Três exemplos serão apresentados. O
primeiro exemplo gera uma grade com n1 = 352 linhas e outra com n2 = 350 linhas. A
sobreposição dessas grades é mostrada na Figura 2.9. No segundo exemplo, apresentado na
Figura 2.10, utiliza-se n1 = 354 e n2 = 350 . O terceiro exemplo, com n1 = 358 e n2 = 350 , pode
ser visto na Figura 2.11. Como esperado, a diferença n1 − n 2 é igual ao número de batimentos
(franjas moiré).

12
1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 2.9 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade
com n1 = 352 linhas e outra com n 2 = 350 linhas.

1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 2.10 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade
com n1 = 354 linhas e outra com n 2 = 350 linhas.

13
1 1

0.8 0.8

0.6 0.6

0.4 0.4

0.2 0.2

0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

Figura 2.11 - Exemplo de batimento gerado pela sobreposição de duas grades. Uma grade
com n1 = 358 linhas e outra com n2 = 350 linhas.

Os batimentos associados ao efeito moiré podem ser visualizados de um outro modo. Eles
também surgem com a sobreposição de duas grades circulares com número diferente de linhas
radiais. O programa (em MATLAB) apresentado no Anexo III auxilia na criação de grades
circulares de linhas radiais. O número de linhas da grade é definido na variável Nlinhas .
Exemplos de grades geradas podem ser vistas nas Figuras 2.12 e 2.13, com Nlinhas = 100 e
Nlinhas = 101 respectivamente. Essas duas grades, quando sobrepostas, originam a Figura 2.14,
onde visivelmente se observa uma área mais clara e outra mais escura, representando um
batimento. Considerando agora a sobreposição de uma grade circular com Nlinhas = 100 e outra
com Nlinhas = 102 , obtém-se a Figura 2.15. Nesse caso aparecem duas áreas claras e duas
escuras, em outras palavras, dois batimentos. Mais uma vez, o número de batimentos corresponde
à diferença entre o número de linhas de uma grade e o número de linhas da outra grade. Essa
correspondência sempre ocorre e está relacionada com a freqüência espacial. Sendo assim, se a
diferença entre o número de linhas fosse 4, o número de batimentos observados também seria 4.
Esse último caso é mostrado na Figura 2.16.

14
Figura 2.12 - Exemplo de grade circular de linhas radiais com Nlinhas = 100 .

Figura 2.13 - Exemplo de grade circular de linhas radiais com Nlinhas = 101 .

Figura 2.14 - Exemplo de batimento gerado pela sobreposição de duas grades circulares.
Uma grade com Nlinhas = 100 e outra com Nlinhas = 101 .

15
Figura 2.15 - Exemplo de batimento gerado pela sobreposição de duas grades circulares.
Uma grade com Nlinhas = 100 e outra com Nlinhas = 102 .

Figura 2.16 - Exemplo de batimento gerado pela sobreposição de duas grades circulares.
Uma grade com Nlinhas = 100 e outra com Nlinhas = 104 .

2.3 Introdução aos Sistemas de Medição

2.3.1 Sistemas de Medição

Como é apresentado em (PALLÁS-ARENY et al, 1991), um sistema de medição tem a


função de associar um número (valor) a uma grandeza (propriedade ou qualidade) de um objeto

16
ou evento, a fim de descrevê-lo. Deve haver uma correspondência entre as quantidades numéricas
medidas e as propriedades descritas. Sistemas de medição podem ser utilizados para
monitoramento de processos, como a medição de temperatura, de volume de líquidos, ou de
dados clínicos. Também podem ser utilizados no controle de processos, como no controle de
nível de um tanque, ou no controle de posição de uma esteira. Por fim, sistemas de medição
podem auxiliar na engenharia experimental, como no estudo de distribuição de temperaturas num
objeto com formato irregular, ou na determinação da distribuição de forças num teste de colisão
de um veículo, exemplos de (PALLÁS-ARENY et al, 1991). A Figura 2.17, traduzida do mesmo
livro, mostra o fluxo de dados em um sistema de medição e controle. Em uma medição, é
imprescindível que haja a aquisição das informações por um sensor ou transdutor, mas também é
necessário que ocorra o processamento dessas informações e a apresentação dos resultados numa
forma que o ser humano possa perceber.

Objetivos

Transdutor Condicionamento Transmissão


Display
do sinal dos dados

Alarmes

Sistema, planta
ou processo Controlador
Perturbações Supervisor

Controle manual

Atuador Condicionamento Transmissão


do sinal de ordens

Figura 2.17 - Estrutura geral de um sistema de medição e controle. (PALLÁS-ARENY et al, 1991).

17
2.3.2 Transdutores

Como (PALLÁS-ARENY et al, 1991) define, “um transdutor é um dispositivo que


converte um sinal de uma forma física para um sinal correspondente que possui forma física
diferente”. Da definição percebe-se que um transdutor é uma espécie de conversor de energia,
como o autor mesmo afirma. Sendo assim, o sinal de entrada deve necessariamente ter esforço e
fluxo, componentes que multiplicados originam a potência. Ele lembra que, no entanto, em
sistemas de medição, um desses componentes presentes no sinal medido tem valor desprezível,
de modo que somente o outro componente é medido. Por exemplo, ao realizar uma medição de
força, o deslocamento (e velocidade) do transdutor é desprezado. Quando é medida uma corrente
elétrica, a queda de tensão no amperímetro deve ser próxima de zero. Vale ressaltar que um
transdutor sempre irá consumir uma pequena parte da potência. Logo, deve-se garantir que a ação
de medir não perturbe excessivamente o sistema que está sendo medido. Caso contrário, essa
interferência pode levar a um erro na medição.
Existem seis tipos principais de sinais segundo (PALLÁS-ARENY et al, 1991): mecânico,
térmico, magnético, elétrico, óptico e químico. Ele considera um transdutor qualquer dispositivo
que transforma um tipo de sinal num outro tipo, independentemente do tipo de sinal da saída.
Mas avisa que, na prática, somente os dispositivos que geram um sinal elétrico na saída são
chamados de transdutores. Isso se deve ao fato de sinais elétricos serem utilizados na maioria dos
sistemas de medição. Ele apresenta ainda uma série de vantagens para o uso de sistemas
eletrônicos de medição:

“1) Transdutores elétricos podem ser desenvolvidos para medir qualquer propriedade não
elétrica, selecionando um material apropriado. Qualquer variação em um parâmetro não elétrico
leva a uma variação em um parâmetro elétrico, devido à estrutura eletrônica do material.

2) Energia não é consumida do processo que está sendo medido porque os sinais na saída
do transdutor podem ser amplificados. Com amplificadores eletrônicos, é fácil a obtenção de
ganhos no sinal que ultrapassam 1010 num único estágio.

18
3) Um número cada vez maior de diferentes circuitos integrados estão disponíveis para o
condicionamento de sinais eletrônicos. Inclusive existem transdutores que já incorporam esse
condicionamento do sinal.

4) Existem muitas opções para a exibição ou registro de informações via meios


eletrônicos. Essas opções permitem lidar não somente com dados numéricos, mas também com
textos, gráficos e diagramas.

5) A transmissão do sinal é mais versátil para sinais elétricos. Sinais mecânicos,


hidráulicos, ou pneumáticos podem ser mais apropriados em algumas circunstâncias, como em
ambientes onde está presente a radiação ionizante ou onde a atmosfera é explosiva. Mas os sinais
elétricos têm substituído a maioria dos sinais não elétricos”.

Reforça afirmando que “um transdutor é um dispositivo que retira energia do sistema que
ele mede para gerar um sinal de saída que pode ser convertido num sinal elétrico, o qual
corresponde à quantidade medida”. Cita que algumas vezes os termos sensor e transdutor são
utilizados como sinônimos, embora sensor esteja mais ligado à capacidade de adquirir
informações não percebidas pelos sentidos humanos, e transdutor esteja ligado apenas ao fato de
converter tipos de sinais. Conclui dizendo que “a distinção entre transdutor de entrada (sinal
físico / sinal elétrico) e transdutor de saída (sinal elétrico / exibição ou atuação) raramente é feita
nos dias de hoje. E a tendência, particularmente em robótica, é em direção ao uso do termo
sensor para se referir a um transdutor de entrada, e o uso do termo atuador para se referir a um
transdutor de saída”.
Os tópicos seguintes farão uma abordagem sobre o encoder, considerado um transdutor
digital, segundo (De SA, 1990). Embora o encoder possa fazer uso de um outro transdutor
internamente (ex. célula fotoelétrica), o dispositivo como um todo pode ser chamado de
transdutor, pois converte um sinal de posição/deslocamento em um sinal elétrico. Além disso,
com o condicionamento apropriado do sinal (ex. transformação de senóide para onda quadrada),
o encoder pode ser considerado um transdutor digital, assim como fez (De SA, 1990).

19
2.4 Encoders

O encoder é um transdutor que converte um movimento linear ou angular em sinais


digitais. Esses sinais digitais podem ser utilizados para determinar a posição, a direção, a
velocidade e a aceleração do sistema ao qual o encoder está acoplado. Encoders apresentam
muitas aplicações, as mais comuns são: em eixos de robôs, em eixos de máquinas-ferramenta, em
plotters (mesas XY), em mesas rotativas, no controle de velocidade e posição de motores
elétricos, no posicionamento de antenas, telescópios e radares. Eles também podem ser aplicados
na medição de qualquer grandeza que pode ser convertida num deslocamento, como por exemplo,
na medição do nível de um líquido usando uma bóia ou na determinação da direção do vento
usando uma biruta. Encoders são classificados funcionalmente em dois tipos: incremental ou
absoluto.

2.4.1 Fundamentos do Encoder Incremental

Baseado em (PALLÁS-ARENY et al, 1991), pode-se dizer que um encoder incremental


consiste basicamente de uma régua linear ou um disco, o qual é acoplado ao sistema que se
deseja “medir”. Uma régua é utilizada num encoder incremental linear, e um disco num encoder
incremental rotativo. Como discutido antes, a régua deve possuir a menor massa possível, ou se
for um disco, ter a menor inércia possível. Com isso, deseja-se interferir minimamente no sistema
a ser medido. A régua ou o disco deve possuir uma trilha com dois tipos de setores que tenham
uma propriedade que permita diferenciá-los. Tais setores geralmente são dispostos de forma
alternada e eqüidistante, como mostra a Figura 2.18, traduzida do livro citado. A figura mostra o
princípio de um encoder incremental, que ainda não é um encoder propriamente dito. Se uma
mudança em tal propriedade é percebida por um dispositivo de leitura, então um incremento na
posição resultará em pulso na saída. O autor cita que as propriedades físicas usadas para
diferenciar os setores podem ser do tipo magnética, elétrica e óptica, mas que em todos os casos a
saída básica é na forma de um trem de pulsos elétricos com ciclo de trabalho (duty cycle) de 50%.
Ele menciona a simplicidade e a economia desse método, mas alerta sobre alguns inconvenientes.

20
Setores
eqüidistantes

Dispositivo de
leitura fixo

Eixo

Disco
Rotação
Régua

Acoplamento

Movimento linear

Figura 2.18 - Princípio de encoder incremental rotativo e encoder incremental linear. (PALLÁS-
ARENY et al, 1991).

Primeiro em relação à perda de informação da posição sempre que ocorrer a falta de alimentação
elétrica, segundo em relação à necessidade da utilização de contadores up-down para fazer a
integração com os circuitos externos, e por fim, principalmente em relação à impossibilidade de
se determinar a direção do movimento. A determinação da direção do movimento requer o uso de
um outro dispositivo de leitura, ou ainda de um elemento adicional (régua ou disco). Nesses casos
tem-se um encoder propriamente dito, ou seja, com detecção de movimento e direção.
Independentemente da natureza da propriedade utilizada para diferenciar os setores da
régua ou do disco, a mecânica do posicionamento dos dois dispositivos de leitura combinado com
o posicionamento dos elementos móveis (réguas ou discos) é a responsável pela defasagem de
90º elétricos existente entre os dois sinais fornecidos por um encoder incremental. A eletrônica
embarcada trata os sinais e os coloca em forma de pulsos (onda quadrada). Diz-se então, que
esses dois sinais, usualmente chamados de canal A e canal B, estão em quadratura. Normalmente
um encoder incremental possui uma marcação (na régua ou no disco) indicando a posição
absoluta “zero”. Nesse caso, é preciso a utilização de um terceiro dispositivo de leitura. O mesmo
irá fornecer o sinal de “zero”, chamado de Z, e que na maioria das vezes consiste de um pulso
com fase idêntica à fase do canal A. A Figura 2.19 apresenta o comportamento desses três sinais.

21
90º

Figura 2.19 - Sinais fornecidos por um encoder incremental. Canais A e B em quadratura.

Alguns encoders incrementais oferecem a opção das saídas complementares, A, B e Z, que


podem ser utilizadas para diminuir a sensibilidade a ruídos de medição.
A direção do movimento pode ser obtida de diversas formas. A mais simples utiliza um
flip-flop do tipo D (Data), onde o canal A é ligado na entrada D e o canal B no clock. O esquema
pode ser visto na Figura 2.20. Notar que o flip-flop é sensível à borda de subida. A saída Q será
1, nível lógico alto, quando o canal A estiver 90º elétricos adiantado em relação ao canal B
(sentido da esquerda p/ direita na Figura 2.19). A saída Q será 0, nível lógico baixo, quando o
canal A estiver 90º elétricos atrasado em relação ao canal B (sentido da direita p/ esquerda na
Figura 2.19). Portanto, a direção será dada pelo nível lógico presente na saída Q. Cada nível
lógico estará associado a uma direção fisicamente (ex. giro horário / anti-horário). O trem de
pulsos para ser utilizado em um circuito de contagem pode vir do canal A ou do canal B.

A D Q = 1 , Canal A adiantado de 90º em relação ao canal B

B CLK Q = 0 , Canal A atrasado de 90º em relação ao canal B

Figura 2.20 - Determinação da direção de movimento utilizando um flip-flop tipo D.

22
A resolução de um encoder incremental linear é dada em pulsos por unidade de
comprimento, ou simplesmente pela distância (µm) correspondente a um único incremento/pulso.
Já a resolução de um encoder rotativo é dada em pulsos por revolução (PPR), mas também pode
ser dada na forma do ângulo correspondente a um único incremento/pulso.

2.4.2 Encoder Óptico Incremental

Em encoders ópticos, a propriedade física utilizada para diferenciar os setores de uma régua
ou um disco é a óptica. Réguas ou discos de encoders ópticos incrementais podem ser
constituídos de setores translúcidos e opacos ou de setores refletivos e não refletivos. Nos dois
casos, os dispositivos de leitura são compostos por uma fonte emissora de luz, geralmente um
LED, e por um detector de luz (fotodetector), que pode ser um LDR, uma célula fotoelétrica, um
fototransistor ou um fotodiodo. Pode ou não haver elementos de focalização (lentes). Quando
setores translúcidos e opacos são utilizados, o elemento móvel (régua ou disco) deve estar
posicionado entre o emissor e o detector de luz. O elemento é comumente feito de vidro
transparente e os setores opacos são obtidos através da deposição de cromo. Um esquema de um
encoder óptico incremental rotativo desse tipo pode ser visto na Figura 2.21, traduzida do
(CATÁLOGO TURCK, acesso em 2007). Quando setores refletivos e não refletivos são
utilizados, o emissor e detector devem ser posicionados do mesmo lado. A Figura 2.22, traduzida
do (CATÁLOGO RENISHAW, acesso em 2007), mostra um esquema de encoder óptico
incremental linear que usa essa técnica.

Placa PCB

Sensor

Disco

Máscara

LED

Figura 2.21 - Esquema de um encoder com disco constituído de setores transparentes e opacos.
(CATÁLOGO TURCK, acesso em 2007).

23
LED
Fotodetector

Grade

Lente

Máscara do
dispositivo de leitura Marca de referência
®
óptica IN-TRAC

Régua

Figura 2.22 - Esquema de um encoder com régua constituída de setores refletivos e não refletivos.
(CATÁLOGO RENISHAW, acesso em 2007).

Nos dois casos, de acordo com (PALLÁS-ARENY et al, 1991), os problemas associados
são aqueles advindos da sujeira do ambiente, das limitações de temperatura e tempo de resposta
dos componentes optoeletrônicos, e da possível vibração dos elementos de focalização.
Como já foi dito, um encoder incremental precisa fornecer dois sinais (canal A e canal B)
com 90º elétricos de defasagem, a qual é obtida pela mecânica do posicionamento dos
dispositivos de leitura e elementos móveis. Essa mecânica para obtenção da defasagem pode ser
implementada de diversas formas. Alguns métodos serão apresentados a seguir e independem se
os setores são do tipo translúcido/opaco ou do tipo refletivo/não refletivo.
O primeiro método consiste na utilização de uma máscara fixa contendo quatro janelas de
espaçamentos idênticos ao espaçamento de um único setor. Na direção de cada janela é
posicionado um fotodetector, que neste exemplo é uma célula fotoelétrica. As quatro janelas são
dispostas de tal modo que os sinais na saída das quatro fotocélulas estão defasados de 90º
elétricos entre si. Esses sinais de tensão são aproximadamente senoidais, pois o movimento
relativo da régua ou disco em relação à máscara faz com que a luminosidade em cada janela varie
de um mínimo até um máximo. Lembrando que a luminosidade pode ser transmitida ou refletida.
A Figura 2.23, traduzida de (WOOLVET, 1977), ilustra essa técnica e exibe os sinais na saída
das células fotoelétricas. O sinal E11 está 180º elétricos defasado em relação ao sinal E12, assim
como o sinal E21 está 180º elétricos defasado em relação ao sinal E22. Cada par de sinais E11 / E12
e E21 / E22 terá suas componentes de tensão somadas, gerando dois sinais, aqui chamados de a e b.

24
máscara
régua

(a)

movimento da régua

saída da
célula
(b)

deslocamento da régua

Figura 2.23 - Máscara, em (a), com quatro janelas dispostas de modo a gerar uma defasagem de
90º elétricos entre os sinais das fotocélulas, em (b). (WOOLVET, 1977).

Esses dois sinais, ainda senoidais, já estão defasados de 90º elétricos entre si. Logo, é necessário
o uso de circuitos quadradores para se obter sinais de onda quadrada. Uma vez obtido os dois
sinais de onda quadrada, tem-se os canais A e B. A Figura 2.24, baseada em (WOOLVET, 1977),
esquematiza o circuito de condicionamento dos sinais e mostra as formas de onda envolvidas.
Dependendo do componente fotodetector, pode ser preciso ainda amplificar ou inverter os sinais.

E11
a
- +
a A
quadrador b
E12
- +

- +
E21 b
quadrador
B A
- +
E22
B

(a) (b)

Figura 2.24 - Canais A e B. (a) Condicionamento eletrônico. (b) Formas de onda.

25
Segundo (PALLÁS-ARENY et al, 1991), encoders ópticos fornecem as maiores resoluções
e o fator limitante é o tamanho do fotodetector, principalmente neste método apresentado. Nele, a
luminosidade é dependente do posicionamento de um único setor, tornando o sistema mais
suscetível a erros de contagem devido a interferências ou contaminação das janelas. Os métodos
seguintes buscam contornar esse problema fazendo uso do efeito moiré médio, ao mesmo tempo
em que conseguem maiores resoluções.
Um método possível consiste também na utilização de uma máscara fixa, só que ao invés
de ter quatro janelas, ela possui quatro grades com regiões translúcidas e opacas alternadas. O
espaçamento das grades é exatamente igual ao espaçamento dos setores da régua ou disco, como
mostrado na Figura 2.25, adaptada de (PALLÁS-ARENY et al, 1991). Na direção de cada grade
é posicionado um fotodetector, o qual receberá a máxima luminosidade quando a grade estiver
perfeitamente alinhada com os setores do elemento móvel (régua ou disco). Quando o elemento é
movido de meio incremento, ou seja, quando é percorrido um setor, a luminosidade decresce até
atingir um mínimo. Nesse instante, o alinhamento faz com que a luminosidade seja totalmente
bloqueada. Vários incrementos consecutivos geram um sinal luminoso praticamente senoidal, que
será convertido em sinal elétrico pelo fotodetector. Em todo o tempo, o fotodetector recebe a
luminosidade média, não mais dependendo da luminosidade correspondente a um único setor. As
quatro grades existentes na máscara também são dispostas fisicamente com o intuito de se obter
quatro sinais defasados eletricamente de 90º entre si, como pode ser observado na Figura 2.26,
traduzida de (WOOLVET, 1977). O condicionamento dos sinais pode ser feito de forma similar
àquela apresentada, e, caso os fotodetectores sejam células fotoelétricas, o esquema eletrônico é
idêntico ao apresentado no item (a) da Figura 2.24.

Fotodetector Fotodetector

Grade Grade

LED
LED
Elemento móvel
Elemento móvel

(a) (b)

Figura 2.25 - Grades com mesmo espaçamento dos setores presentes no elemento móvel. (a) Setores
translúcidos / opacos. (b) Setores refletivos / não refletivos. (PALLÁS-ARENY et al, 1991).

26
Régua

Máscara

Fotocélulas

Figura 2.26 - Máscara com quatro grades dispostas de modo a gerar uma defasagem de 90º
elétricos entre os sinais dos fotodetectores, no caso fotocélulas. Utiliza o efeito moiré originado
da sobreposição de grades igualmente espaçadas. (WOOLVET, 1977).

Um outro método para detecção da direção de movimento e para a geração de sinais


defasados é discutido por (PALLÁS-ARENY et al, 1991) e (WOOLVET, 1977). O método
também é fundamentado no efeito moiré, mais precisamente nas franjas moiré. Novamente é
utilizada uma máscara fixa, que nesse caso contém apenas uma única grade com regiões
translúcidas e opacas alternadas. Além disso, a grade deve estar inclinada em relação aos setores
da régua ou disco, como pode ser visto na Figura 2.27, traduzida de (PALLÁS-ARENY et al,
1991). Se a inclinação α é tal que tan α = p / d , um deslocamento relativo p resultará num
deslocamento vertical d de uma franja moiré horizontal (franja escura). Se a inclinação relativa
for n vezes maior, aparecerão n franjas moiré horizontais. O sentido de movimento (para cima
ou para baixo) das franjas moiré horizontais depende do sentido do deslocamento do elemento
que se move (para esquerda ou para direita, giro horário ou giro anti-horário). Considerando a
régua da Figura 2.27, se ela se deslocar para a esquerda, a franja moiré se movimentará para cima.

p = afastamento (pitch)

Elemento móvel

Figura 2.27 - Máscara com grade inclinada em relação aos setores presentes no elemento móvel,
gerando uma franja moiré. (PALLÁS-ARENY et al, 1991).

27
Setores

Régua

Máscara

Fotocélulas

Figura 2.28 - Dispositivos de leitura distribuídos verticalmente para obter os sinais defasados.
Utiliza o efeito moiré originado da sobreposição de grades inclinadas entre si. (WOOLVET,
1977).

Se o deslocamento da régua for para a direita, a franja se movimentará para baixo. Nesse método,
os dispositivos de leitura devem ser posicionados perpendicularmente em relação ao
deslocamento do elemento móvel, como ilustrado na Figura 2.28, traduzida de (WOOLVET,
1977). Na figura, observa-se a existência de quatro células fotoelétricas, as quais estão
distribuídas novamente com a finalidade de se gerar quatro sinais defasados de 90º elétricos. O
condicionamento dos sinais pode ser realizado da mesma maneira já abordada.
Um último método, aqui discutido, não se utiliza de máscara para gerar o efeito moiré. O
efeito surge da sobreposição de dois elementos, um estático e outro móvel. A condição é que a
diferença entre o número de pares de setores translúcido-opaco do elemento estático e do
elemento móvel seja 1. Em outras palavras, se o elemento estático tiver N pares de setores
translúcido-opaco, o elemento móvel deverá ter N − 1 pares, ou vice-versa. A diferença de 1 é
justamente para o aparecimento de um único batimento associado ao efeito moiré. A Figura 2.29
mostra exatamente esse comportamento utilizando réguas e discos.
4

1 2 3 4

2 3

(a) (b) 1

Figura 2.29 - Sobreposição de elementos com diferença de 1 par. (a) Duas réguas. (b) Dois discos.

28
4

1 2 3 4

2 3

(a) (b) 1

Figura 2.30 - Sobreposição de elementos com diferença de 1 par e após o deslocamento relativo
equivalente a um setor/espaçamento. (a) Duas réguas. (b) Dois discos.

Nela pode-se observar o aparecimento uma região mais clara e uma região mais escura.
Dispositivos de leitura, com ou sem auxílio de grades para leitura, são posicionados nas direções
indicadas de 1 a 4, mais uma vez resultando em quatro sinais defasados de 90º elétricos entre si.
A cada deslocamento relativo entre os elementos equivalente a um setor/espaçamento, tem-se a
luminosidade oposta à anterior em cada dispositivo de leitura. Isso pode ser verificado fazendo a
comparação da Figura 2.29 com a Figura 2.30. Logo, um deslocamento relativo equivalente a
dois setores/espaçamentos fará com que a luminosidade em cada dispositivo de leitura varie de
um valor inicial até um valor final e volte ao valor inicial, correspondendo a um pulso, ou
melhor, um incremento.
Os métodos apresentados fazem uso de quatro dispositivos de leitura, os quais fornecem
quatro sinais defasados de 90º elétricos. Estes sinais são combinados eletronicamente para gerar
dois sinais de onda quadrada, o canal A e o canal B, minimizando erros mecânicos. É possível
obter diretamente esses dois canais a partir de apenas dois dispositivos de leitura, desde que esses
dispositivos estejam posicionados de modo a garantir a defasagem de 90º e que seus sinais
tenham amplitude suficiente para detecção, a partir da luminosidade existente.
Como já foi citado, encoders ópticos possuem as maiores resoluções. Mesmo assim,
existem técnicas para aumentar sua resolução, como a utilização de resolvedores eletrônicos ou a
utilização de mais dispositivos de leitura para se obter sinais com defasagens diferentes
(resolvedores ópticos). Técnicas estas que serão estudadas no capítulo seguinte.

29
Para efeito de ilustração, a Figura 2.31 mostra exemplos comerciais de encoders ópticos
incrementais lineares presentes no (CATÁLOGO RENISHAW, acesso em 2007). A Figura 2.32
mostra exemplos de encoders ópticos incrementais rotativos e um desenho de encoder em corte,
ambos do (CATÁLOGO TURCK, acesso em 2007).

Figura 2.31 - Exemplos comerciais de encoders ópticos incrementais lineares. (CATÁLOGO


RENISHAW, acesso em 2007).

(a)

Sinais de saída
Entrada 5-30 VDC

(b)

Movimento mecânico rotativo

Figura 2.32 - Encoder óptico incremental rotativo. (a) Exemplos comerciais. (b) Desenho em
corte. (CATÁLOGO TURCK, acesso em 2007).

30
2.4.3 Fundamentos do Encoder Absoluto

A principal característica que diferencia um encoder absoluto de um encoder incremental é


que o encoder absoluto nunca perde a posição real em que se encontra, mesmo ocorrendo uma
eventual queda da tensão de alimentação. Enquanto que a posição de um encoder incremental é
dada pela contagem de pulsos a partir de uma referência, normalmente a marcação de “zero”, a
posição de um encoder absoluto é obtida pela leitura de um código gravado no elemento móvel
(régua ou disco). Tal código determina vários conjuntos de sinais, sendo que cada conjunto
representa unicamente uma possível posição. A Figura 2.33 (a), adaptada de (PALLÁS-ARENY
et al, 1991), exibe um exemplo de código gravado num disco. Um encoder absoluto é dito linear
quando o elemento móvel é uma régua, e é dito rotativo quando o elemento móvel é um disco. As
análises seguintes serão baseadas em um disco, mas podem ser estendidas para uma régua.
O código gravado no elemento móvel deve ser formado por dois tipos de regiões contendo
uma propriedade que as diferencie. A cada tipo de região será associado um valor binário, 0 ou 1.
A propriedade em questão pode ser elétrica, magnética ou óptica. Quando a propriedade é a
elétrica, o encoder absoluto utiliza escovas fixas como dispositivos de leitura e utiliza um disco
contendo áreas condutoras e não condutoras, como esquematizado na Figura 2.33 (b), traduzida
de (HOESCHELE, 1968). Nesse caso, deverá haver contato entre as escovas fixas e o disco móvel.

Escovas fixas Linha de leitura

Comum Áreas condutoras

Rotação

Eixo

(a) (b)

Figura 2.33 - Encoder absoluto. (a) Exemplo de um disco. (PALLÁS-ARENY et al, 1991).
(b) Esquema de um encoder absoluto por contato. (HOESCHELE, 1968).

31
Quando a propriedade é a magnética, não há o contato, e os dispositivos de leitura são ímas
envolvidos por espiras que sentem a variação do fluxo magnético provocada pela presença de
áreas magnéticas e não magnéticas, codificadas no disco. Maiores detalhes desses dois casos
podem ser encontrados em (WOOLVET, 1977). Em relação ao uso da propriedade óptica,
também não existe o contato entre dispositivos de leitura e disco. Esse caso será tratado mais
adiante, mas cabe antecipar que os dispositivos de leitura são pares emissor/receptor de luz, e o
disco é codificado em áreas translúcidas e opacas.
O código presente no disco associa a cada posição um conjunto de N sinais que são lidos
pelos N dispositivos de leitura. Cada conjunto de N sinais é um conjunto de N bits, que
variam de acordo com a resolução do encoder absoluto. Por exemplo, considerando um encoder
com N = 10 bits, a quantidade de posições codificadas é dada por 2 N = 210 = 1024 . Esse valor
corresponde à resolução do encoder, que normalmente é potência de 2 ou múltiplo de 360. Os
sinais de saída em encoders comerciais estão disponíveis na forma paralela ou em algum padrão
serial do tipo RS ou SSI. Os bits mais significativos estão associados aos dispositivos de leitura
posicionados mais próximos do centro do disco, ou seja, nas trilhas mais internas.
Existem diferentes tipos de código que podem ser gravados em um disco de encoder
absoluto. O código binário natural é o mais fácil de ser interpretado por circuitos eletrônicos
simples, e não requer nenhum tipo de conversão para se determinar a posição real do encoder, e
conseqüentemente, a posição real do sistema ao qual ele está acoplado. O código BCD (Binary
Coded Decimal) também pode ser empregado. Ambos os códigos podem ser analisados na
Tabela 2.1, adaptada de (PALLÁS-ARENY et al, 1991).

Tabela 2.1 - Códigos comuns em discos de encoders absolutos. (PALLÁS-ARENY et al, 1991).
BCD
Binário natural Gray
Número Código Padrão
decimal
Código Padrão Dezena Unidade Dezena Unidade Código Padrão

32
Após uma rápida inspeção tanto no código binário natural quanto no código BCD, nota-se
que em cada mudança de valor, equivalente num disco a uma mudança de posição, ocorre a
inversão de um ou mais bits. As mudanças que envolvem a inversão de mais de um bit por vez
são críticas. Elas exigem um perfeito alinhamento das trilhas do disco, caso contrário, podem
causar ambigüidade. O exemplo a seguir, modificado de (PALLÁS-ARENY et al, 1991), explica
bem isso. Considere um encoder absoluto de 10 bits com código binário natural. As posições 0, 1,
2, 3 e 4 são dadas por
Posição 0 0000000000
Posição 1 0000000001
Posição 2 0000000010
Posição 3 0000000011
Posição 4 0000000100

Supondo que os dispositivos de leitura estejam ligeiramente desalinhados, por exemplo, os dois
primeiros estejam um pouco adiantados. Então, a saída lida após um movimento da posição 3
para a posição 4 seria 0 0 0 0 0 0 0 0 0 0, que representa a posição 0.
Para evitar essa ambigüidade, vários métodos foram desenvolvidos. Um deles consiste em
um código cíclico contínuo onde há a inversão de somente um bit a cada mudança de valor. O
código Gray é o exemplo mais comum desse tipo de código, e também pode ser analisado na
Tabela 2.1. Outros métodos podem eliminar a ambigüidade sem a necessidade da inversão de um
único bit por vez, são exemplos as lógicas V-scan e U-scan, detalhadas em (HOESCHELE, 1968)
e (WOOLVET, 1977).
A utilização do código Gray exige a interpretação dos sinais de saída, seja para determinar
a posição real ou para uso aritmético. Segundo (HOESCHELE, 1968), o código Gray deve ser
traduzido para o sistema binário natural ou para um algum sistema numérico aplicável. A
tradução para o sistema binário natural pode ser feita por um circuito eletrônico simples, como o
reproduzido na Figura 2.34, mas também pode ser programada em um computador. A expressão
Booleana para a conversão do código Gray para binário é

( ) ( )
Bn −1 = Gn −1 ⋅ B n + G n −1 ⋅ Bn , (2.22)

33
(a) (b)
Figura 2.34 - Circuitos para conversão do código Gray para o código binário natural.
(a) Utilizando portas lógicas elementares. (b) Utilizando portas XOR. (HOESCHELE, 1968).

onde B = o bit binário ( Bn = 2 n ),

G = o bit Gray correspondente,

n −1 = o próximo bit menos significativo.

Com uma análise mais profunda do código de Gray, pode-se verificar que a propriedade de
inversão de um único bit por vez só vale completamente quando o número total de valores é
potência de 2. Quando o número total de valores não satisfaz essa relação, como múltiplos de
360, a propriedade não é obedecida na transição do maior valor para o valor zero, e vice-versa.
Ver Tabela 2.2. Por exemplo, se o número total de valores for 10, que não é potência de 2, as
mudanças entre 9 e 0 (1101 e 0000 em Gray) provocam a inversão de 3 bits de uma só vez.
Uma maneira de contornar esse problema é causando um deslocamento D a partir do valor
zero no código Gray. Seu valor pode ser determinado por

2 n − N TOT
D= , (2.23)
2

onde N TOT = o número total de valores,

2 n = o valor que é potência de 2 imediatamente após o N TOT .

34
Tabela 2.2 - Código binário natural e código Gray. A transição para o valor zero com a mudança
de um único bit só ocorre quando o número total de valores é potência de 2.

DECIMAL BINÁRIO GRAY


0 00000 00000
1 00001 00001
2 00010 00011
3 00011 00010
4 00100 00110
5 00101 00111
6 00110 00101
7 00111 00100
8 01000 01100
9 01001 01101
10 01010 01111
11 01011 01110
12 01100 01010
13 01101 01011
14 01110 01001
15 01111 01000
16 10000 11000
17 10001 11001
18 10010 11011
19 10011 11010
20 10100 11110
21 10101 11111
22 10110 11101
23 10111 11100
24 11000 10100
25 11001 10101
26 11010 10111
27 11011 10110
28 11100 10010
29 11101 10011
30 11110 10001
31 11111 10000

Voltando ao exemplo cujo número total de valores N TOT = 10 , o deslocamento a partir do


zero é calculado como:

2n − NTOT 24 − 10 16 − 10 6
D = = = = = 3. (2.24)
2 2 2 2

O efeito do deslocamento pode ser observado na Tabela 2.3, onde a transição crítica 0-9 foi
substituída pela transição 3-12, não crítica.

35
Tabela 2.3 - Exemplo de código Gray deslocado em 3 unidades. Número total de valores N TOT = 10 .

DECIMAL BINÁRIO GRAY


0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

A resolução de um encoder absoluto aumenta à medida que cresce o número de bits


considerados, ou seja, que cresce o número de dispositivos de leitura e o número de trilhas. O
fator limitante é o tamanho e a inércia do disco. Um método para aumentar a resolução seria
incluir uma trilha radial na periferia do disco, possibilitando a leitura de sinais defasados, os quais
comporiam um resolvedor eletrônico ou um resolvedor óptico. Uma maneira diferente para
aumentar a “resolução” é acoplar o disco a um conjunto de engrenagens, de tal forma que a cada
revolução completa do disco, uma posição é avançada na engrenagem seguinte, e assim por
diante. Várias engrenagens encadeadas possibilitam multiplicar o número total de posições.
Portanto, o número total de posições está relacionado com o número de rotações do disco. Assim,
a “resolução” é aumentada, embora a resolução final (dentro de uma única revolução) ainda
dependa exclusivamente do disco. Encoders absolutos rotativos desse tipo são chamados de
encoders de multi-revoluções (multi-turn), enquanto que os que não possuem engrenagens são
chamados de encoders de uma única revolução (single-turn). A Figura 2.35, do (CATÁLOGO
TURCK, acesso em 2007), ilustra um mecanismo multi-revoluções.

Figura 2.35 - Exemplo de mecanismo multi-revoluções. (CATÁLOGO TURCK, acesso em 2007).

36
2.4.4 Encoder Óptico Absoluto

Hoje em dia, a maioria dos encoders absolutos faz uso de princípios ópticos e fotoelétricos.
Falando especificamente de encoders absolutos rotativos, que são os mais comuns, eles possuem
um disco constituído de áreas translúcidas e opacas. A distribuição dessas áreas sobre o disco é
definida de acordo com o código utilizado. Normalmente o disco é feito de vidro transparente e o
código é gravado na superfície através da deposição de cromo, que não permite a passagem de
luz. Segundo (WOOLVET, 1977), esses encoders possuem ainda uma fonte de luz, um sistema
de focalização e um conjunto de fotodetectores dispostos radialmente. Esses elementos podem ser
vistos na Figura 2.36, traduzida do mesmo livro, onde os fotodetectores são fotocélulas. O autor
ressalta a importância da qualidade do disco na performance do encoder. O disco deve ter um alto
grau de precisão e possuir trilhas com arestas agudas, minimizando ruídos durante as transições
0-1 e 1-0.
Ainda segundo (WOOLVET, 1977), a fonte de luz utilizada pode ser uma pequena lâmpada
com filamento de tungstênio ou um dispositivo do estado sólido como, por exemplo, um LED. A
Figura 2.37, também traduzida do livro, ilustra dois sistemas básicos de focalização utilizando
uma lâmpada pequena como fonte de luz. A Figura 2.37 (a) mostra uma lente focalizando a luz
sobre o disco e os fotodetectores expostos à luminosidade através de uma fenda estreita,
precisamente posicionada na linha de leitura. A Figura 2.37 (b) mostra um arranjo alternativo,
onde uma lente cilíndrica é incluída no sistema com o objetivo de “linearizar” o feixe de luz na
direção da linha de leitura.

Fenda

Lâmpada

Fotocélulas

Figura 2.36 - Esquema básico de um encoder óptico absoluto. (WOOLVET, 1977).

37
Fenda

Lâmpada Lâmpada
Fotocélulas Fotocélulas
Lente
cilíndrica

(a) (b)

Figura 2.37 - Sistemas básicos de focalização. (a) Utilização de uma fenda na linha de leitura.
(b) Utilização de uma lente cilíndrica para focalizar a luz na linha de leitura. (WOOLVET, 1977).

O número de fotodetectores corresponde ao número de bits de um encoder óptico absoluto.


Os sinais elétricos provenientes desses fotodetectores devem ser condicionados eletronicamente,
resultando em sinais digitais, os quais são fornecidos em paralelo (uma saída para cada bit) ou em
algum padrão serial (uma única saída para todos os bits).
Exemplos comerciais de encoders ópticos absolutos rotativos podem ser vistos na Figura
2.38, presente no (CATÁLOGO TURCK, acesso em 2007).

Figura 2.38 - Exemplos comerciais de encoders ópticos absolutos rotativos. (CATÁLOGO


TURCK, acesso em 2007).

38
3. Resolvedores

Neste capítulo, serão apresentados dois tipos de sistemas resolvedores, que nada mais são
do que sistemas que permitem aumentar a resolução de um encoder, seja ele incremental ou
absoluto, a partir de sinais defasados adequadamente. O primeiro tipo de sistema resolvedor a ser
analisado é o resolvedor eletrônico, cujo princípio para obtenção de sinais defasados está na
utilização de um circuito interpolador eletrônico. O resolvedor óptico é o outro tipo de sistema
resolvedor que será discutido. Nele, os sinais defasados provêm da existência e posicionamento
de vários dispositivos de leitura.

3.1 Resolvedores Eletrônicos

Um resolvedor eletrônico é um sistema que possibilita o aumento da resolução de um


encoder (incremental ou absoluto, linear ou rotativo) a partir da utilização de dois sinais senoidais
defasados de 90º elétricos entre si. Esses dois sinais (sin e cos) são gerados pelo próprio encoder,
através do arranjo mecânico entre os dispositivos de leitura e o elemento móvel (régua ou disco).
Na maioria das vezes, o sistema resolvedor é composto ainda por um circuito interpolador
eletrônico, o qual é responsável pela obtenção de um número maior de sinais senoidais defasados.
Cada sinal senoidal passa por um circuito quadrador para se tornar digital (onda quadrada). A
combinação lógica entre esses sinais digitais possibilita o aumento da resolução do encoder. Em
um encoder incremental, aumenta-se o número de pulsos gerados durante um deslocamento físico
na posição. No caso de um encoder absoluto, há um acréscimo no número de bits menos
significativos, levando ao aumento do número total de bits.
Considerando que o elemento móvel seja do tipo incremental, de acordo com (WOOLVET,
1977), os dispositivos de leitura fixos são capazes de fornecer sinais de saída aproximadamente
senoidais, quando da movimentação do elemento. Com uma pequena modificação na geometria
óptica e na forma dos setores presentes na régua ou no disco, é possível produzir uma onda
senoidal praticamente perfeita.
As análises seguintes serão realizadas com base num disco, mas sua aplicação em réguas
pode ser feita de forma análoga sem maiores dificuldades.

39
Encoders incrementais já possuem um disco do tipo incremental, ou seja, com uma trilha
radial constituída de dois tipos de setores, por exemplo, opacos e translúcidos. Para um encoder
absoluto, é necessário incluir na periferia do disco uma trilha radial, cujo espaçamento dos
setores deve ser metade do espaçamento dos setores da trilha mais externa (relativa ao bit menos
significativo). Em ambos os discos, dispositivos de leitura são posicionados na trilha radial para
se obter dois sinais senoidais defasados de 90º elétricos entre si, chamados de sin (seno) e cos
(cosseno). Em alguns casos, dois ou mais dispositivos de leitura juntamente com circuitos para
efetuar a média são utilizados para determinar cada sinal, minimizando erros mecânicos.
Na presente análise, será considerado o uso de apenas um dispositivo de leitura para gerar o
sinal sin e um dispositivo de leitura para gerar o sinal cos. A Figura 3.1 ilustra esse início de
análise. No item (a), tem-se um exemplo de um disco de encoder óptico incremental, onde uma
máscara com duas grades é utilizada para originar a defasagem dos sinais sin e cos. No item (b),
pode ser visto um exemplo de um disco de encoder óptico absoluto de 7 bits, onde foi incluída
uma trilha radial na periferia. Também é utilizada uma máscara com duas grades para originar a
defasagem dos sinais. Em (c), observa-se a sobreposição de dois discos incrementais, cuja
diferença no número de pares translúcido-opaco é 1. Aqui, os 90º elétricos estão relacionados
com os 90º angulares. Portanto, os dois dispositivos de leitura são posicionados a 90º angulares
um do outro, dando origem aos sinais sin e cos. Duas grades são utilizadas, neste caso, para
facilitar a captura da luminosidade, além de estarem alinhadas com os setores de um dos discos.
Uma vez obtidos os sinais senoidais sin e cos, a próxima etapa do sistema resolvedor seria
o uso de um circuito interpolador eletrônico. No entanto, ainda sem a presença de tal circuito,
consegue-se construir um resolvedor capaz de multiplicar por 4 a resolução do encoder. Isso é
feito, primeiramente, com a transformação dos sinais sin e cos em sinais de onda quadrada, por
meio de circuitos quadradores (ex. Schmitt triggers). Um esquema dessa transformação é
mostrado na Figura 3.2. Os dois sinais digitais resultantes A e B são combinados logicamente
para se obter quatro sinais digitais defasados de 1/4 do período (90º elétricos). A Figura 3.3 exibe
as formas de onda referentes a um exemplo de combinação lógica, a qual pode ser implementada
eletronicamente ou programada em um microcontrolador.
Na mesma figura, nota-se que, para um encoder absoluto, um período dos sinais A e B
corresponde à meio período do sinal relacionado ao bit menos significativo (LSB). O mesmo
provém da trilha mais externa do disco, não considerando a trilha radial acrescentada na periferia.

40
sin sin

cos cos
6
5
4
3
2
1
0

(a) sin (b)

cos

(c)
Figura 3.1 - Obtenção de dois sinais senoidais defasados de 90º elétricos. (a) Disco
incremental com máscara. (b) Disco absoluto com trilha periférica e máscara.
(c) Sobreposição de dois discos incrementais com diferença de 1 no número de pares de setores
translúcido-opaco.

sin

cos
sin A
quadrador
cos B A
quadrador

(a) (b)
Figura 3.2 - Transformação senóide / onda quadrada. (a) Esquema. (b) Formas de onda.

41
LSB
(encoder absoluto)

AB

AB

AB

AB

Pulsos
(encoder incremental)

Figura 3.3 - Formas de onda de um sistema resolvedor sem interpolador eletrônico. A


resolução obtida é quatro vezes maior.

Ainda considerando a Figura 3.3 e no caso de um encoder absoluto, pode-se fazer a seguinte
associação de sinais com bits: AB  00 , AB  01 , AB  10 , AB  11 , obtendo-se dois
novos bits, ou seja, originando quatro novas posições absolutas dentro da posição absoluta
limitada pelo bit menos significativo (LSB). Portanto, a resolução do encoder se torna quatro
vezes maior, já que o número total de bits é acrescido de 2. Conseqüentemente, os dois novos bits
passam a ser agora os bits menos significativos do encoder.
Para um encoder incremental, a mesma Figura 3.3 mostra que, a partir dos quatro sinais
obtidos via combinação lógica dos sinais A e B, é possível gerar uma seqüência de pulsos com
quatro pulsos por período de A (ou B). Sabendo-se que um período de A corresponde a um
incremento físico na posição do disco (limitado por um setor/espaçamento), cada um dos quatro
pulsos indica um deslocamento físico quatro vezes menor. Logo, a resolução é quatro vezes maior.

42
O sinal de contagem (seqüência de pulsos) bem como o sinal de direção podem ser determinados
via software, quando da utilização de um microcontrolador. Caso este não seja utilizado, a
determinação do sinal de contagem e do sinal de direção é feita eletronicamente por circuitos
compostos de multivibradores monoestáveis e de portas lógicas. Os multivibradores
monoestáveis são disparados pelas bordas de subida dos quatro sinais advindos da combinação de
A e B, e dão origem à seqüência de pulsos, cujas larguras são menores do que as larguras desses
quatro sinais que efetuaram o disparo. Ver último gráfico da Figura 3.3. Isso é necessário para
gerar um pulso a cada transição (mudança de posição) e não um sinal contínuo.
O sistema resolvedor que acabou de ser analisado não faz uso de um circuito interpolador
eletrônico. Desse modo, só é possível quadruplicar a resolução do encoder. Quando existe a
necessidade de se aumentar ainda mais a resolução, um circuito interpolador deve ser incluído no
sistema. Segundo (WOOLVET, 1977), o circuito interpolador mais simples consiste de uma rede
de resistores conforme apresenta a Figura 3.4, adaptada do mesmo livro. Na figura, o circuito tem
como entradas os dois sinais já conhecidos (sin e cos) e um sinal -sin, que é facilmente obtido
através da inversão do sinal sin. Nesse exemplo, são mostradas quatro saídas, que possibilitarão
um aumento de oito vezes na resolução. Generalizando, para N saídas, a resolução será
multiplicada por 2N. As saídas, antes de passarem pelos quadradores, também são senóides
aproximadas, mas diferem em fase de acordo com sua posição na cadeia de resistores. Nesse
ponto, (WOOLVET, 1977) afirma que o desempenho global do sistema poderia ser aperfeiçoado

-sin
D
quadrador

cos C
quadrador

B
quadrador

sin A
quadrador

Figura 3.4 - Circuito interpolador eletrônico.

43
caso fossem utilizadas formas de onda aproximadamente triangulares, o que pode ser feito
modificando-se o arranjo mecânico. Voltando ao exemplo, cada uma das quatro senóides da saída
passa por um circuito quadrador, dando origem aos sinais digitais A, B, C e D. Esses sinais
digitais são combinados logicamente dois a dois, com o objetivo de se obter oito sinais digitais
defasados de 1/8 do período (45º elétricos). A combinação dos sinais, mais uma vez, pode ser
implementada eletronicamente ou programada em um microcontrolador. A Figura 3.5 mostra um
exemplo dessa combinação de sinais, exibindo as formas de onda. Como esperado, um período
dos sinais A, B, C e D corresponde a meio período do sinal relacionado ao LSB de um encoder
absoluto. Neste exemplo, a associação de sinais com bits para o encoder absoluto é: AB  000 ,
BC  001 , CD  010 , AD  011 , AB  100 , BC  101 , CD  110 , AD  111 ,
obtendo-se agora três novos bits que, por sua vez, determinam oito novas posições absolutas
dentro da posição absoluta limitada pelo LSB. Assim, a resolução aumenta oito vezes e os três
novos bits passam a ser os bits menos significativos.
Considerando um encoder incremental, a Figura 3.5 exibe a seqüência de pulsos obtida a
partir dos oito sinais derivados da combinação de A, B, C e D. A seqüência de pulsos possui oito
pulsos por período de A (ou B, C, D), que indicam um deslocamento físico oito vezes menor do
que o indicado sem o uso do resolvedor eletrônico. Portanto, a resolução torna-se oito vezes
maior. Assim como no caso do sistema resolvedor sem interpolador, a determinação dessa
seqüência de pulsos (sinal de contagem) e do sinal de direção pode ser feita através de software
quando se utiliza um microcontrolador, ou através de circuitos eletrônicos constituídos de
multivibradores monoestáveis e de portas lógicas quando não se utiliza um microcontrolador. No
caso dos circuitos eletrônicos, seu funcionamento deve ser análogo ao descrito para o sistema
resolvedor sem interpolador. Os multivibradores monoestáveis devem ser disparados pelas bordas
de subida dos oito sinais derivados da combinação de A, B, C e D, dando origem à seqüência de
pulsos, cujas larguras devem ser menores do que as larguras desses oito sinais que efetuaram o
disparo. Relembrando, isso garante a existência de um pulso a cada transição (mudança de
posição) e não simplesmente um sinal contínuo.
O circuito interpolador apresentado é um circuito bem simples, porém, hoje já existem
circuitos interpoladores bem mais sofisticados, inclusive na forma de circuitos integrados. A
Figura 3.6 exibe três exemplos com diferentes fatores de interpolação, como pode ser visto pelas
formas de onda. Maiores detalhes podem ser encontrados no respectivo (DATASHEET - RLS).

44
LSB
(encoder absoluto)

AB

BC

CD

AD

AB

BC

CD

AD

Pulsos
(encoder incremental)

Figura 3.5 - Formas de onda de um sistema resolvedor com interpolador eletrônico. A


resolução obtida neste exemplo é oito vezes maior.

45
fotodetector

(a)

fotodetector

(b)

fotodetector

(c)

Figura 3.6 - Exemplos comerciais de circuito interpolador eletrônico. (a) Fatores de


interpolação 1, 2, 5, ou 10. (DATASHEET RLS - INTERPOLADOR RLXA2510, acesso em 2007).
(b) Fatores de interpolação 1, 2, 3, 4, 5, 8, ou 10. (DATASHEET RLS - INTERPOLADOR
RLX40i, acesso em 2007). (c) Fatores de interpolação 5, 10, ou 25. (DATASHEET RLS -
INTERPOLADOR RLX100, acesso em 2007).

46
Teoricamente, a utilização de um circuito interpolador eletrônico em um sistema resolvedor
poderia aumentar a resolução do encoder infinitamente. Na prática, sabe-se que isso é impossível,
devido às limitações de hardware ou de software.

3.2 Resolvedores Ópticos

Um resolvedor óptico é um sistema que possibilita o aumento da resolução de um encoder


(incremental ou absoluto, linear ou rotativo) a partir da utilização de vários sinais senoidais
igualmente defasados, provenientes do posicionamento de vários dispositivos de leitura. O
posicionamento desses vários dispositivos de leitura tem a mesma função do circuito interpolador
em um resolvedor eletrônico, que é a geração de senóides defasadas adequadamente. Cada sinal
senoidal passa por um circuito quadrador, tornando-se um sinal digital. Do mesmo modo que em
um resolvedor eletrônico, a combinação lógica entre esses sinais digitais possibilita o aumento da
resolução do encoder. Num encoder incremental, aumenta-se o número de pulsos gerados durante
um incremento físico na posição, e num encoder absoluto, aumenta-se o número de bits menos
significativos, levando ao aumento do número total de bits.
Assim como já foi discutido, para a obtenção de um sinal aproximadamente senoidal, é
preciso que o elemento móvel do encoder seja do tipo incremental. Elemento móvel que aqui,
para efeito de análise, é um disco. Em um encoder absoluto, surge a necessidade da inclusão de
uma trilha radial periférica, cujo espaçamento dos setores deve ser metade do espaçamento dos
setores da trilha mais externa (relativa ao bit menos significativo).
Os N dispositivos de leitura são posicionados na trilha radial para se obter N sinais
senoidais igualmente defasados, como esquematizado na Figura 3.7 para N = 4, discos à
esquerda, e para N = 5, discos à direita. No item (a), tem-se um exemplo de um disco de encoder
óptico incremental, onde uma máscara com N grades é utilizada para originar a defasagem dos
sinais senoidais. No item (b), pode ser visto um exemplo de um disco de encoder óptico absoluto
de 7 bits, onde foi incluída uma trilha radial na periferia. Também é utilizada uma máscara com
N grades para originar a defasagem dos sinais. Em (c), observa-se a sobreposição de dois discos
incrementais, cuja diferença no número de pares é 1. Aqui, as defasagens elétricas estão
relacionadas com as defasagens angulares. Portanto, os N dispositivos de leitura são posicionados
a 180/N graus angulares um do outro, dando origem aos N sinais senoidais igualmente defasados.

47
sin(θ) sin(θ)
sin(θ+45º) sin(θ+36º)
sin(θ+90º) sin(θ+72º)
sin(θ+135º) sin(θ+108º)
sin(θ+144º)

(a)
sin(θ) sin(θ)
sin(θ+45º) sin(θ+36º)
sin(θ+90º) sin(θ+72º)
6 6
5 sin(θ+135º) 5 sin(θ+108º)
4 4
3 3
2 2 sin(θ+144º)
1 1
0 0

(b)

sin(θ)
sin(θ) sin(θ+36º)
sin(θ+45º) sin(θ+72º)
sin(θ+90º) sin(θ+108º)
sin(θ+135º) sin(θ+144º)

(c)

Figura 3.7 - Obtenção de N sinais senoidais igualmente defasados, N = 4 (esq) e N = 5 (dir).


(a) Disco incremental com máscara. (b) Disco absoluto com trilha periférica e máscara.
(c) Sobreposição de dois discos incrementais com diferença de 1 no número de pares.

48
Neste caso, as grades são utilizadas para facilitar a captura da luminosidade, além de estarem
alinhadas com os setores de um dos discos.
Para um número N de dispositivos de leitura, a resolução do encoder é multiplicada por 2N.
No exemplo onde o número de dispositivos de leitura é N = 4, obtém-se quatro sinais senoidais
igualmente defasados de 45º, que propiciarão um aumento de 8 vezes na resolução. Cada um
desses quatro sinais senoidais passa por um circuito quadrador, originando os mesmos quatro
sinais digitais (A, B, C e D) que provêm das quatro saídas do circuito interpolador eletrônico
mostrado na Figura 3.4. O condicionamento seguinte dos sinais, tanto para um encoder absoluto
quanto para um encoder incremental, é realizado da mesma maneira como foi apresentado para o
resolvedor eletrônico, e está sintetizado na Figura 3.5.
Quando se buscam grandes aumentos na resolução, um sistema resolvedor eletrônico é
mais recomendado do que um sistema resolvedor óptico, pois este último começa a ficar mais
complexo física e geometricamente, à medida que cresce o número de dispositivos de leitura.

49
4. Técnicas de Fabricação de Discos e Réguas de Encoders Ópticos

Este capítulo apresenta duas técnicas de fabricação de elementos móveis de encoders


ópticos. A primeira técnica a ser apresentada é a técnica utilizada industrialmente. Nela, será
discutida a preparação inicial do elemento, comparando materiais e suas propriedades. Também
serão descritas todas as etapas do processo de lift-off para gravação dos setores/trilhas em cromo
sobre o elemento móvel. A outra técnica apresentada neste capítulo emprega materiais de baixo
custo e é dedicada à construção de um disco de encoder óptico para fins didáticos.

4.1 Técnica Industrial Utilizando o Processo de Lift-off

Em sua maioria, discos e réguas de encoders ópticos (incrementais ou absolutos)


disponíveis comercialmente são feitos de vidro transparente. Os setores/trilhas opacas são
gravadas sobre a superfície do vidro, através da deposição de uma película de cromo. Essa
gravação é realizada pelo processo de lift-off, o qual também é utilizado na preparação de
máscaras usadas na fabricação de circuitos impressos por fotolitografia. A Figura 4.1, retirada de
(CATÁLOGO HEIDENHAIN, acesso em 2007), mostra exemplos de discos de encoders ópticos
incrementais em (a), e absolutos em (b).

(a) (b)

Figura 4.1 - Exemplos de discos de encoders ópticos. (a) Incrementais. (b) Absolutos.
(CATÁLOGO HEIDENHAIN, acesso em 2007).

50
Na seqüência, será descrito o processo de fabricação de um disco de encoder óptico, já que
o processo é o mesmo para a fabricação de uma régua. O que podem variar são detalhes
relacionados à diferença de formatos entre os elementos.

4.1.1 Preparação Inicial do Disco

O vidro transparente utilizado para fabricar o disco pode ter diferentes composições e
propriedades, de acordo com o tipo de vidro escolhido. Em (ELLIOTT, 1985), pode-se encontrar
uma comparação entre os principais tipos de vidro. A Tabela 4.1, adaptada do mesmo livro,
resume as diferenças na composição química e nas propriedades físicas. Nota-se que todos os
tipos são compostos majoritariamente por dióxido de silício (SiO2), sendo o quartzo praticamente
SiO2 puro. Também nota-se que o quartzo é o vidro que possui a menor expansão térmica, tanto
que é classificado como um material de expansão térmica ultra baixa. O vidro LE-30 (silicato de
boro) tem uma expansão térmica superior ao quartzo, mas relativamente baixa, sendo
classificado, portanto, como vidro de baixa expansão. A Figura 4.2 compara a expansão em
micrômetros com a variação da temperatura para três tipos de vidro, e para discos de ensaio de
vidro com quatro tamanhos diferentes: 6, 5, 4 e 3 polegadas (in). O vidro soda-lime é o que
apresenta a maior expansão com a temperatura, mas é também o de menor custo. O vidro de
silicato de boro tem preços não muito superiores aos do soda-lime e apresenta baixa expansão
com a variação da temperatura, como já foi dito. Por possuir pouco ou quase nenhum sódio na

Tabela 4.1 - Características dos principais tipos de vidro. (ELLIOTT, 1985).


Tipo de Vidro
SLW SL LE-30 QZ
Característica
(soda lime) (white crown) (baixa expansão) (quartzo )
Composição Química, %
SiO2 73 70 60 100
B2O3 1 - 5 -
Al2O3 - - 15 -
Na2O 15 8 - -
K2O 1 9 - -
CaO, MgO 10 12 20 -
Outros - 1 - -
Propriedades Físicas
Expansão Térmica (10-7) 94 93 37 5
Temperatura de Transformação, ºC 542 533 686 1120
Índice de Refração, ND 1.52 1.52 1.53 1.46
Módulo de Young, kg/mm2 7200 7340 7540 7410
12 15 15 18
Resistividade Elétrica, Ω.cm 10 10 10 10
Gravidade Específica 2.50 2.56 2.58 2.20

51
Expansão, µm
Diferença de temperatura, ºC

Figura 4.2 - Expansão em função do tipo de vidro, tamanho e temperatura. (ELLIOTT, 1985).

composição, o quartzo é o vidro que menos se expande com o aumento da temperatura, porém, é
o que possui o maior custo. A Figura 4.3, também adaptada de (ELLIOTT, 1985), apresenta a
relação entre a porcentagem de transmissão e o comprimento de onda para os diferentes tipos de
vidro. Todos eles têm transmissão superior a 90% para comprimentos de onda a partir do
espectro visível (aprox. 4000Å = 400nm). O quartzo, desejável por razões de estabilidade
térmica, mantém transmissão de aproximadamente 90% para comprimentos de onda na direção
do ultravioleta intenso (menores comprimentos de onda). Essa característica faz com que o
quartzo seja muito utilizado em aplicações de imagem com ultravioleta intenso, como em
máscaras de alguns tipos de fotolitografia. Nesses casos, o quartzo garante ainda um aumento da
vida útil da máscara. O quartzo também é o mais resistente às soluções utilizadas para a limpeza
do vidro. Diante das comparações, é possível entender porquê o quartzo é o vidro mais indicado
para aplicações que envolvem grande precisão, como no caso de discos de encoders ópticos, e
que sofrem processos físico-químicos durante o processo de fabricação.
Transmissão, %

Comprimento de onda, Å

Figura 4.3 - Transmissão em função do comprimento de onda para diferentes tipos de vidro.
(ELLIOTT, 1985).

52
De acordo com (ELLIOTT, 1985), pode-se resumir em nove etapas o processo para
obtenção de um disco de vidro a ser transformado num disco de encoder:

1. Misturar e fundir a matéria prima (SiO2, B2O3, Na2O, CaO, ...)


2. Dar forma de chapas/lâminas de vidro
3. Cortar em forma de disco
4. Aplainar
5. Polir
6. Limpar
7. Inspecionar a superfície
8. Verificar a planicidade
9. Disco de vidro preparado

O processo pode variar de acordo com o fabricante, com operações de inspeção e limpeza
podendo ser efetuadas em pontos diferentes. Cada etapa é caracterizada por um equipamento
especial e cada fabricante desenvolve sua própria técnica para otimizar o processo.

4.1.2 Processo de Lift-off

O processo de lift-off é um processo utilizado para a deposição de uma película (desenho


padronizado) de metal sobre um substrato. No caso de um disco de encoder, o metal é o cromo e
o substrato é o disco de vidro. Tal processo possui vantagens sobre processos corrosivos físicos
e/ou químicos, como a vantagem de não necessitar da corrosão do metal depositado e a de evitar
a corrosão indesejada (under-etching).
Baseado em (MADOU, 1997), o primeiro passo do processo de lift-off na fabricação de um
disco de encoder é a aplicação de uma camada fina de resina sobre a superfície do disco de vidro,
geralmente quartzo, o qual foi previamente preparado e limpo. A resina pode ser fotosensível,
isto é, sensível à radiação UV, ou pode ser sensível a um feixe de elétrons (e-beam), dependendo
da forma de radiação a ser utilizada para gravar o padrão do desenho. A resina é composta por
um polímero orgânico (resina base) e por um solvente, podendo ainda conter um sensibilizador.
O polímero muda a estrutura quando exposto à radiação, o sensibilizador controla as reações

53
químicas na fase polimérica, e o solvente permite espalhar o polímero sobre a superfície do
substrato. Continuando o processo, a solução viscosa de resina é colocada no centro do disco e o
mesmo é posto a girar a altas taxas de rotação. A força centrífuga espalha uma fina camada de
resina uniformemente sobre o disco. A espessura da camada é controlada e depende da
velocidade de rotação, da concentração da solução e da viscosidade intrínseca. Após a rotação, a
camada de resina ainda contém vestígios do solvente, o qual é eliminado através do aquecimento
adequado do conjunto disco-resina. Esse aquecimento, por sinal, melhora a adesão entre eles.
É importante dizer que as resinas são classificadas em dois tipos, a chamada resina positiva
e a chamada resina negativa. Se a resina é positiva, a reação química durante a exposição à
radiação enfraquece as cadeias de polímeros, aumentado sua solubilidade em soluções com
substâncias reveladoras. Se a resina é negativa, a reação fortalece as cadeias de polímeros,
tornando a área exposta à radiação menos solúvel em soluções reveladoras.
O padrão desejado a ser gravado no disco do encoder com a película de cromo (ex. padrão
incremental com marcação de zero, padrão absoluto em código Gray) deve ser o mesmo padrão a
ser gravado na resina. A gravação do padrão na resina é feita, considerando o tipo de resina,
através da exposição à radiação (radiação UV ou feixe de elétrons) das áreas da resina que
determinarão o padrão desejado. No caso da utilização de uma fonte de radiação UV, essas áreas
podem ser selecionadas por uma máscara contendo o padrão desejado. A máscara é semelhante à
empregada no processo de fotolitografia para fabricação de circuitos integrados, e também é
composta de quartzo com regiões opacas de metal depositado na superfície. Neste caso, todas as
áreas expostas da fotoresina recebem radiação ao mesmo tempo, como pode ser observado no
item (a) da Figura 4.4. Agora, no caso da utilização de um feixe de elétrons para gravação do
padrão na resina, as áreas a serem expostas são selecionadas pelo direcionamento do feixe de
elétrons. O equipamento que gera e controla o feixe de elétrons recebe o desenho do padrão
desejado através de um sistema CAD. O feixe é então direcionado de modo a contornar o
desenho do padrão, gravando-o sobre a resina e-beam. Assim, as áreas selecionadas são expostas
ao feixe de elétrons em instantes diferentes durante o percurso do feixe, como representado pelos
tempos t1, t2 e t3 no item (b) da Figura 4.4.
Neste ponto do processo de lift-off, tem-se um disco com o padrão desejado gravado na
resina na forma de áreas latentes. Essas áreas são reveladas por meio da imersão do disco em
uma solução reveladora, ou borrifando essa solução sobre a face do disco que contém a resina.

54
Aplicação da resina

Fotoresina Resina e-beam

Vidro Vidro

Gravação do padrão na resina

Radiação UV Feixe de elétrons (e-beam)

t1 t2 t3
Máscara

Revelação do padrão

Fotoresina Fotoresina Resina e-beam Resina e-beam


positiva negativa positiva negativa

(a) (b)

Figura 4.4 - Etapas iniciais do processo de lift-off. (a) Gravação do padrão na resina com
radiação UV selecionada por uma máscara. (b) Gravação do padrão na resina com
direcionamento do feixe de elétrons (e-beam).

Cada resina tem sua respectiva solução reveladora, a qual tem a propriedade de dissolver as áreas
que foram expostas à radiação, no caso de uma resina positiva, e de dissolver as áreas não
expostas, no caso de uma resina negativa. Ver Figura 4.4.
Após a exposição e a revelação, o perfil obtido é distinto para resinas positivas e para
resinas negativas. Elas apresentam comportamento diferente tanto na dispersão da radiação em
seu interior, quanto na interação com a solução reveladora. Os perfis em resinas positivas podem
ser controlados através da dose de exposição à radiação e do tempo de revelação, como pode ser
visto no item (a) da Figura 4.5, adaptada de (MADOU, 1997). Altas doses de exposição e rápida

55
Dose de Tempo de contato Dose de
exposição com o revelador exposição

Alta Baixo Alta

Média Médio Média

Baixa Alto Baixa

(a) (b)
(b)
Figura 4.5 - Perfis após a exposição à radiação e revelação. (a) Resina positiva. (b) Resina
negativa.

revelação em resinas positivas são ideais para um bom processo de lift-off, pois originam um
perfil com paredes inclinadas no sentido de cobrir as arestas em contato com o substrato. Isso
evitará a deposição de metal sobre as paredes da resina, possibilitando o contato seguinte das
paredes da resina com o solvente removedor. Resinas negativas não apresentam o mesmo
controle sobre os perfis, acarretando apenas em pequenas variações nas dimensões, quando da
mudança das condições de exposição e revelação. Observar item (b) da Figura 4.5.
Diante do apresentado, os processos de lift-off utilizam resinas positivas para gerar um
perfil de paredes inclinadas conforme descrito. Existem algumas técnicas para tornar os outros
perfis mais adequados ao processo de lift-off, como, por exemplo, a apresentada por (PATEL et
al, acesso em 2007). A técnica consiste em aplicar sobre a superfície da resina, antes da
revelação, uma substância que diminui a taxa de dissolução da resina na solução reveladora. Tal
substância causará a diminuição na dissolução somente da camada superior da resina, ou seja, a
porção da resina que entrou em contato com a substância. No caso apresentado, a substância é o
clorobenzeno e um exemplo do perfil obtido é reproduzido na Figura 4.6. Nela é possível
observar as rebarbas que permaneceram após a revelação e que cobrem as paredes da resina.

Figura 4.6 - Perfil obtido com a aplicação de clorobenzeno sobre uma resina positiva antes da
revelação. (PATEL et al, acesso em 2007).

56
Voltando a abordar especificamente as resinas, um tipo de resina positiva muito conhecida
e utilizada é a PMMA (poly-[methyl-metacrylate]). A resina PMMA é sensível à radiação UV
intensa e sensível ao feixe de elétrons. Também é sensível a outras formas de radiação, como
feixe de íons e raios-X. Tem como propriedades a boa transparência, resistência ao UV, boa
resistência abrasiva, dureza, rigidez, baixa absorção de água e baixa emissão de fumaça. Um
outro exemplo de resina positiva é a PBS (poly-[butene-1-sulfone]). Maiores detalhes sobre
resinas podem ser encontrados em (MADOU, 1997) e em (ELLIOTT, 1985).
Neste ponto do processo de lift-off, após a etapa de revelação, o disco do encoder apresenta
o padrão desejado desenhado por meio de áreas cobertas por resina e de áreas removidas
(dissolvidas) de resina. As áreas da superfície do vidro que não deverão receber uma película de
cromo são as áreas que estão cobertas pela resina, ou seja, o cromo será depositado sobre a
resina, durante a deposição. As áreas da superfície do vidro que deverão receber uma película de
cromo são as áreas reveladas, isto é, aquelas que tiveram a camada de resina dissolvida. A etapa
seguinte do processo de lift-off para fabricação de um disco de encoder consiste, portanto, na
deposição de uma película de cromo.
Segundo (ELLIOTT, 1985), existem diversos métodos utilizados para depositar uma
película de metal sobre um substrato de vidro. Eles são divididos em métodos a vácuo (baixa
pressão) e métodos que não utilizam vácuo. Os principais métodos de deposição a vácuo são os
métodos de pulverização (sputtering) e evaporação, muito comuns para depositar cromo. Dentre
os métodos que não são a vácuo, destaca-se a deposição química a vapor (CVD). No caso de um
disco de encoder em um processo de lift-off, a deposição de uma película de cromo é realizada a
vácuo por pulverização ou por evaporação. Os equipamentos para deposição a vácuo podem
apresentar diferentes características, porém, um equipamento básico deve conter: uma área onde
o vácuo possa ser gerado; software e hardware para controle de parâmetros (ex. nível de vácuo,
espessura da camada depositada); uma bomba de vácuo; e hardware para deposição de material.
A seguir, serão descritos os processos a vácuo de pulverização e evaporação, começando pelo
primeiro.
A pulverização é baseada no princípio da descarga elétrica entre dois eletrodos. O processo
ocorre a baixas pressões, permitindo a expulsão de átomos do metal no catodo em direção ao
anodo. Quando a câmara de vácuo termina de ser evacuada a um nível apropriado, íons de um gás
inerte são introduzidos na câmara. Estes são rapidamente ionizados quando da aplicação de um

57
campo elétrico. Os átomos ionizados de alta energia incidem sobre a meta, que é um pedaço de
metal (cromo) presente no catodo. A energia incidente deve ser suficiente para romper as ligações
entre os átomos de cromo, expelindo-os na direção do anodo. Este fenômeno lembra o que
acontece quando se atira uma pedra com força em uma poça d’água. Assim, o cromo é
pulverizado sobre o anodo, onde está localizado o substrato que recebe a deposição. O substrato,
no caso o disco com o padrão desenhado em resina, deve ser mantido aquecido moderadamente
durante a pulverização, tomando-se o cuidado de não atingir uma temperatura que comprometa as
propriedades da resina. A pulverização proporciona uma boa adesão do cromo sobre o vidro, já
que os átomos de cromo o atingem com muita energia. Segundo (ELLIOTT, 1985), essa adesão é
cerca de dez vezes maior do que a do processo de evaporação. Outras vantagens a considerar são
as altas taxas de deposição e a alta homogeneidade da deposição.
O processo de evaporação também acontece a pressões muito baixas, neste caso, facilitando
a evaporação do metal (cromo) ao reduzir a temperatura necessária para tal. Existem diversos
mecanismos para se conseguir a evaporação do cromo, como, por exemplo, a utilização de um fio
de cromo sobre um filamento, cuja passagem de corrente elétrica fornece calor para a fusão e a
evaporação deste fio de cromo. O vapor de cromo é então depositado sobre o disco com o padrão
desenhado em resina. Como mencionado anteriormente, a adesão do cromo sobre o vidro num
processo de evaporação é menor do que num processo de pulverização, já que na evaporação os
átomos de cromo atingem o substrato com baixa energia relativamente. Para melhorar a adesão,
costuma-se aquecer o substrato mais do que num processo de pulverização. Desse modo, no caso
do disco, aumenta-se a energia na superfície do vidro, fortalecendo as ligações cromo-vidro.
Também é necessário garantir que o aquecimento do disco não danifique a resina. O processo de
evaporação é considerado um processo a quente e o processo de pulverização pode ser
considerado um processo a frio. A Figura 4.7, presente em (PATEL et al, acesso em 2007), ilustra
o resultado da deposição de uma película de metal sobre um substrato, por evaporação do metal.

Figura 4.7 - Resultado obtido com a deposição de uma película de metal sobre um substrato, via
processo de evaporação do metal. (PATEL et al, acesso em 2007).

58
Na figura, é possível observar que as rebarbas impediram a deposição de metal sobre as
paredes da resina. A Figura 4.8 esquematiza a deposição, dentro do processo de lift-off, para o
caso de uma resina positiva com perfis inclinados e sem a presença de rebarbas.
A última etapa do processo de lift-off para fabricação de um disco de encoder é a remoção
da resina que ainda permanece sobre o disco. Isso é feito através da imersão do mesmo em uma
solução contendo um solvente removedor apropriado para a resina utilizada. A acetona é um tipo
de solvente barato e que remove um grande número de resinas. A remoção se inicia pelas paredes
da resina, as quais não foram cobertas pela película de cromo e que, portanto, podem entrar em
contato com o solvente. Após a total remoção da resina, tem-se um disco de vidro com o padrão
desejado gravado em sua superfície na forma de uma película de cromo. O processo é finalizado
com o uso de soluções para limpeza e com a posterior secagem do disco. Ao término do processo
de lift-off, o disco está pronto para ser montado junto com os outros componentes de um encoder
óptico.

Revelação do padrão

Resina positiva

Vidro

Deposição do cromo

Cromo

Remoção da resina

Figura 4.8 - Etapas finais do processo de lift-off.

59
4.2 Técnica para Fins Didáticos Utilizando Materiais de Baixo Custo

Uma maneira de compreender melhor o funcionamento de um encoder óptico é através da


construção e utilização de um modelo didático deste encoder. Nesse sentido, a construção de seu
componente principal (elemento móvel) é uma tarefa a ser realizada. Mantendo o enfoque em um
encoder rotativo, as etapas seguintes descrevem uma técnica simples e barata de se obter um
disco de encoder óptico para fins didáticos.
A primeira etapa é a criação do desenho do padrão a ser representado no disco, isto é,
desenhar os setores/trilhas que formam um padrão incremental ou um padrão absoluto. Um
computador pessoal munido de algum software gráfico auxilia bastante na criação de padrões
precisos e alinhados, além de oferecer certa flexibilidade na modificação de características desses
padrões (ex. número de setores em disco incremental). Um exemplo deste tipo de auxílio é o
programa, desenvolvido em MATLAB, presente no Anexo III. Tal programa gera um disco
incremental com o número de pares de setores translúcido-opaco definido na variável Nlinhas. As
linhas aparecem na cor preta e os espaçamentos na cor branca, como ilustrado na Figura 4.9 com
Nlinhas = 36.
1% 1% 1%
1% 1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%

1% 1%

1% 1%

1% 1%

1% 1%

1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1%
1% 1% 1%
Figura 4.9 - Exemplo de disco incremental obtido com
1% 1% 1% programa em MATLAB, Nlinhas = 36.

60
A segunda etapa consiste em reproduzir o desenho do padrão em uma folha de papel
branco. Isso é facilmente conseguido através da impressão do desenho por uma impressora
comum. Um detalhe importante a ser observado é o diâmetro do padrão impresso, que deve ser
compatível com modelo didático a ser construído. Um padrão impresso com 12 cm de diâmetro é
ideal quando se utilizam CD´s transparentes para montar o disco. Esses CD´s serão discutidos
mais adiante.
Na terceira etapa, deseja-se obter um padrão com setores opacos e espaçamentos
translúcidos. Para conseguir isso, é possível xerocopiar o padrão impresso em papel sobre uma
transparência. Assim, o padrão fica desenhado sobre a transparência, onde as áreas que eram da
cor preta passam a ser opacas e as áreas que eram brancas tornam-se translúcidas. A
transparência é recortada no formato do disco e é feito um furo central, que no caso do uso de
CD´s tem diâmetro de 1,5 cm.
A última etapa é a colocação da transparência recortada em um sistema rígido, o qual
possibilitará o movimento de rotação. Esse sistema rígido pode ser um único disco translúcido,
fino e rígido, onde a transparência é colada sobre ele. Para uma maior flexibilidade, é mais
conveniente posicionar a transparência entre dois discos translúcidos, finos e rígidos, que podem
ser unidos pelo furo central, evitando o uso de cola. Em ambos os casos, há uma dificuldade na
obtenção de discos com as características mencionadas, logo o uso de CD´s transparentes é
justificado. Esses CD´s são facilmente obtidos, estando presentes em todos os tubos de CD´s
virgens disponíveis comercialmente. A Figura 4.10 ilustra um resumo de todas as etapas
descritas.

Criação do Impressão do Xerocópia do padrão Fixação da transparência


padrão com padrão em sobre uma transparência recortada utilizando CD´s
auxílio de um PC papel branco e recorte adequado transparentes

Figura 4.10 - Exemplo de técnica para construção de um disco de encoder óptico para fins
didáticos empregando materiais de baixo custo.

61
5. Erros e Testes de Encoders Ópticos

Este capítulo traz estudos sobre erros e testes de encoders ópticos, enfocando os
incrementais rotativos. Começa com a discussão de termos e erros associados a esse tipo de
encoder e sua montagem. Mostra o efeito de alguns fatores na amplitude do sinal de saída e
termina descrevendo uma técnica para a realização de testes de precisão.

5.1 Erros Associados a Encoders Ópticos Incrementais Rotativos

Antes de se iniciar a abordagem sobre os erros associados a encoders ópticos incrementais


rotativos, convém diferenciar os termos resolução, precisão e repetibilidade. Como (GORDON,
acesso em 2007) afirma, esses três termos muitas vezes são confundidos, chegando até mesmo a
serem utilizados como sinônimos. Ele faz as seguintes definições:
“A resolução é uma medida de quantos pulsos por unidade de distância o encoder gera, ou,
inversamente, o tamanho do passo medido. Em encoders rotativos, a resolução é expressa em
unidades de ângulo (graus-minutos-segundos, graus decimais, grados, ou radianos) ou em
número de pulsos por revolução (PPR, ou pulsos/rev). Geralmente, quando um número binário de
pulsos por revolução é desejado, o termo bit é usado para indicar a resolução da maior potência
de 2; por exemplo, um encoder de 16 bits gera 216 = 65.536 pulsos/rev. A resolução é o
parâmetro mais básico de um encoder; é impossível especificar um encoder sem definir sua
resolução.
A precisão é uma medida de onde o encoder diz que ele está versus onde ele realmente
está, ou de qual é a contagem comparada com o que ela deveria ser. É quase sempre expressa em
unidades de ângulo, embora alguns componentes de erro podem, às vezes, serem expressos em
graus elétricos, sendo necessário converter para unidades angulares antes de somá-los com outras
fontes. O uso do termo erro é quase sempre uma indicação de que a precisão do encoder está
sendo discutida. Ambos a precisão e o erro expressam a diferença entre a posição indicada e a
posição real, mas com conotação ligeiramente diferente: a precisão é quão perto a leitura indicada
está da posição real, enquanto que o erro é quão longe a leitura indicada está da posição real.
Assim, uma precisão maior é melhor, mas um erro maior não.

62
Enquanto a resolução do encoder é permanentemente fixa desde a fabricação do disco, os
erros do encoder podem variar em função de fatores ambientais, como a temperatura, carga no
eixo, e condições de serviço. Isso não significa que o número de pulsos por revolução é alterado.
Isso ocorreria somente como resultado de um dano severo ou contaminação de seus
componentes, tais como o disco ou o rolamento. Resolução e precisão não estão diretamente
relacionados. Em encoders de alta performance, o erro pode chegar a muitos pulsos, ou pode ser
uma pequena fração de um único pulso, dependendo das necessidades da aplicação.
A repetibilidade é uma medida de qual é a leitura neste instante, comparada com o que ela
era da última vez, para o movimento na mesma direção. Dependendo da aplicação, pode ser
importante distinguir entre repetibilidade de longo período e de curto período. Ela é expressa em
unidades de ângulo, assim como a precisão. É necessário entender a aplicação para saber o quê
especificar. Caso se deseje controlar a trajetória de uma aeronave, por exemplo, a precisão será
crítica, mas caso se deseje ensinar a um robô tarefas repetitivas, a repetibilidade pode ser mais
importante do que a precisão”.
De acordo com (ELLIN, acesso em 2007), para a saída de um sistema com encoder óptico
incremental rotativo, como ilustrado na Figura 5.1, refletir o movimento real do componente, são
necessários os seguintes pré-requisitos:

1) Cada parte do sistema deve girar em seu rolamento sem deslocamento radial do eixo de
rotação, isto é, sem movimentação lateral;
2) O sistema de eixo conectando o componente de interesse ao encoder deveria ser rígido à
torção;
3) O acoplamento deveria garantir que o movimento angular do encoder girando em seu
rolamento fosse o mesmo que o do componente de interesse girando em seu próprio sistema de
rolamento, isto é, uma velocidade de junta constante e precisa é exigida;
4) O espaçamento dos setores/linhas ao longo do disco do encoder deveria ser uniforme e o
dispositivo de leitura deveria interpolar entre eles de modo linear;
5) O disco (escala) do encoder deveria ser verdadeiramente circular com o eixo de rotação
passando perpendicularmente através de seu centro;
6) O dispositivo de leitura deveria ler a escala sem paralaxe ou outro erro geométrico e ser
rigidamente montado na estrutura não rotativa do encoder.

63
Componente
Dispositivo de interesse
de leitura Rolamento
do encoder
Rolamento do
componente Rolamento do
Acoplamento
componente

Disco do
encoder Eixo do Eixo do
encoder componente

Figura 5.1 - Sistema genérico com encoder. (ELLIN, acesso em 2007).

Se algum dos pré-requisitos listados não for cumprido, haverá diferenças entre a posição
angular do componente de interesse e aquela indicada pelo encoder. Por meio da investigação de
cada uma dessas potenciais fontes de erro, é possível determinar suas contribuições individuais e,
conseqüentemente, obter o erro total associado ao sistema. Ainda em (ELLIN, acesso em 2007),
pode-se encontrar análises nesse sentido. Parte delas serão levantadas a seguir.
Efeito de desvios em rolamentos:
O termo desvio descreve uma variedade de atributos que resultam num deslocamento radial
(ou translação lateral) do eixo de rotação do encoder e/ou do componente, provocados em sua
maioria por deficiências nos rolamentos. Inclui jogo e harmônicas (ex. imperfeições das
esferas/roletes), mas não excentricidade. A magnitude do deslocamento radial de um eixo girando
em rolamentos de esferas/roletes é afetado pelo projeto e ajuste desse sistema de rolamentos, mas
é improvável que seja menor do que ±1 µm. Como o sistema do encoder pode ler a posição de
sua escala rotativa com pelo menos um décimo desse valor, pode ser visto que os erros causados
por desvios em rolamentos podem se sobrepor àqueles causados pelo restante de um sistema bem
projetado. A relação entre o deslocamento radial, a repetibilidade e a posição angular dependerá:
- das dimensões relativas do curso interno e externo do rolamento (onde se movimentam as
esferas/roletes);
- do número e diâmetro das esferas/roletes;
- do ajuste do sistema de rolamentos.
Para sistemas de alta precisão, é preferível o uso de rolamentos a ar. Os deslocamentos
radiais podem ser reduzidos a sub-microns pela correta seleção da rigidez radial do rolamento.

64
Efeito de erros de acoplamento:
A Figura 5.1 mostra um sistema com um encoder rotativo com seu próprio rolamento
conectado ao componente de interesse, através de um acoplamento. Isso pode ser uma vantagem,
pois somente os desvios no rolamento do encoder irão afetar a precisão da medição angular.
Entretanto, essa vantagem deve ser considerada com cuidado, já que desvios nos rolamentos
principais irão afetar a precisão de posicionamento, se o sistema é projetado para retornar as
coordenadas polares de um ponto no componente de interesse.
O acoplamento por si só pode ter um impacto significativo na precisão do sistema,
apresentando problemas como:
- Folgas: qualquer folga irá introduzir diferenças na posição angular indicada, considerando
a direção de rotação, e tem o impacto mais significativo na repetibilidade do sistema.
- Rigidez torsional: o acoplamento pode não ser tão rígido quanto o eixo que ele conecta,
podendo, então, ser afetado pela vibração/ressonância do sistema. Erros dinâmicos acabam sendo
induzidos, resultando em problemas de performance.
- Erros angulares: a maioria dos acoplamentos pode, sob certas condições de alinhamento,
introduzir erros angulares entre o eixo motor e o eixo movido.
Efeito da distorção e excentricidade do disco/escala:
Caso seja necessário se obter uma medição angular precisa, uma escala com graduação
linear deve ser posicionada a uma distância adequada do eixo de rotação. Variações no raio,
como a causada pela excentricidade de uma escala perfeitamente circular, podem gerar erros que
variam uma vez por revolução. Estes se combinam com os outros erros que variam duas ou mais
vezes por revolução, os quais são resultado da distorção da escala.

Ângulo de
Azimute zero fase Ф1
nominal

Centro de
rotação
r0

Excentricidade a1

Centro da escala

Figura 5.2 - Excentricidade. (ELLIN, acesso em 2007).

65
Considerando uma escala perfeitamente circular de raio r0, ao invés de montá-la para que
gire sobre sua linha de centro nominal, ela é montada para girar sobre um outro ponto a uma
distância a1 da nominal e a um ângulo de fase Ф1, conforme esquematizado na Figura 5.2,
também traduzida de (ELLIN, acesso em 2007). A um ângulo azimute arbitrário θ1, a distância do
centro de rotação à periferia da escala R0 será dada por

R0 = r0 − a1 cos(θ − φ1 ) . (5.1)

O raio verdadeiro irá, portanto, variar de maneira senoidal uma vez por revolução, com
uma amplitude igual à excentricidade. Para adicionar os efeitos da distorção de escala, a forma
global do disco pode ser considerada como a soma de uma série de ondas senoidais de diferentes
freqüências n, fases Фn e amplitudes an, tal que o raio da escala a um ângulo azimute θ é dado por

R0 = r0 − a1 cos(θ − φ1 ) − a2 cos(2θ − φ2 ) − a3 cos(3θ − φ3 ) − ... − a n cos(nθ − φn ) . (5.2)

Pode ser mostrado que o máximo erro circunferencial En induzido por uma distorção de
amplitude an variando de maneira senoidal, com ciclo de n vezes por revolução é dado por

an
± En = . (5.3)
n

Como uma verificação simples, uma excentricidade (isto é n = 1) de 1 µm induzirá um erro


linear senoidal na circunferência de ± 1 µm.
Assim, pode ser notado que distorções de ordens maiores na escala terão um efeito
progressivamente cada vez menor na precisão da escala. Nota-se também que as menores
harmônicas terão impacto significativo. Felizmente, erros induzidos por excentricidade e
distorção são controlados por meio de técnicas de compensação, sendo a mais eficaz a utilização
de múltiplos dispositivos de leitura.
Efeito da inclinação do disco/escala:
Esta é a condição onde a escala do encoder está montada concentricamente com o
componente de interesse, mas tem seu eixo geométrico inclinado em relação ao eixo de rotação.

66
Disco/escala
do encoder

Ângulo de
inclinação

Figura 5.3 - Inclinação do disco/escala. (ELLIN, acesso em 2007).

A Figura 5.3, novamente traduzida de (ELLIN, acesso em 2007), ilustra essa condição.
Vista de lado, a cada rotação, seria possível observar o movimento senoidal axial na periferia da
escala do encoder. A inclinação promove três mecanismos de erro distintos. O primeiro está
associado à distância e ao ângulo relativo entre a periferia da escala e o dispositivo de leitura fixo
axialmente. O segundo está associado à forma elíptica que a escala assume quando vista de
frente, levando a erros que variam duas vezes por revolução. O terceiro mecanismo só é
pertinente quando a escala é fabricada com graduações axiais marginalmente oblíquas (fora de
esquadro). Todos estes efeitos da inclinação também podem ser superados por meio de técnicas
de compensação, como o uso de dois ou mais dispositivos de leitura diametralmente opostos.
Efeito de erros induzidos por dispositivos de leitura:
Até agora, procurou-se concentrar na escala do encoder e em seus mecanismos de erro, mas
a escala é somente parte do encoder. O dispositivo de leitura também contribui para o erro total.
Os erros induzidos por dispositivos de leitura mais significativos são:
- Erro de sub-divisão: surge da não linearidade na interpolação, a qual é requerida nos casos
em que se deseja aumentar a resolução do encoder. O erro de sub-divisão é afetado pelo
alinhamento, ajuste e limpeza da escala, por isso é importante manter o encoder bem abrigado e o
dispositivo de leitura bem alinhado.
- Paralaxe: a distância entre a escala e o dispositivo de leitura pode mudar devido, por
exemplo, à excentricidade do disco ou à variação da temperatura. Logo, erros serão induzidos,
exceto se o dispositivo de leitura estiver corretamente alinhado com a linha de centro da escala
circular.
- Estabilidade da montagem: este pode parecer óbvio, mas a montagem rígida e segura do
dispositivo de leitura e da marca de referência é vital para medições angulares repetidas e
precisas.

67
5.2 Testes de Encoders Ópticos Incrementais Rotativos

Em (MATSUZOE et al, 2001), encontra-se uma análise que verifica a influência de três
fatores na amplitude do sinal gerado em encoders ópticos incrementais rotativos. Os fatores são:

1) a distância entre o fotodetector (dispositivo de leitura) e o disco graduado (escala);


2) a razão entre a largura da área ativa do fotodetector e o espaçamento das graduações do
disco;
3) a concentricidade entre o fotodetector e o disco graduado.

Variando certos parâmetros (relacionados aos três fatores), a técnica e o sistema utilizados
geram resultados analíticos, os quais são comparados com os resultados obtidos em um encoder
real com parâmetros idênticos. Confirmando-se que os resultados analíticos são muito próximos
dos resultados reais, é possível testar um encoder em relação a um parâmetro definido, já que sua
resposta deve seguir a resposta analítica. Em outras palavras, o sinal senoidal gerado pelo
fotodetector do encoder deve ser comparado com o sinal previsto analiticamente.
Primeiramente, (MATSUZOE et al, 2001) apresenta o princípio de funcionamento do
encoder óptico incremental rotativo, representado na Figura 5.4. A luz, a partir do LED, atravessa
o disco pelo espaçamento entre as áreas opacas, isto é, pelas áreas translúcidas, e é detectada pela
área ativa do fotodetector.

Áreas
opacas

L Graduações

LED

Fotodetector
Eixo de rotação
Disco
graduado
L: comprimento

Figura 5.4 - Princípio de um encoder óptico incremental rotativo. (MATSUZOE et al, 2001).

68
Fotodetector
Área ativa Áreas opacas
Comprimento
da onda

Sinal de saída
(a) Coberta por áreas opacas (c) (c)

Amplitude
(b) (b)
(b) Semicoberta por áreas opacas
(a) (a)
Offset

(c) Detecta a luz completamente Ângulo de rotação do disco

Figura 5.5 - Relação fotodetector-graduações e amplitude do sinal de saída do fotodetector.


(MATSUZOE et al, 2001).

A relação entre a rotação do disco graduado e a área ativa do fotodetector é mostrada na


Figura 5.5. Ao girar o disco, pode-se ver que a amplitude do sinal de saída do fotodetector varia
de um mínimo (a) até um máximo (c), tomando a forma de uma onda triangular. Esta forma de
onda triangular é teórica, já que o sinal de saída real do fotodetector fica sujeito a distorções e
atenuações de amplitude causadas pelos três fatores mencionados anteriormente.
O sistema implementado em (MATSUZOE et al, 2001) para detectar a intensidade de luz
que atravessa o disco graduado, é esquematizado na Figura 5.6. O sistema é composto por um
LED, um disco graduado, uma lente, uma câmera CCD, um processador de imagem e um
computador pessoal. A luz proveniente do LED atravessa o disco graduado pelas áreas
translúcidas e é detectada pela câmera CCD através da lente.

Lente objetiva L

Unidade de
processamento
de imagem
Câmera
CCD
LED

PC Posição de formação de
imagem da lente objetiva

Disco graduado

L: comprimento

Figura 5.6 - Sistema implementado para a realização da análise. (MATSUZOE et al, 2001).

69
g(X0,Y0) g(a,b) Modelo do fotodetector

Direção radial
g(c,d)

x
Direção de rotação

Figura 5.7 - Imagem da intensidade de luz a uma posição L = 0,1 mm. (MATSUZOE et al, 2001).

A Figura 5.7 apresenta a imagem obtida pelo sistema. A imagem indica a intensidade de luz
em uma posição onde L = 0,1 mm. As áreas escuras são aquelas cobertas pelas áreas opacas do
disco, enquanto que as áreas claras são aquelas iluminadas. O modelo do fotodetector representa
a área ativa do fotodetector que está sendo iluminada. Ignorando o efeito da comunicação cruzada
entre cada área ativa do fotodetector e possíveis efeitos de suas áreas não ativas, o sinal de saída
do fotodetector será proporcional às áreas ativas iluminadas. Em outras palavras, o sinal de saída
do fotodetector é computado pela integral do modelo do fotodetector na imagem, ou seja,

In = ∫∫ g ( x, y ) . (5.4)

Aqui, g(x,y) é a imagem presente na Figura 5.7 e In é o valor da integral calculada pelas
coordenadas de g(a,b) e g(c,d). Assim, quando o disco graduado gira, o modelo do fotodetector
se move na direção da seta maior, mostrada na Figura 5.7, baseado no movimento relativo entre o
disco e o fotodetector. O sinal de saída do fotodetector é determinado repetindo este cálculo para
cada movimento de giro do disco, mais especificamente, toda vez que o modelo do fotodetector
se mover 1 pixel na direção indicada pela seta. A Figura 5.8 mostra o resultado analítico obtido
empregando esta técnica. O eixo vertical indica a amplitude normalizada, e o eixo horizontal
indica o movimento do modelo do fotodetector em pixels. O resultado analítico é um sinal de
saída senoidal (não triangular), incluindo o efeito da difração e dispersão da luz em direção
oblíqua, porque a imagem é baseada na intensidade de luz a uma posição onde L = 0,1 mm.

70
Amplitude normalizada
Movimento do modelo do fotodetector (pixels)

Figura 5.8 - Resultado analítico do sinal de saída do modelo do fotodetector. (MATSUZOE et


al, 2001).

Com a técnica e o sistema apresentados, (MATSUZOE et al, 2001) passa a discutir a


influência no sinal de saída dos três fatores levantados no início, começando pela distância entre
o fotodetector e o disco graduado. Alguns de seus resultados serão expostos a seguir.
Influência da distância entre o fotodetector e o disco graduado:
Esta distância é o comprimento L indicado nas Figuras 5.4 e 5.6. Foram obtidas imagens
com L = 0,0 mm, L = 0,1 mm, L = 0,2 mm e L = 0,3 mm, as quais geraram o resultado analítico
do sinal de saída. Tais imagens e o resultado analítico podem ser observados na Figura 5.9 (a) e
(b), respectivamente. Quando L = 0,0 mm, as cristas e vales do sinal de saída são mais agudos do
que quando L = 0,3 mm. Isso se deve à menor influência da difração e da direção oblíqua da luz
vinda do LED, quando L fica menor. O eixo vertical da Figura 5.9 (b) foi normalizado pela
amplitude do caso onde L = 0,0 mm. A amplitude cai com o aumento de L, pois o fotodetector
(modelo) fica cada vez mais longe da fonte de luz, no caso o LED, que permanece fixo.
Amplitude normalizada

L = 0,0 mm L = 0,1 mm L = 0,2 mm L = 0,3 mm

Movimento do modelo do fotodetector (pixels)


(a) (b)
Figura 5.9 - Influência da distância entre o fotodetector e o disco graduado. (a) Imagens obtidas.
(b) Resultado analítico do sinal de saída. (MATSUZOE et al, 2001).

71
Amplitude normalizada
Movimento relativo entre o fotodetector e o disco (mm)

Figura 5.10 - Influência da distância entre o fotodetector e o disco graduado. Resultado das
medições do sinal de saída do fotodetector em um encoder real. (MATSUZOE et al, 2001).

Para comparar com o resultado analítico, foram realizadas medições da amplitude do sinal
de saída do fotodetector de um encoder real, para os mesmos L’s. O resultado destas medições,
obtidas por (MATSUZOE et al, 2001), é mostrado na Figura 5.10. O eixo vertical também está
normalizado para o caso onde L = 0,0 mm. Pela simples comparação das Figuras 5.9 (b) e 5.10,
se vê que os resultados analíticos são muito próximos dos resultados reais medidos.
Influência da razão entre a largura da área ativa do fotodetector e o espaçamento das
graduações do disco:
Esta razão é referida como duty, por (MATSUZOE et al, 2001). Neste caso, foram obtidas
imagens com duty de 100, 70 e 40%, ambas para o mesmo valor de L = 0,2 mm. A partir dessas
imagens também foi gerado o resultado analítico do sinal de saída. A Figura 5.11 exibe essas
imagens e o resultado analítico. O eixo vertical da Figura 5.11 (b) está normalizado para um duty

Modelo do
Amplitude normalizada

fotodetector

Movimento do modelo do fotodetector (pixels)

(a) (b)

Figura 5.11 - Influência da razão entre a largura da área ativa do fotodetector e o espaçamento
das graduações do disco. (a) Imagens obtidas. (b) Resultado analítico do sinal de saída.
(MATSUZOE et al, 2001).

72
Amplitude normalizada
Movimento relativo entre o fotodetector e o disco (mm)

Figura 5.12 - Influência da razão entre a largura da área ativa do fotodetector e o espaçamento
das graduações do disco. Resultado das medições do sinal de saída do fotodetector em um
encoder real. (MATSUZOE et al, 2001).

de 100% com L = 0,0 mm. A influência da difração e da direção oblíqua da luz vinda do LED é
diminuída, quando a largura da área ativa é menor do que o espaçamento das graduações do
disco. Por exemplo, com base na Figura 5.11 (b), a amplitude do sinal de saída aumenta de 66%
(83% - 17% = 66%) para 89% (94% - 5% = 89%), com a redução do duty de 100 para 40%.
Novamente, para comparar com o resultado analítico, (MATSUZOE et al, 2001) realizou
medições em fotodetectores de encoders reais, preparados com duty de 100 e 70%. O duty de
40% não foi medido/implementado por questões de custo. A Figura 5.12 mostra o resultado
destas medições. O eixo vertical está normalizado para um duty de 100% com L = 0,0 mm. A
comparação das Figuras 5.11 (b) e 5.12, nos casos onde o duty é 100 e 70%, mais uma vez
confirmam que os resultados analíticos são muito próximos dos resultados reais medidos.
Influência da concentricidade entre o fotodetector e o disco graduado:
A posição correta do fotodetector é aquela na qual a linha de centro de cada área ativa,
quando estendida na direção do centro do encoder (SP), o intercepta. Além disso, deve interceptar
o centro de rotação do disco graduado (SS), isto é, SP e SS devem ser coincidentes, como
ilustrado na Figura 5.13 (a). Se a posição relativa de SP e SS for levemente alterada em x e em y,
o fotodetector e o disco graduado inclinam-se um em relação ao outro, e o disco graduado fica
impossibilitado de cobrir completamente a área ativa, como mostra a Figura 5.13 (b). Nela, θ é
calculado por tan-1(x/R), com R >> y sendo o raio do disco graduado.
O resultado analítico foi obtido através de imagens onde θ = 1º e θ = 2,4º, conseguidos com
o desvio entre SP e SS de x = 0.2 mm e x = 0.5 mm, respectivamente. Em ambos os casos, o raio
do disco tinha 12 mm. Um exemplo de imagem captada e o resultado analítico obtido podem ser

73
Linha de centro
da área ativa

Centro de rotação do disco (SS)

“Centro” do fotodetector (SP)

(a) SS e SP coincidentes (b) SS e SP não coincidentes

Figura 5.13 - Posição relativa entre o fotodetector e o disco graduado. (MATSUZOE et al,
2001).

vistos na Figura 5.14. O eixo vertical está normalizado pela amplitude relacionada a θ = 0º.
Segundo (MATSUZOE et al, 2001), a atenuação de amplitude, resultante da variação da
concentricidade, é muito menor do que a atenuação resultante da variação dos dois fatores
anteriormente analisados. Isto pode ser visto pelos resultados analíticos, já que os resultados reais
para a influência do fator concentricidade não foram levantados.

Modelo do
Amplitude normalizada

fotodetector

Movimento do modelo do fotodetector (pixels)

(a) (b)

Figura 5.14 - Influência da concentricidade entre o fotodetector e o disco graduado.


(a) Exemplo de imagem captada. (b) Resultado analítico do sinal de saída. (MATSUZOE et al,
2001).

74
Falando agora especificamente sobre o teste de precisão de um encoder óptico incremental
rotativo, (GORDON, acesso em 2007) menciona que uma maneira de medir sua precisão é
girando o encoder a uma velocidade muito bem controlada, e medindo o intervalo de tempo entre
as sucessivas transições do sinal de saída. Diz que a eletrônica moderna permite que esse
intervalo de tempo seja medido corretamente, mas que é impossível separar variações na
velocidade de erros na posição do encoder, principalmente em encoders de alta resolução. O
aperfeiçoado controle de velocidade, presente nos dias atuais, permite que esta técnica seja
utilizada em encoders de baixa e moderada resolução, porém os de alta resolução necessitam de
uma técnica mais direta para medir os erros de posição.
Ainda em (GORDON, acesso em 2007), é apresentado um equipamento denominado
METRA – Master Encoder for Testing Rotary Accuracy. O dispositivo central do METRA é um
encoder óptico com 20 polegadas de diâmetro, montado sobre um eixo com rolamentos a ar. Uma
técnica de múltiplos dispositivos de leitura elimina, virtualmente, todos os erros. O METRA tem
resolução de 221 pulsos/rev, ou seja, 2.097.152 pulsos/rev. Para medir a precisão, o encoder a ser
testado é acoplado ao METRA com muita perfeição. Ao serem girados juntos, a informação da
posição do METRA é usada para “interrogar” o encoder sob teste, a uma taxa de 2.097.152 vezes
por revolução. Desta maneira, esse teste verifica a localização de cada estado da saída do encoder
sob teste, e também não depende de suposições estatísticas baseadas num conjunto incompleto de
dados.
O princípio do METRA pode ser empregado para testar a precisão de um encoder de menor
resolução via utilização de um encoder de maior resolução (encoder de referência), bastando
acoplar os dois para que girem solidariamente e analisando suas saídas. Por exemplo,
considerando a Figura 5.15, se a cada pulso do encoder de menor resolução (A, B, C, ...)
corresponder sempre 8 pulsos do encoder de referência, pode-se dizer que a precisão do encoder
de menor resolução é mantida dentro de um ângulo equivalente a um pulso do encoder de
referência. Mas, pode-se observar que ao pulso B correspondem, erroneamente, 9 pulsos do
encoder de referência. Assim sendo, neste trecho, a posição real de um componente acoplado ao
encoder de menor resolução é ligeiramente diferente da indicada por este encoder. Em outras
palavras, sua precisão é menor neste trecho.

75
Encoder A B C
de menor
resolução

Encoder
de maior
resolução 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8
(referência)

Figura 5.15 - Teste de precisão de um encoder de menor resolução utilizando um encoder de


referência.

76
6. Materiais e Métodos

Neste capítulo, serão apresentados os detalhes para a construção de um kit de encoder


didático. O mesmo será composto por um encoder óptico incremental rotativo baseado no efeito
moiré e por um sistema informático que efetua a aquisição das posições do encoder em um dado
movimento, com a determinação da respectiva velocidade. Tal sistema informático, desenvolvido
em MATLAB, ainda permitirá a realização de um teste para verificar a precisão do encoder
didático com ajuda de um encoder comercial de maior resolução (encoder de referência).

6.1 Projeto e Montagem da Mecânica do Kit de Encoder

Conforme apresentado na seção 2.4.2 (Encoder Óptico Incremental), existem diversas


maneiras de se utilizar o efeito moiré num encoder incremental para a obtenção de dois sinais
defasados de 90º elétricos. O método escolhido para ser utilizado no encoder didático foi aquele
que gera o efeito moiré a partir da sobreposição de dois discos, um estático e um móvel. Além
disso, a diferença entre o número de pares de setores translúcido-opaco de um disco para o outro
deve ser igual a 1, levando à formação de um batimento. Essa escolha foi feita considerando a
facilidade de se conseguir a defasagem de 90º elétricos por meio do posicionamento de
dispositivos de leitura a 90º angulares entre si. Também foi considerada a menor complexidade
de seu sistema óptico, o que permitiu a utilização de materiais de baixo custo.
Baseando-se no método escolhido e sem considerar o uso de resolvedores, a resolução do
encoder é definida pelo número de pares de setores translúcido-opaco do disco móvel. Optou-se
por um disco móvel com 32 pares de setores translúcido-opaco. Isto se justifica, primeiramente,
pelo fato de terem sido utilizados CD´s transparentes para confecção dos discos, o que
determinou a largura dos setores translúcidos e opacos na periferia do disco. Essa largura deveria
ser compatível com o tamanho dos dispositivos de leitura, garantindo a detecção do sinal
luminoso e a geração de um sinal elétrico com amplitude suficiente. Para tal foram utilizados
LED’s infravermelho (emissor) e fotodiodos (receptor) de 5mm. A opção de um disco móvel com
32 pares de setores translúcido-opaco também é justificada pelo fato de que será utilizado um

77
= 1 LED infravermelho + 1 fotodiodo

90º

(a) (b) (c)

Figura 6.1 - Método escolhido para geração do efeito moiré e obtenção de dois sinais defasados
de 90º elétricos. (a) Disco móvel com 32 pares de setores translúcido-opaco. (b) Disco estático
com 33 pares de setores translúcido-opaco. (c) Sobreposição dos discos.

resolvedor eletrônico (via software) para aumento em 4 vezes da resolução. Deste modo, a
resolução final será de 128 pulsos por revolução, que é um valor na base 2 como na maioria dos
encoders. Também pode ser levantado como justificativa o fato de que o teste de precisão a ser
realizado sobre o encoder didático é feito com a ajuda de um encoder de referência com 1024
PPR, valor exatamente 8 vezes maior do que 32*4 = 128 PPR.
A Figura 6.1 sintetiza o método escolhido para geração do efeito moiré e para a obtenção
de dois sinais defasados eletricamente de 90º.
Tendo em mente a utilização de materiais de baixo custo e a utilização dos equipamentos
disponíveis no laboratório de mecatrônica, o kit de encoder foi mecanicamente projetado e
construído com os seguintes componentes:
- 1 base metálica, Figura 6.2, com eixo central acoplado a um motor CC e a um encoder de
referência com 1024 PPR. Módulo presente no laboratório;
- 1 eixo de plástico, Figura 6.3, obtido a partir do eixo presente em tubos de CD´s virgens;
- 1 suporte confeccionado em papelão, Figura 6.4, para fixar os fotodiodos (receptores);
- 1 suporte confeccionado em papelão, Figura 6.5, para fixar os LED´s infravermelho
(emissores);
- 3 CD´s de plástico transparente, Figura 6.6, presentes em tubos de CD´s virgens;

78
- 1 padrão de disco incremental em transparência, Figura 6.7, com 33 pares de setores
translúcido-opaco. Obtido segundo o método apresentado na seção 4.2 (Técnica para Fins
Didáticos Utilizando Materiais de Baixo Custo);
- 1 padrão de disco incremental em transparência, Figura 6.8, com 32 pares de setores
translúcido-opaco. Obtido segundo o método apresentado na seção 4.2 (Técnica para Fins
Didáticos Utilizando Materiais de Baixo Custo);
- 2 suportes metálicos, Figura 6.9, para fixação na base e fixação/ajuste das cantoneiras;
- 4 cantoneiras metálicas com rasgos, Figura 6.10, para fixação dos suportes em papelão e
do disco estático;
- 4 cantoneiras metálicas com furos, Figura 6.11, para fixação dos suportes em papelão e do
disco estático;
- 2 fotodiodos de 5mm (corpo branco), 2 LED´s infravermelho de 5mm (corpo azul), 2
anéis o’ring de 15mm, 4 pares de arruelas pequenas, 8 parafusos com porca M3, Figura 6.12;
- Fios para conexão, estanho para soldagem, fita isolante e espaguetes para isolação
elétrica. Todos aplicados aos terminais dos LED´s e fotodiodos.

Figura 6.2 - Croqui da base metálica.

Figura 6.3 - Croqui do eixo de plástico.

79
Figura 6.4 - Croqui do suporte de papelão para fixar os fotodiodos.

Figura 6.5 - Croqui do suporte de papelão para fixar os LED´s infravermelho.

Figura 6.6 - Croqui dos CD´s de plástico transparente. Dext = 120mm. D int = 15mm.

Figura 6.7 - Croqui do disco incremental em transparência com 33 pares de setores.

80
Figura 6.8 - Croqui do disco incremental em transparência com 32 pares de setores.

Figura 6.9 - Croqui dos suportes metálicos.

Figura 6.10 - Croqui das cantoneiras metálicas com rasgos.

Figura 6.11 - Croqui das cantoneiras metálicas com furos.

81
Figura 6.12 - Croqui de um conjunto de componentes.

Antes de apresentar como foi feita a montagem do encoder didático a partir de seus
componentes, convém mostrar as etapas de sub-montagem nas quais os fotodiodos e os LED’s
infravermelho foram fixados em seus respectivos suportes.
Os dois fotodiodos tiveram seus terminais dobrados e encaixados no rasgo presente no
suporte, como ilustrado na Figura 6.13. Eles foram posicionados aproximadamente a 90º
angulares um do outro, dados pela distância de 9 setores translúcidos no disco estático, ver Figura
6.1 (b). Voltando à Figura 6.13, os terminais dos fotodiodos foram soldados a fios de conexão na
parte inferior do suporte. Os terminais catodo (K), identificados pelo chanfro no corpo dos
componentes, foram soldados aos fios de cor branco-marrom num fotodiodo e branco-verde no
outro. Os terminais anodo (A) foram soldados, respectivamente para cada fotodiodo, aos fios de
cor marrom e verde.

Figura 6.13 - Croqui da sub-montagem dos fotodiodos no suporte.

82
Figura 6.14 - Croqui da sub-montagem dos LED´s infravermelho no suporte.

A Figura 6.14 mostra que os dois LED´s infravermelho também tiveram seus terminais
dobrados e encaixados no rasgo presente no suporte. Eles foram posicionados aproximadamente a
90º angulares um do outro, buscando o alinhamento com os fotodiodos fixados no outro suporte.
Mais uma vez os terminais foram soldados a fios de conexão na parte inferior do suporte. Os
terminais catodo (K), identificados pelo chanfro no corpo dos componentes, foram soldados aos
fios de cor branco-laranja num LED e branco-azul no outro. Os terminais anodo (A) também
foram soldados, respectivamente para cada LED, aos fios de cor laranja e azul.
A montagem do encoder didático foi realizada seguindo as etapas apresentadas pelos
croquis da Figura 6.15. Tais croquis foram elaborados no AutoCAD 2006, assim como todos os
croquis anteriores. Uma breve descrição sobre cada etapa é dada a seguir:

1 - Retirar os 8 parafusos da base metálica (4 das extremidades e 4 do eixo central). Figura


6.15 (a);

2 - Fixar o eixo de plástico no eixo central da base metálica por meio dos 4 parafusos
retirados anteriormente e com o uso dos 4 pares de arruelas. Fixar os dois suportes metálicos, um
em cada lado da base, por meio dos outros 4 parafusos retirados na etapa 1. Em cada suporte
metálico, fixar uma cantoneira metálica que possui furos usando 2 parafusos e suas porcas.
Figura 6.15 (b);

83
(a) (b)

(c) (d)

(e) (f)

Figura 6.15 - Croquis das etapas de montagem do encoder didático.

84
3 - Posicionar o suporte com os LED´s infravermelho sobre as cantoneiras. Em cada lado,
encaixar uma cantoneira que possui rasgos sobre a cantoneira que já está presa, de modo que o
suporte de papelão fique entre elas. Fazer o alinhamento e apertar os parafusos/porcas. Inserir um
anel o’ring no eixo de plástico, servindo de apoio para a fixação do disco móvel. A posição do
anel deve ser ajustada para que não haja contato entre o disco móvel e o corpo dos LED´s
infravermelho. Figura 6.15 (c);

4 - Posicionar sobre o anel o’ring, nesta seqüência, um CD transparente, o padrão de disco


incremental em transparência de 32 pares de setores translúcido-opaco e outro CD transparente.
Inserir outro anel o’ring no eixo de plástico, comprimindo e alinhando o conjunto que agora
forma o disco móvel. Figura 6.15 (d);

5 - Colocar sobre o disco móvel, nesta seqüência, um CD transparente, o padrão de disco


incremental em transparência de 33 pares de setores translúcido-opaco e o suporte com os
fotodiodos. Em cada suporte metálico, fixar uma cantoneira metálica que possui furos usando 2
parafusos e suas porcas. Em cada cantoneira recém fixada, encaixar (por baixo) uma cantoneira
que possui rasgos, de forma que o CD, a transparência e o suporte de papelão fiquem
comprimidos entre os dois tipos de cantoneira. Antes de dar o aperto final nos parafusos/porcas,
deve-se ajustar este conjunto (disco estático e suporte com fotodiodos) para que não fique em
contato com o disco móvel, mas também não muito afastado, já que a luz emitida pelos LED’s
infravermelho deve ser captada pelos fotodiodos. Ainda antes de apertar os parafusos/porcas,
deve-se alinhar cada fotodiodo com um setor translúcido do disco estático. A distância entre os
dois fotodiodos é dada por 9 setores translúcidos do disco estático, determinando os 90º
angulares. Figura 6.15 (e);

6 - Fazer ajustes finais e alinhamento preciso dos pares emissor-receptor. Os fios de


conexão saem pela parte traseira do encoder. Figura 6.15 (f).

85
6.2 Projeto e Montagem da Eletrônica do Kit de Encoder

Continuando com o método escolhido, que gera o efeito moiré a partir da sobreposição de
dois discos, um estático e um móvel, cuja diferença no número de pares de setores translúcido-
opaco é igual a 1, foi necessário transformar o sinal luminoso dos dispositivos de leitura em sinal
elétrico. O primeiro passo foi a criação do circuito para ligação dos fotodiodos e dos LED’s
infravermelho.
Considerando que a tensão de alimentação era de 5 VCC, que a queda de tensão sobre os
LED´s infravermelho era de 2 V, e que sua corrente não pudesse ultrapassar 20 mA, o resistor a
ser ligado em série com cada LED infravermelho foi dimensionado utilizando a seguinte
equação:

VCC − VLED 5 − 2 3
R= = = = 150 Ω . (6.1)
ILED 0,02 0,02

Foi escolhido um resistor comercial de 180 Ω, determinando uma corrente de:

VCC − VLED 5 − 2 3
ILED = = = = 16,7 mA . (6.2)
R 180 180

O resistor a ser colocado em série com cada fotodiodo teve seu valor estabelecido
experimentalmente, através da montagem do circuito mostrado na Figura 6.16. Observar que o
LED infravermelho é polarizado diretamente, enquanto que o fotodiodo é polarizado
inversamente. A cada valor de resistência testada, começando com as maiores, foi feita a
aproximação do LED infravermelho em relação ao fotodiodo a uma distância de 10mm, distância
esta similar à distância prevista na montagem do encoder. Além disso, foi medida a tensão no
ponto “C” procurando-se obter um valor o mais próximo possível de 5 V. O resistor de 1 kΩ
atendeu bem as exigências, gerando uma tensão aproximada de 4,3 V no ponto “C”.

86
Figura 6.16 - Circuito para ligação de um par emissor-receptor (LED infravermelho-fotodiodo).

O passo seguinte foi transformar o sinal analógico em digital, ou seja, transformar o sinal
de tensão no ponto “C”, que varia de um mínimo (luz bloqueada) a um máximo (luz incidente) e
volta a um mínimo, em uma onda quadrada. Para isso foi utilizado um circuito quadrador, como
apresentado na seção 2.4.2 (Encoder Óptico Incremental). O circuito quadrador escolhido foi o
schmitt trigger, cujas características são trazidas na Figura 6.17, modificada de (SCHMITT
TRIGGER, acesso em 2007). O valor dos resistores segue um compromisso e seu
dimensionamento exato somente via cálculo não era garantia de funcionamento na prática. O
ponto de partida adotado foi a escolha de R3 como o resistor de maior valor, minimizando a
diferença entre v2 e v2’. O valor escolhido para R3 foi de 10 kΩ. Adotando Vref = Vcc = 5 V,
ligando o ponto “C” do circuito anterior a Vin , foram realizados alguns ensaios com diferentes
valores de R1 e R2, ambos menores que 10 kΩ.

Figura 6.17 - Circuito quadrador. (SCHMITT TRIGGER, acesso em 2007).

87
Os ensaios envolveram um circuito para cada par emissor-receptor, já posicionados à 90º
angulares um do outro conforme montagem da seção anterior. Um cenário que se adequou bem à
necessidade de um nível de tensão TTL alto em Vout, quando da transição para nível alto (luz
incidente), foi obtido com R1 = 560 Ω e R2 = 1 kΩ. Com esses resistores, as tensões foram as
seguintes: Vout = GND (nível baixo), Vout = 3,5 V (nível alto, interpretado como 5 V TTL), v2 =
1,9 V (calculado) e v2’ = 1,6 V (calculado). Esse cenário também garantiu a defasagem de 90º
elétricos entre os sinais digitais de cada para emissor-receptor, quando da rotação do eixo do
encoder. A Figura 6.18 ilustra esses sinais.
O circuito completo para ligação e condicionamento dos sinais dos fotodiodos e dos
LED’s infravermelho é mostrado na Figura 6.19. Ele foi montado com os seguintes componentes:
- 2 fotodiodos de 5mm e 2 LED´s infravermelho de 5mm, já posicionados mecanicamente no
encoder didático e com fios soldados a seus terminais;
- 2 resistores de 180 Ω, 2 resistores de 560 Ω, 2 resistores de 10 kΩ e 4 resistores de 1 kΩ;
- 1 circuito integrado LM324 com quatro amplificadores operacionais;
- 1 protoboard, fios e grampos metálicos para conexões.

Vin A

Vin B

Vout A

Vout B

Figura 6.18 - Defasagem de 90º elétricos entre os sinais dos pares emissor-receptor.

Figura 6.19 - Circuito para ligação e condicionamento dos sinais dos fotodiodos e dos LED’s
infravermelho, incluindo a pinagem do CI LM324.

88
DB9 Fêmea DB9 Macho

A A_RES

Encoder de B B_RES Protoboard


Referência 5 VCC 5 VCC

GND GND

Figura 6.20 - Ligação do encoder de referência.

O kit também conta com um encoder de referência (1024 PPR) acoplado ao mesmo eixo do
encoder didático. O encoder de referência faz parte do módulo utilizado como base para o
encoder didático e sua ligação até a protoboard foi realizada com fios e um conector DB9. Essa
ligação é esquematizada na Figura 6.20, onde A_RES significa o canal A do encoder de
referência (canal A de maior RESolução) e B_RES o canal B do encoder de referência.
A alimentação do encoder didático e do encoder de referência, Figura 6.19 e 6.20, bem
como o envio de seus respectivos sinais A e B ao microcontrolador, foram feitas através de um
conector de expansão. A Figura 6.21 traz um esquema do conector de expansão, que será
conectado à placa de desenvolvimento módulo II.

2 18

1 17
Módulo II
Conector de
Expansão

18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
5 Vcc GND 3.3V RD7 RC5 RD6 RC4 RD5 RC3 RD4 RC2 RD3 RB0 RD2 RA2 RD1 RE2 RD0

5 Vcc GND CANAL CANAL A_RES B_RES


B A
Protoboard

Figura 6.21 - Conector de expansão ligando a protoboard ao módulo II.

89
Como dito anteriormente, o tratamento dos sinais provenientes do encoder didático e do
encoder de referência foi feito num microcontrolador, no caso, um PIC16F877A da Microchip.
Este microcontrolador está presente na placa de desenvolvimento módulo II, disponível no
laboratório de mecatrônica. Os recursos do módulo II utilizados no kit de encoder foram:
- PIC16F877A, onde foi gravado o software embarcado que trata os sinais do kit de encoder e os
sinais vindos da interface em MATLAB (porta serial do PC);
- 4 Displays de 7 segmentos, onde é indicada a posição atual (em pulsos) do encoder didático;
- 2 LED´s, onde é indicado o estado atual do encoder didático, isto é, o nível lógico momentâneo
do canal A e do canal B;
- Conector de expansão contendo 15 I/O’s (Figura 6.21), que serve de ligação entre os pinos do
microcontrolador presente no módulo II e a protoboard, onde estão concentrados os sinais dos
encoders;
- Comunicação serial RS232, utilizada para enviar e receber dados entre o microcontrolador e o
PC que está rodando a interface em MATLAB de aquisição de posição ou teste de precisão;
- Entrada de gravação in-circuit, para conexão com a placa ICD2 da LabTools. O ICD2 é uma
interface de gravação de programas no microcontrolador via porta USB do PC;
Algumas informações de hardware do módulo II (MANUAL MOSAICO, 2007) são
apresentadas a seguir:
- O microcontrolador PIC16F877A está configurado para trabalhar numa freqüência de clock de
4 MHz;
- Os quatro displays de 7 segmentos possuem os respectivos segmentos conectados entre si, ou
seja, de maneira a se fazer uma varredura de displays. A conexão com o microcontrolador segue
a Tabela 6.1. As vias de seleção de cada um dos displays seguem a Tabela 6.2.

Tabela 6.1 - Correspondência entre os segmentos dos displays e os terminais do PIC.


PIC Segmento
RD0 A
RD1 B
RD2 C
RD3 D
RD4 E
RD5 F
RD6 G
RD7 DP

90
Tabela 6.2 - Correspondência entre as vias de seleção dos displays e os terminais do PIC.
PIC Display
RB7 DS1 (milhar)
RB6 DS2 (centena)
RB5 DS3 (dezena)
RB4 DS4 (unidade)

- Os dois LED’s utilizados estão ligados, respectivamente, nos terminais RB2 e RB3 do
microcontrolador;
- A placa de desenvolvimento módulo II possui driver interno para adequar os níveis de tensão do
microcontrolador (TTL) aos padrões da RS232 (+12V e –12V). A comunicação é feita com 2
vias, a via de TX está ligada ao terminal RC6 e a via de RX está ligada ao terminal RC7 do
microcontrolador.
De acordo com a Figura 6.21, o conector de expansão permitiu realizar as seguintes
ligações entre os canais dos encoders e os terminais do microcontrolador:
- Encoder didático: Canal A (AA, no soft. emb.) => RC4 Canal B (BB, no soft. emb.) => RC5
- Encoder de referência: Canal A (A_RES) => RA2 Canal B (B_RES) => RE2

6.3 Desenvolvimento do Software Embarcado

O software embarcado no microcontrolador foi desenvolvido em linguagem C, no ambiente


de programação IAR Embedded Workbench. O código completo se encontra no Anexo IV. O
desenvolvimento partiu do pressuposto de que a resolução do encoder didático deveria ser
aumentada em 4 vezes, ou seja, passaria de 32 PPR para 128 PPR. O método utilizado para isso
foi discutido na seção 3.1 (Resolvedores Eletrônicos), cuja representação foi mostrada na Figura
3.3, reproduzida aqui na Figura 6.22. O sistema resolvedor foi implementado via software,
tratando cada combinação dos canais A e B do encoder didático como um estado. Assim, AB
corresponde ao estado 0, AB ao estado 1, AB ao estado 2 e AB ao estado 3. O software está
sempre fazendo a leitura dos canais A e B, determinando assim seu estado atual. Também está
sempre comparando o estado atual com o estado anterior para que, numa eventual mudança,
consiga identificar se necessita incrementar ou decrementar a posição. Desse modo, é possível
estabelecer o sentido de rotação do encoder didático. A Figura 6.23 ilustra o modelo de estados
discutido até agora através de um diagrama SDL.

91
Figura 6.22 - Formas de onda de um sistema resolvedor sem interpolador eletrônico. A
resolução obtida é quatro vezes maior.

ESTADO 3 (AB = 11) ESTADO 1 (AB = 01)

AB Leitura canais A e B AB Leitura canais A e B

canais canais

11 10 00 01 01 10 00 11
Considera Considera
Considera Considera Considera Considera
Considera mudança Considera mudança
diminuição aumento aumento diminuição
manutenção errada de manutenção errada de
de posição de posição de posição de posição
do estado estado do estado estado
(U_D := 0, (U_D := 1, (U_D := 1, (U_D := 0,
(CLK := 0) (CLK := 0, (CLK := 0) (CLK := 0,
CLK := 1) CLK := 1) CLK := 1) CLK := 1)
ERR++) ERR++)

ESTADO 0 ESTADO 2

ESTADO 2 (AB = 10) ESTADO 0 (AB = 00)

AB Leitura canais A e B AB Leitura canais A e B

canais canais

10 11 01 00 01 10 11 00
Considera Considera
Considera Considera Considera Considera Considera Considera
mudança mudança
manutenção aumento diminuição diminuição aumento manutenção
errada de errada de
do estado de posição de posição de posição de posição do estado
estado estado
(CLK := 0) (U_D := 1, (U_D := 0, (U_D := 0, (U_D := 1, (CLK := 0)
(CLK := 0, (CLK := 0,
CLK := 1) CLK := 1) CLK := 1) CLK := 1)
ERR++) ERR++)

ESTADO 1 ESTADO 3

Figura 6.23 – Diagrama SDL para o encoder didático.

92
início

zera sistema;
zera posição absoluta/acumulada;
zera posição atual;
lê estado inicial do encoder;

verifica pedido do usuário vindo da interface;


armazena estado;
lê novo estado atual;
mostra estado atual via LED´s;
trata mudanças de estado de acordo com a
Figura 6.23;

senão (CLK=0) então


se houve mudança de estado (CLK=1)

senão se for a 1ª mudança de estado então


(primeiro CLK)

senão (U_D=0) então transmite posição 000 para a interface;


se posição aumenta (U_D=1)

decrementa posição absoluta/acumulada; incrementa posição absoluta/acumulada;


checa sentido; checa sentido; senão então
se estiver em modo teste
se positivo, decrementa posição atual; se positivo, incrementa posição atual;
se negativo, incrementa posição atual; se negativo, decrementa posição atual;
transmite valor da contagem de pulsos do
encoder de referência no intervalo;
zera esta contagem;

senão se qde pulsos/CLKs for igual a qde então


desejada de pulsos por valor enviado

transmite posição atual para a interface;

senão então
se estiver em modo teste

transmite valor da contagem de pulsos do


encoder de referência no intervalo;
zera esta contagem;

mostra posição atual nos displays de 7 segmentos, ou mostra ‘run’ caso não tenha havido a 1ª mudança de estado;

senão então
se estiver em modo teste

armazena estado do canal A do encoder de referência;


lê novo estado atual do canal A do encoder de referência;
trata mudanças de estado do canal A do encoder de
referência => borda descida => CLK=1 => sem resolvedor;

senão (CLK=0) se houve mudança de est do canal A do então


encoder de referência (CLK=1)

incrementa contagem de pulsos do encoder


de referência no intervalo;

Figura 6.24 - Fluxograma simplificado de funcionamento do software embarcado.

93
A Figura 6.24 apresenta um fluxograma simplificado que resume o funcionamento do
software embarcado. O fluxograma é baseado no código completo que se encontra no Anexo IV.
Como dito, o programa está sempre lendo os canais A e B do encoder didático e
identificando se houve ou não mudanças de estado. O estado atual é indicado através dos dois
LED`s mais à direita presentes no módulo II. A cada mudança de estado do encoder didático, o
programa identifica também o sentido de giro (aumentando ou diminuindo a posição) e mostra a
posição atual através dos quatro displays de 7 segmentos do módulo II. O acendimento dos
displays foi feito por meio de sua multiplexação no tempo. O display mais à esquerda mostra o
sinal de menos, caso a posição atual seja negativa, ou não mostra nada, caso a posição seja
positiva. Os outros três displays mostram a posição atual, em pulsos (mudanças de estado),
partindo de 000. Lembrando que a posição 000 só é mostrada a partir da detecção da primeira
mudança de estado do encoder didático. Antes disso é exibida a mensagem ‘run’.
O programa também está sempre verificando os pedidos do usuário, que são caracteres
recebidos no PIC pela porta serial e que são enviados a partir da interface do usuário em
MATLAB. Alguns caracteres foram escolhidos para representar cada pedido que é feito na
interface. Assim, um caractere é transmitido da interface para o programa com o intuito de
configurar um ou mais parâmetros do programa. A função que verifica os pedidos do usuário é
mostrada a seguir:

void verif_pedido(void)
{
CHAR_RX = recebe();
switch(CHAR_RX)
{
case ('Z'): zera(); break;
case ('E'): info_err(); break;
case ('T'): zera(); EH_TESTE = 1; le_est_atual_RES(); break;
case ('F'): EH_TESTE = 0; break;
case ('1'): PULS_POR_VAL_ENV = 1; break;
case ('2'): PULS_POR_VAL_ENV = 2; break;
case ('4'): PULS_POR_VAL_ENV = 4; break;
default: break;
}
}

O caractere ‘Z’ “zera” os parâmetros do sistema. O caractere ‘E’ faz com que seja enviado
pela porta serial, do PIC para a interface em MATLAB, o valor aproximado de mudanças erradas
de estado. O caractere ‘T’ configura para modo de teste de precisão. O caractere ‘F’ finaliza o
modo teste de precisão.

94
Os caracteres ‘1’, ‘2’ e ‘4’ configuram a variável que define quantos pulsos (mudanças de estado)
devem ocorrer para que um valor de posição atual seja enviado do PIC para a interface em
MATLAB. Quando configurada em ‘1’, a cada pulso do encoder didático é enviada sua posição
atual para a interface em MATLAB. Esse envio da posição atual é feito transmitindo-se, nesta
ordem, o caractere ASCII ‘-’ se for negativa, o caractere ASCII da posição em centenas, o
caractere ASCII da posição em dezenas, o caractere ASCII da posição em unidades e o caractere
ASCII ‘TAB’ como caractere terminador. A interface será configurada para interpretar o
caractere ‘TAB’ como terminador de forma que os caracteres enviados anteriormente sejam
convertidos em um único valor numérico de posição. Quando em modo teste de precisão, além do
programa transmitir a posição atual do encoder didático, ele transmite o valor da contagem de
pulsos do canal A do encoder de referência no intervalo entre duas transmissões de posição do
encoder didático. Por exemplo, se o programa estiver configurado para transmitir a posição a
cada pulso do encoder didático, em modo teste será transmitido também o valor da contagem de
pulsos do canal A do encoder de referência que ocorreram no intervalo entre dois pulsos
consecutivos do encoder didático. Este é o método para teste de precisão que foi apresentado no
final da seção 5.2 (Testes de Encoders Ópticos Incrementais Rotativos). Nele, é utilizado um
encoder de maior resolução (referência) para testar a precisão de um encoder de menor resolução.
O método consiste em verificar se a cada pulso do encoder de menor resolução (intervalo entre
dois pulsos consecutivos) corresponde uma quantidade de pulsos constante do encoder de
referência. A Figura 6.25 reproduz a Figura 5.15 como um exemplo do método utilizado. No
exemplo, o trecho/pulso B do encoder de menor resolução apresenta menor precisão, já que
corresponde a uma quantidade de pulsos do encoder de referência diferente de oito.

Encoder A B C
de menor
resolução

Encoder de
maior
resolução 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8
(referência)

Figura 6.25 - Teste de precisão de um encoder de menor resolução utilizando um encoder de


referência.

95
No caso do encoder didático construído, sua resolução final com resolvedor foi de 128
PPR. O encoder de referência utilizado para realizar o teste de precisão possui 1024 PPR e, como
não teve sua resolução aumentada via resolvedor, não foi necessário utilizar o canal B. A
contagem de pulsos foi realizada somente com a leitura do canal A.
Como já adiantado, o programa também transmite, quando solicitado via interface em
MATLAB (caractere ‘E’), o valor aproximado de mudanças erradas de estado do encoder
didático. Tais mudanças estão destacadas em vermelho na Figura 6.23 e normalmente não
acontecem, a menos que o encoder didático seja girado com extrema velocidade, superando o
tempo de processamento do sistema (limitado pela transmissão serial). Foi elaborado um código
para a transmissão do valor aproximado destes erros, sendo a seqüência ‘1’ ‘2’ ‘3’ ‘TAB’
interpretada na interface como a não existência de mudanças erradas de estado.
A inicialização do processador/microcontrolador foi realizada seguindo as informações
presentes no datasheet do PIC16F877A (DATASHEET MICROCHIP, acesso em 2007). Convém
enfatizar a configuração da transmissão/recepção serial, já que este recurso foi bastante explorado
no projeto. O modo de transmissão utilizado foi o assíncrono no formato de um start bit, oito bits
de dados e um stop bit. A taxa de transmissão/recepção foi configurada em 9600 bps, a mesma a
ser configurada na interface em MATLAB. Os registradores configurados foram o TXSTA, o
RCSTA e SPBRG, conforme mostra a Figura 6.26, modificada de (DATASHEET MICROCHIP,
acesso em 2007).
Configuração dos bits para o TXSTA:

Bit 7 => CSRC => 0 => tanto faz em modo assíncrono


Bit 6 => TX9 => 0 => seleção de transmissão com oito bits de dados
Bit 5 => TXEN => 1 => habilitação de transmissão
Bit 4 => SYNC => 0 => modo assíncrono
Bit 3 => Sem função => 0
Bit 2 => BRGH => 1 => seleção de baud rate de alta velocidade (high speed)
Bit 1 => TRMT => 1 => status do shift register no esvaziamento
Bit 0 => TX9D => 0 => seria o nono bit de dado, mas está configurado para 8 bits
Logo, TXSTA = 0b.0010.0110 = 0x26.

96
Figura 6.26 - Registradores de configuração da transmissão/recepção serial. (DATASHEET
MICROCHIP, acesso em 2007).

Configuração dos bits para o RCSTA:

Bit 7 => SPEN => 1 => habilita porta serial


Bit 6 => RX9 => 0 => seleção de recepção de oito bits de dados
Bit 5 => SREN => 0 => tanto faz em modo assíncrono
Bit 4 => CREN => 1 => habilita recepção contínua
Bit 3 => ADDEN => 0 => tanto faz em modo assíncrono com 8 bits de dados
Bit 2 => FERR => 0 => não considera erros de quadros (framing error)
Bit 1 => OERR => 0 => não considera erros de sobreposição de dados (overrun error)
Bit 0 => RX9D => 0 => seria o nono bit de dado recebido, mas está configurado para 8 bits
Logo, RCSTA = 0b.1001.0000 = 0x90.

Configuração do registrador SPBRG:

Sabendo-se que o microcontrolador está preparado para trabalhar numa freqüência de clock
de 4 MHz, que o bit BRGH foi configurado em 1 (altas velocidades) e que a taxa desejada é de
9600 bps, pelas indicações da Figura 6.26, o valor decimal de SPBRG deve ser igual a 25.
Logo, SPBRG = 25 = 0x19.

97
6.4 Desenvolvimento da Interface com o Usuário

A interface com o usuário foi desenvolvida em MATLAB, utilizando um recurso não muito
conhecido denominado GUIDE. O GUIDE (Graphical User Interface Development Environment
- Ambiente de Desenvolvimento de Interface Gráfica do Usuário) contém um conjunto de
ferramentas para criação de interfaces gráficas do usuário (GUI’s), sendo muito semelhante aos
ambientes visuais de programação como o Visual Basic e o Visual C++. Tais ferramentas
simplificam o processo de desenvolver e construir GUI’s. Utilizando o GUIDE do MATLAB é
possível:
- Fazer o layout da GUI: Através do GUIDE Layout Editor, é possível fazer o layout
facilmente clicando e arrastando componentes GUI como painéis, botões, textos e menus para a
área de layout. O resultado é salvo com a extensão “.fig”.
- Programar a GUI: O GUIDE gera automaticamente um arquivo M do MATLAB que
controla como a GUI opera. O arquivo M inicializa a GUI e contém o código de funcionamento
para todas as chamadas (comandos que são executados quando o usuário clica num componente
da GUI). Utilizando o M-file Editor (editor de arquivos M) do MATLAB, é possível adicionar
códigos nas chamadas a fim de obter as funções desejadas.
A interface com o usuário foi desenvolvida para permitir a aquisição das posições do
encoder didático em um dado movimento e para permitir a realização de um teste de precisão
deste encoder com ajuda de um encoder de referência. Em ambos os casos o usuário verificaria os
resultados dos ensaios/experimentos na forma gráfica, com opção de exportar os dados tabelados,
no caso, para o Excel.
Utilizando o GUIDE Layout Editor, foram criadas três telas que compõem a interface do
usuário. As mesmas podem ser vistas na Figura 6.27 (a) (c) (e) em fase de construção, e em (b)
(d) (f) em exemplos de como são utilizadas pelo usuário. Estas três telas têm os
respectivos layouts salvos nos arquivos “encoderGUI128.fig”, “encoderAQUIS128.fig” e
“encoderTESTE128.fig”, os quais originaram os arquivos M “encoderGUI128.m”,
“encoderAQUIS128.m” e “encoderTESTE128.m”. Os códigos dos arquivos M se encontram,
respectivamente, nos Anexos V, VI e VII deste trabalho.

98
(a) (b)

(c) (d)

(e) (f)

Figura 6.27 - Desenvolvimento da interface com o usuário - GUI. (a)(c)(e) Fase de construção.
(b)(d)(f) Exemplos de utilização.

99
As telas associadas aos arquivos “encoderAQUIS128” e “encoderTESTE128”, Figura 6.27
(d) e (f), servem para a visualização e gravação dos dados obtidos. A tela principal, Figura 6.27
(b), é a tela que surge com a execução do arquivo “encoderGUI128.m” no prompt do MATLAB.
É a partir dela que o usuário obtém os dados vindos do kit de encoder. Ela é dividida em duas
partes: aquisição, do lado esquerdo, e teste de precisão, do lado direito. Em ambas o usuário pode
selecionar a quantidade de pulsos por leitura {1, 2, 4} e a quantidade de leituras desejadas {16,
32, 64, 128}. O valor definido na quantidade de pulsos por leitura é o valor que irá configurar, via
porta serial, a variável no microcontrolador PIC que define quantos pulsos (mudanças de estado)
devem ocorrer no encoder didático para que um valor de posição atual seja enviado do PIC para a
interface em MATLAB. O valor definido na quantidade de leituras desejadas configura no
próprio código em MATLAB quantos valores de posição atual, vindos pela serial, devem ser
lidos num determinado ensaio/experimento com o encoder didático.
Feita a seleção da quantidade de pulsos por leitura e da quantidade de leituras desejadas, é
calculado e mostrado o movimento total, em graus, necessário para movimentar o encoder
didático até que a quantidade de leituras desejadas seja atingida, ou seja, em quantos graus o
encoder didático deve ser girado para completar determinado ensaio. Aqui foi considerada a
resolução de 128 PPR, levando a 2,8125º por pulso.
Ainda na tela principal, Figura 6.27 (b), o usuário pode agora clicar no botão “FAZER
AQUISIÇÃO” ou no botão “FAZER TESTE”.
Caso escolha “FAZER AQUISIÇÃO”, será executada uma seqüência de comandos,
resumidos a seguir e que se encontram no arquivo “encoderGUI128.m” (Anexo V):

Inicializa porta serial, tratada como um objeto em MATLAB


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=600; %600 segundos
fopen(s)

Envia, pela serial, a quantidade de pulsos por leitura selecionada (por exemplo 1)
fprintf(s,'1')

Envia, pela serial, pedido de “zeramento” do sistema do encoder didático


fprintf(s,'Z')

100
Enquanto o número de leituras de posição for menor que o número de leituras desejadas
Lê a posição atual via serial
POS=fscanf(s,'%d')

Lê a hora atual do PC e cria vetor com tempos


Cria vetor de posição atual

Envia, pela serial, pedido questionando sobre mudanças erradas de estado


fprintf(s,'E')

Lê, pela serial, o código que indica mudanças erradas de estado


EST_ERR=fscanf(s,'%d')

Libera porta serial


fclose(s)
delete(s)
clear s

Formata o vetor de tempo


Determina o vetor de velocidades
Torna as variáveis globais para poderem ser utilizadas por outros arquivos M
Chama a tela de resultados da aquisição, arquivos “encoderAQUIS128”, Figura 6.27 (d).

Caso o usuário tenha escolhido “FAZER TESTE”, também será executada uma seqüência
de comandos, resumidos a seguir e que se encontram no arquivo “encoderGUI128.m” (Anexo V):

Inicializa porta serial, tratada como um objeto em MATLAB


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=600; %600 segundos
fopen(s)

Envia, pela serial, a quantidade de pulsos por leitura selecionada (por exemplo 1)
fprintf(s,'1')

Envia, pela serial, pedido de modo teste do encoder didático


fprintf(s,'T')

101
Enquanto o número de leituras de posição for menor que o número de leituras desejadas
Lê, via serial, a posição atual e a contagem de pulsos do encoder de referência no intervalo
POS=fscanf(s,'%d')
QDE_PULSOS_INTERV=fscanf(s,'%d')

Lê a hora atual do PC e cria vetor com tempos


Cria vetor de posição atual e vetor de contagem de pulsos do encoder de referência

Envia, pela serial, pedido para finalizar modo teste


fprintf(s,'F')

Envia, pela serial, pedido questionando sobre mudanças erradas de estado


fprintf(s,'E')

Lê, pela serial, o código que indica mudanças erradas de estado


EST_ERR=fscanf(s,'%d')

Libera porta serial


fclose(s)
delete(s)
clear s

Torna as variáveis globais para poderem ser utilizadas por outros arquivos M
Chama a tela de resultados do teste de precisão, arquivos “encoderTESTE128”, Figura 6.27 (f).

Em ambas as opções, “FAZER AQUISIÇÃO” ou “FAZER TESTE”, após clicar no botão,


o usuário deve observar os displays de 7 segmentos do módulo II, que devem mostrar a
mensagem ‘run’. O ensaio deve ser iniciado e, após a leitura da quantidade desejada de leituras, a
interface abrirá automaticamente a tela contendo os resultados, sejam eles de aquisição ou de
teste de precisão.
Falando sobre a tela de resultados da aquisição, Figura 6.27 (d), ela mostra dois gráficos
com a opção de seleção da informação a ser plotada {Posição x Número da leitura, Velocidade x
Número da leitura, Posição x Tempo, Velocidade x Tempo}. A posição é mostrada em pulsos, a
velocidade em pulsos/seg, e o tempo em segundos. A mesma tela indica a quantidade de
mudanças erradas de estado do encoder didático que podem ter ocorrido durante o ensaio.
Normalmente esse valor é sempre zero. Ela também permite exportar os resultados para um

102
arquivo em Excel, clicando no botão “EXPORTAR P/ EXCEL”. Aqui foi utilizado o comando
xlswrite do MATLAB. Os resultados são gravados no arquivo “encoder_aquisicao.xls”, que é
criado para armazenar os dados. O código do arquivo M associado com a tela de resultados da
aquisição está presente no Anexo VI.
Agora falando sobre a tela de resultados do teste de precisão, Figura 6.27 (f), ela também
mostra dois gráficos com a opção de seleção da informação a ser plotada {Posição x Número da
leitura, Qde de pulsos no intervalo x Número da leitura}. A posição é mostrada em pulsos e a
quantidade de pulsos no intervalo é mostrada em pulsos do encoder de referência. A mesma tela
indica a quantidade de mudanças erradas de estado do encoder didático que podem ter ocorrido
durante o ensaio. Ela também permite exportar os resultados para um arquivo em Excel, clicando
no botão “EXPORTAR P/ EXCEL”. Os resultados são gravados no arquivo
“encoder_testeprecisao.xls”, que é criado para armazenar os dados. O código do arquivo M
associado com a tela de resultados do teste de precisão está presente no Anexo VII.

103
6.5 Manual de Experimentos

O kit de encoder didático permite realizar dois tipos de ensaio: aquisição da posição, com a
determinação da velocidade; e teste de precisão, com ajuda de um encoder comercial de maior
resolução (encoder de referência). A realização destes ensaios se inicia com os procedimentos a
seguir, que são comuns para os dois tipos de ensaio.

1 - Conectar um cabo serial entre o módulo II e o PC a ser utilizado como interface.


2 - Conectar um cabo USB entre a placa de gravação ICD2 e o PC, e conectar a placa ICD2 ao
módulo II.
3 - Conectar o cabo de alimentação do módulo II e ligar a fonte em uma tomada 110V.
4 - Ligar o módulo II.
5 - Através do PC, gravar o programa do encoder no PIC utilizando o software MPLAB IDE. O
programa está contido nos arquivos “encoder.c” e “encoder.h”.
6 - Desligar o módulo II.
7 - Desconectar o cabo que ligava a placa ICD2 ao módulo II.
8 - Conectar a protoboard do kit de encoder ao módulo II, através do conector de expansão. Uma
extremidade de conector já esta conectada à protoboard. A outra extremidade deve ser conectada
ao módulo II, encaixando o conector de forma que a faixa vermelha do cabo fique à direita.
9 - Conectar a protoboard do kit de encoder ao encoder de referência (1024 PPR), através do
conector DB9 presente em ambos.
10 - Ligar o módulo II novamente.
11 - No PC, abrir o MATLAB e selecionar o diretório onde estão salvos os arquivos
“encoderGUI128.m”, “encoderGUI128.fig”, “encoderAQUIS128.m”, “encoderAQUIS128.fig”,
“encoderTESTE128.m” e “encoderTESTE128.fig”.
12 - Executar o arquivo “encoderGUI128.m”, entrando com encoderGUI128 no prompt de
comando.
13 - Maximizar a janela, que deverá aparecer como na Figura 6.28.

104
Figura 6.28 - Tela principal da interface com o usuário do kit de encoder didático.

As próximas duas seções apresentam em detalhes cada um dos tipos possíveis de ensaio.

6.5.1 Aquisição da Posição e Determinação da Velocidade

Neste tipo de ensaio, é possível verificar o funcionamento do encoder didático de 128 PPR
através de seu movimento. Durante o movimento, a cada pulso (mudança de estado) do encoder
didático, sua posição atual é incrementada ou decrementada de acordo com o sentido de rotação.
A posição atual começa em 000 e é indicada pelos 4 displays de 7 segmentos do módulo II. Os 2
LED´s mais à direita presentes no módulo II indicam o estado atual do encoder didático, ou seja,
os níveis lógicos momentâneos de seus canais A e B. Ainda durante o movimento do encoder
didático, a interface em MATLAB recebe as leituras de posição atual no tempo, gerando um
histórico de posição e velocidade do encoder didático para o movimento em questão.
Este tipo de ensaio é realizado continuando o procedimento apresentado anteriormente.

105
14 - Do lado esquerdo da tela da Figura 6.28, selecionar a quantidade de pulsos por leitura entre
1, 2 e 4. Este valor configura o kit de encoder para enviar uma leitura de posição atual a cada N
pulsos do encoder didático, sendo N o valor selecionado.
15 - Logo abaixo, selecionar a quantidade de leituras desejadas entre 16, 32, 64 e 128. Este valor
estabelece a quantidade de leituras que o MATLAB irá receber antes de apresentar os resultados,
ou seja, a quantidade de leituras de posição atual que deverão ser feitas durante o movimento do
encoder, caracterizando o ensaio.
16 - Logo abaixo, observar o valor do movimento total em graus. Este valor leva em conta os
dois valores escolhidos nos passos 14 e 15, e indica em quantos graus se deve girar fisicamente o
encoder didático para a conclusão do ensaio.
17 - Logo abaixo, clicar no botão “FAZER AQUISIÇÃO”. Observar a mensagem ‘run’ nos
displays de 7 segmentos. Girar o encoder para qualquer um dos lados. Observar que a primeira
posição atual a ser mostrada nos displays é 000. Continuar movimentando até completar o
movimento total em graus indicado no passo 16. Caso desejado, alternar o sentido de giro durante
o ensaio. Ao término do movimento total, o MATLAB abre automaticamente uma janela com os
resultados da aquisição. A qualquer instante, se ocorrer algum erro no MATLAB, deve-se fechá-
lo e retomar os passos do procedimento a partir do passo 11.
18 - Conferir os resultados do ensaio. A tela de resultados da aquisição traz dois gráficos com
opção de seleção da informação a ser plotada {Posição x Número da leitura, Velocidade x
Número da leitura, Posição x Tempo, Velocidade x Tempo}. A posição é mostrada em pulsos, a
velocidade em pulsos/seg, e o tempo em segundos. A mesma tela indica a quantidade de
mudanças erradas de estado do encoder didático que podem ter ocorrido durante o ensaio.
Normalmente esse valor é sempre zero. Ela também permite exportar os resultados para um
arquivo em Excel, clicando no botão “EXPORTAR P/ EXCEL”. Os resultados são gravados no
arquivo “encoder_aquisicao.xls”, que é criado no diretório corrente para armazenar os dados.
Para retornar à tela principal, clicar em “FECHAR AQUISIÇÃO”.

106
6.5.2 Teste de Precisão Utilizando um Encoder de Referência

Neste tipo de ensaio, é possível verificar a precisão do encoder didático (128 PPR) através
de seu movimento conjunto com o encoder de referência (1024 PPR). Durante o movimento, a
cada pulso do encoder didático, sua posição atual é incrementada ou decrementada de acordo
com o sentido de rotação. A posição atual começa em 000 e é indicada pelos 4 displays de 7
segmentos do módulo II. Os 2 LED´s mais à direita presentes no módulo II indicam o estado
atual do encoder didático, ou seja, os níveis lógicos momentâneos de seus canais A e B. Ainda
durante o movimento do encoder didático, a interface em MATLAB recebe as leituras de suas
posições atuais. Como o encoder de referência também se move junto, a interface em MATLAB
também recebe leituras deste encoder simultaneamente. Neste caso, as leituras representam
quantos pulsos do encoder de referência ocorreram no intervalo entre duas leituras do encoder
didático. Assim, o ensaio gera um histórico de posição do encoder didático e um histórico
mostrando a quantidade de pulsos do encoder de referência que ocorreram em cada intervalo.
Neste último histórico, se a quantidade de pulsos do encoder de referência for igual em todos os
intervalos, pode-se dizer que o encoder didático apresenta precisão dentro de um ângulo
equivalente a um pulso do encoder de referência. Se houver variação na quantidade de pulsos do
encoder de referência nos intervalos, a precisão do encoder didático estará dentro do ângulo
equivalente a essa variação em pulsos do encoder de referência.
Este tipo de ensaio também é realizado continuando o procedimento apresentado no início.

14 - Do lado direito da tela da Figura 6.28, selecionar a quantidade de pulsos por leitura entre 1, 2
e 4. Este valor configura o kit de encoder para enviar uma leitura de posição atual a cada N
pulsos do encoder didático, sendo N o valor selecionado. Junto com cada leitura, também é
enviada a quantidade de pulsos do encoder de referência que ocorreram desde a leitura
imediatamente anterior.
15 - Logo abaixo, selecionar a quantidade de leituras desejadas entre 16, 32, 64 e 128. Este valor
estabelece a quantidade de leituras que o MATLAB irá receber antes de apresentar os resultados,
ou seja, a quantidade de leituras de posição atual que deverão ser feitas durante o movimento do
encoder, caracterizando o ensaio.

107
16 - Logo abaixo, observar o valor do movimento total em graus. Este valor leva em conta os
dois valores escolhidos nos passos 14 e 15, e indica em quantos graus se deve girar fisicamente o
encoder didático para a conclusão do ensaio.
17 - Logo abaixo, clicar no botão “FAZER TESTE”. Observar a mensagem ‘run’ nos displays de
7 segmentos. Girar o encoder lentamente para qualquer um dos lados e manter o mesmo sentido
durante todo o ensaio. Observar que a primeira posição atual a ser mostrada nos displays é 000.
Continuar movimentando até completar o movimento total em graus indicado no passo 16. Ao
término do movimento total, o MATLAB abre automaticamente uma janela com os resultados do
teste de precisão. A qualquer instante, se ocorrer algum erro no MATLAB, deve-se fechá-lo e
retomar os passos do procedimento a partir do passo 11.
18 - Conferir os resultados do ensaio. A tela de resultados do teste de precisão traz dois gráficos
com opção de seleção da informação a ser plotada {Posição x Número da leitura, Qde de pulsos
no intervalo x Número da leitura}. A posição é mostrada em pulsos e a quantidade de pulsos no
intervalo é mostrada em pulsos do encoder de referência [pulsos>RES]. A precisão do encoder
didático é verificada através do gráfico de “Qde de pulsos no intervalo x Número da leitura”.
Quanto mais constante o gráfico, maior é a precisão, isto é, o encoder está realmente mais
próximo de onde ele diz que está. Caso tenha sido selecionada, no passo 14, uma quantidade de
pulsos por leitura igual a 1, o mesmo gráfico deve ser aproximadamente constante e centrado no
valor 8. Isso porque cada leitura feita corresponde a um único pulso do encoder didático (128
PPR) e porque, no intervalo entre dois pulsos seus, ocorrem 8 pulsos do encoder de referência
(1024 PPR), já que este possui resolução 8 vezes maior. Por conseqüência, caso a quantidade de
pulsos por leitura tenha sido selecionada em 2 ou 4, o gráfico deve ser centrado, respectivamente,
em 16 ou 32 pulsos do encoder de referência [pulsos>RES].
A mesma tela indica ainda a quantidade de mudanças erradas de estado do encoder didático
que podem ter ocorrido durante o ensaio. Normalmente esse valor é sempre zero. Ela também
permite exportar os resultados para um arquivo em Excel, clicando no botão “EXPORTAR P/
EXCEL”. Os resultados são gravados no arquivo “encoder_testeprecisao.xls”, que é criado no
diretório corrente para armazenar os dados. Para retornar à tela principal, clicar em “FECHAR
TESTE”.

108
7. Resultados e Discussão

Este capítulo apresenta os resultados da construção do kit de encoder didático, bem como
os resultados de experimentos realizados com ele. Também traz algumas discussões acerca dos
resultados obtidos.

7.1 Construção do Kit de Encoder

O resultado obtido com o projeto e montagem da mecânica do kit (Seção 6.1) é mostrado
na Figura 7.1. Nela, pode-se visualizar o encoder didático que foi construído e montado sobre a
base metálica do módulo que contém um motor CC e o encoder de referência. É interessante
notar a utilização de materiais de baixo custo, como CD´s, transparências e suportes em papelão,
que viabilizaram a execução do projeto. O objetivo principal foi atingido, que era permitir a
captação de dois sinais defasados eletricamente em 90º com o movimento do encoder em torno
de seu eixo. Uma ressalva pode ser feita em relação ao procedimento de montagem mecânica e
ajustes. O procedimento aparenta ser trabalhoso e manual, o que pode ser justificado, em parte,
pela utilização de materiais de baixo custo, mas não oferece grandes dificuldades se realizado
com atenção.

Figura 7.1 - Mecânica do kit de encoder didático construído.

109
Figura 7.2 - Eletrônica do kit de encoder didático construído.

O resultado obtido com o projeto e montagem da eletrônica do kit (Seção 6.2) e com o
desenvolvimento do software embarcado (Seção 6.3) é ilustrado pela Figura 7.2. Nela, é possível
observar a protoboard, onde foi montado o circuito de condicionamento dos sinais vindos dos
LED´s infravermelho e dos fotodiodos presentes no encoder didático. Pode-se ver a ligação do
encoder de referência à protoboard através de um conector DB9. Também é possível enxergar o
conector de expansão ligando a protoboard ao módulo II. No módulo II, está o PIC 16F877A,
onde foi gravado o software embarcado. Nota-se os quatro displays de 7 segmentos, onde é
mostrada a posição atual do encoder didático. Em baixo dos displays, estão os dois LED´s que
indicam o estado atual, e, por fim, nota-se o cabo serial, que é conectado ao PC responsável pela
interface com o usuário. Os objetivos desta etapa foram atingidos, já que toda a eletrônica
envolvida permitiu o funcionamento do kit de encoder. Por se tratar de um projeto didático, pôde-
se utilizar os recursos e facilidades do módulo II. Além do mais, o kit também ficou bem flexível
quanto a mudanças, possibilitando a inclusão de novos circuitos para outras aplicações.
Uma limitação em relação ao software embarcado desenvolvido está ligada ao tempo de
transmissão de dados pela porta serial. Durante o movimento do encoder didático, o
microcontrolador está constantemente enviando dados, via serial, para o PC que está rodando a
interface com o usuário. Esta transmissão (9600bps) é lenta quando comparada com os tempos de
processamento do microcontrolador. Assim, a velocidade de giro do encoder não pode ser muito
elevada, pois poderiam haver, fisicamente, mudanças de estado do encoder, que não seriam

110
detectadas pelo microcontrolador, enquanto ainda está havendo a transmissão de dados anteriores
pela serial. Uma aplicação que não necessitasse da constante transmissão da posição do encoder
via serial não sofreria este tipo de limitação. Convém citar também que, dependendo da posição
de parada do encoder didático (na transição dos sinais), pode haver a transição de estados
alternadamente entre dois estados adjacentes, causando a transmissão alternada de duas posições
adjacentes para interface. Isto só ocorre porque foi definido que uma mudança de estado no
encoder didático é o gatilho para a transmissão da posição, via serial, à interface.
A Figura 7.3 traz o resultado obtido após o desenvolvimento da interface com o usuário
(Seção 6.4) utilizando o recurso GUIDE do MATLAB. Nela, é possível visualizar um PC
executando, em MATLAB, a interface gráfica do usuário (GUI) do kit de encoder. Aqui, o
objetivo também foi atingido, que era construir uma interface intuitiva e de fácil usabilidade,
permitindo ao usuário a realização de ensaios e a verificação dos resultados. O fato de a interface
ter sido desenvolvida no MATLAB exigiu que a mesma fosse executada dentro dele, o que torna
o processamento um pouco mais demorado, já que o MATLAB é um software “pesado” e com
uma infinidade de ferramentas. Este fato não influenciou na leitura dos resultados, apenas na sua
apresentação. Uma outra questão a ser levantada em relação ao desenvolvimento de uma
interface em MATLAB está ligada à quantidade de arquivos. Para cada tela da interface são
necessários dois arquivos, um arquivo “.m” e um arquivo “.fig”. Uma interface com muitas telas
e/ou recursos implicaria em um número exagerado de arquivos, o que não foi o caso da interface
desenvolvida para o kit de encoder. Uma solução poderia ser o desenvolvimento da interface em
um ambiente de programação que gerasse um único arquivo executável (“.exe”), porém o mesmo
seria “fechado” ao usuário. Em outras palavras, uma interface em MATLAB pode ser alterada e
editada mais facilmente, já que seu desenvolvimento e execução ocorrem no mesmo ambiente.

Figura 7.3 - GUI do kit de encoder didático construído.

111
7.2 Experimentos de Aquisição da Posição

Seguindo os procedimentos apresentados na seção 6.5 (Manual de Experimentos) e 6.5.1


(Aquisição da Posição e Determinação da Velocidade), foram realizados alguns ensaios com o kit
de encoder didático.
I - Movimento do encoder no mesmo sentido e com velocidade aproximadamente constante.
Qde de pulsos por leitura: 1
Qde de leituras desejadas: 128
Movimento total: 360º
Os resultados obtidos são apresentados nos itens (a) e (b) da Figura 7.4. Em (a), no gráfico
de cima, pode-se ver os valores de posição do encoder lidos contra o número da leitura. Como a
quantidade de pulsos por leitura foi selecionada em 1 e cada pulso está relacionado com uma
posição, a inclinação da reta vale 1, ou seja, o valor do eixo Y é igual ao valor do eixo X. A reta
parte de zero porque a posição inicial sempre é nula. A reta é estritamente crescente e positiva,
pois, durante o ensaio, o encoder foi girado no mesmo sentido (positivo). Foram obtidas 128
leituras (eixo X), conforme seleção inicial da quantidade de leituras desejadas.

(a) (b)

Figura 7.4 - Resultados do ensaio I. (a) Posição. (b) Velocidade.

112
Ainda na Figura 7.4 (a), agora no gráfico de baixo, é possível observar os valores de
posição lidos contra o tempo. Este gráfico possui forma linear devido ao movimento do encoder
ter sido feito com velocidade quase constante. O ensaio durou cerca de 3,5 segundos e a
inclinação da reta pode ser estimada facilmente em aproximadamente 40 pulsos por segundo.
Este valor corresponde à velocidade de giro do encoder, que foi determinada a cada duas leituras
e pode ser vista na Figura 7.4 (b). As oscilações ocorrem devido aos pequenos intervalos de
tempo que são usados na determinação da velocidade instantânea. No canto inferior direito da
tela, foi indicado que não houve mudanças erradas de estado do encoder didático.

II - Movimento do encoder no mesmo sentido e com velocidade crescente.


Qde de pulsos por leitura: 2
Qde de leituras desejadas: 64
Movimento total: 360º
Os resultados obtidos são apresentados nos itens (a) e (b) da Figura 7.5. Em (a), no gráfico
de cima, pode-se ver os valores de posição do encoder lidos contra o número da leitura. Como a
quantidade de pulsos por leitura foi selecionada em 2 e cada pulso está relacionado com uma
posição, a inclinação da reta vale 2, ou seja, o valor do eixo Y é duas vezes o valor do eixo X. A
reta é estritamente crescente e positiva, pois, durante o ensaio, o encoder foi girado no mesmo
sentido (positivo). Foram obtidas 64 leituras (eixo X), conforme seleção inicial.

(a) (b)

Figura 7.5 - Resultados do ensaio II. (a) Posição. (b) Velocidade.

113
Na mesma Figura 7.5 (a), agora no gráfico de baixo, pode-se visualizar os valores de
posição lidos contra o tempo. Este gráfico possui forma exponencial devido ao movimento do
encoder ter sido feito com velocidade baixa no início e acelerado depois, onde permaneceu em
velocidade constante. O ensaio durou pouco mais de 3 segundos e a velocidade de giro do
encoder, que foi determinada a cada duas leituras, pode ser vista na Figura 7.5 (b). Nela, nota-se
que a velocidade partiu de zero, cresceu, e permaneceu constante próxima a 80 pulsos por
segundo. No canto inferior direito da tela, também foi indicado que não houve mudanças erradas
de estado.

III - Movimento do encoder com inversão de sentido e com velocidade aproximadamente


constante.
Qde de pulsos por leitura: 1
Qde de leituras desejadas: 128
Movimento total: 360º
Os resultados obtidos são apresentados nos itens (a) e (b) da Figura 7.6. Em (a), no gráfico
de cima, pode-se ver os valores de posição do encoder lidos contra o número da leitura. O gráfico
é uma reta que cresce positivamente até a posição 74 e depois decresce. Isso ocorreu porque,
durante o ensaio, o encoder foi girado no sentido positivo até a posição 74, quando então passou a
ser girado no sentido contrário. Foram obtidas 128 leituras (eixo X), conforme seleção inicial.

(a) (b)

Figura 7.6 - Resultados do ensaio III. (a) Posição. (b) Velocidade.

114
Ainda na Figura 7.6 (a), agora no gráfico de baixo, é possível observar os valores de
posição lidos contra o tempo. Este gráfico possui forma linear devido ao movimento do encoder
ter sido feito com velocidade quase constante. O ensaio durou cerca de 3,5 segundos e as
inclinações da reta podem ser estimadas entre 30 e 40 pulsos por segundo. Estes valores
correspondem à velocidade de giro do encoder, que foi determinada a cada duas leituras e pode
ser vista na Figura 7.6 (b). Nela, nota-se que a velocidade partiu de zero, cresceu, permaneceu
entre 30 e 40 pulsos por segundo, passou por zero no instante da inversão de sentido, cresceu
negativamente, e permaneceu entre 30 e 40 pulsos por segundo (sentido contrário). No canto
inferior direito da tela, também foi indicado que não houve mudanças erradas de estado.

7.3 Experimentos de Teste de Precisão

Seguindo os procedimentos apresentados na seção 6.5 (Manual de Experimentos) e 6.5.2


(Teste de Precisão Utilizando um Encoder de Referência), foram realizados alguns ensaios com o
kit de encoder didático.
IV - Movimento do encoder no mesmo sentido e com baixa velocidade
Qde de pulsos por leitura: 1
Qde de leituras desejadas: 16
Movimento total: 45º

(a) (b)
Figura 7.7 - Resultados do ensaio IV. (a) Gráficos. (b) Dados exportados para o excel.

115
Os resultados obtidos são apresentados nos itens (a) e (b) da Figura 7.7. Em (a), no gráfico
de cima, pode-se ver os valores de posição do encoder didático lidos contra o número da leitura.
Como a quantidade de pulsos por leitura foi selecionada em 1 e cada pulso está relacionado com
uma posição, a inclinação da reta vale 1, ou seja, o valor do eixo Y é igual ao valor do eixo X. A
reta parte de zero porque a posição inicial sempre é nula. A reta é estritamente crescente e
positiva, pois, durante o ensaio, o encoder foi girado no mesmo sentido (positivo). Foram obtidas
16 leituras (eixo X), conforme seleção inicial da quantidade de leituras desejadas,
correspondendo a um movimento de 45º, tanto do encoder didático (128 PPR), quanto do encoder
de referência (1024 PPR).
Continuando na Figura 7.7 (a), agora no gráfico de baixo, pode-se observar a quantidade de
pulsos do encoder de referência [pulsos>RES] que ocorreram entre cada leitura de posição do
encoder didático (intervalo entre duas leituras consecutivas). Como esperado, o gráfico se
apresentou aproximadamente constante e centrado em 8, já que a quantidade de pulsos por leitura
foi selecionada em 1 e a resolução do encoder de referência é 8 vezes maior do que a resolução
do encoder didático. A quantidade de pulsos no intervalo relacionada à leitura 0 deve ser
ignorada, já que não existe ainda nenhuma leitura de posição feita, logo não é possível
caracterizar um intervalo. Sendo assim, e com ajuda dos dados exportados para Excel, Figura 7.7
(b), a média dos valores da quantidade de pulsos no intervalo ficou em 7,9 [pulsos>RES], muito
próximo do valor 8 esperado. Analisando melhor os dados, pode-se verificar que, no trecho de
45º ensaiado, a quantidade de pulsos no intervalo esteve entre 4 e 12 [pulsos>RES], portanto 8 ±
4 [pulsos>RES]. Sabendo que 1 [pulso>RES] corresponde a 0,3516º (360º / 1024PPR), pode-se
tirar que a resolução do encoder didático é 8 * 0,3516º = 2,8125º como esperado (360º / 128PPR
= 2,8125º), e que sua precisão é de, no mínimo, ± 4 * 0,3516º ≅ ± 1,4º. No canto inferior direito
da tela, também foi indicado que não houve mudanças erradas de estado.

V - Movimento do encoder no mesmo sentido (negativo) e com baixa velocidade


Qde de pulsos por leitura: 1
Qde de leituras desejadas: 128
Movimento total: 360º
O resultado obtido é mostrado na Figura 7.8.

116
Figura 7.8 - Resultados do ensaio V.

O gráfico de cima da Figura 7.8 é decrescente, mostrando que o encoder didático foi girado
no sentido negativo. Considerando o gráfico de baixo, a análise dos resultados neste caso é
análoga ao ensaio anterior. A única diferença é que o número de leituras realizadas foi de 128,
correspondendo a uma revolução completa do encoder.

VI - Movimento do encoder no mesmo sentido e com baixa velocidade


Qde de pulsos por leitura: 2
Qde de leituras desejadas: 64
Movimento total: 360º
O resultado obtido neste ensaio é mostrado na Figura 7.9. Como a quantidade de pulsos por
leitura foi selecionada em 2, o intervalo entre duas leituras consecutivas conteve 2 pulsos do
encoder didático. Como teoricamente cada pulso do encoder didático está relacionado com 8
pulsos do encoder de referência, os intervalos deveriam apresentar 16 [pulsos>RES]. O gráfico de
baixo da Figura 7.9 mostra que as quantidades de “pulsos>RES” nos intervalos ficaram centrados
em 16, como esperado.

117
Figura 7.9 - Resultados do ensaio VI.

VII - Movimento do encoder no mesmo sentido e com baixa velocidade


Qde de pulsos por leitura: 4
Qde de leituras desejadas: 32
Movimento total: 360º
O resultado obtido neste ensaio é mostrado na Figura 7.10. Novamente, como a quantidade
de pulsos por leitura foi selecionada em 4, o intervalo entre duas leituras consecutivas conteve 4
pulsos do encoder didático. Como teoricamente cada pulso do encoder didático está relacionado
com 8 pulsos do encoder de referência, os intervalos deveriam apresentar 32 [pulsos>RES]. O
gráfico de baixo da Figura 7.10 mostra que as quantidades de “pulsos>RES” nos intervalos
ficaram centrados em 32, como esperado.

Figura 7.10 - Resultados do ensaio VII.

118
8. Conclusões e Sugestões para Próximos Trabalhos

Foi realizado um estudo inicial sobre encoders ópticos baseados no efeito moiré,
apresentando os princípios de funcionamento, discutindo sistemas para aumentar a resolução
(sistemas resolvedores), mostrando as técnicas de fabricação de discos e abordando questões
relacionadas a erros e testes de encoders.
Em seguida, foi desenvolvido um kit de encoder composto por um encoder didático de
baixo custo (128 PPR), um encoder de referência (1024 PPR), uma interface eletrônica com
microcontrolador e uma interface gráfica do usuário em MATLAB. O encoder didático, de custo
estimado em 30 reais, foi desenvolvido utilizando o efeito moiré para gerar a defasagem de 90º
elétricos entre seus canais A e B. Para isso, foram utilizados dois discos, um móvel com 32 pares
de setores translúcido-opaco e outro estático com 33 pares. A diferença de 1 par de setores
translúcido-opaco permitiu a obtenção da defasagem de 90º elétricos por meio do posicionamento
de dispositivos de leitura a 90º angulares. A resolução do encoder obtida fisicamente (32 PPR) foi
ampliada (128 PPR) com a utilização de um resolvedor eletrônico via software, implementado
em um microcontrolador. O microcontrolador também foi utilizado para a transmissão de dados,
via serial, a um PC executando a interface gráfica do usuário (GUI). A GUI criada em MATLAB
permitiu caracterizar o funcionamento do encoder didático através de dois tipos de experimentos:
aquisição da posição e teste de precisão.
Nos experimentos de aquisição da posição, o encoder didático foi movimentado nos dois
sentidos e com velocidades diferentes, fazendo com que os dados de posição fossem lidos e
armazenados em MATLAB, onde foram determinadas as velocidades. Cada experimento teve os
resultados apresentados na forma gráfica, refletindo, coerentemente, o movimento físico imposto
ao encoder didático.
Nos experimentos de teste de precisão, o encoder didático foi movimentado juntamente
com um encoder de referência. Além das leituras da posição do encoder didático, o MATLAB
recebeu as quantidades de pulsos do encoder de referência que ocorreram entre cada duas leituras
do encoder didático. Os resultados dos experimentos também foram apresentados graficamente,
onde foi possível inferir a respeito da precisão do encoder didático, que ficou em ± 1,4º , metade
de sua resolução (360º / 128PPR = 2,8º).

119
Considerando trabalhos futuros, poderiam ser construídos outros tipos de encoders
didáticos com a utilização do efeito moiré em suas diferentes variações, seja utilizando máscaras
ou modificando a disposição física de fotosensores para se obter sinais defasados em 90º elétricos
sem a necessidade de um disco extra. Poderiam ser introduzidos mais fotosensores, por exemplo,
para utilizar o efeito médio do sinal e minimizar a influência de erros mecânicos; e para servir
como leitor da posição zero, com a alteração do padrão incremental do reticulado para isso.
Poderiam ser construídos encoders ópticos lineares, novamente com suas diferentes variações.
Outra sugestão seria a construção de um encoder óptico absoluto, cujo padrão do disco é bem
interessante, embora não utilize o efeito moiré. Neste caso, seria possível o estudo do código de
Gray.
Também poderiam ser construídos encoders com diferentes resoluções, através do aumento
ou diminuição do número de setores dos discos. Aumentos na resolução poderiam ser obtidos
também com a implementação e utilização de resolvedores eletrônicos (rede de resistores e CI´s
comerciais) e de resolvedores ópticos (dispositivos de leitura em diferentes angulações).
Pode ser considerada como uma sugestão de melhoria a confecção de um circuito impresso
em substituição à protoboard e ao módulo II utilizados na interface eletrônica do projeto. O uso
de lógica programável também poderia ser explorada no futuro.
Uma outra sugestão para trabalhos futuros seria a utilização do encoder didático em uma
aplicação, onde seria possível realizar o controle digital do motor CC a ele acoplado. Também
seria interessante realizar a supervisão/monitoramento da posição em tempo real, ou seja,
utilizando ferramentas como o LabView ou o próprio simulink do MATLAB.

120
Referências Bibliográficas

Amidror, Isaac. The Theory of the Moiré Phenomenon. Boston: Kluwer Academic Publishers,
2000, 474p.

Catálogo Heidenhain. Rotary Encoders Catalog. Disponível em: <http://


www.heidenhain.com/?/c:2243;177,Documentation+Portal:846/c:2238;177,Services+and+
Documentation:2243/c:846;177,Brochures%2FCD-ROM%2FDVD:813.html> => 349_529
_26_15078.pdf. Acesso em: 13 mar. 2007.

Catálogo Renishaw. Non-contact Encoder Systems Brochure. Disponível em: <http://www.


renishaw.com/UserFiles/acrobat/UKEnglish/L-9517-0165.pdf>. Acesso em: 13 mar. 2007.

Catálogo Turck. Linear and Rotary Position Products. Disponível em: <http://www.turck-
usa.com/Literature/B1025_Linear_Rotary_Position.pdf>. Acesso em: 13 mar. 2007.

Creath, K., Wyant, J. C. Moiré and Fringe Projection Techniques. In: Malacara, D. Optical Shop
Testing. 2.ed. New York: John Wiley & Sons, Inc., 1992, pp.653-675.

Datasheet Microchip. PIC16F87XA. Disponível em: <http://ww1.microchip.com/downloads/en/


DeviceDoc/39582b.pdf>. Acesso em: 10 abril 2007.

Datasheet RLS - Interpolador RLXA2510. Interpolation factors 1, 2, 5, or 10. Disponível em:


<http://www.rls.si/default.asp?prod=interpolators/RLXA2510dr.pdf>. Acesso em: 13 mar.
2007.

Datasheet RLS - Interpolador RLX40i. Interpolation factors 1, 2, 3, 4, 5, 8, or 10. Disponível em:


<http://www.rls.si/default.asp?prod=interpolators/RLX40iD01.pdf>. Acesso em: 13 mar.
2007.

121
Datasheet RLS - Interpolador RLX100. Interpolation factors 5, 10, or 25. Disponível em:
<http://www.rls.si/default.asp?prod=interpolators/RLX100.pdf>. Acesso em: 13 mar. 2007.

De Sa, A. Principles of Electronic Instrumentation. 2.ed. London: Edward Arnold, 1990, pp.197-
198.

Ellin, A. The Accuracy of Angle Encoders. Disponível em: <http://www.renishaw.com/


UserFiles/acrobat/UKEnglish/EPD-TI-0001.pdf>. Acesso em: 13 mar. 2007.

Elliott, David J. Integrated Circuit Mask Technology. New York: McGraw-Hill, Inc., 1985, 287p.

Gordon, Gerald S. Let´s Talk Accuracy. Disponível em: <http://www.gpi-encoders.com/


Lets_Talk_Accuracy.pdf>. Acesso em: 13 mar. 2007.

Hecht, E. Óptica. 2.ed. Lisboa: Fundação Calouste Gulbenkian, 2002, pp.338-343.

Hoeschele, David F. Analog-to-Digital/Digital-to-Analog Conversion Techniques. New York:


John Wiley & Sons, Inc., 1968, pp.326-354.

Madou, Marc J. Fundamentals of Microfabrication. Boca Raton: CRC Press, 1997, pp.1-44.

Manual Mosaico. Guia do usuário - placa de desenvolvimento - módulo II. 2007, 23p.

Matsuzoe, Y., Tsuji, N. Breadboard system and techniques to optimize the optical system of an
encoder. Optical Engineering, v.40, (2), pp.283-288, 2001.

Pallás-Areny, R., Webster, J. G. Sensors and Signal Conditioning. New York: John Wiley &
Sons, Inc., 1991, pp.1-4, 300-309.

Patel, B., Sutton, A., George, L. Liftoff Process Using Positive Photoresist. Disponível em:
<http://cmos.mirc.gatech.edu/group/projects/liftoff.pdf>. Acesso em: 08 maio 2007.

122
Post, D., Han, B., Ifju, P. High Sensitivity Moiré – Experimental Analysis for Mechanics and
Materials. New York: Springer-Verlag, Inc., 1994, 444p.

Schmitt Trigger. The Schmitt Trigger. Disponível em: <http://hyperphysics.phy-astr.gsu.edu/


hbase/electronic/schmitt.html >. Acesso em: 10 abril 2007.

Woolvet, G. A. Transducers in Digital Systems. London: Peter Peregrinus Ltd., 1977, 193p.

123
Anexo I

% Programa que ilustra o fenomeno do batimento utilizando duas ondas


clear all; close all; clc;
%t=0:0.001:1; % cria um vetor de tempo (desconsiderado)
t=0; % define um instante de tempo qualquer
x=0:0.001:1; % cria um vetor de posicao
%x=0; % define uma posicao qualquer (desconsiderado)

A=1; % define a amplitude das ondas


k1=2*pi*24; % frequencia espacial da onda 1 (2*pi*f)
k2=2*pi*20; % frequencia espacial da onda 2 (2*pi*f)
w1=1; % frequencia temporal da onda 1 (2*pi*f)
w2=1; % frequencia temporal da onda 2 (2*pi*f)

y1=A*cos(k1*x-w1*t); % equacao da onda 1


y2=A*cos(k2*x-w2*t); % equacao da onda 2
y=y1+y2; % equacao resultante da sobreposicao

figure(1) % gera o grafico da onda 1


plot(x,y1,'b')
legend('y1')
axis([0 1 -4 4])

figure(2) % gera o grafico da onda 2


plot(x,y2,'k')
legend('y2')
axis([0 1 -4 4])

figure(3) % gera o grafico da onda resultante


plot(x,y,'r')
legend('y=y1+y2')
axis([0 1 -4 4])

figure(4) % gera o grafico das ondas juntas


plot(x,y1,'b',x,y2,'k',x,y,'r')
legend('y1','y2','y=y1+y2')
axis([0 1 -4 4])

124
Anexo II

% Programa que ilustra o fenomeno do batimento utilizando duas grades de linhas retas
clear all; close all; clc;
n1=352; % define o numero de linhas da grade 1
n2=350; % define o numero de linhas da grade 2
x1=linspace(0,1, n1); % cria n1 pontos (linearmente espaçados) entre 0 e 1
x2=linspace(0,1, n2); % cria n2 pontos (linearmente espaçados) entre 0 e 1

for i=1:n1 % cria n1 linhas retas verticais de amplitude 1


X1(i)=1;
end
for i=1:n2 % cria n2 linhas retas verticais de amplitude 1
X2(i)=1;
end

figure(1) % gera o grafico da sobreposicao das grades


[AX,H1,H2]=plotyy(x1,X1,x2,X2,'stem','stem')
set(H1,'Color','k','Marker','none')
set(H2,'Color','k','Marker','none')
set(AX(1),'yColor','k')
set(AX(2),'yColor','k')

Anexo III

% Programa que auxilia na criação de uma grade circular de linhas radiais


clear all; close all; clc;
Nlinhas=100; % define o numero de linhas radiais da grade
Ntotal=2*Nlinhas; % define o numero de linhas+espaçamentos

for i=1:Ntotal % define a distribuicao de linhas/espaçamentos


x(i)=1;
end

f=figure(1);
h=pie(x); % cria a grade circular de linhas radiais
set(f,'Color','w') % formata as propriedades de cor

for i=1:4:(2*Ntotal) % formata as propriedades de cor


set(h(i),'FaceColor','k')
set(h(i+1),'Color','w')
end

for i=3:4:(2*Ntotal) % formata as propriedades de cor


set(h(i),'FaceColor','w')
set(h(i+1),'Color','w')
end
zoom(1.5) % aumenta a figura da grade

125
Anexo IV
/*
Universidade Estadual de Campinas
Faculdade de Engenharia Mecânica
Curso de Engenharia de Controle e Automação
TG II - Encoder Óptico
2o Semestre de 2007
Professor Orientador: Luiz Otávio Saraiva Ferreira
Aluno: Victor Adriano Turchetti RA: 025366

Arquivo: Encoder.h
Autor: Victor A. Turchetti
Data: 14/11/2007
Versão: 1.0
*/

//*****************************************************************************
/* Função que transmite caractere pela serial */
/* O argumento de entrada é o caractere a ser transmitido */
/* Não tem argumento de saida */
//-----------------------------------------------------------------------------
void transmite(char DADO_TX)
{
while (TXFLAG == 0)
{
};
TXREG = DADO_TX;
}

//*****************************************************************************
/* Função que recebe caractere pela serial */
/* Não tem argumento de entrada, e o argumento de saida é caractere ASCII */
/* recebido ou o número 0 em caso de nenhum caractere recebido */
//-----------------------------------------------------------------------------
char recebe(void)
{
if (RXFLAG == 0)
{ return 0;
}
else
{ return RCREG;
}
}

//*****************************************************************************
/* Função que lê estado atual do encoder */
//-----------------------------------------------------------------------------
void le_est_atual(void)
{
if(AA)
{ if(BB)
{ EST_ATUAL = 3; // Estado atual = 3 => AA=1 e BB=1
}
else
{ EST_ATUAL = 2; // Estado atual = 2 => AA=1 e BB=0
}
}
else
{ if(BB)
{ EST_ATUAL = 1; // Estado atual = 1 => AA=0 e BB=1
}
else
{ EST_ATUAL = 0; // Estado atual = 0 => AA=0 e BB=0
}
}
}

//*****************************************************************************
/* Função que lê estado do canal A do encoder de referência, quando em modo teste */
//-----------------------------------------------------------------------------
void le_est_atual_RES(void)
{
if(A_RES)
{ EST_ATUAL_RES = 1; // Canal A em nível alto, A_RES=1
}
else
{ EST_ATUAL_RES = 0; // Canal A em nível baixo, A_RES=0
}
}

//*****************************************************************************
/* Função que incrementa a posição do encoder em módulo */
//-----------------------------------------------------------------------------
void incrementa(void)
{
POS_UNID = POS_UNID + 1;
if(POS_UNID == 10)
{ POS_UNID = 0; POS_DEZ = POS_DEZ + 1;
if(POS_DEZ == 10)
{ POS_DEZ = 0; POS_CEN = POS_CEN + 1;

126
if(POS_CEN == 10)
{ POS_CEN = 0; POS_ACUM = 0; // Posição é zerada ao passar de 999 em módulo
}
}
}
}

//*****************************************************************************
/* Função que decrementa a posição do encoder em módulo */
//-----------------------------------------------------------------------------
void decrementa(void)
{
POS_UNID = POS_UNID - 1;
if(POS_UNID == 255)
{ POS_UNID = 9; POS_DEZ = POS_DEZ - 1;
if(POS_DEZ == 255)
{ POS_DEZ = 9; POS_CEN = POS_CEN - 1;
if(POS_CEN == 255)
{ POS_CEN = 9;
}
}
}
}

//*****************************************************************************
/* Função que "zera" o sistema */
//-----------------------------------------------------------------------------
void zera(void)
{
POS_ACUM = 0; POS_CEN = 0; POS_DEZ = 0; POS_UNID = 0;
EH_POSITIVO = 1; EH_PRIM_CLK = 1; QDE_EST_ERR = 0; INTERV_UNID = 0;
INTERV_DEZ = 0; EH_TESTE = 0; CONTA_PULSOS = 0;
}

//*****************************************************************************
/* Função que informa a quantidade aproximada de mudanças de estado erradas do encoder */
//-----------------------------------------------------------------------------
void info_err(void)
{
if(QDE_EST_ERR != 0)
{ if(QDE_EST_ERR < 5)
{ transmite('5'); transmite('5'); // 55 <=> ocorreram menos de 5 mudanças erradas
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
}
else
{ if(QDE_EST_ERR < 10)
{ transmite('1'); transmite('1'); transmite('1'); // 111 <=> ocorreram menos de 10 mudanças erradas
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
}
else
{ if(QDE_EST_ERR < 20)
{ transmite('2'); transmite('2'); transmite('2'); // 222 <=> ocorreram menos de 20 mudanças erradas
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
}
else
{ transmite('9'); transmite('9'); transmite('9'); // 999 <=> ocorreram 20 ou mais mudanças erradas
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
}
}
}
}
else
{ transmite('1'); transmite('2'); transmite('3'); // 123 <=> NÃO ocorreram mudanças erradas de estado
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
}
}

//*****************************************************************************
/* Função que verifica o pedido solicitado pelo usuário via interface em MATLAB */
//-----------------------------------------------------------------------------
void verif_pedido(void)
{
CHAR_RX = recebe();
switch(CHAR_RX)
{
case ('Z'): zera(); break;
case ('E'): info_err(); break;
case ('T'): zera(); EH_TESTE = 1; le_est_atual_RES(); break; // Inicia modo teste e já deixa zerado
case ('F'): EH_TESTE = 0; break; // Termina modo teste
case ('1'): PULS_POR_VAL_ENV = 1; break;
case ('2'): PULS_POR_VAL_ENV = 2; break;
case ('4'): PULS_POR_VAL_ENV = 4; break;
default: break;
}
}

//*****************************************************************************
/* Função que trata as mudanças de estado */
//-----------------------------------------------------------------------------
void trata_mud_est(void)
{
switch(EST_ATUAL)
{
case (0): switch(EST_ANTES)
{

127
case (2): U_D = 0; CLK = 1; break; // Diminui posição (U_D = 0)
case (1): U_D = 1; CLK = 1; break; // Aumenta posição (U_D = 1)
case (0): CLK = 0; break; // Manteve o estado
default: CLK = 0; QDE_EST_ERR = QDE_EST_ERR + 1; break;
}
break;

case (1): switch(EST_ANTES)


{
case (3): U_D = 1; CLK = 1; break; // Aumenta posição (U_D = 1)
case (0): U_D = 0; CLK = 1; break; // Diminui posição (U_D = 0)
case (1): CLK = 0; break; // Manteve o estado
default: CLK = 0; QDE_EST_ERR = QDE_EST_ERR + 1; break;
}
break;

case (2): switch(EST_ANTES)


{
case (0): U_D = 1; CLK = 1; break; // Aumenta posição (U_D = 1)
case (3): U_D = 0; CLK = 1; break; // Diminui posição (U_D = 0)
case (2): CLK = 0; break; // Manteve o estado
default: CLK = 0; QDE_EST_ERR = QDE_EST_ERR + 1; break;
}
break;

case (3): switch(EST_ANTES)


{
case (1): U_D = 0; CLK = 1; break; // Diminui posição (U_D = 0)
case (2): U_D = 1; CLK = 1; break; // Aumenta posição (U_D = 1)
case (3): CLK = 0; break; // Manteve o estado
default: CLK = 0; QDE_EST_ERR = QDE_EST_ERR + 1; break;
}
break;

default: break;
}//fim switch
}

//*****************************************************************************
/* Função que trata as mudanças de estado do canal A do encoder de referência */
//-----------------------------------------------------------------------------
void trata_mud_est_RES(void)
{
switch(EST_ATUAL_RES)
{
case (0): switch(EST_ANTES_RES)
{
case (1): CLK = 1; break; // Dá o clk, borda de descida
default: CLK = 0; break;
}
break;

default: CLK = 0; break;


}//fim switch
}

//*****************************************************************************
/* Função que trata do acendimento dos displays de 7 segmentos */
//-----------------------------------------------------------------------------
void trata_display7seg(void)
{
switch(EH_VEZ)
{
case (0): if(EH_POSITIVO == 0) // Indica que a posição é negativa
{ PORTD = TABELA_7SEG[16]; // Prepara sinal de menos '-' no display7seg
}
else
{ PORTD = 0; // Não acenderá nada no de display7seg
}

RB7 = 1; // Acende o sinal de menos '-', ou nada, no display7seg


CONTADOR_SINAL = CONTADOR_SINAL + 1;
if(CONTADOR_SINAL >= 3)
{ CONTADOR_SINAL = 0;
EH_VEZ = 1; // É vez de acender a centena
RB7 = 0; // Apaga o sinal de menos '-', ou nada, no display7seg
}
break;

case (1): if(EH_PRIM_CLK == 1)


{ PORTD = TABELA_7SEG[17]; // Prepara letra 'r' no display7seg
}
else
{ PORTD = TABELA_7SEG[POS_CEN]; // Prepara centena no display7seg
}

RB6 = 1; // Acende a centena no display7seg


CONTADOR_CEN = CONTADOR_CEN + 1;
if(CONTADOR_CEN >= 3)
{ CONTADOR_CEN = 0;
EH_VEZ = 2; // É vez de acender a dezena
RB6 = 0; // Apaga a centena no display7seg
}
break;

128
case (2): if(EH_PRIM_CLK == 1)
{ PORTD = TABELA_7SEG[18]; // Prepara letra 'u' no display7seg
}
else
{ PORTD = TABELA_7SEG[POS_DEZ]; // Prepara dezena no display7seg
}

RB5 = 1; // Acende a dezena no display7seg


CONTADOR_DEZ = CONTADOR_DEZ + 1;
if(CONTADOR_DEZ >= 3)
{ CONTADOR_DEZ = 0;
EH_VEZ = 3; // É vez de acender a unidade
RB5 = 0; // Apaga a dezena no display7seg
}
break;

case (3): if(EH_PRIM_CLK == 1)


{ PORTD = TABELA_7SEG[19]; // Prepara letra 'n' no display7seg
}
else
{ PORTD = TABELA_7SEG[POS_UNID]; // Prepara unidade no display7seg
}

RB4 = 1; // Acende a unidade no display7seg


CONTADOR_UNID = CONTADOR_UNID + 1;
if(CONTADOR_UNID >= 3)
{ CONTADOR_UNID = 0;
EH_VEZ = 0; // É vez de acender o sinal de menos
RB4 = 0; // Apaga a unidade no display7seg
}
break;

default: break;
}//fim switch
}

/*
Universidade Estadual de Campinas
Faculdade de Engenharia Mecânica
Curso de Engenharia de Controle e Automação
TG II - Encoder Óptico
2o Semestre de 2007
Professor Orientador: Luiz Otávio Saraiva Ferreira
Aluno: Victor Adriano Turchetti RA: 025366

Arquivo: Encoder.c
Autor: Victor A. Turchetti
Data: 14/11/2007
Versão: 1.0
*/

/*
O encoder didático será chamado aqui somente de encoder.
O encoder comercial de 1024 PPR será chamado aqui de encoder de referência.
*/

#include <io16f877a.h> // Definição dos registradores do PIC16F877a


#include <stdlib.h> // Definição das funções padrão do ANSI C
#include <inpic.h> // Definição das funções intrínsecas do compilador

// Atribui nomes aos flags de controle da transmissão/recepção pela porta serial


#define TXFLAG TXIF // Flag de esvaziamento de TXREG
#define RXFLAG RCIF // Flag de chegada de byte pela serial

// Definição das entradas mapeadas no conector de expansão do kit MODULO II da MOSAICO


#define AA RC4 // Canal A do encoder, Pino 12 do conector de expansão
#define BB RC5 // Canal B do encoder, Pino 14 do conector de expansão

#define A_RES RA2 // Canal A do encoder de resolução maior, Pino 4 do conector de expansão
#define B_RES RE2 // Canal B do encoder de resolução maior, Pino 2 do conector de expansão, NÃO UTILIZADO

char EST_ANTES, EST_ATUAL; // Variáveis de estado


char U_D, CLK; // Variáveis de controle de contagem
char EH_POSITIVO = 1; // Contagem começa zerada, portanto não tem sinal negativo
unsigned int POS_ACUM = 0; // Contagem da posição acumulada do encoder em pulsos, 16 bits (0-65.535)
char POS_CEN = 0; // Contagem da posição do encoder em centenas de pulsos
char POS_DEZ = 0; // Contagem da posição do encoder em dezenas de pulsos
char POS_UNID = 0; // Contagem da posição do encoder em unidades de pulsos
char EH_PRIM_CLK = 1; // Variável utilizada para que após o 1.o clock a posição assuma zero
char CHAR_RX; // Variável utilizada na recepção serial dos pedidos do usuário
char EH_VEZ = 0; // Variável utilizada para multiplexar o acendimento dos displays7seg
char CONTADOR_SINAL = 0; // Controla tempo de acendimento do display7seg que representa o "-"
char CONTADOR_CEN = 0; // Controla tempo de acendimento do display7seg que representa a centena
char CONTADOR_DEZ = 0; // Controla tempo de acendimento do display7seg que representa a dezena
char CONTADOR_UNID = 0; // Controla tempo de acendimento do display7seg que representa a unidade
char QDE_EST_ERR = 0; // Qde de mudanças de estado erradas do encoder

129
char EH_TESTE = 0; // Modo teste quando EH_TESTE = 1 a pedido do usuário via serial
char EST_ANTES_RES, EST_ATUAL_RES; // Variáveis de estado do canal A do encoder de referência (A_RES)
char INTERV_UNID = 0; // Qde de pulsos gerados pelo encoder de referência no intervalo
char INTERV_DEZ = 0; // entre dois valores enviados do encoder sob teste

char CONTA_PULSOS = 0; // Faz o controle de pulsos desejados por valor enviado pela serial
char PULS_POR_VAL_ENV = 1; // Qde de pulsos desejados por valor enviado pela serial. Pode ser escolhido pelo usuário

//*****************************************************************************
/* TABELA PARA OS DISPLAYS DE 7 SEGMENTOS */
//-----------------------------------------------------------------------------
const char TABELA_7SEG[21]= {
0x3F, // 0h - 0
0x06, // 1h - 1
0x5B, // 2h - 2
0x4F, // 3h - 3
0x66, // 4h - 4
0x6D, // 5h - 5
0x7D, // 6h - 6
0x07, // 7h - 7
0x7F, // 8h - 8
0x6F, // 9h - 9
0x77, // Ah - A
0x7C, // Bh - b
0x39, // Ch - C
0x5E, // Dh - d
0x79, // Eh - E
0x71, // Fh - F
0x40, // Sinal de menos '-' // chamada: PORTD = TABELA_7SEG[16]
0x50, // Letra 'r' // chamada: PORTD = TABELA_7SEG[17]
0x1C, // Letra 'u' // chamada: PORTD = TABELA_7SEG[18]
0x54 // Letra 'n' // chamada: PORTD = TABELA_7SEG[19]
};

#include "Encoder.h" // Definição das funções utilizadas no programa

//*****************************************************************************
// Função Principal
//-----------------------------------------------------------------------------
void main(void)
{
// A diretiva da linha abaixo define os bits de configuração do processador. No caso abaixo a depuração
// com o ICD2BR está habilitada. Para desabilitá-la, troque DEBUG_ON por DEBUG_OFF.
//__set_configuration_word(CP_OFF&CPD_OFF&DEBUG_ON&LVP_OFF&WRT_ENABLE_OFF&BODEN_OFF&PWRTE_ON&WDT_OFF&XT_OSC);
// A opção WRT_ENABLE_OFF não é compatível com 16F877a
__set_configuration_word(CP_OFF&CPD_OFF&DEBUG_ON&LVP_OFF&BODEN_OFF&PWRTE_ON&WDT_OFF&XT_OSC);

/* INICIALIZAÇÃO DO PROCESSADOR - INÍCIO */

ADCON1 = 0x07; // 0b.0000.0111 , sem entradas analógicas


PORTC = 0x00; // Zeramento para evitar ruídos
TRISC = 0xB0; // 0b.1011.0000 , RC0 = saída digital
// RC1 = saída digital
// RC2 = saída digital
// RC3 = saída digital
// RC4 = entrada digital, canal A do encoder
// RC5 = entrada digital, canal B do encoder
// RC6 = saída TX da porta serial
// RC7 = entrada RX da porta serial

PORTB = 0x00; // Zeramento para evitar ruídos


TRISB = 0x03; // 0b.0000.0011 , RB0 = entrada digital
// RB1 = entrada digital
// RB2 = saída digital, LED L3
// RB3 = saída digital, LED L4
// RB4 = saída digital, seleciona display7seg unid
// RB5 = saída digital, seleciona display7seg dez
// RB6 = saída digital, seleciona display7seg cen
// RB7 = saída digital, seleciona display7seg sinal

PORTA = 0x00; // Zeramento para evitar ruídos


TRISA = 0xFF; // 0b.1111.1111 , entradas kit mosaico, e RA2 = entrada digital sinal A_RES
PORTD = 0x00; // Zeramento para evitar ruídos
TRISD = 0x00; // 0b.0000.0000 , RD7..RD0 saídas p/ segmentos do display7seg
PORTE = 0x00; // Zeramento para evitar ruídos
TRISE = 0x04; // 0b.0000.0100 , RE2 = entrada digital sinal B_RES

/* Configuração da porta serial */


TXSTA = 0x26; // 0b.0010.0110 = Modo assíncrono 8 bits, baud rate high speed (BRGH=1)
SPBRG = 0x19; // 0x19 = 25 em decimal => Taxa 9600 bps p/ Fosc = 4 MHz => tab pg100 pdf
RCSTA = 0x90; // 0b.1001.0000 = Habilita a transmissão/recepção serial
TXIE = 0; // Desabilita interrupção chamada pela transmissão serial
RCIE = 0; // Desabilita interrupção chamada pela recepção serial

/* INICIALIZAÇÃO DO PROCESSADOR - FIM */

/* PROCESSOS - INÍCIO */

le_est_atual(); // Faz uma leitura inicial do estado do encoder

while(1) // Laço principal infinito


{
verif_pedido();

130
EST_ANTES = EST_ATUAL; // Armazena estado imediatamente anterior
le_est_atual(); // Lê o novo estado atual

switch(EST_ATUAL) // Indica o estado atual via LED's


{
case (0): RB2 = 0; RB3 = 0; break;
case (1): RB2 = 0; RB3 = 1; break;
case (2): RB2 = 1; RB3 = 0; break;
case (3): RB2 = 1; RB3 = 1; break;
default: break;
}

trata_mud_est();

if(CLK == 1) // Quando é preciso incrementar/decrementar


{
if(EH_PRIM_CLK == 1) // Caso for o primeiro clock
{ transmite(POS_CEN + 0x30); transmite(POS_DEZ + 0x30); transmite(POS_UNID + 0x30);
// Transmite o valor 000 em ASCII pela serial
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)

if(EH_TESTE == 1) // Caso em modo teste


{ transmite(INTERV_DEZ + 0x30); transmite(INTERV_UNID + 0x30);
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
INTERV_UNID = 0; INTERV_DEZ = 0;
}

EH_PRIM_CLK = 0;
}
else // Não é o primeiro clock
{
if(U_D == 1) // Quando a posição aumenta
{ POS_ACUM = POS_ACUM + 1;

if(POS_ACUM > 32768) // Checa o sentido


{ EH_POSITIVO = 0;
}
else
{ EH_POSITIVO = 1;
}

if((EH_POSITIVO == 1)&&(POS_ACUM != 0))


{ incrementa();
}
else // É número negativo
{ decrementa();
}
}

else // U_D == 0, logo quando a posição diminui


{ POS_ACUM = POS_ACUM - 1;

if(POS_ACUM > 32768) // Checa o sentido


{ EH_POSITIVO = 0;
}
else
{ EH_POSITIVO = 1;
}

if(EH_POSITIVO == 1)
{ decrementa();
}
else // É número negativo
{ incrementa();
}
}//fim else U_D == 0

CONTA_PULSOS = CONTA_PULSOS + 1; // Incrementa controle de pulsos por valor enviado

if(CONTA_PULSOS == PULS_POR_VAL_ENV)
{
if(EH_POSITIVO == 0) // Indica que a posição é negativa
{ transmite('-'); // Transmite o caracter '-' em ASCII pela serial
}
transmite(POS_CEN + 0x30); transmite(POS_DEZ + 0x30); transmite(POS_UNID + 0x30);
// Transmite o valor da posição em ASCII pela serial
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)

if(EH_TESTE == 1)
{ transmite(INTERV_DEZ + 0x30); transmite(INTERV_UNID + 0x30);
transmite(0x09); // Transmite o caracter TAB pela serial (caracter terminador)
INTERV_UNID = 0; INTERV_DEZ = 0;
}

CONTA_PULSOS = 0;
}

}//fim else não é o primeiro clock

}//fim if(CLK == 1)

trata_display7seg(); // Sempre executa

if(EH_TESTE == 1) // Só executa se estiver em modo teste

131
{ EST_ANTES_RES = EST_ATUAL_RES;
le_est_atual_RES();
trata_mud_est_RES();

if(CLK == 1) // O clock agora é do encoder de referência


{
INTERV_UNID = INTERV_UNID + 1;
if(INTERV_UNID == 10)
{ INTERV_UNID = 0;
INTERV_DEZ = INTERV_DEZ + 1;
if(INTERV_DEZ == 10)
{ INTERV_DEZ = 0; // Supondo não mais que 99 pulsos gerados pelo encoder de referência
} // no intervalo entre dois valores enviados do encoder sob teste
}
}
}

}//fim while

/* PROCESSOS - FIM */

}//fim main

Anexo V
%##########################################################################
function varargout = encoderGUI128(varargin)
% ENCODERGUI128 M-file for encoderGUI128.fig
% ENCODERGUI128, by itself, creates a new ENCODERGUI128 or raises the existing
% singleton*.
%
% H = ENCODERGUI128 returns the handle to a new ENCODERGUI128 or the handle to
% the existing singleton*.
%
% ENCODERGUI128('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in ENCODERGUI128.M with the given input arguments.
%
% ENCODERGUI128('Property','Value',...) creates a new ENCODERGUI128 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before encoderGUI128_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to encoderGUI128_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help encoderGUI128

% Last Modified by GUIDE v2.5 28-Set-2007 14:02:04

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @encoderGUI128_OpeningFcn, ...
'gui_OutputFcn', @encoderGUI128_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

%##########################################################################
% --- Executes just before encoderGUI128 is made visible.
function encoderGUI128_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to encoderGUI128 (see VARARGIN)

set(handles.puls_por_leit_AQUIS,'String',1); %configura valores default


set(handles.qde_leit_desej_AQUIS,'String',16);
set(handles.puls_por_leit_TES,'String',1);
set(handles.qde_leit_desej_TES,'String',16);

132
set(handles.TOTGRAUSaquis,'String','45º');
set(handles.TOTGRAUStes,'String','45º');

% Choose default command line output for encoderGUI128


handles.output = hObject;
% Update handles structure
guidata(hObject, handles);

%##########################################################################
% --- Outputs from this function are returned to the command line.
function varargout = encoderGUI128_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

%##########################################################################
% --- Executes on selection change in popupmenuPPLAQUI.
function popupmenuPPLAQUI_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuPPLAQUI (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuPPLAQUI contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuPPLAQUI
val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu qde de pulsos por leitura - aquisiçao
case ' 1'
set(handles.puls_por_leit_AQUIS,'String',1);
PPLaquis=1;
case ' 2'
set(handles.puls_por_leit_AQUIS,'String',2);
PPLaquis=2;
case ' 4'
set(handles.puls_por_leit_AQUIS,'String',4);
PPLaquis=4;
otherwise
end
LDaquis=str2double(get(handles.qde_leit_desej_AQUIS,'String'));
TOTGRAUSaq=2.8125*PPLaquis*LDaquis; %determina o movimento total em graus
strTOTGRAUSaq=num2str(TOTGRAUSaq);
strTOTGRAUSaq=strcat(strTOTGRAUSaq,'º');
set(handles.TOTGRAUSaquis,'String',strTOTGRAUSaq);

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuPPLAQUI_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuPPLAQUI (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on selection change in popupmenuLDAQUI.
function popupmenuLDAQUI_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuLDAQUI (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuLDAQUI contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuLDAQUI
val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu qde de leituras desejadas - aquisiçao
case ' 16'
set(handles.qde_leit_desej_AQUIS,'String',16);
LDaquis=16;
case ' 32'
set(handles.qde_leit_desej_AQUIS,'String',32);
LDaquis=32;
case ' 64'
set(handles.qde_leit_desej_AQUIS,'String',64);
LDaquis=64;
case ' 128'
set(handles.qde_leit_desej_AQUIS,'String',128);
LDaquis=128;
otherwise
end
PPLaquis=str2double(get(handles.puls_por_leit_AQUIS,'String'));
TOTGRAUSaq=2.8125*PPLaquis*LDaquis; %determina o movimento total em graus
strTOTGRAUSaq=num2str(TOTGRAUSaq);
strTOTGRAUSaq=strcat(strTOTGRAUSaq,'º');
set(handles.TOTGRAUSaquis,'String',strTOTGRAUSaq);

133
%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuLDAQUI_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuLDAQUI (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonAQUIS.
function pushbuttonAQUIS_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonAQUIS (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%***** INICIALIZA PORTA SERIAL *****


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=600; %600 segundos
fopen(s)

PPL_AQUIS=get(handles.puls_por_leit_AQUIS,'String');
switch PPL_AQUIS
case '1'
fprintf(s,'1'); %envia pela serial pedido do usuário(pulsos por leitura)
case '2'
fprintf(s,'2'); %envia pela serial pedido do usuário(pulsos por leitura)
case '4'
fprintf(s,'4'); %envia pela serial pedido do usuário(pulsos por leitura)
otherwise
end

LD_AQUIS=get(handles.qde_leit_desej_AQUIS,'String');
switch LD_AQUIS
case '16'
qde_leit_desej=16;
case '32'
qde_leit_desej=32;
case '64'
qde_leit_desej=64;
case '128'
qde_leit_desej=128;
otherwise
end

fprintf(s,'Z'); %zeramento do encoder didático ao iniciar, envia pela serial


n=0;

%***** LAÇO DE LEITURA DA PORTA SERIAL *****


while (n<qde_leit_desej+1) %([leituras]) (n<VALOR), VALOR-1==multiplo do passo

POS=fscanf(s,'%d') %leitura da posiçao atual do encoder didático pela serial

H(n+1)=rem(now,1); %vetor hora atual em número serial


grafPOS(n+1)=POS; %vetor de posiçoes atuais
n=n+1;

end %fim while

%***** LIBERA PORTA SERIAL *****


fclose(s)
delete(s)
clear s

%***** INICIALIZA PORTA SERIAL *****


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=10; %10 segundos
fopen(s)

fprintf(s,'E'); %questiona sobre mudanças erradas de estado


EST_ERR=fscanf(s,'%d') %leitura do código que indica qde mud est erradas

%***** LIBERA PORTA SERIAL *****


fclose(s)
delete(s)
clear s

%***** FORMATA O VETOR DE TEMPO *****


t_ref=datevec(H(1));
t(1)=0;

134
N(1)=0;
for i=2:1:n
t(i)=etime(datevec(H(i)),t_ref);
N(i)=i-1;
end

%***** FORMATA O VETOR DE VELOCIDADE *****


grafVEL=0;
passo=2; %define a cada qtos pontos de posiçao se baseia o calculo da velocidade
for k=1:passo:(n-passo)
VEL=(grafPOS(k+passo)-grafPOS(k))/(t(k+passo)-t(k)); %pulsos/seg
grafVEL=[grafVEL VEL];
end
for k=0:1:length(grafVEL)-1
nVEL(k+1)=k*passo;
tVEL(k+1)=t(k*passo+1);
end

%***** VARIÁVEIS GLOBAIS *****


global nG;
nG=n;
global NG;
NG=N;
global grafPOSG;
grafPOSG=grafPOS;
global tG;
tG=t;
global nVELG;
nVELG=nVEL;
global grafVELG;
grafVELG=grafVEL;
global tVELG;
tVELG=tVEL;
global EST_ERRG;
EST_ERRG=EST_ERR;

XX=encoderAQUIS128; %chama a figura de resultados da aquisição

%##########################################################################
% --- Executes on selection change in popupmenuPPLTES.
function popupmenuPPLTES_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuPPLTES (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuPPLTES contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuPPLTES
val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu qde de pulsos por leitura - teste
case ' 1'
set(handles.puls_por_leit_TES,'String',1);
PPLtes=1;
case ' 2'
set(handles.puls_por_leit_TES,'String',2);
PPLtes=2;
case ' 4'
set(handles.puls_por_leit_TES,'String',4);
PPLtes=4;
otherwise
end
LDtes=str2double(get(handles.qde_leit_desej_TES,'String'));
TOTGRAUStes=2.8125*PPLtes*LDtes; %determina o movimento total em graus
strTOTGRAUStes=num2str(TOTGRAUStes);
strTOTGRAUStes=strcat(strTOTGRAUStes,'º');
set(handles.TOTGRAUStes,'String',strTOTGRAUStes);

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuPPLTES_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuPPLTES (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on selection change in popupmenuLDTES.
function popupmenuLDTES_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuLDTES (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuLDTES contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuLDTES
val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu qde de leituras desejadas - teste
case ' 16'

135
set(handles.qde_leit_desej_TES,'String',16);
LDtes=16;
case ' 32'
set(handles.qde_leit_desej_TES,'String',32);
LDtes=32;
case ' 64'
set(handles.qde_leit_desej_TES,'String',64);
LDtes=64;
case ' 128'
set(handles.qde_leit_desej_TES,'String',128);
LDtes=128;
otherwise
end
PPLtes=str2double(get(handles.puls_por_leit_TES,'String'));
TOTGRAUStes=2.8125*PPLtes*LDtes; %determina o movimento total em graus
strTOTGRAUStes=num2str(TOTGRAUStes);
strTOTGRAUStes=strcat(strTOTGRAUStes,'º');
set(handles.TOTGRAUStes,'String',strTOTGRAUStes);

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuLDTES_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuLDTES (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonTESTE.
function pushbuttonTESTE_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonTESTE (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%***** INICIALIZA PORTA SERIAL *****


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=600; %600 segundos
fopen(s)

PPL_TES=get(handles.puls_por_leit_TES,'String');
global PPL_TESG;

switch PPL_TES
case '1'
fprintf(s,'1'); %envia pela serial pedido do usuário(pulsos por leitura)
PPL_TESG=1;
case '2'
fprintf(s,'2'); %envia pela serial pedido do usuário(pulsos por leitura)
PPL_TESG=2;
case '4'
fprintf(s,'4'); %envia pela serial pedido do usuário(pulsos por leitura)
PPL_TESG=4;
otherwise
end

LD_TES=get(handles.qde_leit_desej_TES,'String');
switch LD_TES
case '16'
qde_leit_desej=16;
case '32'
qde_leit_desej=32;
case '64'
qde_leit_desej=64;
case '128'
qde_leit_desej=128;
otherwise
end

fprintf(s,'T'); %ajusta para modo teste, zerando inclusive, envia pela serial
n=0;

%***** LAÇO DE LEITURA DA PORTA SERIAL *****


while (n<qde_leit_desej+1) %([leituras])

POS=fscanf(s,'%d') %leitura da posiçao atual do encoder didático pela serial


QDE_PULSOS_INTERV=fscanf(s,'%d') %leitura da contagem de pulsos do canal
%%A do encoder de referência no intervalo entre duas transmissões de
%%posição do encoder didático

grafPOS(n+1)=POS; %vetor de posiçoes atuais


grafPULS(n+1)=QDE_PULSOS_INTERV; %vetor de contagem de pulsos no intervalo
n=n+1;

end %fim while

136
fprintf(s,'F'); %finaliza modo teste, envia pela serial

%***** LIBERA PORTA SERIAL *****


fclose(s)
delete(s)
clear s

%***** INICIALIZA PORTA SERIAL *****


s=serial('COM1');
fclose(s);
s.BaudRate=9600; %9600 bps
s.DataBits=8; %8 bits DEFAULT
s.Terminator=9; %0x09 = caracter TAB
s.Timeout=10; %10 segundos
fopen(s)

fprintf(s,'E'); %questiona sobre mudanças erradas de estado


EST_ERR=fscanf(s,'%d') %leitura do código que indica qde mud est erradas

%***** LIBERA PORTA SERIAL *****


fclose(s)
delete(s)
clear s

%***** CRIA O EIXO DE LEITURAS *****


N(1)=0;
for i=2:1:n
N(i)=i-1;
end

%***** VARIÁVEIS GLOBAIS *****


global nG;
nG=n;
global NG;
NG=N;
global grafPOSG;
grafPOSG=grafPOS;
global grafPULSG;
grafPULSG=grafPULS;
global EST_ERRG;
EST_ERRG=EST_ERR;

YY=encoderTESTE128; %chama a figura de resultados do teste de precisão

%##########################################################################
% --- Executes on button press in pushbuttonSAIR.
function pushbuttonSAIR_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonSAIR (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
delete(handles.figuraPRINC);

Anexo VI
%##########################################################################
function varargout = encoderAQUIS128(varargin)
% ENCODERAQUIS128 M-file for encoderAQUIS128.fig
% ENCODERAQUIS128, by itself, creates a new ENCODERAQUIS128 or raises the existing
% singleton*.
%
% H = ENCODERAQUIS128 returns the handle to a new ENCODERAQUIS128 or the handle to
% the existing singleton*.
%
% ENCODERAQUIS128('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in ENCODERAQUIS128.M with the given input arguments.
%
% ENCODERAQUIS128('Property','Value',...) creates a new ENCODERAQUIS128 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before encoderAQUIS128_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to encoderAQUIS128_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help encoderAQUIS128

% Last Modified by GUIDE v2.5 28-Set-2007 16:50:41

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @encoderAQUIS128_OpeningFcn, ...

137
'gui_OutputFcn', @encoderAQUIS128_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

%##########################################################################
% --- Executes just before encoderAQUIS128 is made visible.
function encoderAQUIS128_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to encoderAQUIS128 (see VARARGIN)
global nG NG grafPOSG tG EST_ERRG;

axes(handles.GRAF1); %plota, inicialmente, posição x número da leitura


plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid

axes(handles.GRAF2); %plota, inicialmente, posição x tempo


plot(tG,grafPOSG,'.-b')
xlim([0 tG(nG)])
ylim('auto')
xlabel('Tempo [s]')
ylabel('Posição [pulsos]')
grid

switch EST_ERRG %interpretação e indicação do valor aproximado de mud err de estado


case 123
set(handles.ESTERR_AQUIS,'String','= 0');
case 55
set(handles.ESTERR_AQUIS,'String','< 5');
case 111
set(handles.ESTERR_AQUIS,'String','< 10');
case 222
set(handles.ESTERR_AQUIS,'String','< 20');
otherwise
set(handles.ESTERR_AQUIS,'String','> 20');
end

% Choose default command line output for encoderAQUIS128


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

%##########################################################################
% --- Outputs from this function are returned to the command line.
function varargout = encoderAQUIS128_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

%##########################################################################
% --- Executes on selection change in popupmenuGRAF1.
function popupmenuGRAF1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuGRAF1 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuGRAF1
global nG NG grafPOSG tG nVELG grafVELG tVELG;
axes(handles.GRAF1);

val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu e plota no gráfico 1
case ' Posicao x Numero da leitura'
plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid
case ' Velocidade x Numero da leitura'
plot(nVELG,grafVELG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])

138
ylim('auto')
xlabel('Número da leitura')
ylabel('Velocidade [pulsos/seg]')
grid
case ' Posicao x Tempo'
plot(tG,grafPOSG,'.-b')
xlim([0 tG(nG)])
ylim('auto')
xlabel('Tempo [s]')
ylabel('Posição [pulsos]')
grid
case ' Velocidade x Tempo'
plot(tVELG,grafVELG,'.-b')
xlim([0 tG(nG)])
ylim('auto')
xlabel('Tempo [s]')
ylabel('Velocidade [pulsos/seg]')
grid
otherwise
end

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuGRAF1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonfechaAQUIS.
function pushbuttonfechaAQUIS_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonfechaAQUIS (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
delete(handles.figuraAQUIS);

%##########################################################################
% --- Executes on selection change in popupmenuGRAF2.
function popupmenuGRAF2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuGRAF2 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuGRAF2
global nG NG grafPOSG tG nVELG grafVELG tVELG;
axes(handles.GRAF2);

val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu e plota no gráfico 2
case ' Posicao x Tempo'
plot(tG,grafPOSG,'.-b')
xlim([0 tG(nG)])
ylim('auto')
xlabel('Tempo [s]')
ylabel('Posição [pulsos]')
grid
case ' Velocidade x Tempo'
plot(tVELG,grafVELG,'.-b')
xlim([0 tG(nG)])
ylim('auto')
xlabel('Tempo [s]')
ylabel('Velocidade [pulsos/seg]')
grid
case ' Posicao x Numero da leitura'
plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid
case ' Velocidade x Numero da leitura'
plot(nVELG,grafVELG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Velocidade [pulsos/seg]')
grid
otherwise
end

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuGRAF2_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB

139
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonEXPORT.
function pushbuttonEXPORT_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonEXPORT (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global NG tG grafPOSG nVELG tVELG grafVELG;

nome={'LEITURA'}; %exporta dados para arquivo em excel


xlswrite('encoder_aquisicao.xls',nome,'Plan1','A2');
xlswrite('encoder_aquisicao.xls',NG','Plan1','A4');

nome={'TEMPO [s]'};
xlswrite('encoder_aquisicao.xls',nome,'Plan1','C2');
xlswrite('encoder_aquisicao.xls',tG','Plan1','C4');

nome={'POS [pulsos]'};
xlswrite('encoder_aquisicao.xls',nome,'Plan1','E2');
xlswrite('encoder_aquisicao.xls',grafPOSG','Plan1','E4');

nome={'LEITURA'};
xlswrite('encoder_aquisicao.xls',nome,'Plan1','G2');
xlswrite('encoder_aquisicao.xls',nVELG','Plan1','G4');

nome={'TEMPO [s]'};
xlswrite('encoder_aquisicao.xls',nome,'Plan1','I2');
xlswrite('encoder_aquisicao.xls',tVELG','Plan1','I4');

nome={'VEL [pulsos/s]'};
xlswrite('encoder_aquisicao.xls',nome,'Plan1','K2');
xlswrite('encoder_aquisicao.xls',grafVELG','Plan1','K4');

set(handles.pushbuttonEXPORT,'ForegroundColor',[0.51,0.51,0.51]);

Anexo VII
%##########################################################################
function varargout = encoderTESTE128(varargin)
% ENCODERTESTE128 M-file for encoderTESTE128.fig
% ENCODERTESTE128, by itself, creates a new ENCODERTESTE128 or raises the existing
% singleton*.
%
% H = ENCODERTESTE128 returns the handle to a new ENCODERTESTE128 or the handle to
% the existing singleton*.
%
% ENCODERTESTE128('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in ENCODERTESTE128.M with the given input arguments.
%
% ENCODERTESTE128('Property','Value',...) creates a new ENCODERTESTE128 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before encoderTESTE128_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to encoderTESTE128_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Copyright 2002-2003 The MathWorks, Inc.

% Edit the above text to modify the response to help encoderTESTE128

% Last Modified by GUIDE v2.5 28-Set-2007 13:48:30

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @encoderTESTE128_OpeningFcn, ...
'gui_OutputFcn', @encoderTESTE128_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

140
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

%##########################################################################
% --- Executes just before encoderTESTE128 is made visible.
function encoderTESTE128_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to encoderTESTE128 (see VARARGIN)
global PPL_TESG;
global nG NG grafPOSG grafPULSG EST_ERRG;

axes(handles.GRAF1); %plota, inicialmente, posição x número da leitura


plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid

axes(handles.GRAF2); %plota, inicialmente, qde de pulsos no intervalo x número da leitura


plot(NG,grafPULSG,'.-b')
xlim([0 nG-1])
ylim([0 16*PPL_TESG])
xlabel('Número da leitura')
ylabel('Qde de pulsos no intervalo [pulsos>RES]')
grid

switch EST_ERRG %interpretação e indicação do valor aproximado de mud err de estado


case 123
set(handles.ESTERR_TES,'String','= 0');
case 55
set(handles.ESTERR_TES,'String','< 5');
case 111
set(handles.ESTERR_TES,'String','< 10');
case 222
set(handles.ESTERR_TES,'String','< 20');
otherwise
set(handles.ESTERR_TES,'String','> 20');
end

% Choose default command line output for encoderTESTE128


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

%##########################################################################
% --- Outputs from this function are returned to the command line.
function varargout = encoderTESTE128_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

%##########################################################################
% --- Executes on selection change in popupmenuGRAF1.
function popupmenuGRAF1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuGRAF1 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuGRAF1
global PPL_TESG;
global nG NG grafPOSG grafPULSG;
axes(handles.GRAF1);

val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu e plota no gráfico 1
case ' Posicao x Numero da leitura'
plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid
case ' Qde de pulsos no intervalo x Numero da leitura'
plot(NG,grafPULSG,'.-b')
xlim([0 nG-1])
ylim([0 16*PPL_TESG])
xlabel('Número da leitura')
ylabel('Qde de pulsos no intervalo [pulsos>RES]')
grid
otherwise
end

141
%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuGRAF1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonfechaTEST.
function pushbuttonfechaTEST_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonfechaTEST (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
delete(handles.figuraTEST);

%##########################################################################
% --- Executes on selection change in popupmenuGRAF2.
function popupmenuGRAF2_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenuGRAF2 contents as cell array


% contents{get(hObject,'Value')} returns selected item from popupmenuGRAF2
global PPL_TESG;
global nG NG grafPOSG grafPULSG;
axes(handles.GRAF2);

val = get(hObject,'Value');
str = get(hObject, 'String');
switch str{val}; %verifica opção no popup menu e plota no gráfico 2
case ' Qde de pulsos no intervalo x Numero da leitura'
plot(NG,grafPULSG,'.-b')
xlim([0 nG-1])
ylim([0 16*PPL_TESG])
xlabel('Número da leitura')
ylabel('Qde de pulsos no intervalo [pulsos>RES]')
grid
case ' Posicao x Numero da leitura'
plot(NG,grafPOSG,'.-','Color',[0,0.25,0])
xlim([0 nG-1])
ylim('auto')
xlabel('Número da leitura')
ylabel('Posição [pulsos]')
grid
otherwise
end

%##########################################################################
% --- Executes during object creation, after setting all properties.
function popupmenuGRAF2_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuGRAF2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end

%##########################################################################
% --- Executes on button press in pushbuttonEXPORT.
function pushbuttonEXPORT_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonEXPORT (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global NG grafPOSG grafPULSG;

nome={'LEITURA'}; %exporta dados para arquivo em excel


xlswrite('encoder_testeprecisao.xls',nome,'Plan1','A2');
xlswrite('encoder_testeprecisao.xls',NG','Plan1','A4');

nome={'POS [pulsos]'};
xlswrite('encoder_testeprecisao.xls',nome,'Plan1','C2');
xlswrite('encoder_testeprecisao.xls',grafPOSG','Plan1','C4');

nome={'QDE NO INTERV [pulsos>RES]'};


xlswrite('encoder_testeprecisao.xls',nome,'Plan1','E2');
xlswrite('encoder_testeprecisao.xls',grafPULSG','Plan1','E4');

set(handles.pushbuttonEXPORT,'ForegroundColor',[0.51,0.51,0.51]);

142

Você também pode gostar