Escolar Documentos
Profissional Documentos
Cultura Documentos
0X
Informaes Tericas:
As grandezas reais existentes so em sua maioria digitais. Por esse motivo a converso analgica-digital (A/D) fundamental para que se possa informar o valor de uma grandeza a um sistema digital.
O circuito integrado (CI) ADC128S022 tem a capacidade de converter sinais analgico de 0 a 3,3 V para um conjunto de 12 sinais (bits) digitais. O conversor A/D (ADC) em questo possui 8 canais de entrada analgicas. O diagrama de conexo deste CI no kit DE0-nano apresentado na Figura 1
Percebe-se pela Figura 1 que o CI possui apenas 4 sinais digitais, isto porque a comunicao feita de forma serial. A Tabela 1 apresenta a funo de cada sinal.
Tabela 1 - Legenda dos sinais do ADC128S022
Sinal IN0...IN7 (chip select) SCLK (digital clock input) DIN (digital data input) DOUT (digital data output) VA VD AGND DGND
Funo 8 canais de entrada analgica sinal de entrada responsvel pela habilitao do CI Sinal de relgio responsvel pela converso (0.8 a 3.2 MHz) Os dados de seleo do canal analgico so carregados atravs dessa entrada, durante os pulsos de subida do sinal SCLK Os dados de digitais da converso so enviados atravs dessa saida, durante os pulsos de descida do sinal SCLK Tenso de referncia(+) analgica. Limita o sinal de entrada analgico em 3,3 V Tenso de referncia digital(+). Define o nvel lgico alto em 3,3 V (compatvel com o FPGA) Tenso de referncia(-) analgica. Tenso de referncia(-) digital.
O CI ADC128S022 possui dois modos de operao: operacional e serial. Funcionando em modo operacional o ADC realiza converses sucessivas, onde cada janela de 16 pulsos iniciada aps o termino da anterior. O diagrama de tempo apresentando na Figura 2, explicita este modo de operao.
J no modo serial as janelas de converso apresentam um determinando tempo entre elas, onde o sinal CS colocado em nvel lgico alto, desligando o ADC e poupando energia, que pode ser muito importante em determinados circuitos embarcados. O diagrama de tempo apresentando na Figura 3, apresenta a operao serial.
As entradas analgicas do CI so diretamente conectadas ao Header 2x13. Tais conexes so apresentadas na Figura 4, bem como a forma de conexo do potencimetro para teste do ADC.
Para a observao do funcionamento correto do ADC faz-se necessrio a utilizao de LEDs indicativos, por tanto, a Tabela 2 alm de listar os pinos a serem utilizados para o controle do ADC, apresenta tambm os pinos dos LEDs e do sinal de relgio de 50 MHz interno ao kit DE0-nano.
Tabela 2 - Mapeamento de pinos do kit DE0-nano
Funo Clock 50 MHz LED[7] LED[6] LED[5] LED[4] LED[3] LED[2] LED[1] LED[0] ADC_CS_N (CS) ADC_SCLK (SCLK) ADC_SADDR (DIN) ADC_DAT (DOUT)
Pino PIN_R8 PIN_L3 PIN_B1 PIN_F3 PIN_D1 PIN_A11 PIN_B13 PIN_A13 PIN_A15 PIN_A10 PIN_B14 PIN_B10 PIN_A9
Procedimentos:
1)
O cdigo abaixo utiliza o ADC128S022 do kit DE0-nano no modo operacional, realizando converses consecutivas. O canal analgico selecionado o ADC_IN1. Para o correto funcionamento, faa a definio de pinos de acordo com a Tabela 2, e conecte o potncimetro como mostrado na Figura 4.
OBS: No necessrio digitar os comentrios das linhas.
ENTITY ADC IS PORT( CS, SCLK ,DIN: OUT BIT; --Variaveis de entrada de controle do --ADC128S022 (OUT->IN) DOUT ,CLK: IN BIT; --Variaveis de saida de controle do --ADC128S022(IN->OUT) CH: IN BIT_VECTOR(3 TO 5); DATA: OUT BIT_VECTOR(11 downto 0));--Sinal convertido, saida --para os LEDs END ADC; ARCHITECTURE convert OF ADC IS SIGNAL VALOR:BIT_VECTOR(11 DOWNTO 0); SIGNAL DOUT_AUX:BIT_VECTOR(1 TO 16); SIGNAL DIN_AUX:BIT_VECTOR(1 DOWNTO 16); SIGNAL SCLK_EN: BIT:='0'; --Variavel para habilitao de SCLK SIGNAL CLK2:BIT:='0'; --Sinal de clock com frequencia j dividida BEGIN SCLK<=SCLK_EN NAND NOT(CLK2); --Se SCLK_EN for 0, SCLK=1, --caso contrario, SCLK=CLK2 DATA<=DOUT_AUX(5 TO 16); DIN_AUX<= "00"&CH&"00000000000"; Divisor_de_frequencia:PROCESS(CLK) --Diviso da frequencia do clock VARIABLE divisor: natural range 0 to 16:=0; -- 50 MHz/16 = 3,125 MHz BEGIN IF(CLK'EVENT AND CLK='1')THEN IF(divisor=16)THEN divisor:=0; CLK2<='1'; ELSIF(divisor>=8)THEN --Lgica para dividir o clock divisor:=divisor+1; --mantendo o formato quadrado CLK2<='1'; --T_alto = T_baixo ELSIF(divisor<8)THEN CLK2<='0'; divisor:=divisor+1; END IF; END IF; END PROCESS Divisor_de_frequencia; Conversao_ADC:PROCESS(CLK2) VARIABLE ciclo: integer RANGE -1 TO 16:=0; --Variavel contadora de ciclos, ajustada a cada pulso negativo BEGIN Bordas_negativas:IF(CLK2'EVENT AND CLK2='0')THEN -- Atualizao apenas na borda de descida do CLK2 Atulizacao_cont_ciclos:IF(ciclo>=16)THEN --Contador de ciclos
ciclo:=1; ELSE ciclo:=ciclo+1; END IF Atulizacao_cont_ciclos; CASE ciclo IS WHEN -1 => CS<='1'; --inicio: Chip select=0, CI deslig. SCLK_EN<='0'; WHEN 0 => CS<='0'; --Chip select=1, CI ligado WHEN 1 to 16 => SCLK_EN<='1'; DIN<= DIN_AUX(ciclo); --envio dos 16 bits atravs de em DIN END CASE; END IF Bordas_negativas; Bordas_positivas:IF(CLK'EVENT AND CLK='1')THEN --Borda de subida do CLK2 CASE ciclo IS WHEN -1 => NULL; --inicio: Chip select=0, CI deslig. WHEN 0 => NULL; --Chip select=1, CI ligado WHEN 1 to 16 =>DOUT_AUX(ciclo)<=DOUT; --Registro dos 16 bits recebidos em DOUT END CASE; END IF Bordas_positivas; END PROCESS Conversao_ADC; END convert;
2) Modifique o cdigo VHDL acima mostrado, para que o ADC funcione no modo serial, realizando converses a cada um segundo, em seguida modifique-o para realizar converso quando um dos botes do kit for pressionado. 3) Com base no cdigo fornecido, faa com que, operando em modo operacional, o ADC converta os valores analgicos das entradas ADC_IN1, ADC_IN2 e ADC_IN3, salvando os respectivos valores nos sinais DATA1, DATA2 e DATA3. Utilize as chaves seletoras para definir qual dos sinais ser mostrado atravs dos LEDs.