Stap 3: Eindige toestandsmachine
De eerste module in het ontwerp is de eindige staat machine(FSM). Deze module kent vijf verschillende statussen die worden gebruikt om te bepalen hoe en wanneer het systeem reageert. Uit de vijf staten is een Braziliaanse handbediening waarin de servo's kunnen worden gecontroleerd door de ingebouwde knoppen. De andere vier staten optreden sequentieel wanneer de centrumknoop op het bord wordt gedrukt. Deze Staten worden de kalibratie-Staten genoemd. Bij het kalibreren, gaat de horizontale servo in de horizontale vegen staat, vegen van 180 graden. Zoals het scannen de spanningen, lijkt het voor de horizontale spanning van de max. Zodra het gaat via haar full-motion, overgangen de FSM in de horizontale max staat waar het controleert de servo om terug te keren van de locatie van de max spanning ontvangen. Vervolgens gaat de FSM in de verticale sweep staat waar het controleert de verticale servo te scannen op en neer 45 graden voor de nieuwe max spanning. Tot slot gaat de FSM in de verticale max staat zodra het vindt de max spanning en keert terug naar dat punt, net als de horizontale servo. Nadat de kalibratie is voltooid, voert u de servo's terug in de handleiding staat.
Hier is de beschrijving van de entiteit van onze FSM in VHDL:
entiteit FSM is
Poort (BTN_L, BTN_R, BTN_U, BTN_D, BTN_C: in STD_LOGIC;---input knoppen
CNT_L, CNT_RU, CNT_D: In STD_LOGIC; ---servo inschakelen signalen van teller
CLK: In STD_LOGIC; ---kloksignaal
HS, VS, MC: Uit STD_LOGIC; ---teller inschakelen signalen
SERVO_L, SERVO_R, SERVO_U, SERVO_D: die STD_LOGIC; ---servo inschakelen signalen
CNT_RST: Uit de STD_LOGIC); ---reset signaal voor een van de items
einde FSM;
De FSM is het brein van het systeem. Hiermee kunt u alle signalen waarmee andere componenten input dienovereenkomstig reageren. De beschrijving van het platform VHDL bestaat uit twee delen. De eerste is een synchrone proces dat de huidige status (PS) van de machine staat het volgende frame (NS wijzigt). De tweede is de combinatorische proces, die neemt alle ingangen en besluit van de lidstaat van het volgende van machines. Deze processen vormen samen de FSM.
Hier is wat code uit onze beschrijving van het platform. Het bevat de synchroon proces en de eerste twee staten van onze combinatorische proces:
type staat is (man, hor_sweep, hor_max, vert_sweep, vert_max); ---onze staten definiëren
signaal PS: staat;
signaal NS: staat;
sync_proc: (CLK, NS)---synchroon proces
beginnen
Als rising_edge(CLK) dan
PS < = NS;
einde als;
einde proces sync_proc;
comb_proc: proces (PS, BTN_L, BTN_R, BTN_U, BTN_D, BTN_C, CNT_L, CNT_RU, CNT_D)
beginnen
SERVO_L < = "0"; SERVO_R < = "0"; SERVO_U < = "0"; SERVO_D < = "0";
zaak PS is
Wanneer man = >
Als (BTN_C = '1') dan
NS < = hor_sweep; ---gaan de eerste kalibratie staat als de middelste knop wordt ingedrukt
CNT_RST < = "0";
HS < = '1'; VS < = "0"; MC < = "0"; ---Vertel de horizontale teller om te beginnen met het tot nu toe
anders
Als (BTN_L = '1') vervolgens SERVO_L < = '1'; SERVO_R < = "0"; ---van deze kunt u zien hoe wij
anders SERVO_L < = "0"; ---geslaagd de servo's in de handleiding staat
einde als;
Als (BTN_R = '1') vervolgens SERVO_R < = '1'; SERVO_L < = "0";
anders SERVO_R < = "0";
einde als;
Als (BTN_U = '1') vervolgens SERVO_U < = '1'; SERVO_D < = "0";
anders SERVO_U < = "0";
einde als;
Als (BTN_D = '1') vervolgens SERVO_D < = '1'; SERVO_U < = "0";
anders SERVO_D < = "0";
einde als;
NS < = mens; ---blijven in de handleiding staat
CNT_RST < = '1'; ---houden de max teller-reset
HS < = "0"; VS < = "0"; MC < = "0"; ---Schakel een van de items niet
einde als;
Wanneer hor_sweep = >
SERVO_U < = "0"; SERVO_D < = "0";
CNT_RST < = "0";
Als (CNT_L = '1') dan
SERVO_L < = '1'; SERVO_R < = "0";
HS < = '1'; VS < = "0"; MC < = "0";
NS < = hor_sweep;
anders
SERVO_L < = "0"; SERVO_R < = "0";
HS < = "0"; VS < = "0"; MC < = '1';
NS < = hor_max;
einde als;
De andere drie staten zijn het maximaliseren van de horizontale spanning, vegen de verticale servo, en vervolgens de verticale spanning te maximaliseren. Zodra het wordt gedaan kalibreren, gaat het terug naar de handmatige stand. In termen van variabelen zijn HS, VS en MC dat allemaal signalen die naar items inschakelen. CNT_L, CNT_RU en CNT_D zijn signalen die afkomstig zijn van de tellers en vertel het FSM station de overeenkomstige servo. Alle knoppen zijn toegewezen input in het FSM. Deze bepalen de eerste zet in de kalibratie staat alsook het verplaatsen van de servo's in de handleiding staat.