amostragem de sinais analógicos por um circuito adc com interface de comunicação série

Upload: andre-b-cunha

Post on 07-Jul-2018

216 views

Category:

Documents


0 download

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.