FPGA solpanel Optimizer (3 / 12 steg)
Steg 3: Finite State Machine
Den första modulen i designen är finite state machine(FSM). Denna modul har fem olika lägen som används för att kontrollera hur och när systemet reagerar. Av de fem staterna är en stat manuell kontroll där servon kan kontrolleras genom inbyggda knapparna. De andra fyra staterna uppstå sekventiellt när du trycker på mittknappen på bordet. Dessa länder kallas kalibrering staterna. Kalibrering, går horisontella servo in horisontellt svep staten, svepande 180 grader. Som det är scanning spänningar, ser det för den horisontella max spänningen. När den går igenom dess full rörelse, övergångar Mikronesien i den horisontella max tillstånd där den kontrollerar servo tillbaka platsen för max spänningen fick. Nästa, Mikronesien går in i den vertikala svepet tillstånd där den kontrollerar vertikala servo att skanna upp och ner 45 grader för den nya max spänningen. Slutligen, Mikronesien går in i den vertikala max staten när den hittar den max spänningen och återgår till den punkten, bara gillar horisontella servo. När kalibreringen är klar, ange servon tillbaka till manuell staten.
Här är enhet beskrivning av våra Mikronesien i VHDL:
FSM har
Port (BTN_L, BTN_R, BTN_U, BTN_D, BTN_C: i STD_LOGIC;---ingång knappar
CNT_L, CNT_RU, CNT_D: I STD_LOGIC; ---servo aktiverar signaler från counter
CLK: I STD_LOGIC; ---klocksignal
HS, VS, MC: Ut STD_LOGIC; ---counter aktiverar signaler
SERVO_L, SERVO_R, SERVO_U, SERVO_D: ut STD_LOGIC; ---servo aktiverar signaler
CNT_RST: Ut STD_LOGIC); ---reset signal för en av räknarna
slutet Mikronesien;
Mikronesien är hjärnan i systemet. Det kontrollerar alla signaler som aktiverar andra komponenter för att reagera på ingång därefter. VHDL arkitektur Beskrivning består av två delar. Först är en synkron process som ändrar nuvarande status (PS) för tillståndsdatorn till nästa tillstånd (NS). Andra är minnen processen som tar alla ingångar och bestämmer staten maskiner nästa tillstånd. Tillsammans, utgör dessa processer Mikronesien.
Här är lite kod från vår arkitektur beskrivning. Den innehåller synkron processen och de två första staterna från våra minnen process:
typ är (man, hor_sweep, hor_max, vert_sweep, vert_max); ---definiera våra stater
signalera PS: Ange,
signalera NS: Ange,
sync_proc: process (CLK, NS)---synkron process
börja
om rising_edge(CLK) sedan
PS < = NS;
slutet om;
avsluta processen sync_proc;
comb_proc: process (PS, BTN_L, BTN_R, BTN_U, BTN_D, BTN_C, CNT_L, CNT_RU, CNT_D)
börja
SERVO_L < = "0"; SERVO_R < = "0"; SERVO_U < = "0"; SERVO_D < = "0";
fall PS är
När mannen = >
om (BTN_C = '1') sedan
NS < = hor_sweep; ---gå i första kalibrering om trycker på mittknappen
CNT_RST < = "0";
HS < = '1'; VS < = "0"; MC < = "0"; ---berätta horisontella räknaren ska börja räkna
annat
om (BTN_L = '1') sedan SERVO_L < = '1'; SERVO_R < = "0"; ---från dessa kan du se hur vi
annat SERVO_L < = "0"; ---förvaltas servon i manuell tillstånd
slutet om;
om (BTN_R = '1') sedan SERVO_R < = '1'; SERVO_L < = "0";
annat SERVO_R < = "0";
slutet om;
om (BTN_U = '1') sedan SERVO_U < = '1'; SERVO_D < = "0";
annat SERVO_U < = "0";
slutet om;
om (BTN_D = '1') sedan SERVO_D < = '1'; SERVO_U < = "0";
annat SERVO_D < = "0";
slutet om;
NS < = man; ---bo i manuell tillstånd
CNT_RST < = '1'; ---hålla max counter reset
HS < = "0"; VS < = "0"; MC < = "0"; ---aktivera någon av räknarna inte
slutet om;
När hor_sweep = >
SERVO_U < = "0"; SERVO_D < = "0";
CNT_RST < = "0";
om (CNT_L = '1') sedan
SERVO_L < = '1'; SERVO_R < = "0";
HS < = '1'; VS < = "0"; MC < = "0";
NS < = hor_sweep;
annat
SERVO_L < = "0"; SERVO_R < = "0";
HS < = "0"; VS < = "0"; MC < = '1';
NS < = hor_max;
slutet om;
De andra tre staterna maximerar horisontell spänning, svepande vertikala servo och sedan maximera den vertikala spänningen. När det är gjort kalibrering, det går tillbaka till manuell staten. När det gäller variabler är HS, VS och MC alla aktiverar signaler som går till räknare. CNT_L, CNT_RU och CNT_D är signaler som kommer från räknare och talar Mikronesien enheten motsvarande servo. Alla knappar är mappade till insatsen i Mikronesien. Dessa kontrollen första flytten i kalibrering staten samt flytta servon i manuell staten.