amostragem de sinais analógicos por um circuito adc com interface de comunicação série
TRANSCRIPT
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
1/22
Relatório de Sistemas de Aquisição de Dados2006/2007
Engenharia Física Tecnológica
A MOSTRAGEM DE SINAIS ANALÓGICOS PORUM CIRCUITO ADC COM INTERFACE DECOMUNICAÇÃO SÉRIE
Laboratório II
Trabalho realizado por: Alexandra Gouveia, nº53760 João Mendes Lopes, nº53788
André Cunha, nº53757
Grupo 3; 4ªfeira 15:00-19:00h
Lisboa, 2 de Junho de 2007
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
2/22
Introdução
O objectivo inicial deste trabalho consiste na implementação do protocolo SPI para acomunicação de uma FPGA SPARTAN 3 com um dispositivo ADC. Posteriormentepretende-se adquirir amostras individuais de um sinal analógico constante, para cadapressão manual num interruptor da placa e indicar o resultado no mostrador LCD/LED da
placa emuladora.
Quando se pretende adquirir dados amostrados através de um ADC, é necessário queexista um protocolo de comunicação entre o dispositivo de conversão analógica digital,(que neste caso tem um papel de slave ) e o circuito que rege o seu funcionamento ( master ).O protocolo SPI é um standard de interface série síncrona e pode ser utilizado para acomunicação com um ADC, como se pretende neste trabalho. Este protocolo especificaquatro sinais lógicos de 1 bit para a comunicação série: o relógio (sinal de saída do master ),um sinal de saída de comando (do ponto de vista do master ), um sinal de entrada de dados(do ponto de vista do master ) e um sinal de saída do master , activo a low , designado por chipselect. Por vezes o slave requer que a comunicação seja feita em transições de flanco negativodo relógio, que é o caso do ADC que se pretende utilizar.
Para que a comunicação se inicie, o master deve configurar o relógio para uma frequênciaigual ou inferior à frequência máxima que o slave é capaz de suportar. De seguida o master põe o CS ( chip select ) a low para que se inicie a comunicação. Durante cada ciclo de relógioposterior ocorre a transmissão de comando e de dados: o master envia bits para a linha Dataout (do master ) que o slave lê, enviando de seguida bits pela linha Data in (do master ), que sãolidos pelo master . É importante referir que o protocolo permite que um master tenhacontrolo sobre vários slaves . Neste caso existem tantas linhas CS quantos os dispositivos acomandar e o master activa apenas a linha CS do dispositivo com quem pretende trocarinformação.
No caso do projecto que se pretende implementar, o ADC utilizado, MCP3202, funciona
através de um protocolo SPI como o descrito acima. Assim, este dispositivo será um slave ,pretendendo-se programar o master , o dispositivo de controlo do ADC, na FPGASPARTAN3, cujo funcionamento foi sumariamente descrito no relatório primeiro trabalhode laboratório. Na Figura 1 encontra-se um diagrama temporal do funcionamento dosistema a implementar, sob o ponto de vista do ADC (retirado da datasheet destedispositivo) correspondente à interface SPI MPC 3202 do mesmo.
Figura 1 – Diagrama temporal da transferência de dados SPI do ponto de vista do ADC
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
3/22
Projecto e implementação do protocolo SPI
1ª sessão de laboratório
Material utilizado:
•
Ambiente de programação XILINX ISE “MPLAB” e compilador “VHDL”.
Como este projecto foi algo longo, para além de ter passado por várias fases deimplementação, foi sofrendo ao longo das várias sessões de laboratório modificações ecorrecções. Assim, apresenta-se uma descrição da implementação definitiva para as váriasfases do projecto em cada sessão de laboratório, chamando-se a atenção, pontualmente,para o facto de determinadas opções referentes à fase de implementação descrita em cadaparte deste relatório terem sido tomadas posteriormente.
A primeira sessão de laboratório consistiu na criação de um projecto VHDL em ambientede programação XILINX ISE “MPLAB” e na implementação do protocolo SPI descritoacima. Para tal foram definidos os sinais exteriores (para ligação posterior à FPGA)
clock50Mhz , reset , din_FPGA, como sinais de entrada, e dout_FPGA, cs_FPGA e clockSPIcomo sinais de saída e o sinal interno count (um contador de 50MHz para a programação dorelógio mais lento, clockSPI ). Como a programação foi feita do ponto de vista da FPGA, omaster , o significado destes sinais é claro. O sinal clock50Mhz é o relógio da própria FPGA,como havia sido descrito no primeiro trabalho e o clockSPI é um relógio de menorfrequência, suportada pelo ADC. Como o trabalho de laboratório anterior havia consistidoprecisamente a programação de um relógio mais lento a partir do oscilador da FPGA, paraprogramar o sinal clockSPI bastou copiar e alterar ligeiramente o código. Como o relógioem questão deveria ser sempre um sinal exterior, de saída da FPGA, precisando no entantode ser utilizado no interior do programa como um sinal de entrada, optou-se por fazer umaidentificação de igualdade entre este sinal e um sinal interno denominado clock50kHz ,.
Assim, em vez de se programar directamente o clockSPI , programou-se este último,
segundo o código implementado no primeiro trabalho, para uma frequência de 50kHz,suportada pelo ADC utilizado (os valores aconselhados na datasheet estão entre 0.9MHz e10kHz). Como o código implementado já foi descrito no relatório do trabalho delaboratório anterior, não se apresenta, por agora, o código em questão.
É de salientar que nesta fase do projecto foram cometidos dois erros, posteriormentecorrigidos. Primeiro, a frequência implementada inicialmente era muito elevada, da ordemdo MHz e para além disso, o clockSPI havia sido inicialmente definido como um sinalexterior inout , erros que se corrigiram da forma descrita acima na sessão de laboratório emque se comunicou pela primeira vez com o ADC.
Posteriormente decidiu-se implementar as várias fases do protocolo SPI segundo um
diagrama de estados. Para tal definiram-se os vectores internos state (de dois bits),PALAVRA (de quatro bits), AQUISICAO (de 13 bits), count50kHz (de 25 bits). Oobjectivo era ir variando o valor de state em cada fase da comunicação do protocolo SPI,guardar a palavra de controlo para o ADC (de quatro bits) no vector PALAVRA, guardaro byte fornecido pelo ADC no vector AQUISICAO e programar um contador de 50kHzpara definir temporalmente determinadas mudanças de valor das variáveis em questão.Foram ainda definidos dois sinais internos de um bit, dout_tmp e cs_tmp.
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
4/22
Projecto e implementação do protocolo SPI
Como foi referido acima, as trocas de informação entre a FPGA e o ADC são feitas noflanco negativo do relógio. Assim, foi necessário criar dois processos que corressem emparalelo. O primeiro consistiu na programação do protocolo para transições em flancopositivo. O segundo, na actualização dos valores de saída da FPGA, dout_FPGA e
cs_FPGA, para cada flanco negativo de relógio através das variáveis internas dout_tmp ecs_tmp programadas no primeiro processo. Decidiu-se que após o reset se devia definir o
valor da PALAVRA, (1101 para o modo que se pretende usar no ADC), colocar a variável state no valor inicial ‘0’ bem como o contador de 50kHz a ‘0’. Nesta fase o sinalcs_tmp é posto a high . Na PALAVRA, que é o comando que é enviado da FPGA para o
ADC para permitir a aquisição de valores, o primeiro e o último bit vêm a high para garantira inicialização e que o bit mais significativo da aquisição da tensão em valores digitais vêmem primeiro lugar para a placa, respectivamente.
O protocolo SPI encontra-se então implementado da seguinte forma: para cada transiçãode flanco positivo do relógio, o contador de 50kHz incrementa; o programa começa noestado 0. Aí, espera-se que o contador tenha o valor 1, instante em que se coloca cs_tmp a
low , o bit mais significativo da palavra de comando na linha dout_tmp, deslocam-se os valores que preenchem o vector PALAVRA para a esquerda e muda-se de estado. Noestado 1, colocam-se os restantes bits da palavra de controlo na linha dout_tmp (durante trêsflancos de relógio é colocado o bit mais significativo do vector PALAVRA na linha e deseguida deslocados para a esquerda o valores que o preenchem) e posteriormente, muda-sede estado. No estado 3, os bits da saída de dados do ADC din_FPGA (12 bits de dados eum bit nulo sem valor informativo) são colocados em instantes sucessivos no vector
AQUISICAO, de uma forma semelhante à utilizada para colocar a palavra de comando nalinha dout_FPGA. Como a FPGA pode receber a informação para transições de flancopositivo, não é necessário proceder como no caso de dout_FPGA e cs_FPGA. Quando o
vector se encontra preenchido, passa-se ao estado 3, onde o cs_tmp é novamente colocado ahigh para que cessem as comunicações, permanecendo o programa neste estado
indefinidamente.
É de salientar que também aqui foi cometido um erro, pois inicialmente o protocolo foiimplementado apenas para transições de relógio de flanco positivo, corrigindo-se este errona sessão em que se comunicou com o ADC. Nesta fase do projecto, o código era oseguinte:
--importação de bibliotecas
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--declaração de variáveis externasentity 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);
end SPI;
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
5/22
Projecto e implementação do protocolo SPI
architecture Behavioral of SPI is
--definição de variáveis 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;
begin
--identificação de clockSPI com clock10kHz
clockSPI
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
6/22
Projecto e implementação do protocolo SPI
process (reset, clock50kHz)
begin
--inicialização de state a 0, do vector PALAVRA a 1101(comando do
--ADC), do contador de 50kHz a 0; colocação de cs_FPGA a 1 através--de cs_FPGA_tmp
if reset='1' then
state
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
7/22
Projecto e implementação do protocolo SPI
--no estado 2 recebe-se a palavra do ADC e muda-se de estado
if state = "10" then
AQUISICAO(0)
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
8/22
Projecto e implementação do funcionamento dos displays de sete segmentos
Embora não se consiga ver a continuação da simulação, verificou-se que este sinalpermanecia constante a high indefinidamente. Assim, uma vez verificado o bomfuncionamento do circuito simulado, passou-se à fase seguinte da programação.
2ª e 3ª sessões de laboratório
Material utilizado:
• Ambiente de programação XILINX ISE “MPLAB” e compilador “VHDL;• Kit SPARTAN 3.
Como foi referido na introdução deste trabalho, pretendia-se, para além de guardar o valorda aquisição do ADC num vector, visualizar essa aquisição no mostrador LCD/LED daplaca SPARTAN 3. Optou-se pela primeira hipótese, já que assim a visualização doresultado da aquisição seria mais fácil. Como é possível concluir através da observação da
Figura 1, constante na introdução deste trabalho, o ADC envia um bit inicial, nãoinformativo, neste caso para o vector AQUISICAO e só depois envia doze bits, para omesmo vector, informação referente à conversão de um sinal analógico constante numsinal digital. Eram estes doze bits que se pretendiam visualizar, de alguma forma, no LCDda placa SPARTAN3. Decidiu-se que se iriam agrupar estes bits em três grupos de quatrobits e exprimir o valor que cada grupo representava em hexadecimal, usando-se apenas trêsdos quatro displays de sete segmentos existentes na placa. Para compreender ofuncionamento dos displays e a forma como deveriam ser programados para executarem oque se pretendia, consultou-se o manual da placa SPARTAN 3. Também foi facultado umprograma, clock.vhd, já implementado, cuja função era gerar um sinal de 1MHz, um sinalde um kHz a partir do anterior e um sinal de 1Hz a partir do segundo, e usando este últimosinal ir incrementado uma variável, enviada para o display . Quando se copiou o código
descrito para um projecto à parte e o respectivo ficheiro clock.ucf, pode-se verificar,através da passagem do programa para a placa FPGA SPARTAN 3 o valor dos displays aincrementar em cada segundo. Para além disso foi fornecido um ficheiro, associado aoprograma clock.vhd, com a explicação da forma como se deviam endereçar os portos dosdisplays . Daqui retiraram-se dois esquemas que constam nas Figuras 3 e 4.
Figura 3 – Esquema das palavras de endereçamento para os displays de sete segmentos
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
9/22
Projecto e implementação do funcionamento dos displays de sete segmentos
Figura 4 – Diagrama temporal do funcionamento dos displays de sete segmentos
Constatou-se assim que para aceder aos displays era necessário actualizar primeiro umapalavra de sete bits, que ‘decide’ que segmentos devem acender e posteriormente actualizaruma palavra de quatro bits que postula qual o display em que esses segmentos devemacender. Estas palavras são activas a low . A primeira palavra corresponde a uma sequência‘abcdefg’ (e um bit adicional se se pretender utilizar o ponto, o que não é o caso) mapeadana Figura 3. A segunda palavra deve ser igual a 0111, 1011, 1101 e 1110 para activarrespectivamente o display AN3, AN2, AN1 e AN0. É de salientar que de cada vez que seacende um display ele deve ser apagado no instante seguinte, como se pode observar nodiagrama temporal e que por outro lado, estes dispositivos não dispõem de memória eportanto, para que se consiga visualizar alguma coisa, é necessário que os displays estejamsempre a ser endereçados.
Uma vez compreendido o funcionamento destes dispositivos, decidiu-se que se faria ocomando dos displays no terceiro estado, a partir do qual o valor do chip select permanece a
high . Acrescentaram-se mais dois sinais externos de saída de respectivamente quatro e setebits, digit e seg , o primeiro para endereçar caracteres e o segundo, segmentos. Foi aindaacrescentado um vector interno de quatro bits curr para ser actualizado de acordo com ostroços de quatro bits da palavra adquirida e dois sinais definidos como STATE_TYPE que
variavam de S1 a S8, de forma a se poder definir uma série de estados dentro do estado 3,para em cada um deles endereçar, ligando e desligando, os quatro caracteres. Tinha-sedecidido utilizar, para visualizar a aquisição, apenas três dos quatro caracteres existentes,mas por questões do controlo da implementação, programou-se também o quarto caracterpara ter um valor constante igual a A. Como a codificação do valor que deve assumir osinal seg é semelhante para cada estado, definiu-se um modulo VHDL à parte, no qual seimplementou exclusivamente este descodificador, de uma forma muito semelhante à quehavia sido implementada no projecto clock.vhd.
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
10/22
Projecto e implementação do funcionamento dos displays de sete segmentos
O código deste módulo, dependente do módulo principal era o seguinte:
--importação 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 STD_LOGIC_VECTOR (3 downto 0);
seg : out STD_LOGIC_VECTOR (6 downto 0));
end dec_seg;
architecture Behavioral of dec_seg is
begin
--codificador para a programação dos sete segmentos
process (char)
begin
--a cada valor de curr corresponde uma representação em hexadecimal
case char is
when "0000" => seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg seg
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
11/22
Projecto e implementação do funcionamento dos displays de sete segmentos
Como se pode verificar foram definidos dois vectores seg e char que no módulo principalcorrespondem respectivamente a seg e curr . Este módulo faz a correspondência directa entreo valor em hexadecimal que o sinal char representa e a respectiva codificação para arepresentação num display genérico.
No modulo principal foi então feita a importação do módulo do codificador e aidentificação dos sinais seg e curr com os sinais do modulo dependente seg e char .Posteriormente foram implementados os estados sucessivos de endereçamento de cadacaracter. Em cada estado é actualizado o valor de curr , passando-se para este vector o troçodo vector AQUISICAO que se pretende representar. De cada vez que curr é actualizado, omodulo secundário é automaticamente chamado actualizando-se o sinal externo seg . Deseguida actualiza-se o valor da variável digit para endereçar o caracter pretendido. No estadoseguinte actualiza-se este sinal para 1111, de forma a apagar o caracter em questão. Assim,o código final deste projecto, construído da forma descrita era o seguinte:
--importação de bibliotecas
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--declaração de variáveis 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);
end SPI;
architecture Behavioral of SPI is
--importação 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;
--definição de variáveis 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) ;
--variável interna tipo state
type STATE_TYPE is (S1, S2, S3, S4, S5, S6, S7, S8);
signal stateDisp, nextState: STATE_TYPE;
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
12/22
Projecto e implementação do funcionamento dos displays de sete segmentos
begin
--identificação de clockSPI com clock50kHz
clockSPI curr,
seg=>seg
);
--implementação de um relógio de 50kHz
main: process (clock50Mhz, reset)
begin
if reset='1' then
count '0');
clock50kHz
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
13/22
Projecto e implementação do protocolo SPI
process (reset, clock50kHz)
begin
--inicializações
if reset='1' thenstate
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
14/22
Projecto e implementação do protocolo SPI
--no estado 2 recebe-se a palavra do ADC e muda-se de estado
if state = "10" then
AQUISICAO(0)
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
15/22
Projecto e implementação do protocolo SPI
--no quinto estado, são escritos os bits na posição 7 a 4
--do vector aquisição no display AN1
elsif stateDisp = S5 then
curr
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
16/22
Projecto e implementação do protocolo SPI
Para uma melhor visualização do funcionamento do programa na sua versão definitiva, foiconstruído um diagrama de estados.
Figura 5 – Diagrama de estados do programa implementado
Depois de implementado o projecto, este foi testado, recorrendo ao habitual ficheiro deteste. Verificou-se o bom funcionamento do circuito simulado, encontrando-se o resultadona Figura 5. Como nesta altura ainda não se tinha comunicado com o ADC a palavra
AQUISICAO ainda não se encontrava definida. Assim, para fazer o teste, substituíram-seos troços do vector AQUISICAO que actualizavam o vector curr por sequências fixas dequatro bits: “0101”, “1011” e “1001”, equivalentes a 5, b e 9 em hexadecimal.
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
17/22
Projecto e implementação do protocolo SPI
Figura 6 – Simulação do funcionamento dos sinais digit e seg
Pode-se verificar o bom funcionamento das variáveis em questão. No flanco positivoanterior ao sinal cs_FPGA voltar a high (num flanco negativo de relógio) o sinal digit éactualizado para o primeiro display (AN3) e no mesmo instante é actualizado o sinal seg com“abcdefg” equivalente 0001000 ou seja um A. De seguida o valor de digit é actualizado para“1111” o que equivale a desligar o caracter que anteriormente havia sido ligado. De seguidaeste comportamento repete-se para AN2, AN1 e AN0, para os quais se verificam oscaracteres definidos por seg 5, b e 9 como se pretendia. Embora não se consiga ver acontinuação da simulação, verificou-se que este padrão se repetia indefinidamente, comotambém se pretendia. Assim, uma vez verificado o bom funcionamento do circuitosimulado, voltou-se a programar a actualização de curr segundo os valores do vector
AQUISICAO.
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
18/22
Aquisição de dados com um ADC com interface SPI MPC3202
4ª sessão de laboratório
Material utilizado:
•
Ambiente de programação XILINX ISE “MPLAB” e compilador “VHDL”;• Kit SPARTAN 3;
• Multímetro;
• Osciloscópio;
• Ligações unifilares;
• Breadboard ;
• Fonte de alimentação DC e gerador de sinais;
• Dispositivo ADC de 12 bits do tipo aproximações sucessivas com interface SPIMPC3202.
Uma vez verificado o bom funcionamento do código implementado, pretendiam-se obteramostras individuais de um sinal analógico para cada pressão manual no botão de reset daplaca e visualizar essas aquisições no LCD da placa SPARTAN 3.
Assim, programou-se o ficheiro .ucf, que especifica os portos da placa para os quais sedevem enviar o sinais emulados. O relógio de 50Mhz, bem como os sinais de seg e digit devem ser enviados para portos específicos, postulados no manual da placa. Para osrestantes sinais escolheram-se os pinos mais acessíveis e para o botão de reset escolheu-se obotão de pressão da placa L14. O ficheiro depois de configurado era o seguinte:
NET "clock50Mhz" LOC = "T9";
NET "reset" LOC ="L14";
NET "digit" LOC = "D14";
NET "digit" LOC = "G14";
NET "digit" LOC = "F14";
NET "digit" LOC = "E13";
NET "seg" LOC = "N16";
NET "seg" LOC = "F13";
NET "seg" LOC = "R16";
NET "seg" LOC = "P15";
NET "seg" LOC = "N15";
NET "seg" LOC = "G13";
NET "seg" LOC = "E14";
NET "din_FPGA" LOC = "C5";NET "dout_FPGA" LOC = "C7";
NET "cs_FPGA" LOC = "C9";
NET "clockSPI" LOC = "A3";
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
19/22
Aquisição de dados com um ADC com interface SPI MPC3202
Posteriormente colocou-se o ADC na breadboard ligando-o à placa SPARTAN 3 com aslinhas de comunicação necessárias (para além das ligações aos pinos do cs_FPGA,dout_FPGA, din_FPGA e clockSPI , também se ligou a massa do dispositivo à massa da placae a alimentação do dispositivo à fonte de 3.3V da placa), consultado a datasheet deste
dispositivo. De seguida, ligou-se a fonte DC variável (máx. 15V) da placa de alimentação àentrada CH0 do ADC, tendo o cuidado de colocar a fonte no valor mínimo da tensão,aproximadamente 0V, já que por razões evidentes a tensão do sinal analógico de input do
ADC não pode exceder a tensão de alimentação/referência. Para se verificar se acomunicação se estava a efectuar correctamente, ligou-se a cada sinal da FPGA ( cs_FPGA,dout_FPGA, din_FPGA e clockSPI ) um canal do osciloscópio e observou-se o andamentodos sinais em questão, carregando o programa na placa SPARTAN 3 e no botão de reset L14. Foi tirada uma fotografia do ecrã do osciloscópio para uma determinada aquisição (odisplay mostrava o valor 021 para o valor de tensão mínimo na base de alimentação). Foitambém feita uma aquisição dos valores de cada canal para a referida amostragem, com osquais se construiu um gráfico. Ambos constam nas Figuras 7 e 8.
- .50
.0 0
.5 0
1.00
1.50
2.00
2.50
3.00
3.50
4.00 - . 0 0
0 0 4 4
. 0 0
. 0 0 0
0 4 4
. 0 0 0
0 8 8
. 0 0 0
1 3 2
. 0 0 0
1 7 6
. 0 0 0
2 2
. 0 0 0
2 6 4
. 0 0 0
3 0 8
. 0 0 0
3 5 2
. 0 0 0
3 9 6
. 0 0 0
4 4
T e m po ( s)
T e n s ã o ( V )
Figura 7 – Andamento dos sinais do protocolo SPI (cs a azul claro, dout a amarelo, din a azul escuroe o relógio a magenta)
Figura 8 – Imagem do andamento dos sinais do protocolo SPI (50µs/Div)
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
20/22
Aquisição de dados com um ADC com interface SPI MPC3202
Verifica-se que os sinais em questão têm o comportamento previsto. Pode-se constatar quede facto o sinal de relógio tem uma frequência de 50kHz e que os sinais cs_FPGA,dout_FPGA e din_FPGA são modificados para flancos negativos de relógio (este último éenviado para flancos negativos de relógio, como se pode ver na Figura 1, embora seja
recebido pela FPGA em flancos positivos). Observa-se o envio da palavra 1101nitidamente e também se pode observar a recepção da uma palavra 000000100001,equivalente à descrita no display 021. O sinal cs_FPGA está também a low e a high nosinstantes previstos. Assim, constatou-se o bom funcionamento do programa. Uma vezultrapassada a fase da implementação e montagem do projecto, puderam-se recolher umasérie de amostras individuais do sinal analógico, para pressões sucessivas no reset da placa e
variações muito suaves da tensão de entrada deste dispositivo. Os valores da tensão deentrada foram medidos com um multímetro e registados os seus valores e a respectivaleitura no display da placa. Foram retirados 47 valores que são apresentados no gráficorepresentado na Figura 9. O objectivo desta leitura exaustiva de valores de entrada e saídado ADC era a execução de uma recta de calibração do ADC e a verificação da boa precisãodo dispositivo ADC utilizado. Para tal, no mesmo gráfico apresenta-se a recta teórica de
calibração do ADC, que provém de uma proporcionalidade directa entre a tensão dereferência (3.3 V) e o número máximo possível gerado por 12 bits:
com DOC o código digital de saída do ADC, V IN a tensão analógica de entrada e V DD atensão de alimentação/referência.
DOC=4095.V
IN
V DD
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
21/22
Análise dos resultados
O gráfico obtido da relação entre os valores de tensão de entrada no ADC medidos pelomultímetro e os valores lidos no display de 7 segmentos, juntamente com a recta teórica decalibração do ADC, é o seguinte:
Figura 9 – Recta de calibração do ADC utilizado
Pode-se observar a vermelho a recta teórica, que corresponde a uma proporcionalidadedirecta tendo em conta que o valor mais alto com 12 bits (em decimal corresponde a 4095)equivale à tensão de referência, V ref = 3.3 V. Pode-se observar que todos os valores obtidos
se encontram sobre a recta, sem nenhuma excepção, o que permite verificar o bomfuncionamento do circuito incorporado e do código implementado e descarregado para aplaca. Foi assumido um erro de 0.0005V nas tensões de entrada, visto corresponder àmenor divisão da escala do aparelho usado para leitura das tensões, o multímetro.
-
8/18/2019 Amostragem de Sinais Analógicos por um Circuito ADC com Interface de Comunicação Série
22/22
Conclusões
Com este trabalho, pode-se compreender o funcionamento do protocolo SPI do ADCutilizado. Para além disto, o projecto permitiu o contacto com uma placa FPGASPARTAN 3, já iniciado no trabalho de laboratório anterior. Desta vez este contacto foiaprofundado, tendo-se usado uma série de saídas da placa, botões de pressão e os displays
de sete segmentos. A aprendizagem desta parte do projecto, mais relacionada com ohardware , foi fundamental. Por outro lado, pode-se aprofundar o conhecimento sobre aprogramação em VHDL, que ocupou a maior parte do tempo dedicado a este trabalho.Nela aprenderam-se uma série de novos comandos e de regras para construção de umcircuito VHDL, cujo modo de funcionamento difere significativamente das outraslinguagens de programação até aqui aprendidas. O projecto também permitiu uma novaabordagem aos circuitos ADC, através da interacção master/slave , regulada pelo protocoloSPI.Foi verificado o bom funcionamento do programa através de múltiplos testes na fase deimplementação do circuito master e teste do ADC, tendo-se verificado a uma relação delinearidade entre os valores digitais de saída do dispositivo e valores analógicos do sinal detensão constante de entrada, condizente com a recta de calibração pretendida.
De uma forma geral, pode-se concluir que foram cumpridos os objectivos deste trabalho eapreendidas os novos conhecimentos a ele associados.
Bibliografia
• Manual do kit SPARTAN 3;
• datasheet do integrado ADC MCP 3202;
• código clock.vhd, clock.ucf e documento anexo.