Tese 1,1 MB
Transcript of 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
II
(Página deixada em branco intencionalmente)
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.
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
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
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
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
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
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
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.
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.
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
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
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
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
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,
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
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.
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
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)
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)
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.
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
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
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
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
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
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
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º.
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
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
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
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.
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
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.
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
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
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)
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.
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)
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)
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
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.
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.
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
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.
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
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.
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.
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
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
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.
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.
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
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.
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.
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
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,
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.
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
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
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
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
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
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
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.
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.
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.
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.
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.
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
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
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();
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) *
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;
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
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 /********************************************************************/ /********************************************************************/
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 **************************/ /*
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
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
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