FPGA solpanel Optimizer (4 / 12 steg)
Steg 4: Analog till Digital omvandlare (ADC)
Om du inte har en Basys 3 styrelse, kommer att denna inställning vara annorlunda för dig.
ADC tar en analog signal (spänning) och omvandlar den till en 12-bitars binärt tal. Detta är hur vi läser den maximala spänningen från solpanelen. För att få ADC modulen att arbeta, måste du initiera den genom Vivados IP-katalogen. Detta kommer att ta upp en GUI där du väljer olika inställningar som vilka stift du vill ADC att läsa och vilket läge du vill arbeta på. När du har valt alla inställningar, kommer att Vivado syntetisera en ADC-modul för dig. Du skapa sedan din egen ADC modul där du initiera Vivado's ADC modul och setup kartan port för den.
För Basys 3, kan analog till digital omvandlare bara läsa från kanaler 6, 7, 14 och 15 så vi var tvungna att välja dessa i fliken kanal val i guiden Vivado ADC instansiering. Om man tittar ser på schematiskt Bank 35 som innehåller in-signaler, kan du se att det finns en rad 8 signaler med form XA #_P/N. Dessa gå till ADC och får sin signal från nedre vänstra Basys 3 huvud. Därför måste du titta på IO banken och se vilket stift motsvarar vilken kanal. I vårt fall använde vi J3 och K3 stiften som motsvarar kanal 6 på ADC.
Eftersom styrelsens ADC inte kan ta i mer än en volt, vi var tvungna att skapa en spänningsavdelare. Detta kommer att beskrivas ytterligare i Instructable.
Här är en komponent beskrivning av våra ADC i VHDL:
entiteten adc är
Port (V_in: i STD_LOGIC;
V_out: I STD_LOGIC;
CLK: i STD_LOGIC;
do_out: ut STD_LOGIC_VECTOR (15 b 0));
avsluta adc;
Som ni ser, tar ADC i två spänningar, en klocksignal och do_out. do_out är data läses från ett register i ADC som innehåller spänning på kanal 6. Om du använder en annan kanal, måste du uppdatera vilken adress do_out skickas från. För kanal 6 är adressen för spänningen i x16. Resten av filen adc är en port karta över modulen Vivado syntetiseras från IP-katalogen.
signal ADC_addr: STD_LOGIC_VECTOR (6 CEN. 0);
signal ADC_enable: STD_LOGIC;
ADC_addr < = "001" & x "6". ---adressen ingång är bara 7 bitar lång
ADC: xadc_wiz_0
Port karta (daddr_in = > ADC_addr,
den_in = > ADC_enable,
di_in = > x "0000",
dwe_in = > '0',
do_out = > do_out,
drdy_out = > d_rdy,
dclk_in = > clk,
reset_in = > '0',
vauxp6 = > V_in,
vauxn6 = > V_out,
busy_out = > Öppna,
channel_out = > Öppna,
eoc_out = > ADC_enable,
eos_out = > Öppna,
alarm_out = > Öppna,
vp_in = > '0',
vn_in = > '0');
Många av hamnarna från modulen automatiskt synthesized används inte.