Tese 1,1 MB

81
INSTITUTO SUPERIOR TÉCNICO Universidade Técnica de Lisboa Aquisição Local e Processamento Remoto dos Dados Colhidos por um Sensor de Teste Não-Destrutivo João Miguel Sotomayor Calvário Dissertação para a obtenção do grau de mestre em Engenharia Electrotécnica e de Computadores Júri Presidente: Professor Marcelino Bicho dos Santos Orientadores: Professor Artur Lopes Ribeiro Professora Helena Geirinhas Ramos Vogal: Professor Carlos Beltran de Almeida Outubro de 2010

Transcript of Tese 1,1 MB

Page 1: Tese 1,1 MB

INSTITUTO SUPERIOR TÉCNICO

Universidade Técnica de Lisboa

Aquisição Local e Processamento Remoto dos Dados

Colhidos por um Sensor de Teste Não-Destrutivo

João Miguel Sotomayor Calvário

Dissertação para a obtenção do grau de mestre em

Engenharia Electrotécnica e de Computadores

Júri

Presidente: Professor Marcelino Bicho dos Santos

Orientadores: Professor Artur Lopes Ribeiro

Professora Helena Geirinhas Ramos

Vogal: Professor Carlos Beltran de Almeida

Outubro de 2010

Page 2: Tese 1,1 MB

II

(Página deixada em branco intencionalmente)

Page 3: Tese 1,1 MB

III

Agradecimentos

Em primeiro lugar, gostaria de agradecer aos meus professores orientadores, Professor Artur

Lopes Ribeiro e Professora Helena Geirinhas Ramos, por me terem oferecido a oportunidade de

realizar uma tese de dissertação numa área do meu interesse e por me terem acompanhado ao longo

do período em que estive a realizá-la.

Gostaria por outro lado de agradecer a todos os meus familiares que me apoiaram durante o

período em que realizei a dissertação, e em particular aos meus pais, irmãos e namorada por me

terem apoiado e ajudado em muitas ocasiões ao longo da mesma.

Gostaria também de agradecer a todos os meus amigos, os quais estiveram igualmente

sempre presentes ao longo da realização da dissertação.

Por último gostaria de agradecer a todos as pessoas que fazem parte do Departamento do

Instituto das Telecomunicações no qual eu realizei a tese, pelo apoio que me deram sempre que era

necessário.

Page 4: Tese 1,1 MB

IV

Resumo

Esta dissertação encontra-se dividida em três partes. Na primeira foi utilizado um algoritmo de

processamento de sinal chamado Sine-fitting. Este programa traduz-se numa aplicação do método

dos mínimos quadrados. Quando aplicamos este programa estamos a aplicar um método de

regressão na medida em que recolhemos amostras de forma a calcular a amplitude e a fase do sinal.

Aqui todos os sinais foram gerados numa aplicação “Matlab” executada num computador pessoal. Na

segunda parte, foi utilizado igualmente este algoritmo de Sine-fitting, mas neste caso os sinais foram

gerados num gerador de funções, sendo transferidos para o computador por um sistema de aquisição

de dados para posterior processamento. Estas duas partes foram importantes, na medida em que se

ficou a conhecer a frequência de amostragem necessária e a capacidade do canal de transmissão

sem fios de modo que os dados transmitidos de um sensor para um computador, possa ser feito sem

elevados tempos de espera entre transmissões sucessivas. Após serem conhecidos estes valores foi

iniciada a última parte da dissertação, que consiste em aplicar este algoritmo de Sine-fitting, mas

agora utilizando um sistema sem fios, baseado num PIC 18F4550 inserido numa placa de teste.

Nesta última parte, a digitalização do sinal proveniente do gerador de funções vai ser realizada no

PIC, sendo o resultado posteriormente enviado por um sistema sem fios para o computador, onde

será processado através do programa Sine-fitting. Para garantir comunicação sem fios, são utilizadas

portas RS-232, bem como emissores-receptores a funcionar na gama de frequência dos 400 Mhz.

Palavras-chave : Microprocessador, Sine-fitting, Sistema de Aquisição, Transmissão sem fios

Page 5: Tese 1,1 MB

V

Abstract

This Master Thesis is divided in three parts. In the first part, an algorithm of signal processing

named sine-fitting was developed. This algorithm reflects an application of the least square method.

When this method is applied, we are performing a regression, in a way that samples are acquired in

order to compute the amplitude and phase shift of a sinusoidal signal that is corrupted by noise. Here,

all the signals were generated in “Matlab”, working in a laptop. In the second part, the sine-fitting

algorithm was also utilized, but signals were generated in a function generator, to further be sent to a

16 bit acquisition board, to be transformed in their digital representation. After the digitalization, signals

are sent to the computer for sine-fitting processing. These two parts were important, to determine the

necessary sampling rate and the full capacity needed in the transmission buffer, so that the data

transmitted through a sensor to a laptop, can be done without delay between consecutive

transmissions. The last part of this Master Thesis consists in an application of the sine-fitting algorithm

using a wireless channel. In this third part, a PIC 18F4550 microcontroller inserted on a testing board

was used. Here, the digitalization of the analog signal from the function generator will be done in the

PIC, and the result should be sent through a wireless channel to the computer for further sine-fitting

processing. To guarantee a good communication, a RS-232 interface is used, together with wireless

transceivers working near 400 MHz.

Key-words : Microprocessor, sine-fitting, acquisition system, wireless transmission

Page 6: Tese 1,1 MB

VI

ÍNDICE

Página

Agradecimentos ...................................................................................................................................... III

Resumo .................................................................................................................................................. IV

Abstract.................................................................................................................................................... V

Lista de Tabelas ................................................................................................................................... VIII

Lista de Figuras ...................................................................................................................................... IX

1. Introdução ............................................................................................................................................ 1

1.1. Enquadramento do trabalho ......................................................................................................... 1

1.2. Estado da Arte .............................................................................................................................. 4

1.2.1. Método das correntes de Foucault ....................................................................................... 4

1.2.2. Algoritmo de Sine-fitting ........................................................................................................ 6

1.3. Objectivos ..................................................................................................................................... 8

1.4. Estrutura da Tese ......................................................................................................................... 9

2. Primeiros testes com os sinais gerados no computador ................................................................... 10

2.1. Introdução ................................................................................................................................... 10

2.2. Método experimental .................................................................................................................. 11

2.3. Análise de resultados .................................................................................................................. 14

2.4. Conclusões ................................................................................................................................. 27

3. Testes com um ADC ......................................................................................................................... 29

3.1 Introdução teórica ........................................................................................................................ 29

3.2 Método Experimental ................................................................................................................... 30

3.3 Análise dos resultados ................................................................................................................. 33

3.4 Conclusões .................................................................................................................................. 38

4. Desenvolvimento de um sistema de aquisição autónomo numa placa de demonstração com um

PIC18F4550 .......................................................................................................................................... 40

4.1 Introdução .................................................................................................................................... 40

4.1.1 Funcionalidades da placa de demonstração com micro controlador PIC 18F4550 ............ 41

4.1.2 Emissor-receptor ER400TRS .............................................................................................. 42

Page 7: Tese 1,1 MB

VII

4.1.3 Portas série RS-232 e MAX232A ........................................................................................ 44

4.2 Configuração do PIC 18F4550 através dos seus registos e do programa na plataforma “Matlab”.

Demonstração de um resultado prático ............................................................................................. 45

4.3 Conclusões .................................................................................................................................. 57

5. Conclusões ........................................................................................................................................ 58

6. Perspectivas para trabalhos futuros .................................................................................................. 59

Referências ........................................................................................................................................... 60

Apêndice ................................................................................................................................................ 62

Apêndice 1. Placa de circuito impresso com MAX232A ................................................................... 62

Apêndice 2. Código para programa o PIC18F4550 .......................................................................... 63

A2.1 Main e funções auxiliares .................................................................................................... 63

A2.2 Ficheiros .h ........................................................................................................................... 67

A.2.2.1 IO_CFG.h .................................................................................................................... 67

A.2.2.2 initboard.h ................................................................................................................... 69

Apêndice 3. Código para o Matlab .................................................................................................... 70

Page 8: Tese 1,1 MB

VIII

Lista de Tabelas

Tabela 1 – Resultados obtidos para uma percentagem de ruído de 10 % relativamente à amplitude .................. 18

Tabela 2 – Resultados obtidos para uma percentagem de ruído de 50 % relativamente à amplitude .................. 18

Tabela 3 – Resultados obtidos para uma percentagem de ruído de 100 % relativamente à amplitude ................ 19

Tabela 4 – Resultados obtidos para uma percentagem de ruído de 10 % relativamente à fase ........................... 22

Tabela 5 – Resultados obtidos para uma percentagem de ruído de 50 % relativamente à fase ........................... 23

Tabela 6 – Resultados obtidos para uma percentagem de ruído de 100 % relativamente à fase ......................... 24

Tabela 7 – Resultados finais para a amplitude ...................................................................................................... 27

Tabela 8 – Resultados finais para a fase .............................................................................................................. 28

Tabela 9 – Resultados finais ................................................................................................................................. 28

Tabela 10 – Cálculos auxiliares para controlar o ganho ........................................................................................ 32

Tabela 11 – Tempo de aquisição igual a 1 milissegundo (1 Período adquirido) ................................................... 33

Tabela 12 – Tempo de aquisição igual a 40 milissegundos (40 Períodos adquiridos) .......................................... 34

Tabela 13 – Resultados para a amplitude face aos diferentes níveis de ruído utilizados ...................................... 35

Tabela 14 – Resultados para a diferença de fase face aos diferentes níveis de ruído utilizados .......................... 35

Tabela 15 – Número de amostras necessárias para garantir bons resultados para a fase, e amplitude .............. 38

Tabela 16 – Registos TRIS ................................................................................................................................... 48

Tabela 17 – Registos utilizados para realizar uma transmissão UART ................................................................. 48

Tabela 18 – Registos utilizados para realizar uma conversão A/D........................................................................ 51

Tabela 19 – Registos para controlar os contadores .............................................................................................. 51

Page 9: Tese 1,1 MB

IX

Lista de Figuras

Figura 1 – Formação de eddy currents numa placa metálica .................................................................................. 3

Figura 2 – Sensor em forma de panqueca .............................................................................................................. 4

Figura 3 – Sinal inicial mais ruído a serem processados pelo algoritmo de sine-fitting ......................................... 10

Figura 4 – Distribuição normal com média µ e desvio padrão σ ............................................................................ 12

Figura 5 – Esquema de funcionamento do programa ............................................................................................ 14

Figura 6 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 10% de ruído da amplitude

máxima .................................................................................................................................................................. 15

Figura 7 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 50% de ruído da amplitude

máxima .................................................................................................................................................................. 16

Figura 8 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 100% de ruído da

amplitude máxima ................................................................................................................................................. 16

Figura 9 – Valores máximos e mínimos da amplitude das amostras com ruído 10 % ........................................... 18

Figura 10 – Valores máximos e mínimos da amplitude das amostras com ruído 50 % ......................................... 19

Figura 11 – Valores máximos e mínimos da amplitude das amostras com ruído 100 % ....................................... 20

Figura 12 – Desvio padrão da fase, considerando as 300 repetições, e sinais com 10% de ruído da amplitude

máxima .................................................................................................................................................................. 21

Figura 13 – Desvio padrão da fase, considerando as 300 repetições, e sinais com 50% de ruído da amplitude

máxima .................................................................................................................................................................. 21

Figura 14 - Desvio padrão da fase, considerando as 300 repetições, e sinais com 100% de ruído da amplitude

máxima .................................................................................................................................................................. 22

Figura 15 – Valores máximos e mínimos da fase das amostras com ruído 10 % ................................................. 23

Figura 16 – Valores máximos e mínimos da fase das amostras com ruído 50 % ................................................. 24

Figura 17 – Valores máximos e mínimos da fase das amostras com ruído 100 % ............................................... 25

Figura 18 – 2 períodos e 3 pontos por período com 10 % de ruído....................................................................... 25

Figura 19 – 10 Períodos e 10 pontos por período com 10% de ruído ................................................................... 26

Figura 20 – 30 períodos e 30 pontos por período com 10% de ruído .................................................................... 27

Figura 21 – Circuito utilizado para adicionar ruído e desfasar o sinal sinusoidal................................................... 31

Figura 22 – Resultados para a amplitude face a diferentes níveis de ruído .......................................................... 36

Figura 23 – Resultados para a fase face a diferentes níveis de ruído ................................................................... 36

Figura 24 – Amplitude de ruído de 10 mV ............................................................................................................. 37

Figura 25 – Amplitude de ruído de 2 V .................................................................................................................. 38

Figura 26 – Esquema geral com os 2 emissores-receptores, o PIC18F4550 e o computador .............................. 40

Figura 27 – Diagrama de blocos referente à escolha da frequência de oscilação ................................................ 41

Figura 28 – Circuito de aplicação do MAX232A .................................................................................................... 45

Figura 29 – Esquema de funcionamento do programa no PIC18F4550 ................................................................ 47

Figura 30 – Número de ciclos TAD numa conversão A/D ..................................................................................... 52

Figura 31 – Cálculo da frequência de amostragem com o auxílio de contadores ................................................. 53

Figura 32 – Amplitude igual a 2 V, frequência de sinal de 1 kHz e offset de 2 V .................................................. 55

Figura 33 – Amplitude igual a 2 V, frequência de sinal de 1 kHz e 2 V de offset .................................................. 56

Figura 34 – Placa de circuito impresso com o circuito de aplicação MAX232A .................................................... 62

Page 10: Tese 1,1 MB

1

1. Introdução

Este capítulo tem como objectivo introduzir o trabalho que será apresentado de seguida. Este

trabalho enquadra-se na área dos métodos não destrutivos, mais especificamente no método das

correntes de Foucault ou eddy currents, cujo objectivo é detectar defeitos ou fissuras em placas

metálicas. No início deste capítulo, é feito um enquadramento geral da tese, em que é explicitado

qual o propósito de realizar este estudo. De seguida é analisada a importância dos métodos não

destrutivos e são apresentados alguns trabalhos realizados por diversos autores. Aqui será possível

observar que foram feitos muitos estudos sobre esta área, em que as maiores inovações são ao nível

dos sensores usados no método das Correntes de Foucault. Contudo, a comunicação entre estes

sensores e o computador é normalmente feita por fio e utilizando sistemas de aquisição de grande

porte e de elevado preço, sendo que na literatura referente à área em estudo, não foram encontrados

artigos que utilizassem um PIC18F4550 para realizarem simultaneamente a aquisição e comunicação

sem fios por uma porta série RS-232, aplicados às técnicas dos métodos não destrutivos. É neste

tema relacionado com a comunicação através de uma porta série RS-232 que esta dissertação vai ter

importância e relevância. Após realizado este trabalho, será possível usar um PIC para fazer a

aquisição dos sinais, bem como o envio dos dados para o computador usando um emissor-receptor.

Por último são apresentados os objectivos da tese, bem como a sua estrutura em capítulos.

1.1. Enquadramento do trabalho

Actualmente, com o evoluir da tecnologia, surgiu a necessidade de criar técnicas de análise,

em que fosse possível observar os objectos sem os danificar, ou destruir. Como tal, surgiu um campo

de investigação, ao qual se dá o nome de “métodos não destrutivos”. Como o próprio nome indica,

estes métodos baseiam-se em técnicas intrusivas e não destrutivas, em que não é necessário

danificar os materiais ou objectos em estudo. Uma outra característica fundamental e que caracteriza

fortemente estes métodos é o facto de estes pouparem tempo e dinheiro às empresas e

fornecedores, na medida em que têm uma excelente relação entre controlo de qualidade e custo

efectivo. Estas técnicas são usadas em diversas indústrias, entre as quais se encontram a

engenharia electrotécnica, a engenharia civil, a engenharia espacial e a medicina [1-6] .

Como foi referido no parágrafo anterior, existem diversos métodos não destrutivos, sendo que

só serão abordados os métodos de correntes de Foucault (electromagnéticos), de Radiação por

Raios X e Ultra-sons, dando especial atenção ao método Electromagnético por correntes de Foucault.

Page 11: Tese 1,1 MB

2

Os raios X foram descobertos no final do século XIX, e devem a sua descoberta ao físico

alemão Wilhelm Conrad Rontgen. Os raios X encontram-se num dos extremos do espectro

electromagnético, em que as frequências têm valores a rondar os 1020 Hz, o comprimento de onda é

da ordem dos picometros e a energia de um fotão é da ordem das centenas de KeV. Mais

precisamente, o comprimento de onda de um feixe de ondas electromagnéticas de Raios X está

compreendido entre 1 nanometro e 5 picometros. O princípio dos raios X baseia-se em acelerar um

conjunto de partículas electrões contra um alvo de tungsténio [1] . Quando estas partículas são

aceleradas, ganham energia, para posteriormente se darem fenómenos de choque. Quando o feixe

seja ao alvo de tungsténio, é libertada uma radiação, ao qual se dá o nome de Raio-X. Uma das

maiores limitações deste método é que uma elevada exposição a esta radiação provoca danos ao

nível molecular, podendo mesmo provocar cancro [1-3] .

No método não destrutivo baseado em ultra-sons, são utilizadas ondas sonoras de alta

frequência, para fazer medidas sobre falhas em objectos, caracterização de um determinado material,

entre outras. Deste método, importa reter que inicialmente são geradas ondas sonoras de alta

frequência, as quais são passadas através do objecto em estudo [1-3] . Se porventura este objecto

tiver defeitos, as ondas irão propagar-se de maneira diferente, o que permite caracterizar a qualidade

dos materiais, bem como a existência de defeitos e a sua caracterização.

Por último, falta explicar o método não destrutivo baseado em correntes de Foucault. Dos três

métodos mencionados, o método das correntes de Foucault é o único que usa como base os

princípios do electromagnetismo [1-3] . Em meados do século XIX, o físico James Clerk Maxwell,

escreveu quatro equações que definem hoje todo o Mundo do electromagnetismo. Não serão

apresentadas essas equações, visto saírem da órbita do trabalho, mas será explicado o seu princípio

básico. Num material condutor, quando sujeito a um campo magnético variável no tempo, gera-se

uma corrente eléctrica ao qual se dá o nome de corrente eléctrica induzida. Estas pesquisas foram de

uma importância enorme e são a base do método não destrutivo por correntes de Foucault. Neste

método, é necessário um enrolamento de excitação, uma corrente de excitação e um material

condutor. Numa primeira fase, é injectada uma corrente variável no tempo no enrolamento de

excitação, a qual produz um campo magnético também variável no tempo. Por sua vez, na presença

de um condutor (placas de alumínio ou outro condutor), este campo electromagnético vai induzir

correntes no alumínio. A estas correntes dá-se o nome de correntes de Foucault. Por último, estas

correntes dão origem a um segundo campo magnético, o qual vai ser então detectado por um sensor

de campo, que tanto pode ser uma outra bobina, como um sensor de magnetoresistência gigante,

GMR. Na Figura 1 encontra-se exemplificado o princípio enunciado em cima.

Page 12: Tese 1,1 MB

3

O GMR é um sensor que é usado para detectar campos magnéticos de baixa intensidade,

provocado pelas falhas que eventualmente possam existir no material. Se não existirem falhas, o

campo detectado pelo GMR permanecerá inalterado. Existem diversas vantagens de usar este

método das correntes de Foucault, sendo as mais relevantes o facto de ser possível detectar

pequenas falhas, o facto de serem produzidos resultados imediatos após uma medição e o facto de o

equipamento ser bastante portátil [7,8,9] .

Posto isto, falta referir que os sinais provenientes do sensor contêm algum ruído, próprio da

alta sensibilidade do método das correntes de Foucault. Como tal, é necessário digitalizar esses

sinais, para posteriormente ser aplicado um algoritmo que os interprete e que, independentemente do

ruído existente, consiga estimar a sua amplitude e fase, para os casos em que a excitação é feita por

ondas sinusoidais. Para tal efeito, foi utilizado um algoritmo de sine-fitting, baseado em [10] e no

estudo realizado pelo autor [11] . Esta explicação será feita no subcapítulo do Estado da Arte.

Resumindo, esta dissertação tem como objectivo transmitir os sinais provenientes dos

sensores utilizados no método das correntes de Foucault por um canal sem fios. Das referências

bibliográficas encontradas na área, não se encontram referências ou artigos relacionados com o tema

“Wireless acquisition systems for detection of cracks in conductive materials”. Como tal, este estudo

assume relevância nesta área, ou seja, na concepção de um sistema sem fios, para ser utilizado na

detecção de fissuras em placas condutoras, usando o método das correntes de Foucault.

Campo Magnético

Eddy Currents

Sensor

Campo de excitação

Placa metálica

Figura 1 – Formação de eddy currents numa placa metálica

Page 13: Tese 1,1 MB

4

1.2. Estado da Arte

Nesta secção, começar-se-á por apresentar estudos sobre autores que desenvolveram

diferentes sensores para o método não destrutivo das correntes de Foucault, bem como referências a

aplicações práticas deste mesmo método. Por último será apresentado um algoritmo de sine-fitting,

que será posteriormente utilizado nesta dissertação.

1.2.1. Método das correntes de Foucault

O facto de os sensores usados para o método das correntes de Foucault serem melhorados,

resulta por um lado numa maior precisão na detecção das falhas, e por outro, numa diminuição do

ruído presente nas medições [8] . No estudo [8] , os autores utilizaram um novo sensor, baseado

numa bobina com uma geometria rectangular juntamente com um magnetoresistência de alta

sensibilidade (GMR) para averiguar falhas em zonas soldadas. Num estudo anterior, estes mesmos

autores tinham usado pankake probes, ou sensores em forma de panqueca, concluindo que com este

tipo de sensor era difícil detectar falhas devido ao intenso ruído [8] . Na Figura 2 encontra-se um

sensor em forma de panqueca, juntamente com um sensor magnético, o GMR. Para realizar a

aquisição, foi usada uma placa de aquisição NI PXI-6120, sendo a interface entre a placa e o sensor

feita por fios através do protocolo de comunicação RS-232. Os autores concluíram que com um

sensor com geometria rectangular, já era possível detectar falhas perpendicular e paralelamente às

zonas soldadas.

GMR

Bobina de excitação

Figura 2 – Sensor em forma de panqueca

Page 14: Tese 1,1 MB

5

Num outro estudo, os autores [12] utilizaram um sensor diferente, baseado numa segunda

bobina para detectar o campo gerado pelas correntes de Foucault (eddy currents) na presença de

placas metálicas condutoras não magnéticas. O objectivo era detectar falhas em placas metálicas de

alumínio com cerca de 4 milímetros. Neste sensor foi usada uma bobina para gerar o campo de

excitação e duas bobinas para detectar o campo induzido. Os autores concluíram que os resultados

foram positivos, na medida em que com estes sensores é possível detectar falhas superficiais. Em

contrapartida, apesar de os sensores indutivos serem os mais frequentes em testes não destrutivos

baseados em correntes de Foucault, o seu desempenho está longe de ser ideal [9] .

Num outro estudo [9] , os autores em substituição do GMR, que já demonstrou ter capacidade

de detectar com sensibilidade falhas em placas condutoras [8,9] , utilizaram um outro tipo de sensor

magnético, ao qual se dá o nome de GMI (Giant Magneto Impedance). Estes sensores têm a

vantagem de combinar alta sensibilidade, rápida resposta e tamanho diminuto. Após realizarem

diversos testes em materiais ferromagnéticos, os autores concluíram que este sensor com o GMI

produz resultados com elevada precisão na detecção de falhas. Para além das excelentes

capacidades de detecção enunciadas pelos autores, estes ainda acrescentam que com esta

tecnologia é possível detectar campos com pouca intensidade a frequências baixas.

Contudo, um método mais avançado para realizar testes baseados no método de correntes

de Foucault, consiste em usar um conjunto de sensores GMR com sensibilidades independentes da

frequência. Isto resulta num melhoramento ao nível da profundidade de detecção da falha, da rapidez

de detecção e na resolução [13] . Com esta tecnologia, é possível com apenas um varrimento de uma

determinada área, ficar com uma caracterização perfeita do local inspeccionado. Duas outras

vantagens destes sensores magnéticos são o baixo consumo de energia e a sua pequena dimensão

[13] . No estudo [13] , os autores realizaram vários testes, em que o número de GMR’s presentes no

sensor foi de 8 ou 16. Esta tecnologia foi aplicada à caracterização de fissuras em torno de furos de

rebite, bem como à detecção de defeitos que possam existir devido à corrosão entre as camadas

constituintes de uma estrutura em multi-camadas de uma aeronave. A este conjunto de GMR’s num

mesmo sensor também se dá o nome de matrizes de GMR’s.

Num outro estudo ainda mais avançado tecnologicamente [14] que o anterior [13] , foram

desenvolvidos dois tipos de sensores. Neste estudo, para além de terem sido desenvolvidas novas

arquitecturas para os sensores, foram também optimizadas as matrizes. O primeiro sensor que os

autores apresentam, é constituído por 32 elementos, em que cada elemento é constituído por duas

micro bobinas, o que constitui um aumento de 32 vezes face ao estudo [12], na medida em que

nesse estudo foram utilizadas somente duas bobinas para detectar o campo magnético gerado pelas

correntes de Foucault. Com este sensor de 32 elementos foi possível detectar fissuras com cerca de

0,4 milímetros, ou seja, 10 vezes mais pequenas do que no caso [12] . O segundo sensor

apresentado utilizava matrizes de GMR’s. Este segundo sensor continha cerca de 22 GMR’s, o que é

um acréscimo de 6 GMR’s face ao estudo [13] . Com este sensor é possível detectar fissuras com

Page 15: Tese 1,1 MB

6

cerca de 0.1 milímetros. Contudo os autores desejam desenvolver mais a tecnologia, de modo a ser

possível detectar falhas com menor dimensão, para que no futuro seja possível usar estes métodos

não destrutivos num maior número de aplicações.

Como tal, esta área é extremamente vasta, pelo que é necessário continuar constantemente

a melhorar a tecnologia utilizada para responder aos novos obstáculos que são colocados. Por outro

lado, com a tecnologia existente, já é possível aplicar estes conhecimentos a situações práticas do

dia-a-dia. No estudo [4] , os autores utilizaram um sensor com uma magnetoresistência (GMR) para

detectar falhas em peças de aviões. Este tipo de estudo é extremamente importante, na medida em

que um dos maiores problemas dos aviões é o aparecimento de falhas junto das zonas em tensão.

Por outro lado, quando se pretende fazer manutenção de aviões, o método das correntes de Foucault

é o método mais económico [15] para detectar falhas. Outros autores [5] , realizaram um estudo com

base em métodos não destrutivos por radiografia, no qual fazem uma inspecção a cabos de média

tensão, observando se estes se encontram nas perfeitas condições para serem usados. Os autores

concluíram que com a ajuda da radiografia conseguem detectar pequenas falhas no interior dos

cabos. Como estes casos práticos apresentados, existem outros em áreas diferentes. Cada vez mais

é importante desenvolver os métodos e técnicas não destrutivas existentes, na medida em que com o

passar dos anos, novas exigências vão aparecer fazendo com que novas tecnologias tenham de ser

implementadas.

1.2.2. Algoritmo de Sine-fitting

Em certas aplicações, por vezes é necessário estimar a amplitude, a fase e a frequência de

um determinado sinal sinusoidal caracterizado por um determinado número de amostras, às quais se

sobrepõe ruído. Por vezes, um destes parâmetros, a frequência, pode ser exactamente conhecido, ou

noutros casos, pode ser simplesmente conhecida uma aproximação deste valor [11] . Uma das

aplicações onde é necessário estimar a amplitude, a fase e por vezes a frequência de amostras de

sinais sinusoidais com ruído é o método não destrutivo com correntes de Foucault [16,17] . Na

literatura [16] , os autores usam uma técnica baseada em correntes de Foucault para detectar falhas

em materiais condutores. A técnica usada consiste na utilização de um sistema de aquisição (DAC)

para posteriormente fazer o processamento do sinal proveniente do sensor, e um algoritmo de sine-

fitting de 3 parâmetros para detectar a amplitude, a fase e a componente DC do sinal proveniente do

sensor. O sensor é constituído por uma bobina de excitação e duas bobinas para detecção do campo

magnético induzido pelas correntes de Foucault. Os resultados obtidos são positivos, mas o método

necessita de aperfeiçoamento de forma a melhorar os resultados. Na literatura [17] , os autores

também utilizaram uma DAC e um algoritmo de sine-fitting para adquirir a amplitude, a fase e a

componente DC dos sinais provenientes do sensor com iguais características à da literatura [16] . A

diferença relativamente à literatura [13] é que neste caso os autores utilizaram um algoritmo de sine-

fitting com 7 parâmetros de forma a conseguir determinar a amplitude, a fase e a componente DC das

duas bobinas que detectam o campo gerado pelas correntes de Foucault. Os autores concluem que a

Page 16: Tese 1,1 MB

7

utilização de uma DAC juntamente com um algoritmo de sine-fitting de 7 parâmetros leva a resultados

muito mais precisos, quando comparado com os do algoritmo de sine-fitting com 3 parâmetros.

No estudo realizado pelo autor [11] , a frequência foi fixada e o algoritmo de Sine-fitting usado

foi o de 3 parâmetros, que se encontra igualmente explicado em [10] . O método de sine-fitting

utilizado foi o método dos mínimos quadrados de 3 parâmetros com recurso a operações matriciais.

O objectivo é estimar a amplitude e fase de um sinal sinusoidal representado pelas suas amostras.

A variável () contém as amostras com ruído de um sinal sinusoidal, ao qual se quer estimar

a sua amplitude e fase. NP é o número total de amostras, TS é o período de amostragem e t0 é o

tempo inicial em segundos. Na expressão (1.1) encontra-se um desenvolvimento em série da variável

tempo, em que tn representa uma variável com tempos discretos.

= , + , … , + ∗ (1.1)

Por sua vez, o sinal que se quer estimar, tem a forma da expressão (1.2), em que A é a amplitude, w

a frequência em rad/s e θ é a fase.

() = ∗ sin ( ∗ + ) (1.2)

Posto isto, o problema resume-se a encontrar os valores de A0, B0, C0, que minimizam o somatório

das diferenças ao quadrado que se encontra na equação (1.3). Só depois de calculados estes valores

é que então será possível calcular a amplitude e fase das amostras do sinal sinusoidal com ruído.

min,, (, , ) = min,, ∑ " − ∗ cos( ∗ ) − & ∗ sin( ∗ ) − '() *+,- (1.3)

De forma a encontrar estes valores, é necessário criar as matrizes D0 em (1.4), em (1.5) e x0 em

(1.6).

. = / cos( ∗ -) sin( ∗ -) 1⋮ ⋮ ⋮cos2 ∗ *34 sin2 ∗ *34 15 (1.4)

= 6 -⋮*37 (1.5)

8 = 6&'7 (1.6)

Como tal, passando da expressão (1.3) para a notação matricial, chega-se à expressão (1.7), a qual

já pode ser calculada numericamente.

min,, (, , ) = ( − . ∗ 8)9 ∗ ( − . ∗ 8) (1.7)

Na equação (1.7), (M)T denota a matriz transposta de (M). Por último, é necessário calcular os valores

de A0 B0 C0 que minimizam a equação (1.7). Para tal, recorrendo a uma ferramenta matemática,

Page 17: Tese 1,1 MB

8

chega-se à expressão (1.8). A solução obtida em 8: corresponde aos valores de A0 B0 C0 que

minimizam a equação (1.7).

8: = (.9 ∗ .);- ∗ (.9 ∗ ) (1.8)

Posto isto, a função estimada fica na forma da equação (1.9), sendo que o objectivo é obter a fase e

amplitude, para chegar à forma da expressão (1.10).

< = ∗ cos( ∗ ) + & ∗ sin( ∗ ) + ' (1.9)

< = ∗ sin( ∗ + ) + ' (1.10)

Em que, A é a amplitude e é dada pela expressão (1.11), θ é a fase definida para a função seno e é

dada pelas expressões (1.12) e (1.13), w é a frequência em rad/s e C é o offset.

= =) + &) (1.11)

= tan;- @− A BC ≥ 0 (1.12)

= tan;- @− A + F BC < 0 (1.13)

Os valores residuais são dados por rn e encontram-se na expressão (1.14). Por último o erro

associado aos valores residuais encontra-se na expressão (1.15).

H = − ∗ cos( ∗ ) − & ∗ sin( ∗ ) − ' (1.14)

IJKL = M -*3 ∗ ∑ H)*3,- (1.15)

1.3. Objectivos

Enquadrada no tema apresentado na secção anterior, esta dissertação tem como objectivo

criar um sistema autónomo, com a capacidade de adquirir 2 sinais sinusoidais, realizar a respectiva

digitalização e posteriormente enviar esses sinais para um computador por um sistema sem fios, para

que sejam processados por um algoritmo de sine-fitting. Para tal, é primeiro necessário conhecer o

número de amostras que é preciso enviar para o computador, para que seja possível uma correcta

estimação do valor das amplitudes e fases dos sinais em questão. Para isso, antes da escolha do

dispositivo para realizar a aquisição, digitalização e envio dos sinais por um canal sem fios para o

computador, é necessário realizar testes ao algoritmo de sine-fitting, de forma a conhecer as suas

limitações. Estas limitações prendem-se com o número de amostras que é necessário adquirir de um

determinado sinal para que seja feita uma correcta estimação do valor da amplitude e fase, tendo em

conta a quantidade de ruído presente. Uma outra conclusão retirada deste estudo inicial, será o

Page 18: Tese 1,1 MB

9

número mínimo de amostras que é necessário adquirir, quando o sinal apresenta níveis de ruído

diferentes. Como seria de esperar, à medida que o ruído aumentar, será necessário adquirir mais

amostras do sinal para que se consiga estimar a amplitude e fase com o menor erro possível. Todos

estes resultados serão apresentados nos capítulos seguintes. Quando forem conhecidos estes

resultados, será criado um sistema autónomo capaz de adquirir e digitalizar os sinais, para

posteriormente os enviar por um canal sem fios para o computador.

1.4. Estrutura da Tese

Este trabalho está dividido em 6 capítulos.

O primeiro capítulo tem como objectivo o enquadramento da dissertação bem como o seu

propósito e objectivos. Para além disto, é apresentado um estado da arte, em que são referidos os

estudos mais relevantes realizados na área em que esta dissertação se insere.

No segundo capítulo, o objectivo será testar o algoritmo de sine-fitting, tendo em conta que os

sinais sinusoidais são todos gerados numa aplicação “Matlab”. Serão realizados alguns testes com

diversos valores de ruído, sendo o ruído gerado por uma função dentro da aplicação “Matlab” que

gera valores pseudo-aleatórios.

No terceiro capítulo, o objectivo é igualmente testar a capacidade do algoritmo de sine-fitting,

só que neste caso, todos os sinais são gerados num gerador externo. O sinal sinusoidal inicial será

gerado num gerador de funções Wavetek, enquanto o ruído será gerado por um gerador de funções

Agilient 33250A. Será utilizado um circuito electrónico para realizar a adição do ruído ao sinal

sinusoidal, bem como para desfasar este mesmo sinal de 90º.

No quarto capítulo será utilizado um sistema autónomo com base num PIC18F4550 inserido

numa placa de teste para realizar a aquisição e digitalização dos sinais, bem como a posterior

transmissão desses mesmos sinais para o computador por um canal sem fios.

No quinto capítulo serão apresentadas as conclusões gerais deste trabalho. No sexto capítulo

serão apresentados possibilidades para futuros trabalhos, baseados na aplicação desenvolvida nesta

dissertação.

Page 19: Tese 1,1 MB

10

2. Primeiros testes com os sinais gerados no computador

2.1. Introdução

Como foi referido na introdução da dissertação, o objectivo principal deste trabalho é saber

qual o número de amostras que é necessário adquirir de um sinal sinusoidal, de forma a produzir um

erro máximo admissível, denominado por ε. Posteriormente, este resultado será utilizado para se

saber qual o número de amostras que será necessário transmitir por um canal sem fios para o

computador. Resumindo, este projecto visa encontrar o número mínimo de informação que é

necessário transmitir, sendo a qualidade dos resultados baseada num determinado erro máximo

admissível para a amplitude e para a fase.

Este 2º capítulo tem como objectivo estudar as potencialidades do algoritmo de sine-fitting,

quando o sinal do qual se pretende estimar a amplitude e fase tem muito ruído. Neste 2º capítulo foi

usada simplesmente a plataforma matlab para gerar todos os sinais. Irão ser gerados 2 sinais, sendo

que um deles é um sinal sinusoidal com frequência de 1 kHz e o outro sinal é o ruído, o qual será

gerado por uma função pseudo-aleatória. O sinal sinusoidal puro de frequência de 1 kHz terá fase α

igual a 90º e amplitude A igual a 5 V, sendo dado pela expressão (2.16).

N = ∗ BCO( ∗ + P) (2.16)

O ruído será gerado recorrendo a uma função no matlab denominada randn, cuja distribuição

é normal e cujos parâmetros, valor médio e desvio padrão, são iguais a 0 e 1, respectivamente. Por

último teremos uma sinusóide ruidosa composta pelo sinal puro mais ruído, que será então

processada pelo algoritmo de sine-fitting, para estimar a fase e a amplitude. Na Figura 3 encontra-se

o esquema de adição de ruído e a posterior recuperação da amplitude e da fase através do algoritmo

de sine-fitting.

Figura 3 – Sinal inicial mais ruído a serem processados pelo algoritmo de sine-fitting

Page 20: Tese 1,1 MB

11

Nos diversos ensaios que vão ser descritos, o procedimento para cada um deles vai ser igual.

Há 3 parâmetros que vão ser variados, de forma a encontrar a solução ideal. O primeiro parâmetro é

o número de períodos, o segundo parâmetro é o número de pontos por período e o terceiro

parâmetro é a relação sinal-ruído, ou SNR. A SNR está definida através da percentagem de ruído

presente no sinal. A conclusão desta primeira fase do trabalho prende-se com a obtenção do número

de períodos e com o número de pontos por período que teremos que utilizar de forma a obtermos os

melhores resultados possíveis.

2.2. Método experimental

O objectivo desta secção prende-se com a obtenção de uma relação entre o número de

períodos e número de pontos por período necessários de forma a garantir bons resultados, em

função do ruído presente no sinal. Neste método, são considerados bons resultados, aqueles valores

que tiverem um erro menor que ε relativamente aos valores iniciais. Isto significa que para obter

resultados bons, o algoritmo de sine-fitting terá de estimar valores para a amplitude entre 5- ε V e 5+ ε

V. Em termos da fase será igualmente definido um erro ε, sendo que o erro para a fase vai ser

diferente do erro para a amplitude. Mas em cada simulação irá ser explicitado qual o erro máximo

admissível.

Como foi citado anteriormente, o método experimental consiste na variação de 3 parâmetros.

O número de períodos a amostrar e o número de pontos por período definem a dimensão da amostra.

Por sua vez, o número de pontos por período define a frequência de amostragem, que é o inverso do

período de amostragem. A relação entre estas grandezas encontra-se na expressão (2.17), onde T é

o período do sinal, NPP é o número de pontos por período e Ts é o período de amostragem.

B = 9* (2.17)

O 3º parâmetro é a relação sinal-ruído. Como foi dito anteriormente o ruído é gerado

directamente na aplicação usada, através de uma função que gera um vector de valores pseudo-

aleatórios. Este vector de valores é gerado segundo uma distribuição normal com média nula e

desvio padrão igual a 1. O método a utilizar consiste em variar a percentagem de ruído presente no

sinal desde os 10% até 100%, sendo que para cada percentagem de ruído vão ser variados o número

de períodos e o número de pontos por período. Para cada valor de percentagem de ruído está

associada uma relação sinal-ruído diferente. Antes de continuar a descrição do método experimental,

será explicada a importância e a vantagem de utilizar uma distribuição normal para caracterizar o

ruído, e, como se perceberá mais à frente, para estudar as amostras recolhidas.

Numa distribuição normal, os 2 parâmetros mais relevantes são o valor médio e o desvio

padrão. O valor médio expressa o valor central da amostra, enquanto o desvio padrão evidencia a

dispersão da amostra. O valor médio pode ser calculado para uma distribuição discreta através de

somatórios, ou para uma distribuição contínua através do cálculo integral. Na expressão (2.18)

Page 21: Tese 1,1 MB

12

encontra-se a fórmula de cálculo para o valor médio no caso discreto e na expressão (2.19) encontra-

se o cálculo para o valor médio no caso contínuo. No caso contínuo, o valor médio representa o valor

esperado, sendo que f(x) representa a função de densidade de probabilidade.

8Q = - ∗ ∑ 8RR,- (2.18)

8Q = S 8 ∗ T(8) U8VW;W (2.19)

Quanto maior for o desvio padrão, maior é a dispersão da amostra. Na Figura 4 encontra-se uma

possível representação de uma distribuição normal em que a média é µ e o desvio padrão está

representado por σ. Numa distribuição normal 68,2 % dos valores da amostra estão compreendidos

entre µ-σ e µ+σ. Por sua vez os valores compreendidos entre µ-2*σ e µ+2*σ correspondem a 95,4 %

dos valores da amostra, e os valores compreendidos entre µ-3*σ e µ+3*σ correspondem a

praticamente 100 % dos valores da amostra. Como tal a caracterização de uma amostra através de

uma distribuição normal é extremamente conclusiva, pois permite perceber se os resultados obtidos

se aproximam daqueles que eram esperados teoricamente.

2.1 % 13.6 % 34.1 % 34.1 % 13.6 % 2.1 %

µµ- σ µ + σµ- σ µ + σ

Figura 4 – Distribuição normal com média µ e desvio padrão σ

Voltando à geração de ruído, recorda-se que o ruído gerado tem valor médio nulo e desvio

padrão igual a 1. Como tal, para obter ruído que tenha uma determinada percentagem da amplitude

do sinal original, utilizam-se os valores eficazes do sinal sinusoidal e do ruído. Para uma onda

alternada sinusoidal, o valor eficaz representa o desvio padrão e é dado por XLYZ = √), em que XLYZ é o

valor eficaz e A é a amplitude da sinusóide. Relativamente ao ruído, o valor eficaz é simplesmente

igual ao seu desvio padrão, porque o ruído tem valor médio nulo. Na expressão (2.20) encontra-se o

cálculo do valor eficaz para uma amostra com N elementos e na expressão (2.21) encontra-se o

cálculo para o desvio padrão igualmente para uma amostra de N elementos.

XLYZ = M-* ∗ ∑ 8R)*- (2.20)

Page 22: Tese 1,1 MB

13

XJYZ = M-* ∗ ∑ (8R − \))*- (2.21)

Posto isto, na expressão (2.22) encontra-se a relação entre o valor eficaz do sinal sinusoidal e

do ruído. O factor α define a percentagem de ruído que está presente no sinal. Com esta expressão

consegue-se controlar a percentagem de ruído que se quer ter no sinal.

XJYZ = P ∗ XLYZ (2.22)

Visto que o ruído é caracterizado por uma distribuição normal com desvio padrão igual a 1,

para obter ruído com distribuição normal com um determinado valor de desvio padrão, basta

multiplicar o ruído por XJYZ, ou seja, basta multiplicar o sinal de ruído pelo XJYZ de ruído pretendido.

Antes de avançar para a última explicação do método experimental, apresenta-se na expressão

(2.23), a forma de cálculo da relação sinal-ruído, ou SNR. Como se pode comprovar, a SNR é

calculada em função da percentagem de sinal ruidoso presente no sinal sinusoidal original, pelo que

na análise de resultados irei somente falar em percentagem de ruído em vez de falar em SNR.

]^ = 20 log-( √)∗bcYZ) (2.23)

Por último, e para concluir a explicação do método experimental, falta referir que para cada

SNR, número de períodos e número de pontos por período, o programa vai ser executado 300 vezes,

sendo que para cada uma delas é gerado ruído diferente, mas com o mesmo desvio padrão. Isto

torna-se necessário porque estamos na presença de variáveis pseudo-aleatórias, o que exige a

repetição da simulação variadas vezes para obtermos resultados concludentes e não meramente

resultados que depois do ponto de vista prático não servem. Depois de serem retiradas estas 300

amostras, são guardadas num vector e é calculado o seu desvio padrão com base na equação (2.21).

Posteriormente são analisados quais os resultados máximos e mínimos para cada valor diferente do

número total de pontos e de ruído, concluindo-se então, quais os melhores resultados, ou seja

aqueles que se encontram dentro do erro máximo admitido. Os resultados são considerados bons

quando se obtiverem no mínimo 98% dos resultados das amplitudes e fases dentro dos valores de

erro propostos (dependendo do ruído presente, o erro máximo admissível varia, como se verá mais

adiante). No diagrama da Figura 5 encontra-se esquematizado o funcionamento do programa. No

início a percentagem de ruído, o número de pontos por período, o número de períodos e a variável de

controlo “i” são colocados a zero. Depois o programa vai evoluindo, acabando quando a percentagem

de sinal ruidoso presente no sinal sinusoidal for igual a 100 %. O número de períodos varia entre 1 e

30 e o número de pontos por período varia entre 3 e 200. O número de pontos por período não

começa em 1 ou 2 porque não faz qualquer sentido amostrar 1 ou 2 pontos por período. De seguida

será apresentada a análise aos resultados obtidos.

Page 23: Tese 1,1 MB

14

Começo

Incremento da percentagem de ruído

em 10 %

Incremento do Número de pontos por períodos

em 1 unidade

Incremento do Número de períodos

em 1 unidade

-Gerar Ruído pseudo aleatório

-Usar a aplicação SineFit-Incrementar uma variável de controlo i em 1 unidade

% de Ruído > 100 %

NPP > 200

Variável i > 300

NP > 30

SIM END

SIM

NÃO SIM

NÃO

NÃO

NÃO

SIM

Figura 5 – Esquema de funcionamento do programa

2.3. Análise de resultados

Como foi dito anteriormente, o número de períodos variou entre 1 e 30, enquanto o número

de pontos por período variou entre 3 e 200. Ou seja, o número total de pontos adquiridos variou entre

3 e 6000 pontos.

Para cada valor de pontos por período amostrados está associado uma determinada

frequência de amostragem. Neste capítulo apesar da frequência de amostragem estar sempre

presente, não lhe será necessário fixar um valor, na medida em que o importante é especificar qual o

número de pontos por período que se quer amostrar. Resumindo, a diferença deste método para o

Page 24: Tese 1,1 MB

15

segundo, é que neste método, primeiro definem-se quantas amostras queremos ter e posteriormente

calcula-se a frequência de amostragem, enquanto no segundo método define-se primeiro a

frequência de amostragem e posteriormente calcula-se quantas amostras queremos ter, dependendo,

não só da frequência de amostragem escolhida, mas também do tempo de amostragem pretendido.

De seguida apresentam-se os resultados obtidos e a consequente conclusão. Recorde-se que a

amplitude escolhida para o sinal é de 5 V e a fase é de 90º.

Como se pôde perceber pela Figura 5, é necessário variar 3 parâmetros, sendo que para

cada uma dos gráficos apresentados só poderemos ter 2 dos parâmetros a variar, fixando o terceiro.

Na análise de resultados, o parâmetro a fixar escolhido foi a percentagem de ruído, ou SNR, e como

tal o número de períodos e pontos por período vão ser variáveis em cada um dos gráficos, tal como

se pode observar na Figura 6, Figura 7 e Figura 8.

Figura 6 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 10% de ruído da

amplitude máxima

Cada uma daquelas figuras corresponde a uma determinada percentagem de ruído e os valores que

estão a variar são o número de períodos e pontos por período. Como foi explicado anteriormente

neste capítulo, foram feitas simulações com percentagens de ruído entre 10 % e 100 %, com

intervalos de 10 em 10. Posteriormente, observou-se que existiam grandes diferenças entre as

percentagens de 10%, 50% e 100%, pelo que serão os únicos gráficos que serão apresentados.

Nestes 3 gráficos está representado o desvio padrão dos resultados de amplitude para as 300

repetições. Como pode ser observado, os resultados pioram à medida que a percentagem de ruído

presente no sinal aumenta. Na Figura 6, o valor máximo de desvio padrão das 300 repetições

acontece para o número mínimo de amostras (3 amostras adquiridas) e tem o valor de 0.2239 V e o

Page 25: Tese 1,1 MB

16

valor mínimo acontece para o máximo número de amostras (6000 amostras adquiridas) e tem o valor

de 0.005976 V. Na Figura 7, o valor máximo de desvio padrão das 300 repetições acontece para o

número mínimo de amostras (3 amostras adquiridas) e tem o valor de 1.07 V e o valor mínimo

acontece para o máximo número de amostras (6000 amostras adquiridas) e tem o valor de 0.03435

V.

Figura 7 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 50% de ruído da

amplitude máxima

Figura 8 – Desvio padrão da amplitude, considerando as 300 repetições, e sinais com 100% de ruído da

amplitude máxima

Page 26: Tese 1,1 MB

17

Na Figura 8, o valor máximo de desvio padrão das 300 repetições acontece para o número mínimo de

amostras (3 amostras adquiridas) e tem o valor de 2.05 V e o valor mínimo acontece para o máximo

número de amostras (6000 amostras adquiridas) e tem o valor de 0.06386 V.

Como se pôde observar, os melhores resultados acontecem para pequenas percentagens de

ruído e para o maior número de amostras recolhidas. Estes 3 gráficos servem como introdução para o

que será apresentado a seguir que será uma conclusão relativamente à amplitude. De seguida serão

apresentados alguns gráficos com os valores máximos e mínimos de amplitude para diferente

número de amostras recolhidas. Estes últimos gráficos vão ser conclusivos relativamente ao número

de amostras mínimas necessárias em cada uma das situações. Cada um dos gráficos irá conter 6

curvas, sendo que 3 delas caracterizam os valores mínimos obtidos nas simulações e as outras 3

correspondem aos valores máximos das amplitudes obtidas nas diversas simulações. Como se pode

observar pelas legendas, em cada uma das figuras as curvas a vermelho foram obtidas com o

número de períodos igual a 1, as curvas a preto com o número de períodos igual a 10 e as curvas a

azul com o número de períodos igual a 30. Antes de analisar os resultados, é importante definir o erro

máximo admitido para cada uma das percentagens de ruído. No caso de termos a percentagem de

ruído fixada nos 10 %, o erro máximo admitido é de 0.5 %. No caso da percentagem de ruído ser 50

%, o erro máximo admitido é de 2 %. E, finalmente, no caso da percentagem de ruído ser 100 %, o

erro máximo admitido é de 4 %. Na expressão (2.24) encontra-se a fórmula de cálculo para o erro de

amplitude que é dado por εA. Â é a amplitude estimada pelo programa Sine-fitting.

I = de;ff d ∗ 100% (2.24)

Nas 3 figuras seguintes, serão apresentados os resultados das amplitudes máximas e

mínimas estimadas pelo algoritmo de sine-fitting, para percentagens de ruído, número de períodos e

número de pontos por período diferentes. Na Figura 9 encontram-se os valores máximos e mínimos

das amplitudes para uma percentagem de ruído de 10 %. Na Figura 10 encontram-se os valores

máximos e mínimos das amplitudes para uma percentagem de ruído de 50 %. Na Figura 11

encontram-se os valores máximos e mínimos das amplitudes para uma percentagem de ruído de 100

%. Como se pode observar desde já, existe uma grande diferença de resultados entre as 3 figuras.

Para a Figura 9, o valor máximo e mínimo de amplitude obtido foi de 5.7 V e 4.3 V, respectivamente,

enquanto na Figura 11 o valor máximo e mínimo de amplitude obtido foi de 13 V e 1 V,

respectivamente. Por esta razão, de forma a encontrar o valor mínimo de amostras necessárias para

cada uma das situações, é necessário encontrar os resultados que levam a um erro igual ou menor

do que foi especificado. As tabelas seguintes têm como função fazer um resumo dos resultados

obtidos e apresentados nas 3 figuras seguintes. A Tabela 1 contém os resultados relativos à Figura 9,

a Tabela 2 contém os resultados relativos à Figura 10 e por fim, a Tabela 3 contém os resultados

relativos à Figura 11. Como se pode observar, na primeira coluna de cada tabela encontra-se o erro

máximo, na segunda coluna o erro mínimo e na terceira coluna o erro máximo definido como mínimo

admissível. Nas linhas da última coluna encontram-se o número de períodos, pontos por período e

Page 27: Tese 1,1 MB

18

número total de amostras necessárias adquirir para garantir que os resultados se encontram dentro

do erro máximo admissível.

Tabela 1 – Resultados obtidos para uma percentagem de ruído de 10 % relativamente à amplitude

Erro Max=15 % Erro Min=0.4 % Erro=0.5 %

NP 1 30 30

NPP 3 200 30

NTOT 3 6000 900

Figura 9 – Valores máximos e mínimos da amplitude das amostras com ruído 10 %

Tabela 2 – Resultados obtidos para uma percentagem de ruído de 50 % relativamente à amplitude

Erro Max=64 % Erro Min=2 % Erro=2%

NP 1 30 30

NPP 3 200 130

NTOT 3 6000 3900

Page 28: Tese 1,1 MB

19

Pela Tabela 1 pode-se observar que os resultados são considerados bons quando o número

total de amostras é superior a 900.

Na Tabela 2, para uma percentagem de ruído presente no sinal de 50 %, só se conseguem

obter bons resultados de amplitude a partir de 3900 pontos. Também se observa que o erro não se

altera entre 3900 amostras ou 6000. Isto significa que o algoritmo de sine-fitting, com esta

percentagem de ruído, não consegue melhorar os resultados para um número de amostras

adquiridas superior a 3900.

Figura 10 – Valores máximos e mínimos da amplitude das amostras com ruído 50 %

Tabela 3 – Resultados obtidos para uma percentagem de ruído de 100 % relativamente à amplitude

Erro Max=169 % Erro Min=4 % Erro=4%

NP 1 30 30

NPP 3 200 130

NTOT 3 6000 3900

Page 29: Tese 1,1 MB

20

Figura 11 – Valores máximos e mínimos da amplitude das amostras com ruído 100 %

Por último, na Tabela 3, observa-se que só se conseguem obter bons resultados para a amplitude a

partir de 3900 amostras. Aqui está um exemplo parecido com o anterior, no qual o ruído é tão

elevado, que a partir de um certo número de amostras totais adquiridas, o algoritmo de sine-fitting já

não consegue melhorar os resultados.

Concluído o estudo sobre a amplitude, é necessário agora estudar a fase. Só para recordar, a

fase da sinusóide inicial foi definida em 90 º. Como tal, irá ser especificado um erro admissível para

cada percentagem de ruído e irá ser feito um estudo para a fase idêntico ao feito para a amplitude.

Tal como para a amplitude, serão apresentadas 3 figuras com os desvios padrões das 300

repetições da aplicação, para cada valor de período, pontos por período e ruído. O que se vai

observar é que com poucas amostras os resultados para a fase são bastante piores. Na Figura 12

encontram-se os resultados para uma percentagem de ruído de 10%.

Neste caso, o máximo desvio padrão ocorre com 3 amostras adquiridas e tem o valor de

3.035º e o mínimo valor de desvio padrão ocorre com 6000 amostras adquiridas e tem o valor de

0.07426º. Na Figura 13, encontra-se agora o mesmo estudo mas para uma percentagem de ruído de

50 %. Neste caso, o desvio padrão máximo é de 17.22º e o desvio padrão mínimo é de 0.363º. Por

último, na Figura 14 encontra-se o desvio padrão das 300 repetições para uma percentagem de ruído

de 100 %. Neste caso, o desvio padrão máximo é de 39.2º e o desvio padrão mínimo é de 0.7876º.

Page 30: Tese 1,1 MB

21

Figura 12 – Desvio padrão da fase, considerando as 300 repetições, e sinais com 10% de ruído da amplitude

máxima

Figura 13 – Desvio padrão da fase, considerando as 300 repetições, e sinais com 50% de ruído da amplitude

máxima

Page 31: Tese 1,1 MB

22

Figura 14 - Desvio padrão da fase, considerando as 300 repetições, e sinais com 100% de ruído da amplitude

máxima

De seguida são apresentados 3 gráficos similares aos apresentados para a amplitude, onde

se encontram os valores máximos e mínimos da fase. Para a fase, serão definidos valores de erro

mais restritos, visto que os resultados obtidos foram bastante bons. Posteriormente é apresentada

uma tabela, em que será indicado o número total de amostras necessárias para cumprir os requisitos

de erro propostos para a fase. O que se espera é que se necessite de um menor número de amostras

para cumprir os requisitos de erro, visto que os resultados foram melhores para a fase.

Na Figura 15, encontram-se os valores máximos e mínimos da fase para uma percentagem

de ruído presente no sinal sinusoidal de 10 %. O valor máximo de fase obtido foi de 98º e o valor

mínimo de fase obtido foi de 80º. Quando o número de amostras é baixo, o algoritmo de sine-fitting

revela alguma dificuldade em devolver bons resultados, dentro do erro máximo admissível, para a

fase. Contudo, quando se aumenta o número de amostras, os resultados melhoram

consideravelmente e chegam mesmo a ser melhores do que os resultados obtidos para a amplitude.

Na Tabela 4 encontram-se os resultados obtidos para uma percentagem de ruído de 10 %.

Tabela 4 – Resultados obtidos para uma percentagem de ruído de 10 % relativamente à fase

Erro Max=8.78 % Erro Min=0.22 % Erro=0.5%

NP 1 30 30

NPP 3 200 30

NTOT 3 6000 900

Page 32: Tese 1,1 MB

23

Figura 15 – Valores máximos e mínimos da fase das amostras com ruído 10 %

Para uma percentagem de ruído de 10 %, será considerado um erro máximo de 0.5%, o qual

é possível garantir com 900 amostras recolhidas.

Para uma percentagem de ruído de 50%, o erro máximo admissível será de 1%, o qual é

possível obter com 3900 amostras recolhidas, como se comprova pela Tabela 5. Na Figura 16

encontram-se os valores máximos e mínimos obtidos para esta percentagem de ruído de 50%. Como

se pode observar, o valor máximo obtido é de 142.4º e o valor mínimo é de 38º, o qual resulta num

erro máximo de cerca de 58%, com 4 amostras recolhidas.

Tabela 5 – Resultados obtidos para uma percentagem de ruído de 50 % relativamente à fase

Erro Max=57.7 % Erro Min=1 % Erro=1%

NP 1 30 30

NPP 4 200 130

NTOT 4 6000 3900

Page 33: Tese 1,1 MB

24

Figura 16 – Valores máximos e mínimos da fase das amostras com ruído 50 %

Finalmente para uma percentagem de ruído de 100%, na Figura 17 encontram-se os valores

máximos e mínimos obtidos para a fase e na Tabela 6 os resultados obtidos face ao erro máximo

admitido que é de 2.1%. O valor máximo obtido é de 172º e o valor mínimo é de 2º, o que resulta num

erro máximo de quase 100%. Contudo a partir de 3900 amostras recolhidas já é possível garantir um

erro de 2.1%.

Tabela 6 – Resultados obtidos para uma percentagem de ruído de 100 % relativamente à fase

Erro Max=97.7 % Erro Min=2.1 % Erro=2.1%

NP 1 30 30

NPP 3 200 130

NTOT 3 6000 3900

Estudada a dependência do ruído e do número de amostras na obtenção de bons resultados, será

feita uma análise no domínio do tempo, em que é possível observar em gráficos temporais,

resultados bons e resultados maus.

Page 34: Tese 1,1 MB

25

Figura 17 – Valores máximos e mínimos da fase das amostras com ruído 100 %

Serão apresentados três gráficos, em que num deles os resultados são maus, noutro são

razoáveis e no último são bons. Tal como foi feito para as simulações em cima, a frequência do sinal

é 1 de kHz, a amplitude da sinusóide original é 5 V e a fase é 90º. Em todos estes gráficos, a curva a

vermelho é a sinusóide estimada pelo programa sine-fitting, as amostras do sinal com ruído estão

representadas a preto pelos pontos e a sinusóide original está representada a azul.

Figura 18 –2 períodos e 3 pontos por período com 10 % de ruído

Page 35: Tese 1,1 MB

26

Na Figura 18 os parâmetros usados foram 2 períodos e 3 pontos por período, sendo que o

ruído presente no sinal é de 10 %. Como pode ser observado, a amplitude que foi estimada pelo

algoritmo de sine-fitting é de 3,7667 V, muito longe do valor teórico esperado que eram os 5 V.

Relativamente à fase, obteve-se um valor de 134,8905º, o qual é igualmente muito diferente dos 90º

esperados teoricamente.

De seguida, mantendo a percentagem de ruído nos 10 %, aumentou-se o número de

períodos e o número de pontos por período para 10. Esperam-se resultados mais aceitáveis que os

anteriores, mas ainda assim um pouco abaixo dos resultados óptimos. Na Figura 19 encontram-se os

resultados obtidos.

Figura 19 – 10 Períodos e 10 pontos por período com 10% de ruído

Como pode ser observado na Figura 19, a amplitude estimada pelo algoritmo de sine-fitting

foi de 4,3484 V e a fase foi de 83,1765º. Estes resultados já não são tão maus como os anteriores

mas mesmo assim é necessário adquirir mais amostras para melhorar os resultados obtidos. Como

tal irá ser apresentado um último gráfico, em que os resultados obtidos já se enquadram nos padrões

de perfeição desejados. Na Figura 20 encontram-se os resultados obtidos, sendo o número de

períodos e o número de pontos por período igual a 30, sendo que o ruído que estava presente no

sinal era de 10 %. Neste caso os resultados obtidos são muito positivos e encontram-se dentro do

erro máximo admissível. A amplitude estimada foi de 5.0065 V, enquanto a fase estimada foi de

90,0614º. Estes resultados já satisfazem claramente os requisitos pretendidos relativamente ao erro

máximo admitido. Como se pode observar, as curvas do sinal original com 5 V de amplitude e do

sinal estimado estão praticamente sobrepostas, o que revela a precisão dos resultados.

Page 36: Tese 1,1 MB

27

Figura 20 – 30 períodos e 30 pontos por período com 10% de ruído

Em resumo, os resultados obtidos foram satisfatórios, sendo por isso agora necessário passar

para a fase seguinte, onde se pretende gerar um sinal exterior, adicionar ruído externo e fazer a

amostragem utilizando um conversor analógico digital.

2.4. Conclusões

Os resultados obtidos foram satisfatórios na medida em que é possível obter bons resultados

com poucas amostras. Resumindo, será apresentada uma tabela com os resultados para a

amplitude, outra tabela com os resultados para a fase e uma tabela final com os resultados finais, ou

seja, o número mínimo de amostras necessários de forma a garantir que tanto a fase como a

amplitude se encontram sempre dentro dos intervalos de erro máximo estipulados.

Na Tabela 7 encontram-se os resultados obtidos para a amplitude para cada uma das

percentagens de ruído. Recorde-se que para uma percentagem de ruído de 10% o erro máximo

permitido é de 0.5%, para uma percentagem de ruído de 50% o erro máximo permitido é de 2% e

para uma percentagem de ruído de 100% o erro máximo permitido é de 4%.

Tabela 7 – Resultados finais para a amplitude

ε = 0.5%

Ruído = 10%

ε = 2%

Ruído = 50%

ε = 4%

Ruído = 100%

NP 30 30 30

NPP 30 130 130

NTOT 900 3900 3900

Page 37: Tese 1,1 MB

28

Na Tabela 8 encontram-se os resultados obtidos para a fase para cada uma das percentagens de

ruído. De realçar que o erro máximo permitido para a fase é superior ao erro máximo permitido para a

amplitude. Saliente-se igualmente que para garantir o erro mínimo estipulado na amplitude e na fase,

para as percentagens de ruído de 50% e 100%, é necessário o mesmo número de amostras.

Tabela 8 – Resultados finais para a fase

ε = 0.5%

Ruído = 10%

ε = 1%

Ruído = 50%

ε = 2,1%

Ruído = 100%

NP 30 30 30

NPP 30 130 130

NTOT 900 3900 3900

Relativamente ao objectivo desta primeira etapa do trabalho, isto é estudar o número de

pontos por período e o número de períodos necessários de forma a obter bons resultados, é possível

concluir que no caso limite com percentagem de ruído de 100 %, são necessárias 3900 amostras

para se obterem resultados com um erro de 2.1%, sendo que isto só acontece quando o sinal se

encontra verdadeiramente corrompido com ruído. Se a percentagem de ruído presente no sinal for de

50% são necessárias igualmente 3900 amostras, sendo que o erro máximo admissível é de 1%. Já

para o caso onde a percentagem de ruído é de 10%, são necessárias somente 900 amostras, para

um erro máximo admissível de 0.5%. Estes resultados finais estão fixados na Tabela 9.

Tabela 9 – Resultados finais

Ruído = 10% Ruído = 50% Ruído = 100%

NP 30 30 30

NPP 30 130 130

NTOT 900 3900 3900

Page 38: Tese 1,1 MB

29

3. Testes com um ADC

3.1 Introdução teórica

Nesta 2ª fase do projecto, o método será diferente do efectuado no capítulo anterior, mas o

objectivo é o mesmo, ou seja, obter os melhores resultados possíveis com o menor tempo e com o

menor número de amostras possível. No 2º capítulo foi estudado a obtenção da amplitude e fase de

um sinal gerado internamente no computador. Neste capítulo, os sinais serão gerados externamente,

sendo que o objectivo é medir a amplitude e a diferença de fase de 2 sinais desfasados por um valor

conhecido à partida. Como o título do capítulo indica, será utilizado um sistema de aquisição da

National Instruments de 16 bits (NI 9215), para fazer a aquisição dos sinais, sendo que o

processamento do sinal continua a ser feito novamente pelo algoritmo de sine-fitting. Um ADC, é um

dispositivo que converte os sinais analógicos em digitais com uma determinada frequência de

amostragem, ou ritmo de amostragem, de forma a ser possível trabalhar esses mesmos sinais no

computador ou em qualquer outro dispositivo que tenha o seu domínio no mundo digital. Isto é o

mesmo que dizer que um ADC vai transformar um sinal contínuo no tempo num sinal discreto,

representado pelas suas amostras. Posteriormente, estas amostras são convertidas em palavras

digitais que possam ser processadas pelo computador. Mas para fazer a aquisição de um sinal de

uma forma correcta, em que seja possível recuperar o sinal original, é necessário ter alguns cuidados,

nomeadamente a escolha do número de amostras que queremos ter e do ritmo a que queremos obter

essas mesmas amostras. De seguida é explicado o modo como é feito essa aquisição e a

consequente amostragem do sinal contínuo no tempo.

Em primeiro lugar, é necessário saber qual a frequência a que o sinal analógico se encontra

de forma a se escolher uma frequência de amostragem suficientemente grande para amostrar o sinal

de forma correcta. O teorema de Nyquist enuncia que, para que seja possível reconstruir um sinal

analógico com a máxima perfeição e com a mínima perda de qualidade, a frequência de amostragem

tem de ser pelo menos 2 vezes superior à frequência do sinal sinusoidal. Para garantir resultados

ainda melhores, é aconselhável que a frequência de amostragem seja superior a 2 vezes a

frequência do sinal. É óbvio que se forem utilizadas frequências de amostragem inferiores a 2 vezes a

frequência do sinal, os resultados vão ficar errados pois dá-se um fenómeno que tem o nome de

aliasing. Este fenómeno causa distorção e induz erros irremediáveis e como tal, é impossível garantir

uma perfeita digitalização de um sinal se ocorrer aliasing.

Por outro lado, ao escolher a frequência de amostragem, está-se a definir também o

espaçamento que as amostras vão ter no sinal discreto, digital. O espaçamento entre as amostras é

igual ao inverso da frequência de amostragem.

∆ = -ij = j (3.25)

Page 39: Tese 1,1 MB

30

Na expressão (3.25), ∆t é o espaçamento entre as amostras, Fa é a frequência de

amostragem e Ta é o período de amostragem.

Por último importa saber o número de amostras que efectivamente serão adquiridas. O

número total de amostras depende directamente do tempo total de amostragem, Tt. A expressão

(3.26) relaciona o número total de amostras N, com a frequência de amostragem e com o tempo total

de aquisição ou amostragem.

= kl ∗ m (3.26)

Visto que o tempo total de aquisição depende directamente do número de períodos

adquiridos, chega-se à expressão (3.27), que relaciona o tempo total de aquisição com o número de

períodos, NP, e com o período do sinal, T.

m = n ∗ (3.27)

Por fim, para obter o número de amostras por período, NPP, basta multiplicar o período do

sinal pela frequência de amostragem, ou então dividir pelo período de amostragem, como se

comprova pela expressão (3.28).

nn = ∗ kl = 9∆m (3.28)

Terminada a explicação sobre a parte teórica necessária para este capítulo, irá de seguida

ser explicado o método experimental utilizado.

3.2 Método Experimental

Neste 3º capítulo os sinais são totalmente gerados externamente, sendo posteriormente

adquiridos por um ADC de 16 bits. Como tal, é necessário adicionar ruído e desfasar o sinal original

de forma a originar um sinal, por um lado com ruído e por outro, com uma diferença de fase

relativamente ao sinal original, conhecida. Entre várias hipóteses que existem para realizar o

proposto, foi desenhado o circuito presente na Figura 21. O sinal sinusoidal original está designado

na figura como SINAL, o gerador de ruído está designado como RUÍDO, as resistências como RR e

RF e o condensador como C. O amplificador operacional usado foi o modelo UA741. O V_SAÍDA

corresponde ao sinal desfasado e ruidoso, o qual vai ser posteriormente inserido no computador para

ser processado através do programa Sine-fitting. Como se pode observar, em teoria o sinal à saída

iria ficar com uma diferença de fase de 90º relativamente ao sinal de entrada. O objectivo prende-se

com a medida desta desfasagem entre o sinal de saída e o sinal de entrada. Relativamente à

amplitude do sinal de saída, é necessário dimensionar as resistências e o condensador para uma

determinada frequência de sinal, de forma a calcular qual será o ganho teórico do circuito. Mais à

frente nesta secção está explicado em detalhe o cálculo do ganho.

Page 40: Tese 1,1 MB

31

Para gerar o sinal original, foi usado um gerador Wavetek, sendo que o modelo usado foi o

39. A onda sinusoidal tem 1 V de amplitude e offset igual a 0. Foi usada a frequência de 1kHz. Para

gerar o ruído foi utilizado um gerador de sinais Agilent 33250A.

O método experimental consiste em variar a frequência de amostragem e o ruído presente no

sinal para uma determinada frequência do sinal sinusoidal fixa. Ou seja, isto significa que se a

frequência de amostragem variar, o número de pontos por período adquiridos está a variar

igualmente. No método experimental, a frequência do sinal foi fixada em 1 kHz e para a frequência de

amostragem foram tomados os valores de 48 kHz, 22 kHz, 18 kHz, 8 kHz e 4 kHz. As resistências

usadas foram as de 4.7 kΩ, enquanto que o valor do condensador usado foi de 34 nF. De seguida

serão apresentados os cálculos relativos ao circuito da Figura 21.

Figura 21 – Circuito utilizado para adicionar ruído e desfasar o sinal sinusoidal

Antes de iniciar com as expressões relativas ao esquema do circuito, é necessário introduzir

primeiro a expressão da corrente do condensador e a expressão da corrente na resistência RR que se

encontra a seguir ao gerador de ruído.

o = ' ∗ pqrpq (3.29)

oJc = qcJc (3.30)

As expressões (3.29) e (3.30) são utilizadas para o cálculo da corrente no condensador e na

resistência RR, respectivamente. Posteriormente, a corrente que passa na resistência RF é dada pela

expressão (3.31), e a tensão de saída é dada pela expressão (3.32).

oJs = o + oJc = ' ∗ pqrpm + qcJc (3.31)

Page 41: Tese 1,1 MB

32

N = −^i ∗ oJi (3.32)

Passando para o domínio da frequência, o sinal de saída é dado pela expressão (3.33).

Xt = −u ∗ ∗ ^i ∗ ' ∗ XLt − JsJc ∗ XJ (3.33)

Na expressão (3.33), “w” é a frequência em radianos por segundo, “j” denota a unidade

imaginária e Xt , XLt C XJ representam os valores eficazes das tensões de saída, do sinal e do ruído,

respectivamente.

Por último fica a faltar uma expressão muito importante, que é o ganho do circuito. Este

ganho é calculado com base numa fracção entre o sinal de saída e o sinal de entrada, e é dado pela

expressão (3.34). Olhando agora novamente para a expressão (3.33), observa-se que se o ganho for

igual a 1, à saída iremos ter o sinal de entrada com uma diferença de fase de 90º, juntamente com

ruído. Na Tabela 10 encontram-se os dados que permitiram calcular o valor do ganho teórico. O

ganho encontra-se em unidades lineares. Como se pode verificar, com os valores de resistência e de

condensador usados conseguimos um ganho unitário e uma diferença de fase esperada entre o sinal

à entrada e o sinal à saída de 90º.

v = bbw = ∗ ^i ∗ ' (3.34)

Tabela 10 – Cálculos auxiliares para controlar o ganho

f (kHz) w=2*π*f (rad/s) RF (kΩ) C (nF) G

1 6283 4.7 34 1

Posto isto, é necessário realizar novos testes de forma a perceber qual é o desempenho do

programa Sine-fitting quando se tratam de sinais externos que são inseridos no computador através

de um ADC. Uma vez mais, quando se fala de desempenho, está-se a referir ao número de pontos

por período e ao número de períodos que são necessários amostrar de forma a obter um erro que

seja inferior a um determinado ε que irá ser definido mais adiante. Nos diversos testes realizados, a

amplitude do ruído presente no sinal sinusoidal vai variar, bem como o número de períodos e pontos

por período. A velocidade de transmissão é calculada com base na expressão (3.35), e é obtida

multiplicando a frequência de amostragem, Fa, pelo número de bits do conversor analógico digital.

Como foi referido anteriormente neste capítulo, nos testes realizados foi utilizado um ADC com 16

bits.

NCxyzoUlUC UC HlOBoBBãy = kl ∗ º ~oB (3.35)

Page 42: Tese 1,1 MB

33

Por último, falta referir que irá ser utilizado um método similar ao usado no 2º capítulo. Para

cada amplitude de ruído, frequência de amostragem, número de pontos por período e períodos

adquiridos, o processo será repetido 100 vezes. É necessário realizar este processo variadas vezes

com os mesmos parâmetros para conseguir garantir que os resultados se encontram dentro de um

determinado erro definido à partida como sendo o desvio máximo. Para recordar, no primeiro capítulo

o processo era repetido 300 vezes.

Concluída a explicação do método experimental, iremos passar à secção seguinte, na qual se

encontra a exposição e análise dos resultados obtidos.

3.3 Análise dos resultados

Numa primeira fase irá ser analisada a amplitude do sinal e posteriormente será estudada a

diferença de fase. Em ambas as análises será dito qual o número de pontos por período e qual o

número de períodos necessários para que o erro seja inferior a um determinado valor máximo

previamente especificado, denominado de ε, que irá ser definido no parágrafo seguinte. Tal como foi

explicado na secção anterior, teoricamente espera-se que a amplitude seja de 1 V e a diferença de

fase de 90º.

Tal como foi feito no 2º capítulo, irá ser adicionado ruído com amplitudes diferentes ao sinal

sinusoidal inicial e irão ser retiradas as conclusões relativas ao número total de amostras necessárias

para garantir bons resultados. A amplitude de ruído presente no sinal vai ter o valor de 10 mV, 30 mV,

50 mV, 100 mV, 500 mV, 1 V e 2 V. Para todas as situações o erro máximo admissível ε, é de 0.5%.

Para realizar as simulações foram utilizadas as frequências de amostragem já mencionadas na

secção 3.2, sendo que para cada uma delas o tempo de amostragem ou igualmente dizendo, o

número de períodos variou entre 1 e 40. Na Tabela 11 e na Tabela 12 encontram-se os dados

relativos às frequências de amostragem utilizadas e aos valores mínimo e máximo de amostras

adquiridas, para 1 período adquirido e para 40 períodos adquiridos, respectivamente.

Tabela 11 – Tempo de aquisição igual a 1 milissegundo (1 Período adquirido)

Frequência do

sinal (kHz)

Nº de Períodos

adquiridos Fa (kHz)

Nº de Pontos por

Período

adquiridos

Número total de

pontos adquiridos

1 1

4 4 4

8 8 8

16 16 16

22 22 22

48 48 48

Page 43: Tese 1,1 MB

34

Como se pode observar, na Tabela 11 o número de amostras totais adquiridas é igual ao número de

amostras por período, enquanto na Tabela 12 o número de amostras totais é igual a 40 vezes o

número de amostras por período, porque é adquirido um total de 40 períodos.

Tabela 12 – Tempo de aquisição igual a 40 milissegundos (40 Períodos adquiridos)

Frequência do

sinal (kHz)

Nº de Períodos

adquiridos Fa (kHz)

Nº de Pontos por

Período

adquiridos

Número total de

pontos adquiridos

1 40

4 4 160

8 8 320

16 16 640

22 22 880

48 48 1920

O facto de não serem adquiridos mais de 40 períodos prende-se com a performance do

algoritmo de sine-fitting. Isto significa que se for necessário a uma determinada frequência de

amostragem adquirir mais de 40 períodos, é preferível aumentar a frequência de amostragem de

modo a adquirir menos períodos e mais pontos por período. Um outro aspecto prende-se com a

frequência de sinal utilizada. Em todo este capítulo foi utilizada 1 kHz de frequência de sinal de forma

a controlar o ganho deste circuito. Como se observou na secção 3.2, o ganho do circuito depende da

frequência, do valor do condensador e do valor da resistência de saída. Como tal, para não ser

necessário alterar o valor da resistência e condensador, foi utilizada uma frequência fixa. Isto não

altera em nada o comportamento do algoritmo de sine-fitting, na medida em que para o algoritmo

estimar o valor da diferença de fase e da amplitude o que é importante saber é quantas amostras por

período e quantos períodos foram amostrados, tomando em conta a frequência de sinal e a

frequência de amostragem utilizadas. De seguida são apresentados os resultados obtidos. Na Tabela

13 e na Tabela 14 encontram-se os resultados obtidos para a amplitude e para a fase,

respectivamente, tendo em conta as diferentes amplitudes de ruído utilizadas, para um erro máximo

admissível de 0.5 %. Na Figura 22 e na Figura 23 encontram-se igualmente os resultados mas agora

graficamente.

Page 44: Tese 1,1 MB

35

Tabela 13 – Resultados para a amplitude face aos diferentes níveis de ruído utilizados

Nível de ruído NPPP NP NTot

10 mV 4 9 36

30 mV 4 12 48

50 mV 8 10 80

100 mV 16 11 176

500 mV 16 16 256

1 V 16 20 320

2 V 22 40 880

Tabela 14 – Resultados para a diferença de fase face aos diferentes níveis de ruído utilizados

Nível de ruído NPPP NP NTot

10 mV 4 7 28

30 mV 4 9 36

50 mV 4 11 44

100 mV 8 10 80

500 mV 8 15 120

1 V 8 20 160

2 V 22 35 770

Começando com a amplitude de ruído igual a 10 mV, são necessárias 36 amostras para

garantir um erro inferior a 0.5% para a amplitude, face a apenas 28 amostras para o caso da fase. Já

com 30 mV de ruído são necessárias 48 amostras para estimar a amplitude e 36 amostras para

estimar a fase, com um erro igualmente inferior a 0.5%. Continuando com 50 mV, já são necessárias

80 amostras para estimar a amplitude e 44 amostras para estimar a fase. Dobrando a amplitude de

ruído para os 100 mV, já são necessárias 176 amostras para estimar a amplitude e 80 amostras para

estimar a fase.

Page 45: Tese 1,1 MB

36

Figura 22 – Resultados para a amplitude face a diferentes níveis de ruído

Figura 23 – Resultados para a fase face a diferentes níveis de ruído

Com 500 mV o número de amostras necessárias para estimar com um erro inferior a 0.5% a

amplitude e fase é de 256 e 120, respectivamente. Com a amplitude de ruído igual a 1 V já são

necessárias 320 amostras para estimar a amplitude e 160 amostras para estimar a fase. Por último,

com 2 V observa-se que são necessárias bastantes mais amostras, comparativamente com os outros

níveis de ruído, para estimar com precisão a amplitude e a diferença de fase. Com este nível de ruído

são necessárias 880 amostras para estimar a amplitude e cerca de 770 amostras para estimar a

Page 46: Tese 1,1 MB

37

diferença de fase. Comparando este resultado com os resultados obtidos no 2º capítulo, verifica-se

que 2 V de amplitude de ruído correspondem a cerca de 10% de ruído, nas condições do 2º capítulo.

De seguida são apresentadas 2 figuras relativas a diferentes amplitudes de ruído. Visto que

as figuras são parecidas entre si, só serão apresentadas as figuras relativas aos casos em que a

amplitude de ruído foi de 10 mV e de 2 V. Nos restantes casos, apesar do número de períodos e do

número de pontos por período ser diferente, o aspecto das figuras é parecido pelo que não tem

interesse prático serem apresentadas. Nas 2 figuras serão apresentados o sinal inicial com a cor azul,

as amostras recolhidas através da ADC assinaladas com os sinais ‘+’ e o sinal estimado pelo Sine-

fitting a vermelho. Na legenda, a amplitude estimada é dada por “A” e diferença de fase estimada está

assinalada por “Diferença de fase”.

Na Figura 24 encontra-se uma simulação feita com a amplitude de ruído igual a 10 mV. Como

se pode observar, as amostras recolhidas, que estão assinaladas com os sinais ‘+’, encontram-se

com um determinado offset, o que não incomoda minimamente o algoritmo de Sine-fitting, na medida

em que este elimina o offset das amostras recolhidas e estima a amplitude do sinal como se o offset

fosse nulo.

Figura 24 – Amplitude de ruído de 10 mV

Na Figura 25 encontra-se a simulação feita para a amplitude de ruído igual a 2 V. Como se pode

observar nas 2 figuras, o offset mantém-se igual e ronda os 4V.

Page 47: Tese 1,1 MB

38

Figura 25 – Amplitude de ruído de 2 V

Na Figura 25 observa-se claramente a presença de bastante ruído no sinal, na medida em

que as amostras não apresentam a regularidade da Figura 24.

Posto isto, vai-se então proceder às conclusões finais sobre este capítulo.

3.4 Conclusões

Neste capítulo, comparativamente ao capítulo anterior, os sinais foram gerados externamente

ao computador.

Tabela 15 – Número de amostras necessárias para garantir bons resultados para a fase, e amplitude

Amplitude Fase

Ruído = 10 mV 36 28

Ruído = 30 mV 48 36

Ruído = 50 mV 80 44

Ruído = 100 mV 176 80

Ruído = 500 mV 256 120

Ruído = 1 V 320 160

Ruído = 2 V 880 770

Page 48: Tese 1,1 MB

39

Como se pode observar pela leitura deste capítulo e do anterior, nos resultados finais, o número

de amostras necessárias, para garantir bons resultados com um erro inferior a 0.5 %, foi inferior neste

capítulo comparativamente ao 2º. Contudo, tanto o capítulo anterior como este 3º capítulo foram

importantes para perceber a quantidade de amostras que são necessárias transmitir quando temos

pouco ruído ou quando o ruído é muito elevado.

Como se pode observar para os resultados finais deste capítulo apresentados na Tabela 15, os

10 % de ruído que foi utilizado no 2º capítulo corresponde a cerca de 2 V de amplitude de ruído, o

que em termos práticos só deverá acontecer em casos extremos. Por outro lado, 10 mV

correspondem a 1.5 % de ruído, fazendo a mesma analogia entre o 3º capítulo e o 2º capítulo.

Uma outra conclusão importante, foi o facto de a partir de 40 períodos, ser mais vantajoso

aumentar a frequência de amostragem e diminuir o número de períodos a adquirir, visto que o

algoritmo de sine-fitting produz melhores resultados desta maneira.

Olhando novamente para os resultados obtidos, observa-se uma tendência forte para obter

melhores resultados para a diferença de fase face à amplitude. Este resultado já tinha sido obtido no

2º capítulo e agora volta-se a repetir, o que significa que se forem garantidos bons resultados para a

amplitude, automaticamente são garantidos bons resultados para a fase.

Por último falta explicar a SQNR (Signal-to-quantization-noise-ratio). A SQNR reflecte a fracção

entre a amplitude do sinal e o erro de quantificação induzido pelo conversor analógico - digital. Ou

seja a SQNR é a máxima relação entre a potência do sinal e o erro de quantificação. Na expressão

(3.36), que está em dB, encontra-se o cálculo do SQNR.

]^ = 1.761 + 6.02 ∗ O + ~oB (U&) (3.36)

Para um conversor de 16 bits, o SQNR é de 98 dB. Se porventura quiséssemos utilizar um ADC

com 10 bits, o SQNR já seria apenas 62 dB, 36 dB abaixo do SQNR para o conversor de 16 bits.

Como foi referido anteriormente, uma SNR igual a 36 dB, resulta numa percentagem de ruído de

1.5%, o que significa que com um conversor de 10 bits, se a amplitude do ruído fosse de 20 mV, para

garantir um erro inferior a 0.5%, seriam necessárias 48 amostras para estimar a amplitude e 36

amostras para estimar a fase, que são o número de amostras necessárias adquirir se o ADC tivesse

16 bits e se a amplitude de ruído fosse de 30 mV.

Concluído este capítulo, fica então a faltar criar um sistema autónomo, no qual seja possível

adquirir os sinais num determinado local independente e posteriormente enviar esses sinais via

wireless para o computador para serem então processados pelo algoritmo de sine-fitting. Para

realizar a aquisição e amostragem dos sinais será utilizada uma placa de demonstração com um PIC

18F4550. Para realizar a transmissão dos sinais através de um canal sem fios serão utilizados

emissores-receptores da Easy Radio. Tudo isto está explicado em pormenor no capítulo 4.

Page 49: Tese 1,1 MB

40

4. Desenvolvimento de um sistema de aquisição autónomo

numa placa de demonstração com um PIC18F4550

4.1 Introdução

Nos 2 capítulos anteriores foram realizados diversos testes com o algoritmo de Sine-fitting, de

forma a encontrar a frequência de amostragem e o consequente tempo de aquisição necessários

para se obterem bons resultados com diferentes níveis de ruído. Sendo assim, para completar o

trabalho proposto no início desta dissertação, falta desenvolver um sistema autónomo, que consiga

adquirir e amostrar 2 sinais sinusoidais e posteriormente enviá-los para o computador através de um

sistema sem fios, para que possam ser processados pelo algoritmo de sine-fitting, de forma a estimar

a amplitude dos sinais e a diferença de fase entre eles. Na Figura 26 está representado o esquema

do sistema de aquisição e transmissão. Ao longo deste capítulo irá ser explicado em particular, a

funcionalidade de cada um dos elementos deste esquema.

Figura 26 – Esquema geral com os 2 emissores-receptores, o PIC18F4550 e o computador

O emissor-receptor que irá ser utilizado será o modelo Easy Radio, ER400TRS, que trabalha

perto da banda dos 400 MHz, mais precisamente entre os 433 MHz e os 434 MHz. Irá ser explicado

mais à frente quais são as características deste dispositivo e qual o seu funcionamento. Por outro

lado, a escolha da placa de demonstração com um micro controlador PIC 18F4550, está relacionada,

por um lado com o facto de a placa poder ser programada para realizar aquisições e conversões A/D

e por outro pela placa possuir uma interface RS-232 através de uma porta série, a qual, como se

constatará mais à frente, vai permitir fazer a comunicação entre a placa e o computador. Na secção

4.1.1 serão explicados em pormenor as características e funcionalidades do PIC18F4550.

Page 50: Tese 1,1 MB

41

4.1.1 Funcionalidades da placa de demonstração com micro

controlador PIC 18F4550

A placa de demonstração que será utilizada está dotada de um micro controlador PIC18F4550

com 44 pinos, o qual é o coração deste dispositivo. É este micro controlador que vai permitir controlar

quais os canais de entrada analógicos, qual o ritmo de transmissão, qual a frequência de

amostragem, qual a frequência central de oscilação, entre outras que serão explicadas mais à frente.

De forma a gerar os sinais de relógio necessários, a placa de demonstração está equipada com um

oscilador de cristal que pode ser programado para oscilar a 20 MHz. À saída do oscilador encontra-se

um divisor, cuja saída está directamente ligada a um PLL, cuja frequência de entrada tem de ser 4

MHz. Ou seja, de forma a utilizarmos o PLL, temos de colocar o valor de 5 no divisor, de forma a

termos 4 MHz à entrada do PLL. A frequência de saída do PLL é de 96 MHz. Por último, antes de

obtermos a frequência de oscilação do nosso circuito, encontra-se um outro divisor. Se por exemplo

definirmos o valor de 2 para este divisor, a frequência de oscilação do nosso circuito vai ser de 48

MHz. Na Figura 27 encontra-se o esquema que permite gerar a frequência de oscilação.

Figura 27 – Diagrama de blocos referente à escolha da frequência de oscilação

Page 51: Tese 1,1 MB

42

Daí que da escolha dos valores dos registos resultaram numa frequência de oscilação para o

circuito de 48 MHz. Logo, como 1 ciclo de relógio é calculado como sendo o inverso da frequência de

oscilação, cada ciclo de relógio demora cerca de 20,8 nanossegundos (ns).

Todos os registos da placa de demonstração com o micro controlador PIC 18F4550 têm 8

bits. De maneira que se pretendermos usar mais bits para uma determinada operação terão de ser

utilizados mais do que um registo. Como veremos mais à frente, para a escolha da Baud Rate e para

a conversão analógica para digital serão utilizados 2 registos, pois vão ser necessários mais do que 8

bits para realizar cada uma destas operações.

Em termos de organização da memória, encontram-se 2 memórias que interessam

particularmente, que são a memória de programa e a memória de dados. O dispositivo que vai limitar

a quantidade de informação máxima que pode ser transferida não vai ser a placa de demonstração

mas sim o emissor-receptor, na medida em que a memória de dados da placa de demonstração é de

2048 bytes, contrastando com os 120 bytes disponíveis no buffer do transceiver. A memória de

programa é constituída por 32768 bytes. Atendendo a que cada instrução da memória de programa

ocupa 2 bytes, podemos realizar até 16384 instruções.

Em termos de portas de comunicação, a placa de demonstração possuí interface USB,

interface por uma porta série RS-232 e também interface através de uma porta paralela, sendo que

as únicas interfaces que serão utilizadas serão a interface USB para carregar o programa para a

placa de demonstração e a interface pela porta série para realizar a comunicação.

Outras funcionalidades bastantes importantes da placa de demonstração são a capacidade

de aquisição de um sinal analógico e a respectiva conversão para digital, o armazenamento de dados

numa FIFO e a possibilidade de ter até 13 canais analógicos de entrada. A FIFO, como foi referido no

parágrafo anterior, tem capacidade para armazenar 2048 bytes, sendo que só nos vai interessar

armazenar 120, devido às limitações dos transceivers. A aquisição de um sinal analógico pode ser

feita num dos 13 canais disponíveis. A forma de escolher os canais e de realizar a aquisição vai ser

explicada em detalhe mais à frente. Por último referir que o módulo que realiza a conversão analógica

para digital, tem 13 canais disponíveis e quando solicitado realiza a conversão desse sinal analógico

para a sua correspondente representação num número digital com 10 bits. Ou seja, este é um dos

casos em que serão necessários 2 registos para realizar a operação com sucesso.

Depois de explicado brevemente os módulos e funcionalidades mais importantes da placa de

demonstração, irá ser explicado de seguida o funcionamento dos transceivers utilizados.

4.1.2 Emissor-receptor ER400TRS

Como foi referido anteriormente, o emissor-receptor ER400TRS, tem como função garantir a

comunicação sem fios entre o sensor e o computador. As entradas e saídas série do emissores-

receptores conseguem garantir comunicação para ligações UART (Universal Asynchronous Receiver

Page 52: Tese 1,1 MB

43

Transmitter) ou ligações similares que tenham valores lógicos baixos. Uma ligação UART é uma

ligação com porta em série RS-232, equivalente aquela que a placa de demonstração possuí.

Cada emissor/receptor é constituído por um receptor ou emissor de rádio frequência de baixo

consumo e de baixa potência, um regulador de tensão e um microprocessador. O microprocessador

representa um papel importante na comunicação, na medida que controla não só a informação que o

emissor-receptor recebe e envia, como também está dotado com 2 controlos de tráfego de

informação, chamados de Busy e Host Ready. Olhando para a Figura 26, consegue-se facilmente

identificar quais são os 2 Hosts. De um lado é o computador e do outro lado é o PIC 18F4550. O

controlo Busy quando se encontra activo indica que o transceiver está a realizar uma tarefa interna e

como tal não se encontra preparado para receber informação. Por outro lado o controlo Host Ready é

utilizado, como o próprio nome indica, pelo Host (computador ou PIC 18F4550), indicando que este

se encontra disponível para receber a informação que se encontra disponível no buffer do transceiver.

Concluindo esta parte do controlo de tráfego, o Host antes de enviar informação tem de garantir que o

controlo Busy não está activado, pois se estiver pode significar que o transceiver pode estar numa

manobra de enviar ou receber informação e como tal não está disponível. Por último, o Host tem de

alterar o controlo Host Ready sempre que necessário, bem como verificar se não existe informação

para receber por parte do transceiver.

Ao nível das Baud Rates possíveis, o transceiver respeita os padrões do protocolo RS-232.

Ou seja, é possível transmitir com Baud Rates de 2400, 4800, 9600, 19200 e 38400 bits por segundo

(bps). A capacidade do buffer do transceiver, como já foi referido acima, varia entre um valor mínimo

de 1 byte até um valor máximo de 120 bytes. O tempo de transmissão em radiofrequência é dado

pela equação (4. 37), que se encontra em milissegundos, em que o parâmetro nºbytes é dado pelo

tamanho em bytes de cada pacote, em que cada pacote pode conter entre 1 e 120 bytes. Esta

expressão foi retirada do Data Sheet do emissor-receptor ER400TRS.

mjRã = 13.2 + (Oº ~CB) ∗ 0.8 (4.37)

Dado que cada símbolo que é transmitido é constituído por 1 Start bit, 1 STOP bit e 8 bits de

informação, significa que cada símbolo é constituído por 10 bits. Sabendo que a Baud Rate mede o

número de símbolos que são enviados por segundo, e sendo a Baud Rate 19200 bps, são

necessários 0.52 ms para transmitir cada símbolo.

Por último resta referir que não é possível conectar directamente os transceivers a uma porta

série RS-232, na medida em que as tensões presentes no sinal do RS-232 podem danificar os

emissores-receptores. Como tal, é necessário usar um RS-232 level translator, tal como o Maxim

MAX232A, cuja função é fazer de ponte entre a saída da porta RS-232 e a entrada do emissor-

receptor, invertendo a lógica dos sinais RS-232 e diminuindo os níveis de tensão presentes na saída

da porta série.

Page 53: Tese 1,1 MB

44

Terminada a explicação sobre os emissores-receptores usados no projecto, fica a faltar a

explicação sobre o funcionamento de uma porta RS-232, antes de iniciar no programa propriamente

dito.

4.1.3 Portas série RS-232 e MAX232A

As portas RS-232 foram criadas inicialmente com o intuito de interligar equipamento terminal a

equipamento intermediário, antes da comunicação por RF (Radio Frequency). O equipamento

terminal típico é o computador, enquanto o equipamento intermediário pode ser um modem ou um

outro equipamento que faça a conversão dos sinais que vêm da porta série antes de enviar um

qualquer canal de comunicação. No caso concreto deste trabalho, os equipamentos terminais são, de

um lado o computador e do outro lado a PIC 18F4550, como está exemplificado na Figura 26. Os

equipamentos intermediários são os emissores-receptores ER400TRS.

A trama que é enviada pela porta RS-232 tem 1 StarBit, 8 bits de informação, 1 StopBit e não

possuí qualquer bit de paridade, o que significa que são enviados 10 bits em cada trama.

Relativamente às tensões aplicadas, a interface RS-232 define níveis de tensão para cada um dos

valores lógicos. No caso do valor lógico “0”, os níveis de voltagem disponíveis situam-se entre os 3 V

até 15 V. No caso do valor lógico “1”, os níveis de voltagem válidos situam-se entre os -3 V até aos -

15 V. No protocolo RS-232 não existe qualquer valor lógico para os níveis de voltagem que se situem

entre os -3 V e os 3 V. Por um lado, com esta separação, é possível garantir fiabilidade e integridade

numa transmissão através deste protocolo. Mas em algumas situações, o facto de o protocolo RS-

232 utilizar níveis de tensão elevados, pode levar a que sejam danificados os equipamentos

intermédios. Como tal, é por vezes necessário recorrer a circuitos que façam a conversão dos níveis

de tensão elevados do protocolo RS-232 para níveis de tensão mais baixos. Como os emissores-

receptores utilizados não suportam as tensões que provêm da porta série, é necessário recorrer a um

“RS-232 Level Translator” tal como o MAX232A. O MAX232A está inserido na família dos +5V

Powered, Multichannel RS232 Drivers/Receivers, e é utilizado em interfaces de comunicação RS-232

em que o equipamento intermédio não suporta os níveis elevados de tensão do protocolo RS-232.

Na Figura 28 encontra-se o esquema utilizado para a aplicação do MAX232A. O integrado 7805 é

um regulador de tensão, que é constituído por 1 entrada e 1 saída, para além da massa. Este

integrado recebe uma tensão DC de 9 V proveniente de uma pilha e converte esta tensão numa

tensão DC de 5 V, de forma a poder alimentar o MAX232A e o emissor-receptor ER400TRS. O

MAX232A possui 2 canais, mas neste caso em concreto só é necessário utilizar um dos canais

disponíveis. Todos os condensadores não polarizados têm uma capacidade de 100 nF, enquanto os

2 condensadores polarizados têm uma capacidade de 22 uF. O circuito da Figura 28 foi inicialmente

testado numa breadboard, e após ter sido testado com sucesso, foi desenhado para uma placa de

circuito impresso, recorrendo ao software Eagle. O desenho do esquema da Figura 28 na placa de

circuito impresso encontra-se no apêndice I.

Page 54: Tese 1,1 MB

45

Figura 28 – Circuito de aplicação do MAX232A

4.2 Configuração do PIC 18F4550 através dos seus registos e do

programa na plataforma “Matlab”. Demonstração de um

resultado prático

De forma a programar o PIC18F4550 inserido na placa de demonstração, foi utilizado uma

plataforma com o nome de MPLAB. Quando o programa é concluído e não contém qualquer erro, é

gerado um ficheiro em formato, HEX, o qual é posteriormente inserido na memória volátil da PIC.

Este programa contém toda a programação que foi realizada na plataforma MPLAB. De seguida é

explicado o funcionamento do programa.

Antes de iniciar a explicação do programa propriamente dito, uma tarefa importante consiste

na definição dos bits de configuração. Estes bits de configuração estão contidos em diversos registos

Page 55: Tese 1,1 MB

46

denominados de CONFIG. Cada um destes registos de 8 bits tem a função de programar uma parte

da placa de demonstração, sendo que no total existem 12 registos de configuração. Não irão ser

abordados todos os registos em particular visto que é mais apropriado explicar no contexto geral qual

foi a configuração escolhida, ao invés de explicar cada registo bit por bit. Na Figura 27 encontra-se

exemplificado uma das configurações utilizadas. Ou seja, o oscilador e o PLL foram activados, foi

definido o valor de 5 e 2, para o primeiro e segundo divisor, respectivamente, conseguindo uma

frequência de oscilação do circuito de 48 MHz. Uma outra configuração realizada foi garantir a

integridade de todo o espaço reservado à memória de programa, bem como reservar toda a memória

de programa para escrita, para que consiga programar o PIC sem dificuldade. Ainda ao nível da

memória de programa, foi deixada protegida para escrita a memória EEPROM e a memória relativa

aos registos de configuração, enquanto a zona de memória reservada para o Bootloader foi deixada

desprotegida. O Bootloader é a interface que permite carregar programas feitos na plataforma

MPLAB no computador para o PIC 18F4550 sem necessidade de recorrer a hardware adicional. A

partir do parágrafo seguinte irá ser explicado em detalhe as funcionalidades do PIC 18F4550 e como

foi efectuada a sua configuração.

Como foi explicado no início deste capítulo, a placa de demonstração com o PIC18F4550, foi

programada com intuito de realizar a aquisição de 2 sinais em 2 canais diferentes, fazer a respectiva

conversão dos sinais analógicos na sua representação com 10 bits e por último enviar o conteúdo

das 2 memórias FIFOS através da porta série RS-232. Na Figura 29 encontra-se um fluxograma que

explica o funcionamento do programa. Numa fase inicial são definidos os bits de configuração, que

permitem controlar a frequência de oscilação do circuito, que por sua vez é igual ao inverso do tempo

de relógio. De seguida são iniciadas as portas como sendo saídas ou entradas, sendo que as portas

de entrada são inicializadas a 1 e as portas de saída são inicializadas a 0. Depois é inicializado o

módulo UART, que incluí a definição da frequência de amostragem, a Baud Rate e a inicialização dos

contadores. Por fim, a última configuração prende-se com o módulo ADC, em que são definidos os

canais de entrada analógicos, os níveis de tensão máximo e mínimo e o tempo de aquisição por

canal. Então aí começam as conversões A/D, bem como a escrita dos resultados nas FIFO. Como o

processo de conversão A/D é semelhante para ambos os canais, foi exemplificado unicamente o

processo para um canal. De realçar que a aquisição e conversão A/D é feita alternadamente entre os

2 canais, o que significa que, como será exemplificado na Figura 31 mais à frente, é adquirida uma

amostra em cada canal de cada vez alternadamente, e no final da aquisição de todas as amostras, as

2 FIFO são enviadas pela porta UART.

A primeira função que é preciso criar é a inicialização das portas. Existe um registo

denominado de TRIS que indica se uma determinada porta é um output (TRIS bit igual a 0) ou se é

um input (TRIS bit igual a 1). Existem 5 registos TRIS, desde o TRISA até o TRISE. A cada bit dos

registos TRIS corresponde uma porta na placa de demonstração. Na Tabela 16 encontram-se

representados todos os registos TRIS, bem como os bits que estão associados a cada um deles.

Page 56: Tese 1,1 MB

47

Figura 29 – Esquema de funcionamento do programa no PIC18F4550

Para que o sistema possa ser integrado numa aplicação para detectar defeitos em matérias,

baseado no método das correntes de Foucault, são necessários ter 2 canais analógicos de entrada,

para receber os sinais. Para tal efeito, foram escolhidas as portas RA1 e RA0 associadas ao registo

TRISA como portas de input. Todas as outras portas na placa de demonstração irão ficar definidas à

partida como outputs, o que significa que são portas de leitura e não de escrita. Como se verá mais à

frente, algumas destas portas irão ser transformadas em inputs, de forma a realizar a comunicação

UART.

De seguida, é necessário criar uma função com o objectivo de inicializar a porta série UART e

depois uma outra que esteja relacionada com a transmissão pela porta RS-232. Antes de explicar a

funcionalidade de cada um dos registos que estão presentes em todo o processo desde a

inicialização da porta UART até à transmissão, apresentam-se na Tabela 17 os registos e os

respectivos bits associados a esses registos que fazem parte deste processo. Importa referir que o

registo PIE1 tem como função activar interrupções, enquanto o registo PIR1 contém as interrupções

que podem ser lidas ou escritas.

Page 57: Tese 1,1 MB

48

Tabela 16 – Registos TRIS

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

TRISA - RA 6 RA 5 RA 4 RA 3 RA 2 RA 1 RA 0

TRISB RB 7 RB 6 RB 5 RB 4 RB 3 RB 2 RB 1 RB 0

TRISC RC 7 RC 6 - - - RC 2 RC 1 RC 0

TRISD RD 7 RD 6 RD 5 RD 4 RD 3 RD 2 RD 1 RD 0

TRISE - - - - - RE 2 RE 1 RE 0

No caso do UART, é necessário activar a interrupção TXIE do registo PIE1 e posteriormente

para utilizar a interrupção recorremos ao bit TXIF do registo PIR1. Esta interrupção serve para indicar

quando o registo TXREG se encontra cheio ou vazio.

Tabela 17 – Registos utilizados para realizar uma transmissão UART

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D

RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

BAUDCON ABDOVF RCIDL RXDTP TXCKP BRG16 - WUE ABDEN

TRISC RC 7 RC 6 - - - RC 2 RC 1 RC 0

PIE1 SPPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

PIR1 SPPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

SPBRGH Registo que controla a geração da Baud Rate (HIGH)

SPBRG Registo que controla a geração da Baud Rate (LOW)

TXREG Registo com a função de enviar para o buffer de transmissão a informação

TSR Registo que contém o Buffer de Transmissão

No módulo UART existem 2 registos muito importantes que responsáveis pela troca de

dados, que são o TXREG (Transmit Buffer Register) e o TSR (Transmit Serial Shift Register). Numa

primeira fase, o registo TXREG é carregado com informação no software, ficando depois com a

responsabilidade de passar essa informação para o registo TSR, o qual vai enviar a informação para

a porta UART RS-232. Mas o registo TSR só é carregado com a informação vinda do registo TXREG,

quando o Stop bit da última transmissão for enviado. Quando isto acontece, o registo TSR é

carregado com a nova informação, enquanto o registo TXREG é limpo e fica a aguardar novos dados

provenientes do software. Este é o funcionamento interno. Ao nível de interrupções funciona da

seguinte maneira. Sempre que o registo TXREG é carregado com dados no software, o bit TXIF do

Page 58: Tese 1,1 MB

49

registo PIR1 é colocado a 0 e quando o registo TXREG transfere todos os seus dados para o registo

TSR, o bit TXIF é colocado a 1. Por outro lado, o bit TRMT do registo TXSTA, que é um bit só de

leitura, é colocado a 1 quando o registo TSR é limpo e é colocado a 0 quando o registo TSR se

encontra cheio. De seguida são explicados os restantes bits correspondentes ao módulo UART.

Os registos SPBRGH e SPBRG têm como função controlar a geração da Baud Rate. Estes 2

registos funcionam em conjunto, formando uma palavra de 16 bits. Os bits correspondentes ao

registo SPBRGH são os mais significativos da palavra, enquanto os bits do registo SPBRG são os

menos significativos. A fórmula de cálculo para a Baud Rate desejada está na equação (4.38), em

que FOSC é a frequência de oscilação (48 MHz neste caso) e n é o número decimal que corresponde

aos 2 registos SPBRGH e SPBRG.

&lU ^lC = iL ∗(V-) (4.38)

A Baud Rate utilizada para realizar a transmissão foi 19200. Logo, se a Baud Rate é igual a

19200 e o FOSC é igual a 48 MHz, o valor de n é de 625. A representação binária do número 625 é

1001110001, o que significa que o registo SPBRGH=0b00000010 e o registo SPBRG=0b01110001.

Como a representação binária do número 625 tem 10 bits, foi necessário escrever 2 bits no registo

SPBRGH, enquanto os restantes 8 bits menos significativos foram escritos no registo SPBRG.

Porém, no início de uma comunicação UART, existem 3 bits que têm que ser postos igual a 1

(HIGH). Os três bits que têm de ser postos a 1 são os bits RC7 e RC6 do registo TRISC e o bit SPEN

do registo RCSTA. De seguida é necessário configurar os restantes bits. Começando pelo registo

TXSTA, é necessário colocar o bit TX9 a 0, de forma à transmissão ser feita com 8 bits. O bit

seguinte, o TXEN, tem de ser colocado a 1, de modo a activar a transmissão. O bit SYNC é muito

importante, pois define se a transmissão vai ser síncrona ou assíncrona. Este bit tem de ser colocado

a 0 para garantir uma transmissão assíncrona. O bit SENDB quando colocado a 0, indica quando

uma transmissão foi completada com sucesso. O bit BRGH define se a transmissão é de alta

velocidade (=1) ou de baixa velocidade (=0). Neste caso, como as transmissões são de alta

velocidade, este bit foi colocado a 1. Por último encontra-se o bit TRMT, que é um bit de controlo e

não de escrita. O micro processador coloca este bit a 1 quando o buffer está vazio, ou seja, quando

está pronto para uma nova transmissão. Enquanto o buffer se encontrar cheio, este bit é deixado a 0.

Os bits CSRC e TX9D não são usados para transmissões assíncronas de 8 bits.

O registo RCSTA é o registo que controla a recepção de informação pela porta UART. Os

únicos bits que têm de ser colocados a 1 são o bit SPEN e o bit CREN. Todos os outros bits deste

registo têm de ser colocados a 0. O bit SPEN activa a porta série, enquanto o bit CREN activa o

receptor de forma a receber as mensagens de confirmação do transceiver quando estiver a enviar

informação.

Por último no registo BAUDCON, o único bit que tem de ser colocado a 1 é o bit BRG16, de

forma a poder gerar a Baud Rate com 16 bits (SPBRGH e SPBRG). Se este bit fosse colocado a 0,

Page 59: Tese 1,1 MB

50

só poderia ser utilizado o registo SPBRG para gerar a Baud Rate. O facto de todos os outros bits do

registo BAUDCON serem colocados a 0, significa que tanto a informação enviada como a recebida

não é invertida nem modificada, pelo que tudo o que é enviado pelo PIC 18F4550 é recebido no

computador sem qualquer alteração. Isto é bastante relevante porque, como já foi referenciado atrás

nesta secção, será criada uma FIFO e é extremamente importante que a FIFO chegue ao

computador exactamente com a mesma ordem com que foi enviada.

Resumindo, sempre que se quiser inicializar uma porta UART é necessário primeiro activar os

bits RC7 e RC6 do registo TRISC, bem como o bit SPEN do registo RCSTA. Posteriormente, para

controlar a porta UART existem 3 registos de controlo, que são o TXSTA, o RCSTA e o BAUDCON.

De seguida para definir a Baud Rate desejada utilizam-se os registos SPBRGH e o SPBRG. Por

último, sempre que se quer fazer uma transmissão, escreve-se para o registo TXREG a informação

que se pretende transmitir e espera-se até que o bit TRMT do registo TXSTA seja posto a 1

novamente para se poder realizar uma outra transmissão. De seguida será explicado o processo de

aquisição e conversão analógica digital.

Como já foi referido na secção 4.1.1, o módulo que converte sinais analógicos em digitais é

constituído por 13 canais de inputs e permite a conversão de um sinal analógico no seu

correspondente número digital com 10 bits. Aqui reside uma das diferenças deste capítulo para o

capítulo anterior. No capítulo anterior foi utilizada um ADC com 16 bits, contrastando com o ADC de

10 bits utilizado neste capítulo. Como foi explicado nas conclusões do capítulo 3, o facto de passar de

um ADC de 16 bits para um de 10 bits, é equivalente a adicionar 10 mV de ruído. Para realizar uma

conversão A/D, são necessários utilizar os 5 registos que se encontram na Tabela 18. Porém, para

garantir uma maior precisão no cálculo da frequência de amostragem, é necessário recorrer a um

contador de forma a controlar exactamente o tempo que passa entre cada aquisição. Os registos

associados à configuração dos contadores encontram-se na Tabela 19. A explicação do contador

será feita após a explicação dos registos que fazem parte da conversão A/D.

Os 2 registos ADRESH e ADRESL contêm o resultado da conversão A/D. Quando a

conversão A/D acaba, o resultado é colocado nos registos ADRESH e ADRESL, enquanto o bit de

controlo GO/DONE do registo ADCON0 é colocado a 0 pelo micro processador. Facilmente se

consegue explicar a necessidade de existirem 2 registos com o propósito de guardar o resultado da

conversão A/D. Como todos os registos são constituídos por 8 bits, e tendo em conta que o módulo

de conversão A/D é constituído por 10 bits, existe a necessidade de ter 2 registos para guardar o

resultado da conversão. Como tal, dependendo da justificação escolhida (justificação à direita ou à

esquerda), ou aparecem os 8 bits mais significativos no registo ADRESH e os 2 bits menos

significativos no registo ADRESL (justificação à esquerda), ou aparecem os 2 bits mais significativos

no registo ADRESH e os 8 bits menos significativos no registo ADRESL (justificação à direita). O bit

que controla a justificação é o bit ADFM do registo ADCON2. No caso deste projecto, este bit foi

colocado a 1, de modo a ter justificação à direita.

Page 60: Tese 1,1 MB

51

Olhando agora para o registo ADCON0, os 4 bits CHS (CHS3:CHS0), têm como função

seleccionar o canal analógico pretendido. O bit GO/DONE é o bit responsável pela iniciação de uma

conversão A/D. Sempre que se quer iniciar uma conversão A/D, coloca-se este bit a 1 e a conversão

inicia-se após um ciclo de relógio, que são cerca de 21 nanossegundos. Por outro lado, este bit serve

como bit de controlo, na medida em que é colocado a 0 pelo micro processador quando a conversão

A/D terminar, sendo necessário colocá-lo novamente a 1 para se iniciar uma nova conversão. Por

último o bit ADON, tem de ser posto a 1 de modo a activar todo o módulo de conversão A/D.

Tabela 18 – Registos utilizados para realizar uma conversão A/D

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

ADCON0 - - CHS3 CHS2 CHS1 CHS0 GO/DONE ADON

ADCON1 - - VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

ADCON2 ADFM - ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0

ADRESH 2 Bits mais significativos do resultado da conversão A/D

ADRESL 8 Bits menos significativos do resultado da conversão A/D

Tabela 19 – Registos para controlar os contadores

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

INTCON GIE/GIEH PIEL/GIEL TMR0IE INT0IE RBIE TMR0IF INTOIF RBIF

T0CON TMR0ON T08BIT T0CS T0SE PSA TOPS 2 TOPS1 TOPS0

TMR0H 8 Bits mais significativos para calcular o tempo do contador

TMR0L 8 Bits menos significativos para calcular o tempo do contador

Passando para o registo ADCON1, os bits VCFG1 e VCFG0 têm como função definir quais os

níveis de referência de voltagem. Neste caso estes 2 bits foram colocados a 0, de modo a que os

níveis de referência de voltagem se encontrem entre os 0 V e os 5 V. Os bits PCFG3:PCFG0 têm

como função definir quais os canais que são analógicos e quais os canais que são digitais. Estes bits

diferem dos bits CHS do registo ADCON0, na medida em que enquanto os bits PCFG definem quais

os canais que são analógicos e quais os canais que são digitais, os bits CHS definem qual é o canal

analógico que se encontra activo num determinado momento. Isto é importante na medida em que só

é possível adquirir e amostrar um canal analógico de cada vez.

Resta falar sobre o registo ADCON2, o qual é responsável pela justificação do resultado da

conversão e pelo tempo de aquisição. Como foi explicado em detalhe num parágrafo anterior, a

Page 61: Tese 1,1 MB

52

justificação pode ser direita ou esquerda. O bit responsável por esta configuração é o ADFM, o qual

indica justificação direita quando posto a 1 e esquerda quando posto a 0. Como foi usada justificação

direita, este bit foi colocado a 1. Antes de explicar a funcionalidade dos restantes bits deste registo,

irá ser explicado com maior detalhe o cálculo do tempo de aquisição. A conversão A/D por bit é

chamada de TAD. O TAD é o tempo que demora a converter um bit. A conversão A/D dos 10 bits

necessita de 11 TAD. O valor de um TAD é definido pelos bits ADCS2:ADCS0 e depende da

frequência de oscilação que tiver sido escolhida. Como a frequência de oscilação escolhida foi de 48

MHz, o valor de cada TAD é de 64 * TOSC, em que TOSC é o inverso da frequência de oscilação, o

que leva a que cada TAD tenha a duração de cerca de 1.3 microssegundos. O tempo de aquisição é

definido pelos bits ACQT2:ACQT0 e varia entre 2 TAD até 20 TAD, de modo a que o tempo total

desde o inicio da aquisição até ao final da conversão demore entre 13 TAD até 31 TAD. Na Figura 30

encontra-se a representação em ciclos TAD de uma conversão A/D. Não existe nenhum tempo de

intervalo entre o tempo de aquisição e a conversão dos 10 bits.

Figura 30 – Número de ciclos TAD numa conversão A/D

Por último, e como foi referido anteriormente, o programa está dotado de uma memória FIFO

que foi criada com o intuito de guardar todas as amostras recolhidas antes de as enviar pela porta

UART. Esta memória FIFO contém 120 posições o que significa que podem ser armazenadas até 60

amostras, na medida em que para representar cada amostra são precisas 2 posições na memória

(cada amostra com 10 bits está guardada nos registo ADRESH e ADRESL). A escolha deste

tamanho para a FIFO prende-se com o facto de os transceivers não terem capacidade no seu buffer,

de enviarem mais do que 120 bytes. Posto isto fica a faltar explicar o funcionamento dos contadores.

Como é necessário adquirir amostras de 2 canais distintos, é preciso ter 2 contadores. O primeiro

contador vai-se iniciar quando começar a conversão do 1º canal e vai acabar passado um

determinado tempo que será definido pelo utilizador. Para o segundo canal será exactamente o

mesmo esquema. Ou seja, o tempo de atraso entre os 2 canais é conhecido, assim como a

frequência de amostragem utilizada. Antes de apresentar um exemplo prático do projecto, falta

explicar o funcionamento dos contadores. Os contadores contam desde 0 até 65535 (o 0 pode ser

alterado como será explicado à frente), em que o tempo que demora a acrescentar uma unidade ao

contador é de 4 vezes o tempo de relógio, ou seja cada incremento de 1 unidade no contador demora

cerca de 80 nanossegundos. O contador utilizado foi o TOCON. Todos os bits deste registo têm de

ficar a 0, exceptuando o bit PSA, o qual tem de ser colocado a 1 de modo a que possa ser escolhido

o tempo desejado para o contador. Colocando o bit PSA a 1 e o T08BIT a 0, tem-se acesso a 2

Page 62: Tese 1,1 MB

53

registos para definir o instante inicial do contador, que são os registos TMR0H e TMR0L. Ou seja,

nestes 2 registos coloca-se o valor inicial a que o contador vai começar, o qual pode ser escolhido

entre 0 e 65535. O registo INTCON é utilizado para activar a interrupção correspondente a este

registo. Colocando o bit TMR0IE a 1, a interrupção é activada. Posto isto, irá ser de seguida

apresentado um exemplo prático que foi utilizado.

O objectivo é utilizar uma frequência de amostragem de 25 kHz. Se só houvesse 1 canal, era

simplesmente usar 1 contador e fazer com que este demora-se o inverso de 25 kHz (40

microssegundos), garantindo a frequência de amostragem desejada. Tendo em conta que são

necessários ter 2 canais e 2 contadores, o tempo que cada contador tem de demorar é de 20

microssegundos, para que no conjunto demorem os 40 microssegundos e assegurem uma frequência

de amostragem de 25 kHz. Na expressão (4.39) encontra-se o cálculo do número de incrementos que

o contador tem de ter para demorar o tempo desejado, em que Ta é o tempo desejado e Trelógio é o

tempo de 1 ciclo de relógio.

OzHCCOyB = 9j∗ 9Yó (4.39)

Ou seja, como neste caso era necessário que o contador demorasse 20 microssegundos,

olhando para a expressão (4.39), verificasse que são necessários 240 incrementos. Logo, fazendo o

mesmo raciocínio para o segundo canal, chega-se ao diagrama da Figura 31.

Figura 31 – Cálculo da frequência de amostragem com o auxílio de contadores

Page 63: Tese 1,1 MB

54

Como se pode observar, de 40 em 40 microssegundos é adquirida uma amostra e é feita a

respectiva conversão A/D. Para que o contador tenha 240 incrementos (65535-240=65295), é

necessário garantir que o contador começa no número 65295, para que até ao 65535 o número de

incrementos seja 240. Em termos de programação, para garantir que o contador começa em 65295, é

necessário atribuir este valor aos registos TMR0H e TMR0L com o valor hexadecimal

correspondente. Como 65295 corresponde a FF0F em hexadecimal, no registo TMR0H coloca-se o

valor de FF e no registo TMR0L coloca-se o valor de 0F. E assim é garantido que o contador começa

em 65295 e demora apenas 20 microssegundos a chegar ao fim.

Por último, falta calcular o tempo total desde o início da primeira conversão, até ao final da

transmissão de ambos os sinais para o computador. Neste cálculo, é necessário incluir o tempo de

amostragem das 240 amostras (dois sinais com 120 amostras cada um), é necessário incluir o tempo

que demora a transmitir pela porta RS-232 as amostras a um ritmo de 19200 símbolos por segundo e

por fim é necessário incluir o atraso relativo à transmissão por rádio frequências. Tendo em conta a

expressão (4.37), a transmissão dos dois sinais com 120 símbolos cada um, demora 218,4

milissegundos. A transmissão pela porta RS232 dos 240 símbolos demora cerca de 125

milissegundos, na medida em que cada símbolo demora cerca de 0.52 milissegundos à velocidade de

19200 símbolos por segundo. Não esquecer que é preciso contar com este tempo não só na

transmissão mas também na recepção, na medida em que é preciso enviar estes 2 sinais a este ritmo

desde o receptor até ao computador. Isto resulta num total de 250 milissegundos. Por último é

necessário contar com o tempo de aquisição das 240 amostras. Como foi explicado, o tempo

necessário para adquirir e digitalizar 2 amostras é de 40 microssegundos, o que faz com que sejam

precisos 4.8 milissegundos para adquirir e digitalizar as 240 amostras (120*40 microssegundo). Logo,

o tempo total deste sistema é de 473,2 milissegundos e o seu cálculo encontra-se na expressão

(4.40).

Cy ylx = 218,4 + 250 + 4.8 = 473,2 B (4.40)

Resta então explicar o funcionamento do programa no computador. Como foi explicado

anteriormente, cada amostra do sinal está representada por 10 bits, ou seja, 2 registos. Isto equivale

dizer, que a cada 2 bytes que são enviados, é enviada uma amostra no sinal.

No computador, o processamento da informação é analisada na plataforma denominado

“Matlab”. Numa primeira fase é necessário abrir uma “porta”, a qual terá de respeitar os mesmos

critérios definidos, tanto no microprocessador, como na transmissão por rádio frequência. Isto

significa que a porta que se abre tem de ter uma Baud Rate de 19200 símbolos por segundo, 8 bits

de dados e 1 StopBit. Não é definido qualquer bit de paridade nem de controlo. De seguida, é

executado um comando, no qual se indica que só se recolhem dados do buffer, quando este tiver o

número de amostras desejado. Neste caso, visto que cada FIFO individualmente tem 120 bytes, só

se recolhem os dados quando o buffer estiver completo. Com esta interrupção, garante-se que se

está sempre a ler os valores correctos do buffer. De seguida os dados são guardados numa variável,

e é feito o raciocínio inverso ao feito no programa no PIC. Isto significa que é necessário ler 2 bytes

Page 64: Tese 1,1 MB

55

de cada vez, fazendo a concatenação dos 8 bits menos significativos, com os 2 bits mais

significativos, criando um vector de 60 posições (as 60 amostras), em que cada posição representa

uma amostra. Neste momento já se tem os 10 bits seguidos, faltando apenas passar da

representação binária para a representação decimal, sendo que o factor multiplicativo, ou LSB, é

dado pela equação (4.41).

]& = bpp);- = f);- = 0.0049 X (4.41)

Na equação (4.41), Vdd é o valor máximo admitido pelo PIC, que é 5, e n é o número de bits

de cada amostra, que é dado por 10. O LSB é dado por 0.0049 Volts.

Após realizar o cálculo para todas as amostras das duas FIFOs, o resultado é um conjunto de

valores decimais, aos quais correspondem os valores das amostras adquiridas inicialmente pelo PIC.

Por último, é então aplicado o algoritmo de sine-fitting a este conjunto de valores decimais, cujo

output é então a amplitude estimada de cada um dos conjuntos de amostras, bem como a diferença

de fase entre elas.

Posto isto, é então possível produzir os resultados que comprovam o estudo explicado em

cima.

Figura 32 – Amplitude igual a 2 V, frequência de sinal de 1 kHz e offset de 2 V

Como se pode observar, o tempo de cada contador é de 20 microssegundos, o que perfaz um

total de 40 microssegundos, ou seja, consegue-se amostrar a uma frequência de 25 kHz. Neste

exemplo foram escolhidos 2 TAD para fazer a aquisição, o que significa que, se não fossem usados

Page 65: Tese 1,1 MB

56

os 2 contadores, cada conversão A/D demoraria cerca de 17 microssegundos. (11TAD + 2 TAD = 17

microssegundos, 1 TAD=1.3 microssegundos). Na Figura 32 e na Figura 33 encontram-se 2

resultados obtidos com o tempo de amostragem igual a 25 kHz. Mais uma vez, as amostras

adquiridas estão representadas pelos sinais “+” e o sinal estimado encontra-se na curva a vermelho.

A amplitude do sinal inicial é de 2 V, a frequência de trabalho é de 1 kHz e o offset é de 2 V de

amplitude.

Figura 33 – Amplitude igual a 2 V, frequência de sinal de 1 kHz e 2 V de offset

O sinal que foi adquirido e amostrado não tem qualquer ruído, o que significa que o erro

associado prende-se com a conversão ADC (ADC de 10 bits). Como tinha sido concluído no 3º

capítulo, a passagem de um ADC de 16 bits para um ADC de 10 bits era equivalente a manter o ADC

com 16 bits e adicionar 10 mV de ruído ao sinal.

Como tal, e tendo em conta que este sinal de 2 V de amplitude, 1 kHz d frequência de 2 V de

offset não tem qualquer ruído, são necessárias cerca de 40 amostras para garantir bons resultados

(No 3º capítulo com o ADC de 16 bits, um sinal com 10 mV de ruído eram necessárias cerca de 40

amostras para garantir bons resultados). Neste caso, como são adquiridas 60 amostras, os

resultados obtidos são bastante satisfatórios. Como se pode observar, as amostras encontram-se

entre os 0 V e os 4 V. A razão de colocar offset de 2 V de amplitude no sinal, está relacionado com o

facto de o PIC trabalhar apenas com valores entre os 0 V e os 5 V.

Para concluir, resta dizer que para garantir bons resultados utilizando o PIC18F4550 como

conversor analógico digital e os módulos ER400TRS como emissores-receptores, o ruído máximo

Page 66: Tese 1,1 MB

57

que o sinal poderá eventualmente ter, sem que seja posta em causa a integridade dos resultados é

de 30 mV.

4.3 Conclusões

Neste 4º capítulo, foi desenvolvido um sistema autónomo, com a capacidade de adquirir amostras

em 2 canais distintos, fazer a respectiva conversão A/D com um conversor de 10 bits dessas

amostras e posteriormente enviar essa informação através de um canal sem fios até ao computador,

com um tempo de 473,2 milissegundos. No computador, sabendo a frequência de amostragem e a

frequência do sinal, será utilizado o programa Sine-fitting para estimar a amplitude dos sinais e a

diferença de fase entre eles. Como tecnologia wireless foram utilizados emissores-receptores da

Easy Radio que funcionam na banda dos 400 MHz. Estes emissores-receptores têm uma capacidade

de buffer limitada a 120 Bytes, o que significa que é possível enviar até 60 amostras de cada vez, na

medida em que para cada amostra são necessários enviar 2 Bytes. Para além disto, foi desenhada e

montada uma placa de circuito impresso, cuja funcionalidade é baixar os níveis de tensão elevados

que provém da porta série RS-232. Os resultados obtidos foram positivos, na medida em que é

possível enviar bastante informação através de um canal sem fios, com um tempo de espera inferior

a meio segundo.

Todo o código referente ao programa feito na plataforma Matlab e na plataforma MPLAB

encontra-se em anexo.

Page 67: Tese 1,1 MB

58

5. Conclusões

A presente dissertação teve como objectivo principal desenvolver um sistema que fizesse a

aquisição, digitalização e transmissão sem fios de 2 sinais sinusoidais. De forma a caracterizar estes

sinais em fase e amplitude, foi usado um algoritmo de Sine-fitting. Após realizar diversos testes,

conclui-se o número de amostras que são necessárias adquirir de um determinado sinal com ruído,

de forma a minimizar os erros relativos à obtenção da amplitude e fase desses mesmos sinais. Este

resultado é posteriormente utilizado para saber qual é o tamanho da trama de dados que é preciso

enviar para o computador, através do sistema sem fios.

Inicialmente foi estudado até que ponto o algoritmo de Sine-fitting conseguia devolver bons

resultados, quando o ruído presente no sinal era demasiado grande. O que se concluiu é que o sinal

conseguia ser recuperado, mas para tal eram necessárias demasiadas amostras.

Na segunda fase deste projecto, foi igualmente necessário saber quais os resultados do Sine-

fitting, mas neste caso os sinais foram gerados externamente, sendo convertidos na sua

representação binária antes de chegarem ao computador utilizando um ADC da National Instruments

de 16 bits (NI 9215). Usando este ADC, observou-se que o Sine-fitting devolve bons resultados com o

recurso a poucas amostras. Uma outra conclusão foi o facto de a partir de 40 períodos, ser mais

vantajoso aumentar a frequência de amostragem e diminuir o número de períodos, devido ao facto de

o Sine-fitting produzir melhores resultados dessa maneira. Por último, fez-se uma analogia entre o 2º

capítulo e o 3º capítulo, em que se observou que 10% de ruído nos termos do 2º capítulo equivalem a

2 V de ruído no 3º capítulo.

Por último, foi necessário pôr em prática todo este estudo sobre as potencialidades do

algoritmo de Sine-fitting de 3 parâmetros. O objectivo principal era saber o número de amostras que é

necessário transmitir, de forma a ser feito um sistema autónomo, que pudesse adquirir, amostras e

enviar as amostras para o computador, sem recurso a tecnologia com fios. Como tal foi escolhido um

PIC 18F4550 inserido numa placa de teste para realizar as operações de aquisição e amostragem,

sendo que o papel de transmissão sem fios foi realizado pelos emissores-receptores ER400TRS, a

uma Baud Rate de 19.2 kBaud/s. Foi concluído que com estes emissores-receptores ER400TRS e

com o PIC18F4550, é possível transmitir até 120 bytes (60 amostras) por trama. O tempo total que

demora desde a primeira conversão A/D até à transmissão do último byte, com uma trama constituída

por 120 bytes, uma frequência de amostragem de 25 kHz e um Baud Rate de 19200 símbolos por

segundo, é de 473,2 milissegundos, o que correspondeu a um resultado extremamente positivo.

Page 68: Tese 1,1 MB

59

6. Perspectivas para trabalhos futuros

Tendo em conta que o objectivo foi alcançado, restam agora alguns trabalhos que podem ser

realizados no futuro, utilizando o trabalho desenvolvido nesta dissertação. Desde já, a implementação

deste sistema de aquisição, de forma a efectuar medições de defeitos em placas metálicas.

Para além disto, para que este sistema possa detectar defeitos numa determinada área de

uma placa metálica, é necessário criar um sistema de posicionamento autónomo, em que será

instalado o sensor com o GMR, o PIC18F4550 e os emissores-receptores. Este sistema terá a

capacidade de avaliar numa determinada área a existência de fissuras, e caso tenha sucesso, terá

que indicar quais as zonas em que essas fissuras se encontram. O sistema de posicionamento pode

ser baseado num robot ou num dispositivo móvel que funcione sem fios, de forma a ser criado um

módulo totalmente independente.

Page 69: Tese 1,1 MB

60

Referências

[1] Centro de pesquisa de métodos não destrutivos, acedido em Maio de 2010

www.ndt-ed.org

[2] Jack Blitz, “Electrical and Magnetic Methods of non-destructive Testing”, Chapman&Hall, 1997.

[3] Paul E. Mix, “Introduction to nondestructive testing: A training guide”, John Wiley and Sons, 2005.

[4] Naveen V. Nair, Vikram R. Melapudi, Hector R. Jimenez, Xin Liu, Yiming Deng, Zhiwei Zeng, Lalita

Udpa, Thomas J. Moran, Satish S. Udpa, “A GMR-Based Eddy Current System for NDE of Aircraft

Structures”, IEEE Transactions on Magnetics, Vol. 42, No. 10, Outubro 2006.

[5] J. G. Fantidis, C. Potolias, D. V. Bandekas, N. Vordos,”Non destructive testing of medium and high

voltage cables with a transportable radiography system”, Journal of Engineering Science and

Technology Review, Vol. 3, No. 1, pp. 89-94, 2010.

[6] Glenn A. Washer, “Developments for the non-destructive evaluation of highway bridges in the

USA”, NDT&E International, Vol. 31, No. 4, pp. 245-249, 1998.

[7] Luka Kufrin, ”Algorithm for Crack Analysis Using Eddy Current Inspection”, Tese de Mestrado, IST,

2010.

[8] Octavian Postolache, Helena G. Ramos, A. Lopes Ribeiro, F. Corrêa Alegria, “GMR Based Eddy

Current sensing probe for weld zone testing”, IEEE Sensors, Christchurch, Nova Zelândia, 2009.

[9] F. Vacher, F. Alves, C. Gilles-pascaus, “Eddy current nondestructive testing with giant magneto-

impedance sensor” NDT&E International, Vol. 40, pp. 439-442, 2007.

[10]Waveform Measurements and Analysis Committee of the IEEE Instrumentation and Measurement

Society, “IEEE Standard for Digitizing Waveform Recorders (IEEE standard 1057 – 1994)”,

September, 2001.

[11] Huifang Dou, YangQuan Chen,” Optimal Features Extraction of Noisy Sinusoidal Signals Using

Two-Stage Linear Least Squares Fitting”, Singapura, 2003.

[12] A. Lopes Ribeiro, H. Geirinhas Ramos, “Inductive probe for flaw detection in non.magnetic

metallic plates using Eddy Currents”, IEEE International Instrumentation and Measurement

Technology, Victoria, Vancouver Island, Canada, 2008.

[13] C. H. Smith, R. W. Schneider, T. Dogaru, S. T. Smith, “Eddy-current testing with GMR magnetic

sensor arrays”, Quantitative nondestructive evaluation, Green Bay, WI, Julho, 2003.

Page 70: Tese 1,1 MB

61

[14] B. Marchaud, J. M. Decitre, O. casual, “Flexible and array eddy currents probes for fast inspection

of complex parts”, AIP Conf. Proc., Vol. 1211, pp. 385-392, Fevereiro, 2007.

[15] O. Postolache, M. D. Pereira, H. G. Ramos, A. Lopes Ribeiro, “NDT on aluminum aircraft plates

based on eddy current sensing and image processing”, IEEE International Instrumentation and

Measurement Technology, Victoria, Vancouver Island, Canada, 2008.

[16] H. Geirinhas Ramos, A. Lopes Ribeiro, P. Jezdík, J. Neskudla, “Eddy current testing of

conductive materials”, IEEE International Instrumentation and Measurement Technology, Victoria,

Vancouver Island, Canada, 2008.

[17] H. Geirinhas Ramos, A. Lopes Ribeiro, T. Radil, M. Kubínyi, M. Paval, “Signal processing in na

eddy current nod-destructive testing system”, IMEKO TC4 Symposium, Florença, Itália, 2008.

[18] Site da Microchip Technology Inc. Acedido em Maio de 2010

www.microchip.com

[19] Microchip (2007) “PIC18F2455/2550/4455/ 4550 Data Sheet 28/40/44-Pin, High Performance,

Enhanced Flash, USB Microcontrollers with nanoWatt Technology” Disponível em:

http://www.microchip.com. Acesso em: Maio de 2010.

[20] Dogan Ibrahim, “Advanced PIC microcontroller projects in C”, Elevier, 2008

[21] Sheldon M. Ross, “Introduction to Probability and Statistics for Engineers and Scientist”, 3ª

Edição, Elsevier/Academic Press, 2004.

[22] A. S. Sedra, K. C. Smith, “Microelectronic circuits”, Oxford University Press, 1997.

Page 71: Tese 1,1 MB

62

Apêndice

Apêndice 1. Placa de circuito impresso com MAX232A

Figura 34 – Placa de circuito impresso com o circuit o de aplicação MAX232A

Page 72: Tese 1,1 MB

63

Apêndice 2. Código para programa o PIC18F4550

A2.1 Main e funções auxiliares /****************************************************************************/// Autor do código : João Miguel Sotomayor Calvário //Data : Setembro de 2010 //Local: Instituto Superior Técnico – Instituto das Telecomunicações ( IT ) //Professores Orientadores: Prof.Artur Lopes Ribeiro // Prof.Helena Geirinhas Ramos /**********************************************************************************/ // /** I N C L U D E S **********************************************************/ #include <p18cxxx.h> #include “system\typedefs.h” #include “io_cfg.h” #include “delays.h” #include “usart.h” #include “stdio.h” #include “stdlib.h” #define DIM 120 //Dimensão da FIFO. A cada 2 posições corresponde 1 amostras. Unsigned int i=0; unsigned int j=0; unsigned char Buffer_1[DIM];//FIFO do 1ºcanal unsigned char Buffer_2[DIM];//FIFO do 2ºcanal /** Bits de Configuração para a PICDEM FS USB Demo Board com PIC 18F4550***************/ #if defined(PIC18F4550_PICDEM_FS_USB) // PICDEM FS USB Demo Board PIC18F4550 #pragma config PLLDIV = 5 // (20 MHz crystal da PICDEM FS USB board) #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2 // Clock source from 96MHz PLL/2. FOSC=48 MHz #pragma config FOSC = HSPLL_HS #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRT = OFF #pragma config BOR = ON #pragma config BORV = 3 #pragma config VREGEN = ON //USB Voltage Regulator #pragma config WDT = OFF #pragma config WDTPS = 32768 #pragma config MCLRE = ON #pragma config LPT1OSC = OFF #pragma config PBADEN = OFF #pragma config CCP2MX = ON #pragma config STVREN = ON #pragma config LVP = OFF #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming #pragma config XINST = OFF // Extended Instruction Set #pragma config DEBUG = OFF /* Compiles without extra debug code */ #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF #pragma config CPB = OFF #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF #pragma config WRTB = ON // Boot Block Write Protection #pragma config WRTC = OFF #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF #pragma config EBTRB = OFF

Page 73: Tese 1,1 MB

64

#elif defined(PIC18F87J50_FS_USB_PIM) // Bits de configuração para a PIC18F87J50 FS USB Plug-In Module board #pragma config XINST = OFF // Extended instruction set #pragma config STVREN = ON // Stack overflow reset #pragma config PLLDIV = 3 // (12 MHz crystal used on this board) #pragma config WDTEN = OFF // Watch Dog Timer (WDT) #pragma config CP0 = OFF // Code protect #pragma config CPUDIV = OSC1 // OSC1 = divide by 1 mode #pragma config IESO = OFF // Internal External (clock) Switchover #pragma config FCMEN = OFF // Fail Safe Clock Monitor #pragma config FOSC = HSPLL // Firmware must also set OSCTUNE<PLLEN> to start PLL! #pragma config WDTPS = 32768 // #pragma config WAIT = OFF // Commented choices are // #pragma config BW = 16 // only available on the // #pragma config MODE = MM // 80 pin devices in the // #pragma config EASHFT = OFF // family. #pragma config MSSPMSK = MSK5 // #pragma config PMPMX = DEFAULT // #pragma config ECCPMX = DEFAULT #pragma config CCP2MX = DEFAULT #else #error Not a supported board (yet), make sure the proper board is selected in usbcfg.h, and if so, set configuration bits in __FILE__, line __LINE__ #endif /** Variáveis ********************************************************/ #pragma udata /** Protótipos das funções ***************************************/ void sendUART(unsigned char palavra[DIM]); void InitializeUART(void); void InitializePORTS(void); void WriteFIFO1(void); void ADConfigReg_AN1(void); void ADConfigReg_AN2(void); /** V E C T O R R E M A P P I N G *******************************************/ extern void _startup (void); // See c018i.c in your C18 compiler dir #pragma code _RESET_INTERRUPT_VECTOR = 0x000800 void _reset (void) _asm goto _startup _endasm #pragma code #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808 void _high_ISR (void) ; void rx_handler (void); #define BUF_SIZE 22 #pragma code _LOW_INTERRUPT_VECTOR = 0x000818 void _low_ISR (void) ; #pragma code /** Declarações das funcções **************************************************/ #pragma code /****************************************************************************** * Function: void main(void) * * Input: Void * * Output: Nunhum * * Overview: Main do programa. Começo do programa *****************************************************************************/ void main(void) InitializePORTS();

Page 74: Tese 1,1 MB

65

InitializeUART(); ADConfigReg_AN1(); while(1) WriteFIFO1(); //end while //end main /****************************************************************************** * Function: void sendUART(unsigned char palavra[20]) * * Input: FIFO com as amostras * * Output: Nenhum * * Overview: Envia para o Buffer de transmissão a FIFO, caracter a caracter *****************************************************************************/ void sendUART(unsigned char palavra[DIM]) unsigned int n=0; while(n<DIM) while(!PIR1bits.TXIF);//Este bit TXIF fica a 1 quando o Buffer do registo TXREG //está cheio e passa a 0 quando o Buffer fica vazio, ou seja, //quando fica disponível para uma outra transmissão TXREG = palavra[n];//Escvreve o caracter no Buffer while(!PIR1bits.TXIF); while(!TXSTAbits.TRMT);//O Bit TRMT passa a 1 quando o registo TSR é limpo n=n+1; /****************************************************************************** * Function: void InitializeUART(void) * * Input: Void * * Output: Nenhum * * Overview: Inicializa a porta série UART, defini a Baud Rate e inicializa os Timers *****************************************************************************/ void InitializeUART(void) RCSTAbits.SPEN=1; //Enable a porta Série TRISCbits.TRISC7=1;//Configuração obrigatório para funcionamento do módulo UART TRISCbits.TRISC6=1;//Configuração obrigatório para funcionamento do módulo UART PIE1bits.TXIE=1; TXSTA = 0x24;// Transmissao activa;BRGH=1;8 bit TX;Assync mode; RCSTA = 0x90;// Activa o Receiver e a porta série SPBRG = 0x71;//0x71; SPBRGH = 0x02;//0x02;// 0x0271 para 48MHz -> 19200 baud BAUDCON = 0x08;// BRG16 = 1 T0CON = 0x08; //Timer0 prescaler 1:2, timer off INTCONbits.TMR0IE = 1; //Interrupção do Timer0 activada INTCON2bits.TMR0IP = 1; INTCONbits.GIE = 1; //Global interrupt enabled TMR0H = 0xFF; //Preload value for 25 kHz and 48 MHz of cristal 65scillator TMR0L = 0x0F; // T0CONbits.T08BIT = 0; /****************************************************************************** * Function: void InitializePORTS(void) * * Input: Void * * Output: Nenhum * * Overview: Configura as portas como inputs(1) ou outputs(0) *****************************************************************************/ void InitializePORTS(void) TRISA = 0b00000001; // INPUT RA0 e RA1 TRISB = 0b00000000; TRISC = 0b00000000; TRISD = 0b00000000; TRISE = 0b00000000; /****************************************************************************** * Function: void ADConfigReg_AN1(void) *

Page 75: Tese 1,1 MB

66

* Input: Void * * Output: Nenhum * * Overview: Inicializa as definições ADC do canal 1 *****************************************************************************/ void ADConfigReg_AN1(void) ADCON0 = 0b00000001;// Analog Input RA0 ADCON1 = 0b00001110;// Vss=0; Vdd=5; AN0 como analog input ADCON2 = 0b10001110;//Justificação direita;2 TAD de tempo de aquisição;F0SC/64 /****************************************************************************** * Function: void ADConfigReg_AN2(void) * * Input: Void * * Output: Nenhum * * Overview: Inicializa as definições ADC do canal 2 *****************************************************************************/ void ADConfigReg_AN2(void) ADCON0 = 0b00000101;// Analog Input RA1 ADCON1 = 0b00001101;//Vss=0; Vdd=5; AN0 e AN1 como analog input ADCON2 = 0b10001110;//Justificação direita;2 TAD de tempo de aquisição;F0SC/64 /****************************************************************************** * Function: void WriteFIFO1(void) * * Input: Void * * Output: Nenhum * * Overview: Faz a conversão ADC e escreve o resultado na FIFO *****************************************************************************/ void WriteFIFO1(void) i=0; j=0; while(1) while(i<DIM) ADConfigReg_AN1();//Configurar canal 1 T0CONbits.TMR0ON = 1; //Turn timer0 on ADCON0bits.GO = 1; //Inicializa a conversão while(ADCON0bits.GO); //Aguarda o fim da conversão Buffer_1[i] = ADRESL;//Armazena os bits menos significativos do ADC na FIFO i=i+1; Buffer_1[i] = ADRESH;//Armazena os bits mais significativos do ADC na FIFO i=i+1; while(!INTCONbits.TMR0IF);//Espera até o Timer chegar ao fim INTCONbits.TMR0IF = 0;//Limpar a Flag de interrupão T0CONbits.TMR0ON = 0; //Turn timer0 off ADConfigReg_AN1(); T0CONbits.TMR0ON = 1; //Turn timer0 on ADCON0bits.GO = 1; //Inicializa a conversão while(ADCON0bits.GO); //Aguarda o fim da conversão Buffer_2[j] = ADRESL;//Armazena os bits menos significativos do ADC na FIFO j=j+1; Buffer_2[j] = ADRESH;//Armazena os bits mais significativos do ADC na FIFO j=j+1; while(!INTCONbits.TMR0IF);//Espera até o Timer chegar ao fim INTCONbits.TMR0IF = 0; //Clear interrupt flag T0CONbits.TMR0ON = 0; //Turn timer0 off sendUART(Buffer_1);//Enviar a FIFO com as amostras do 1º canal para o Buffer Delay10KTCYx(1000);//Pequeno delay para não haver enganos sendUART(Buffer_2);//Enviar a FIFO com as amostras do 2º canal para o Buffer i=0; j=0;

Page 76: Tese 1,1 MB

67

A2.2 Ficheiros .h

A.2.2.1 IO_CFG.h #ifndef IO_CFG_H #define IO_CFG_H /** I N C L U D E S *************************************************/ #include "C:\Users\CALVARIO\Desktop\Proj_Final\autofiles\initboard.h" /** T R I S *********************************************************/ #define INPUT_PIN 1 #define OUTPUT_PIN 0 #if defined(PIC18F4550_PICDEM_FS_USB) /** U S B ***********************************************************/ #define tris_usb_bus_sense TRISAbits.TRISA1 // Input #if defined(USE_USB_BUS_SENSE_IO) #define usb_bus_sense PORTAbits.RA1 #else #define usb_bus_sense 1 #endif #define tris_self_power TRISAbits.TRISA2 // Input #if defined(USE_SELF_POWER_SENSE_IO) #define self_power PORTAbits.RA2 #else #define self_power 1 #endif /** L E D ***********************************************************/ #define mInitAllLEDs() LATD &= 0xF0; TRISD &= 0xF0; #define mLED_1 LATDbits.LATD0 #define mLED_2 LATDbits.LATD1 #define mLED_3 LATDbits.LATD2 #define mLED_4 LATDbits.LATD3 #define mLED_1_On() mLED_1 = 1; #define mLED_2_On() mLED_2 = 1; #define mLED_3_On() mLED_3 = 1; #define mLED_4_On() mLED_4 = 1; #define mLED_1_Off() mLED_1 = 0; #define mLED_2_Off() mLED_2 = 0; #define mLED_3_Off() mLED_3 = 0; #define mLED_4_Off() mLED_4 = 0; #define mLED_1_Toggle() mLED_1 = !mLED_1; #define mLED_2_Toggle() mLED_2 = !mLED_2; #define mLED_3_Toggle() mLED_3 = !mLED_3; #define mLED_4_Toggle() mLED_4 = !mLED_4; /** S W I T C H *****************************************************/ #define mInitAllSwitches() TRISBbits.TRISB4=1;TRISBbits.TRISB5=1; #define mInitSwitch2() TRISBbits.TRISB4=1; #define mInitSwitch3() TRISBbits.TRISB5=1; #define sw2 PORTBbits.RB4 #define sw3 PORTBbits.RB5 /** P O T ***********************************************************/ #define mInitPOT() TRISAbits.TRISA0=1;ADCON0=0x01;ADCON2=0xBC; /** S P I : Chip Select Lines ***************************************/ #define tris_cs_temp_sensor TRISBbits.TRISB2 // Output #define cs_temp_sensor LATBbits.LATB2 #define tris_cs_sdmmc TRISBbits.TRISB3 // Output #define cs_sdmmc LATBbits.LATB3

Page 77: Tese 1,1 MB

68

/** S D M M C *******************************************************/ #define TRIS_CARD_DETECT TRISBbits.TRISB4 // Input #define CARD_DETECT PORTBbits.RB4 #define TRIS_WRITE_DETECT TRISAbits.TRISA4 // Input #define WRITE_DETECT PORTAbits.RA4 /********************************************************************/ /********************************************************************/ /********************************************************************/ #elif defined(PIC18F87J50_FS_USB_PIM) /** U S B ***********************************************************/ // Bus sense pin is RB5 on PIC18F87J50 FS USB Plug-In Module. // Must put jumper JP1 in R-U position to use bus sense feature. #define tris_usb_bus_sense TRISBbits.TRISB5 // Input #if defined(USE_USB_BUS_SENSE_IO) #define usb_bus_sense PORTBbits.RB5 #else #define usb_bus_sense 1 #endif #define self_power 0 /** L E D ***********************************************************/ #define mInitAllLEDs() LATE &= 0xFC; TRISE &= 0xFC; \ LATD &= 0x00; TRISD &= 0x00; // LATD LEDs are on // the HPC Explorer board #define mLED_1 LATEbits.LATE1 // Red RE1 LED on PIM board #define mLED_2 LATEbits.LATE0 // Red RE0 LED on PIM board #define mLED_3 LATDbits.LATD2 // Located on HPC Explorer board! #define mLED_4 LATDbits.LATD3 // Located on HPC Explorer board! #define mLED_1_On() mLED_1 = 1; #define mLED_2_On() mLED_2 = 1; #define mLED_3_On() mLED_3 = 1; #define mLED_4_On() mLED_4 = 1; #define mLED_1_Off() mLED_1 = 0; #define mLED_2_Off() mLED_2 = 0; #define mLED_3_Off() mLED_3 = 0; #define mLED_4_Off() mLED_4 = 0; #define mLED_1_Toggle() mLED_1 = !mLED_1; #define mLED_2_Toggle() mLED_2 = !mLED_2; #define mLED_3_Toggle() mLED_3 = !mLED_3; #define mLED_4_Toggle() mLED_4 = !mLED_4; /** S W I T C H *****************************************************/ #define mInitAllSwitches() TRISBbits.TRISB4=1; TRISBbits.TRISB0=1; #define mInitSwitch2() TRISBbits.TRISB4=1; // On PIC18F87J50 PIM #define mInitSwitch3() TRISBbits.TRISB0=1; // On HPC Explorer #define sw2 PORTBbits.RB4 // On PIC18F87J50 PIM #define sw3 PORTBbits.RB0 // On HPC Explorer /** P O T ***********************************************************/ #define mInitPOT() TRISAbits.TRISA0=1; \ WDTCONbits.ADSHR = 1; \ ANCON0bits.PCFG0 = 1; \ WDTCONbits.ADSHR = 0; \ ADCON0=0x01; \ ADCON1=0xBE; // POT on HPC Explorer /** I 2 C T E M P S E N S E *************************************/ #define mInitI2CPins() TRISC |= 0x18; // RC3 and RC4 are I2C /********************************************************************/ /********************************************************************/

Page 78: Tese 1,1 MB

69

/********************************************************************/ //Uncomment below if using the YOUR_BOARD hardware platform //#elif defined(YOUR_BOARD) //Add your hardware specific I/O pin mapping here #else #error Not a supported board (yet), add I/O pin mapping in __FILE__, line __LINE__ #endif #endif //IO_CFG_H

A.2.2.2 initboard.h #ifndef USBCFG_H #define USBCFG_H /** D E F I N I T I O N S *******************************************/ #define MAX_NUM_INT 1 // For tracking Alternate Setting #define EP0_BUFF_SIZE 8 // Valid Options: 8, 16, 32, or 64 bytes. // There is very little advantage in using // more than 8 bytes on EP0 IN/OUT, so 8 is the // recommended value. /* Parameter definitions are defined in usbdrv.h */ #define MODE_PP _PPBM0 #define UCFG_VAL _PUEN|_TRINT|_FS|MODE_PP /* Uncomment only the hardware platform that you are using*/ #define PIC18F4550_PICDEM_FS_USB //#define PIC18F87J50_FS_USB_PIM //#define YOUR_BOARD #if defined(PIC18F4550_PICDEM_FS_USB) #define USE_SELF_POWER_SENSE_IO #define USE_USB_BUS_SENSE_IO #elif defined(PIC18F87J50_FS_USB_PIM) //#define USE_USB_BUS_SENSE_IO //JP1 must be in R-U position to use this feature on this board /*If using the YOUR_BOARD selection, uncomment below section as appropriate for your hardware*/ //#elif defined(YOUR_BOARD) //#define USE_SELF_POWER_SENSE_IO //See MCHPFSUSB Firmware User's Guide //#define USE_USB_BUS_SENSE_IO //(DS51679) for more details about these features. #else #error Not a supported board (yet), See __FILE__, line __LINE__, or double click on this text. //See above commented section. You need to select the features your hardware will be using. #endif /** D E V I C E C L A S S U S A G E *******************************/ #define USB_USE_GEN /* * MUID = Microchip USB Class ID * Used to identify which of the USB classes owns the current * session of control transfer over EP0 */ #define MUID_NULL 0 #define MUID_USB9 1 /** E N D P O I N T S A L L O C A T I O N **************************/ /*

Page 79: Tese 1,1 MB

70

* See usbmmap.c for an explanation of how the endpoint allocation works */ /* PICDEM FS USB Demo (using generic usb class template) */ #define USBGEN_INTF_ID 0x00 #define USBGEN_UEP UEP1 #define USBGEN_BD_OUT ep1Bo #define USBGEN_BD_IN ep1Bi #define USBGEN_EP_SIZE 64 #define MAX_EP_NUMBER 2 // UEP2 #endif //USBCFG_H

Apêndice 3. Código para o Matlab

%Autor do código : João Miguel Sotomayor Calvário %Data : Setembro de 2010 %Local: Instituto Superior Técnico - Instituto das Telecomunicações ( IT ) %Professores Orientadores: Prof.Artur Lopes Ribeiro % Prof.Helena Geirinhas Ra mos clear all clc close all %//*-------------------Declaração de variáveis----- ---------------------*// kind=1; aux3=0; x=0; t0=0; f=1000; omega=2*pi*f; Num_Bytes = 120; NTotP = Num_Bytes/2; T=1/f; Samp_Rate=25000; delta=1/Samp_Rate; t=0:delta:2; dn=0.1*randn(size(t)); NPPP=Samp_Rate/f; NP = NTotP/NPPP; %//*-------------------Abertura da porta série----- ---------------------*// s = serial( 'COM4' ); fopen(s); set(s, 'Baudrate' ,19200, 'Databits' ,8, 'Parity' , 'none' , 'Stopbits' ,1, 'Flowcontrol' , 'none' ); set(s, 'Timeout' ,10); %//*-------------------Aquisição dos 2 canais------ --------------------*// while (x<2) Vdd=5; % Valor máximo n=10; % Numero de bits LSB = Vdd/(2^n-1); value2=zeros(Num_Bytes/2,1); flushinput(s); while ( s.BytesAvailable < Num_Bytes ) % Espera até o Buffer estar cheio pause(.1); end

Page 80: Tese 1,1 MB

71

value = fread(s,Num_Bytes); %Leitura dos valores do Buffer x=x+1; %% Passar para codigo binário if (value(1) > 3 || value(3) > 3 || value(5) > 3) binary_number=dec2bin(value); nbits=size(binary_number,2); result_biny=zeros(Num_Bytes/2,nbits*2); asci_code1=zeros(Num_Bytes,nbits); for i=1:Num_Bytes for j=1:nbits asci_code1(i,j)=unicode2native(bina ry_number(i,j)); end end %% Criar palavras de 10 bits, juntando as a mostras 2 a 2 j=1; position=1; result_num=zeros(Num_Bytes/2,nbits*2); while (j<=Num_Bytes) for i=1:nbits result_num(position,i)=asci_code1(j +1,i); end for k=1:nbits result_num(position,k+nbits)=asci_c ode1(j,k); end j=j+2; position=position+1; end value2=zeros(Num_Bytes/2,1); for j=1:Num_Bytes/2 for aux=0:2*nbits-1 if (result_num(j,end-aux)==48) result_biny(j,end-aux)=0; end if (result_num(j,end-aux)==49) result_biny(j,end-aux)=1; end end %% Calcular o valor decimal da amostra for aux=0:2*nbits-1 value2(j)=value2(j)+result_biny(j,e nd-aux)*LSB*2^aux; end end else Num_Bytes2=Num_Bytes-2; binary_number=dec2bin(value(2:end-1)); nbits=size(binary_number,2); result_biny=zeros(Num_Bytes2/2,nbits*2); asci_code1=zeros(Num_Bytes2,nbits); for i=1:Num_Bytes2 for j=1:nbits asci_code1(i,j)=unicode2native(bina ry_number(i,j)); end end %% Criar palavras de 10 bits, juntando as a mostras 2 a 2 j=1; position=1; result_num=zeros(Num_Bytes2/2,nbits*2); while (j<=Num_Bytes2) for i=1:nbits result_num(position,i)=asci_code1(j +1,i); end

Page 81: Tese 1,1 MB

72

for k=1:nbits result_num(position,k+nbits)=asci_c ode1(j,k); end j=j+2; position=position+1; end value2=zeros(Num_Bytes/2,1); for j=1:Num_Bytes2/2 for aux=0:2*nbits-1 if (result_num(j,end-aux)==48) result_biny(j,end-aux)=0; end if (result_num(j,end-aux)==49) result_biny(j,end-aux)=1; end end %% Calcular o valor decimal da amostra for aux=0:2*nbits-1 value2(j)=value2(j)+result_biny(j,e nd-aux)*LSB*2^aux; end end end aux3=aux3+Num_Bytes/2; [Ahat,Theta,RMS]=sinefit2(value2',omega,0,delta 2); Ahat_(kind)=Ahat; Theta_(kind)=Theta*180/pi; kind=kind+1; end p=1; for kk=0:0 res(p)=Theta_(p+kk)-Theta_(p+kk+1); p=p+1; end fclose(s) delete(s) clear s