Você está na página 1de 22

Relatrio de Sistemas de Aquisio de Dados

2006/2007

Engenharia Fsica Tecnolgica

AMOSTRAGEM DE SINAIS ANALGICOS


VARIVEIS POR UM CIRCUITO ADC COM
INTERFACE DE COMUNICAO SRIE
Laboratrio III

Trabalho realizado por:


Alexandra Gouveia, n53760
Joo Mendes Lopes, n53788
Andr Cunha, n53757
Grupo 3; 4feira 15:00-19:00h

Lisboa, 16 de Junho de 2007

Introduo
O objectivo primordial deste trabalho consiste na aquisio de uma srie de amostras
peridicas de um sinal varivel, atravs do circuito ADC de interface srie sncrona. Para
tal, pretende-se utilizar o protocolo SPI para a comunicao de uma FPGA SPARTAN 3
com um dispositivo ADC, desenvolvido no trabalho de laboratrio anterior, mas adaptado
para adquirir amostras individuais peridicas de um sinal analgico varivel sinusoidal,
armazenando diversos valores durante um determinado tempo e permitindo a visualizao
dos diversos valores no mostrador LCD/LED, atravs dos switches da placa. Os sinais
adquiridos devem ser comparados com o sinal analgico e ainda efectuadas as
transformadas FFT dos mesmos.
Para aquisio dos valores atravs do ADC, necessrio um protocolo de comunicao
entre o dispositivo de converso analgica digital, e o circuito que rege o seu
funcionamento. semelhana do laboratrio anterior, o ADC usado (MCP3202) rege-se
pelo protocolo SPI. O trabalho que se pretende desenvolver no laboratrio III , na
verdade, um seguimento lgico do que foi desenvolvido anteriormente, pois a diferena
entre os dois trabalhos consiste na adaptao do projecto para que este possa adquirir
diversos valores de um sinal varivel, ao invs de um nico de sinal constante e os possa
guardar numa memria, acedida posteriormente atravs da manipulao de switches na placa.
Como tal, e como o funcionamento do protocolo SPI e do ADC MCP3202 j foram
explicados no relatrio anterior (ver bibliografia), no haver um alongamento sobre esta
matria, de modo a evitar repetio de informao e redundncia. Pretende-se focar as
diferenas entre os dois projectos e destacar a forma como o primeiro projecto foi alterado
para a criao deste.

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

1 sesso de laboratrio
Material utilizado:
Ambiente de programao XILINX ISE MPLAB e compilador VHDL.
A primeira sesso de laboratrio consistiu na alterao do trabalho de laboratrio n 2, de
acordo com os requisitos indicados anteriormente. Para tal, criou-se um novo sinal externo,
um vector de cinco elementos do tipo entrada chamado switch, para que as alteraes feitas
nos switches da placa pudessem ser reconhecidas no interior do programa. Apesar de
existirem oito switches na placa SPARTAN 3, para ler nestes dispositivos um valor at 32
bastava utilizar os primeiros cinco e da a dimenso do vector. Para o programa, e de
acordo com o funcionamento da placa descrito no manual da mesma, um switch ligado vale
1 e um switch desligado vale 0. Para alm disso, criou-se o sinal interno indice, um natural
que pudesse ser incrementado medida que era feita cada uma das aquisies, no s como
um sinal de controlo para ter um critrio de paragem tal que quando indice atingisse o valor
32 parassem as aquisies, como tambm para servir de ndice para a transferncia de cada
uma das aquisies para posies de memria especficas. Foi ainda criado um sinal interno
vector de doze elementos, cuja funo descrita adiante e uma memria, um array de 32
vectores cada um com doze elementos. Posteriormente o sinal indice foi inicializado a 0 no
reset existente no processo que implementa o protocolo SPI. De seguida tentou-se que o
bloco de cdigo que implementa este protocolo corresse 32 vezes mediante um comando
de if que postula que enquanto o ndice for menor que 32 o bloco de cdigo deve ser
executado. No final de cada execuo do protocolo SPI, no instante onde no 2 trabalho de
laboratrio se voltava a por cs_FPGA a high acrescentaram-se algumas linhas de cdigo,
nomeadamente: a aquisio passada para a posio de memria correspondente ao valor
do ndice, o contador de 50kHz reinicializado, para que na segunda aquisio os passos
dependentes deste contador se voltem a executar, o ndice incrementado, o sinal state
reinicializado a 0 para que a nova aquisio se possa desencadear e a palavra de controlo
reinicializada a 1101, caso contrrio o programa esquece o seu valor. Para alm disto,
cs_FPGA continua a ser posto a high neste instante.
Assim, mediante este raciocnio, esperava-se que o protocolo fosse executado 32 vezes e as
aquisies sucessivas guardadas em posies de memria sucessivas. De seguida, foi
necessrio fazer com que o programa lesse o valor dos switches da placa e consoante o seu
valor mostrasse a aquisio correspondente no display de sete segmentos. Para tal,
acrescentou-se um elsif ao programa, para que quando o ndice valesse 32 fosse executada
esta parte do programa e no se sasse mais deste estado. Nele acrescentou-se o comando
vector<=tmp_ram(conv_integer(switch));

que l o valor dos switches na placa, converte o seu valor para um inteiro e envia a posio
de memria correspondente ao valor dos swiches para o sinal interno vector. Inicialmente,
este comando consistia num case, que para cada valor dos switches enviava o contedo da
posio respectiva de memria para vector, mas o comando indicado acima cumpre o
mesmo objectivo, poupando-se muitas linhas de cdigo.

Projecto e implementao das alteraes ao 2 trabalho de laboratrio


De seguida bastou alterar o programa, para que em vez de se enviarem os troos do vector
AQUISICAO para o sinal curr, que depois modifica o valor da varivel seg mediante o
descodificador, processo descrito no anterior trabalho de laboratrio, se enviarem os troos
correspondentes do sinal vector. Quando o programa acaba de enviar os sinais de
endereamento para os displays, o valor de switch volta a ser verificado e o cdigo repete-se
indefinidamente, o que permite que cada alterao dos switches da placa seja percepcionada
pelo programa, que age em conformidade. O mdulo descodificador permaneceu
inalterado em relao ao que havia sido implementado no 2 trabalho de laboratrio.
Assim, o cdigo final deste projecto, construdo da forma descrita era o seguinte:
--importao de bibliotecas
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--declarao de variveis externas
entity SPI is
Port ( din_FPGA : in STD_LOGIC;
dout_FPGA : out STD_LOGIC;
reset : in STD_LOGIC;
cs_FPGA : out STD_LOGIC;
clock50Mhz : in STD_LOGIC;
clockSPI : out STD_LOGIC;
switch : in std_logic_vector(4 downto 0) ;
seg : out std_logic_vector(6 downto 0) ;
digit : out std_logic_vector(3 downto 0));
end SPI;

architecture Behavioral of SPI is


--importao do modulo descodificador
COMPONENT dec_seg is
Port ( char : in STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0));
end COMPONENT;
--definio de variveis internas
signal PALAVRA: STD_LOGIC_VECTOR (3 downto 0);
signal AQUISICAO: STD_LOGIC_VECTOR (12 downto 0);
signal clock50kHz : STD_LOGIC;
signal count50kHz : STD_LOGIC_VECTOR (24 downto 0);
signal count: STD_LOGIC_VECTOR (24 downto 0);
signal state : STD_LOGIC_VECTOR (1 downto 0);
signal dout_tmp : STD_LOGIC;
signal cs_tmp : STD_LOGIC;
signal curr : STD_LOGIC_VECTOR (3 downto 0);
signal vector : std_logic_vector(11 downto 0);
signal indice : natural;

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

--varivel interna tipo state


type STATE_TYPE is (S1, S2, S3, S4, S5, S6, S7, S8);
signal stateDisp, nextState: STATE_TYPE;
--declarao de um array de 31 vectores com 12 elementos
type ram_type is array (0 to 31) of
std_logic_vector(11 downto 0);
signal tmp_ram: ram_type;
begin
--identificao de clockSPI com clock50kHz
clockSPI <= clock50kHz;
--importao do mdulo do descodificador
decoder:
dec_seg PORT MAP(
char=>curr,
seg=>seg
);
--implementao de um relgio de 50kHz
main:
process (clock50Mhz, reset)
begin
if reset='1' then
count <= (others =>'0');
clock50kHz <= '1';
elsif rising_edge(clock50Mhz) then
count <= count + 1;
if count = 500 then
clock50kHz <= '0';
end if;
if count = 1000 then
clock50kHz <= '1';
count <= (others =>'0');
end if;
end if;
end process;

--implementao do protocolo SPI


--actualizao de dout_FPGA e cs_FPGA em transies de
--flanco negativo do relgio SPI
process (clock50kHz)
begin
if falling_edge(clock50kHz) then
dout_FPGA <= dout_tmp;

cs_FPGA <= cs_tmp;


end if;
end process;

process (reset, clock50kHz)


begin
--inicializaes
if reset='1' then
state <= "00";
PALAVRA <= "1101";
count50kHz <= (others =>'0');
cs_tmp <= '1';
digit <= (others => '1') ;
curr <= (others => '0') ;
nextState <= S1;
indice <= 0;
--para cada flanco positivo de relgio
elsif rising_edge(clock50kHz) then
--enquanto o ndice for menor que 32 so feitas 32
--aquisies pelo ADC
if indice < 32 then
--contador incrementa
count50kHz <= count50kHz + 1;

--no estado 0 iniciam-se as comunicaes atravs da


--colocao de cs_tmp a low, envia-se o start bit (primeiro bit da
--palavra de controlo do ADC) e muda-se de estado
if state= "00" then
if count50kHz = 1 then
cs_tmp <= '0';
dout_tmp <= PALAVRA(3);
PALAVRA(3 downto 1) <= PALAVRA (2 downto 0);
State <= "01";
end if;
end if;

--no estado 1 enviam-se os restantes bits de controlo e


--muda-se de estado
if state="01" then
dout_tmp <= PALAVRA(3);
PALAVRA(3 downto 1) <= PALAVRA (2 downto 0);
if count50kHz = 4 then
state <= "10";
end if;
end if;

Projecto e implementao das alteraes ao 2 trabalho de laboratrio


--no estado 2 recebe-se a palavra do ADC; de seguida passa-se
--cada aquisio para uma posio de memria definida pelo ndice
--(1 aquisio para a 1 posio de memria, etc.) pe-se cs a
--high para que cessem as comunicaes, incrementa-se o ndice,
--reinicia-se o vector PALAVRA com a palavra de comando
--bem como o contador de 50MHz e volta-se ao estado inicial

if state = "10" then


AQUISICAO(0) <= din_FPGA ;
QUISICAO(12 downto 1) <= AQUISICAO(11 downto 0);
if count50kHz = 18 then
stateDisp<= S1;
tmp_ram (indice) <= AQUISICAO(11 downto 0);
count50kHz <= (others =>'0');
indice<=indice+1;
state <= "00";
cs_tmp <='1';
PALAVRA<="1101";
end if;
end if;

--quando foram feitas 32 aquisies cessam definitivamente


--as comunicaes com o ADC e mostrada no display uma das 32
--aquisies consoante a posio dos switches da placa.
--Permanece-se neste estado indefinidamente, passando-se
--constantemente a aquisio requerida para os displays
elsif indice = 32 then
-- passada para um vector temporrio a aquisio que se pretende
--visualizar
vector<=tmp_ram(conv_integer(switch));
--em cada flanco positivo o sinal stateDisp
--actualizado para nextState
stateDisp <=nextState;

--no primeiro estado, escrito um A no display AN3


if stateDisp = S1 then
curr <= "1010";
digit <= "0111";
nextState <= S2;
--no segundo estado, o display AN3 apagado
elsif stateDisp = S2 then
digit <= "1111";
nextState <= S3;

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

--no terceiro estado, so escritos os bits das posies 11


--a 8 da aquisio no display AN2
elsif stateDisp = S3 then
curr <= vector(11 downto 8);
digit <= "1011";
nextState <= S4;
--no quarto estado, o display AN2 apagado
elsif stateDisp = S4 then
digit <= "1111";
nextState <= S5;
--no quinto estado, so escritos os bits na posio 7 a 4
--da aquisio no display AN1
elsif stateDisp = S5 then
curr <= vector(7 downto 4);
digit <= "1101";
nextState <= S6;
--no sexto estado, o display AN1 apagado
elsif stateDisp = S6 then
digit <= "1111";
nextState <= S7;
--no stimo estado, so escritos os quatro bits menos
--significativos da aquisio no display AN0
elsif stateDisp = S7 then
curr <= vector(3 downto 0);
digit <= "1110";
nextState <= S8;
--no oitavo estado, o display AN0 apagado
elsif stateDisp = S8 then
digit <= "1111";
nextState <= S1;
end if;
--o programa mantm-se nesta rotina indefinidamente,
--enviando continuamente sinais de endereamento para os
--displays
end if;
end if;
end process;
end Behavioral;

Projecto e implementao das alteraes ao 2 trabalho de laboratrio


Apesar do modulo descodificador no se ter alterado, permanecendo igual ao
implementado para o 2 trabalho de laboratrio, aqui includo para que o cdigo fique
completo:
--importao de bibliotecas
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dec_seg is
Port ( char : in
seg : out
end dec_seg;

STD_LOGIC_VECTOR (3 downto 0);


STD_LOGIC_VECTOR (6 downto 0));

architecture Behavioral of dec_seg is


begin
--codificador para a programao dos sete segmentos
process (char)
begin
--a cada valor de curr corresponde uma representao em hexadecimal
case char is
when "0000" => seg <= "0000001" ;--0
when "0001" => seg <= "1001111" ;--1
when "0010" => seg <= "0010010" ;--2
when "0011" => seg <= "0000110" ;--3
when "0100" => seg <= "1001100" ;--4
when "0101" => seg <= "0100100" ;--5
when "0110" => seg <= "0100000" ;--6
when "0111" => seg <= "0001111" ;--7
when "1000" => seg <= "0000000" ;--8
when "1001" => seg <= "0000100" ;--9
when "1010" => seg <= "0001000" ;--A
when "1011" => seg <= "1100000" ;--b
when "1100" => seg <= "0110001" ;--C
when "1101" => seg <= "1000010" ;--d
when "1110" => seg <= "0110000" ;--E
when "1111" => seg <= "0111000" ;--F
when others => seg <= "1111110" ;
end case ;
end process;
end Behavioral;

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

Depois de implementado o projecto, este foi testado, recorrendo ao habitual ficheiro de


teste. Como no 2 trabalho de laboratrio j se tinha verificado o bom funcionamento da
implementao do protocolo SPI, bem como do envio dos sinais necessrios aos displays de
sete segmentos para que o valor da aquisio possa ser a visualizado, pretendia-se apenas
confirmar que estes elementos do programa continuavam a funcionar bem e que para cada
uma das 32 aquisies agora implementadas o valor da aquisio ia para a posio de
memria pretendida. Tambm se quis verificar o bom funcionamento dos switches. Como
na simulao a palavra AQUISICAO ainda no se encontra definida, para fazer o teste,
definiu-se um valor para este vector 0100010100011 e comentou-se o cdigo que fazia a
transferncia de din_FPGA para o mesmo. Para esta parte do projecto verificou-se o bom
funcionamento do circuito simulado, encontrando-se o resultado da simulao na Figura 1

Figura 1 Simulao do funcionamento da memria

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

Pode-se verificar o bom funcionamento do programa, j que o vector definido para a


AQUISICAO colocado em cada ciclo do programa numa posio diferente de memria.
Chama-se a ateno para o facto de ser precisamente no momento em que a aquisio
colocada na memria que o ndice incrementado e da que s no final da etapa em que o
ndice 0 que a aquisio colocada na posio 0 de memria e assim sucessivamente.
Pode-se ainda observar o correcto funcionamento de cs_FPGA e dout_FPGA que variam
da forma pretendida e para flancos negativos de relgio. Embora no se consiga ver a
continuao da simulao, verificou-se que este padro se repetia at que o ndice atingia o
valor 32. Nesta altura a ltima posio de memria preenchida e passa-se segunda fase
do programa, de endereamento dos displays, verificando-se que o padro de
endereamento como referido no 2 trabalho de laboratrio se repetia indefinidamente,
como se pretendia. Pode-se verificar que a palavra enviada para definir o valor apresentado
nos displays de sete segmentos correspondia alternadamente A, 3, A e 8, sendo o primeiro A
definido directamente no programa como foi indicado no 2 trabalho de laboratrio e os
restantes valores os que se esperavam dado o valor que se definiu para a aquisio. de
relembrar que o bit mais significativo deste vector ignorado, por corresponder ao null bit
sem valor informativo enviado pelo ADC antes de enviar a aquisio propriamente dita.
Uma vez verificado o bom funcionamento da memria foi necessrio verificar se o sistema
de visualizao da aquisio atravs da manipulao dos switches estava a funcionar bem.
Como os switches s podiam ser realmente alterados na placa, mudou-se a declarao do
vector switch para ser uma varivel inout e definiu-se antes da passagem da aquisio para o
vector temporrio um valor para a varivel switch e outro para a primeira posio de
memria.
switch<="00000";
tmp_ram (0) <= "010111101011";

em que os troos de cada quatro bits definidos para a primeira posio de memria
correspondem a 5, E e b em hexadecimal. Com este procedimento verificou-se o bom
funcionamento do circuito simulado para esta parte do projecto, encontrando-se o
resultado da simulao na Figura 2.

Projecto e implementao das alteraes ao 2 trabalho de laboratrio

Figura 2 Simulao do funcionamento dos switches

Pode-se verificar o bom funcionamento de todas as variveis. Quando o ndice passa a


valer 32 a varivel switch passa a 00000 e a posio 0 da memria temporria alterada
para o valor esperado. De seguida a varivel seg alterada sucessivas vezes e
indefinidamente enviando sinais equivalentes representao das letras A, 5, E e b.

Projecto e implementao das alteraes ao 2 trabalho de laboratrio


Uma vez verificado o bom funcionamento do circuito simulado, voltaram-se a fazer as
alteraes necessrias para que o programa ficasse no seu estado inicial.
importante salientar que uma vez tendo o projecto referente ao 2 trabalho de
laboratrio a funcionar, foi relativamente simples executar as alteraes descritas e
implementar correctamente o projecto em questo, no havendo dificuldades a apontar.

Aquisio de um sinal varivel com um ADC com interface SPI MPC3202


2 sesso de laboratrio
Material utilizado:

Ambiente de programao XILINX ISE MPLAB e compilador VHDL;

Kit SPARTAN 3;

Multmetro;

Osciloscpio;

Ligaes unifilares;

Breadboard;

Fonte de alimentao DC e gerador de sinais;

Dispositivo ADC de 12 bits do tipo aproximaes sucessivas com interface SPI


MPC3202.

Uma vez verificado o bom funcionamento do cdigo implementado, pretendiam-se obter


32 amostras individuais de um sinal analgico sinusoidal para cada presso manual no
boto de reset da placa e visualizar essas aquisies no LCD da placa SPARTAN 3
consoante o valor dos switches manipulados pelo utilizador na mesma placa. Esta dispe de
oito switches, mas para representar at 32 valores bastava manipular os primeiros cinco,
sendo os restantes ignorados pelo programa.
Assim, programou-se o ficheiro .ucf, editado correctamente para o 2 trabalho de
laboratrio, tendo sido apenas necessrio acrescentar os portos relativos aos cinco switches a
utilizar e modificar uma das sadas da placa, porque se verificou que o porto A3,
correspondente sada da FPGA clockSPI no estava a funcionar. O ficheiro depois de
configurado era o seguinte:
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET

"clock50Mhz"
"reset"
"digit<0>"
"digit<1>"
"digit<2>"
"digit<3>"
"seg<0>"
"seg<1>"
"seg<2>"
"seg<3>"

LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC

= "T9";
="L14";
= "D14";
= "G14";
= "F14";
= "E13";
= "N16";
= "F13";
= "R16";
= "P15";

Aquisio de um sinal varivel com um ADC com interface SPI MPC3202


NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET
NET

"seg<4>"
"seg<5>"
"seg<6>"
"din_FPGA"
"dout_FPGA"
"cs_FPGA"
"clockSPI"
"switch<0>"
"switch<1>"
"switch<2>"
"switch<3>"
"switch<4>"

LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC
LOC

=
=
=
=
=
=
=
=
=
=
=
=

"N15";
"G13";
"E14";
"C5";
"C7";
"C9";
"D10";
"F12";
"G12";
"H14";
"H13";
"J14";

Posteriormente colocou-se o ADC na breadboard ligando-o placa SPARTAN 3 com as


linhas de comunicao necessrias, um procedimento j descrito no 2 trabalho de
laboratrio. Antes de se ligar o gerador de sinais ao ADC teve-se o cuidado de evitar que o
sinal gerado tivesse uma amplitude negativa ou superior a 3.3V. Para tal, antes de ligar
qualquer sinal entrada do ADC, ligou-se a massa do osciloscpio a um sinal constante a 1V medido com cuidado com o auxlio de um multmetro e regulou-se a amplitude do sinal
sinusoidal de forma a que onda observada no osciloscpio no tivesse troos negativos,
obtendo-se desta forma um sinal com amplitude de 0 a 2V.
Uma vez obtido um sinal sinusoidal com as caractersticas necessrias, pode-se ligar a
massa da placa ao sinal de -1V da base de experimentao e o sinal sinusoidal entrada do
ADC. Para se verificar se a comunicao se estava a efectuar correctamente carregou-se o
programa na placa SPARTAN 3 e no boto de reset L14. De seguida variaram-se os switches
de forma a visualizar cada uma das aquisies nos displays da placa. No entanto, apesar dos
dois displays que representavam os 8 bits menos significativos da aquisio variarem
visivelmente entre mudanas de switches, verificou-se que o terceiro no variava. Ligando a
entrada do ADC a um sinal constante pode-se observar o mesmo, verificando-se que agora
o ADC j no fornecia valores correspondentes amostra analgica, mas valores muito
mais baixos, mesmo com o sinal constante no mximo de 3.3V. Para se verificar se a
comunicao se estava a efectuar correctamente, ligou-se a cada sinal da FPGA (cs_FPGA,
dout_FPGA, din_FPGA e clockSPI) um canal do osciloscpio e observou-se o andamento
dos sinais em questo. Verificou-se que de facto, os bits mais significativos da aquisio
nunca ficavam a high, embora a comunicao se estivesse a efectuar correctamente,
comportando-se os sinais cs_FPGA, dout_FPGA e clockSPI como o esperado. Por outro
lado, no trabalho de laboratrio anterior, o ADC tinha funcionado correctamente, tendo-se
inclusivamente estabelecido uma recta de calibrao cujos pontos experimentais se
sobrepunham recta terica.
Depois de uma srie de tentativas para resolver o problema, percebeu-se que
provavelmente era o tempo entre aquisies sucessivas que era demasiado curto. De facto,
existe uma curva de carga no sinal din_FPGA antes da definio da aquisio pelo ADC, e
a rapidez das aquisies sucessivas no permitia que algum dispositivo no interior do ADC
carregasse o suficiente para por os bits mais significativos da converso analgica digital, os
primeiros a serem transmitidos, a high.

Aquisio de um sinal varivel com um ADC com interface SPI MPC3202


Este problema foi solucionado aumentando o tempo entre aquisies. Para tal alterou-se o
cdigo para em vez de esperar at que count50kHz fosse igual a 1 at iniciar as
comunicaes com o ADC, esperar que este sinal incrementasse at 1000, o que num
contador de 50kHz corresponde a um tempo de espera de 0.02s. Os restantes pontos do
programa que dependiam deste contador foram alterados em conformidade.
Uma vez carregada a nova verso do programa na placa, pode-se ver finalmente o ltimo
display a variar medida que se aumentava a tenso constante entrada do ADC. No
entanto, os displays nunca mostraram o valor mximo, FFF para um sinal de input mximo
de 3.3V. Provavelmente seria necessrio aumentar ainda mais o tempo entre amostragens,
mas considerou-se que esta alterao no era necessria, porque a gama de valores a
amostrar variava entre 0 e 2V e para estes valores de tenso o ADC pareceu funcionar
bem, de acordo com alguns clculos rpidos feitos durante o laboratrio. de salientar que
este problema consumiu algum tempo, pois demorou-se a perceber qual seria a soluo at
porque na datasheet do ADC utilizado no s no era feita qualquer referncia necessidade
de tempos longos entre aquisies como tambm no prprio diagrama temporal do
funcionamento do dispositivo se apresentavam aquisies sucessivas com tempos de
permeio muito mais baixos que os que se verificaram ser efectivamente necessrios.
Assim, constatou-se finalmente o bom funcionamento do programa para a gama de tenses
a converter pelo ADC. Uma vez ultrapassada a fase da implementao e montagem do
projecto pretendia-se, como foi referido no incio deste trabalho, recolher 32 amostras do
sinal em questo com intervalos entre amostras tais que a frequncia de aquisio fosse
inferior a duas vezes a frequncia do sinal, superior e igual mesma. Pretendia-se com este
procedimento verificar a validade do critrio de Nyquist, ao mesmo tempo que se punha
novamente em prtica a comunicao com o ADC e se constatava o seu bom
funcionamento. Por outro lado, como o tempo entre amostragens estabelecido nesta fase
do projecto era de 0.02s, pode-se concluir, desprezando o tempo de comunicao com o
ADC, que para adquirir 32 amostras deveria passar um tempo de cerca de 0.64s. Assim,
para se amostrarem relativamente poucos perodos do sinal sinusoidal, estabeleceu-se que
este sinal deveria ter uma frequncia de cerca de 3.8Hz, aproximadamente equivalente a um
perodo de 0.250s, pelo que cerca de trs perodos correspondem a 0.75s, um valor
razoavelmente prximo de 0.64s. evidente que uma vez aumentada ou diminuda a
frequncia de aquisio o nmero de perodos amostrados vai variar, mas pretendia-se
apenas ter uma ideia da ordem de grandeza do mesmo. O sinal analgico a amostrar
representado na Figura 3.

Aquisio de um sinal varivel com um ADC com interface SPI MPC3202

Figura 3 Sinal analgico a amostrar

Assim, e porque o sinal do gerador de sinais escolhido tinha uma frequncia de 3.8Hz,
escolheu-se fazer uma amostragem de frequncia 5Hz, outra de frequncia 7.6Hz e outra
de frequncia 20Hz, correspondentes ao que era pedido. Para um melhor estudo da
frequncia de aquisio, ainda se fez uma amostragem de 40Hz, um valor muito superior
frequncia postulada pelo critrio de Nyquist. Assim, o programa foi mais uma vez alterado
em conformidade e carregado para a placa em cada um dos casos, tendo-se recolhido os
dados da aquisio provenientes do ADC atravs da sua visualizao nos displays por
manipulao dos switches. O tempo entre aquisies sucessivas foi controlado atravs da
visualizao do sinal cs_FPGA no osciloscpio, verificando-se que estava a ser cumprido
pelo programa

Anlise dos resultados


Os grficos obtidos com base nos valores recolhidos para cada uma das frequncias de
amostragem encontram-se nas Figuras 4, 5 6 e 7. Para uma melhor anlise dos resultados
obtidos, apresentam-se desde j os grficos com os pontos unidos. importante ter em
conta que no se sabia o tempo correspondente a cada ponto experimental retirado, nem
isso era fundamental para o trabalho em curso. Desta forma, optou-se por colocar todos os
pontos iniciais em t=0s e os restantes distanciados periodicamente, de acordo com a
frequncia de aquisio de cada um.

Figura 4 Resultados experimentais para faquisio (5Hz) <<2fsinal

Figura 5 Resultados experimentais para faquisio (7.6Hz) 2fsinal

Anlise dos resultados

Figura 6 Resultados experimentais para faquisio (20Hz) >2fsinal

Figura 7 Resultados experimentais para faquisio (40Hz) >>2fsinal

Como seria de esperar, obtm-se uma m reconstruo do sinal para uma frequncia de
aquisio muito inferior postulada pelo critrio de Nyquist. Por outro lado a qualidade da
reconstruo aumenta um pouco para uma frequncia de aquisio que obedece a este
critrio, percebendo-se j o carcter peridico, de uma s frequncia, do sinal. Este carcter
fica mais claro para uma frequncia de 20 Hz, onde a natureza sinusoidal do sinal j mais
perceptvel. Contudo, qualquer uma destas aquisies no permite uma clara percepo do
sinal original adquirido. de salientar que o critrio de Nyquist pode ser aplicado nestas
circunstncias, porque o sinal pode ser completamente reconstrudo com a informao
disponvel recorrendo a mtodos matemticos.

Anlise dos resultados


No entanto, para as reconstrues efectuadas neste trabalho, apenas mediante a juno dos
pontos da aquisio, a nica aquisio em que se compreende claramente a caracterstica
sinusoidal do sinal para 40 Hz, um valor muito superior frequncia postulada pelo
critrio de Nyquist. Como tambm seria de esperar, e porque o nmero de aquisies
constante igual a 32, visualiza-se um comportamento do sinal por menores perodos de
tempo para frequncias de aquisio crescentes. Para se reconstruir uma extenso temporal
maior de sinal seria necessrio aumentar a capacidade de memria do programa para
adquirir mais pontos ou ter tentado fazer mais do que uma aquisio de 32 pontos com a
mesma frequncia de aquisio. No entanto, este procedimento no era essencial, porque
foi possvel reconstruir mais do que um perodo do sinal analgico, pelo que a sua natureza
compreendida com clareza para as frequncias escolhidas que ultrapassam de forma
significativa o critrio de Nyquist.
De acordo com as especificaes do enunciado foi ainda possvel calcular a transformada
FFT das sequncias de amostras recolhidas para cada frequncia de aquisio. Foi tambm
feita uma transformada do sinal analgico de entrada do ADC. Os resultados encontram-se
nas Figuras 8, 9, 10, 11 e 12.

Figura 8 Transformada FFT dos resultados experimentais para faquisio (5Hz) <<2fsinal

Anlise dos resultados

Figura 9 Transformada FFT dos resultados experimentais para faquisio (7.6Hz) 2fsinal

Figura 10 Transformada FFT dos resultados experimentais para faquisio (20Hz) >2fsinal

Anlise dos resultados

Figura 11 Transformada FFT dos resultados experimentais para faquisio (40Hz) >>2fsinal

Figura 12 Transformada FFT do sinal analgico

Anlise dos resultados


Atravs da anlise da transformada FFT das diversas aquisies, observa-se que a partir da
frequncia de Nyquist possvel reconhecer qual a frequncia do sinal, atravs do pico de
amplitude bem definido volta de 4Hz. Pode-se observar que a transformada FFT do sinal
analgico (Figura 12) tambm possui um pico nesta frequncia, como seria de esperar,
porque foi assim que o sinal foi definido no gerador de sinais. No grfico da Figura 6,
correspondente frequncia de aquisio de 5Hz, no possvel visualizar um pico
distinto, o que refora a ideia de que o facto desta aquisio no obedecer ao critrio de
Nyquist no permite obter bons resultados, porque no se dispe de informao suficiente
para se reconstruir o sinal.
Concluses
Este trabalho permitiu a aquisio de sinais analgicos variveis utilizando um ADC, e
recorrendo ao protocolo SPI. O trabalho efectuado baseou-se no laboratrio anterior,
tendo sido alterado apenas o necessrio de forma a se obterem 32 aquisies para
diferentes frequncias. Mais uma vez, foi aprofundado o conhecimento da programao em
VHDL, tendo o cdigo sido adaptado para que, usando os switches da placa, os diferentes
valores adquiridos fossem visualizados nos displays de 7 segmentos.
Foram obtidas aquisies para quatro frequncias diferentes. Verificou-se que medida que
a frequncia de aquisio aumenta, a qualidade do sinal adquirido tambm aumenta. Apesar
da nica aquisio que espelha de forma razovel as caractersticas do sinal analgico,
possuir um valor de frequncia de aquisio muito superior postulada pelo critrio de
Nyquist, sabe-se que possvel reconstruir o sinal, recorrendo a mtodos matemticos que
foram estudados e implementados durante as aulas, se o critrio for cumprido. O facto da
aquisio que cumpre o requerido pelo teorema de Nyquist fornecer uma FFT com um
pico centrado nos 3.8Hz uma indicao disto mesmo.
Por causa do problema verificado durante a aquisio inicial, percebeu-se que a
implementao de um tempo relativamente longo entre cada aquisio essencial, tendo
sido necessrio um aumento significativo no tempo entre aquisies para que os valores
obtidos correspondam recta de calibrao determinada anteriormente.
Ainda foram efectuadas transformadas FFT dos sinais, que permitiram um estudo adicional
das diversas aquisies, verificando-se que a aquisio de 5Hz (nica que no respeitava o
critrio de Nyquist) a nica em que no se consegue obter um pico de amplitude para a
frequncia de 3.8Hz bem definido. Todos os restantes, incluindo a aquisio
correspondente frequncia de Nyquist, possuem um pico bem definido prximo dos 4
Hz, a frequncia do sinal analgico de entrada.
Bibliografia

Manual do kit SPARTAN 3;

datasheet do integrado ADC MCP 3202;

cdigo e relatrio do trabalho de laboratrio II.

Você também pode gostar