Étape 3: Machine à états finis
Le premier module dans la conception est la machine(FSM) d’États finis. Ce module comporte cinq États différents qui permettent de contrôler quand et comment le système réagit. Des cinq États, un État est un contrôle manuel dans lequel les servos peuvent être contrôlés par les boutons embarqués. Les quatre autres États se produisent dans l’ordre lorsque vous appuyez sur le bouton central sur la planche. Ces États sont appelés les États d’étalonnage. Lors de l’étalonnage, le servo horizontal passe à l’état de balayage horizontal, balayant de 180 degrés. Comme c’est la numérisation des tensions, il recherche la tension maximale horizontale. Une fois qu’elle passe par son mouvement complet, le FSM transitions dans l’État max horizontales où il contrôle le servo pour renvoyer l’emplacement de la tension max a reçu. Ensuite, le FSM passe à l’état de balayage vertical où il contrôle le servo vertical de scanner haut et bas de 45 degrés à la nouvelle tension max. Enfin, le FSM passe à l’État max verticale une fois qu’il trouve la tension max et retourne à ce point, tout comme le servo horizontaux. Après que le calibrage est terminé, les servos entrer dans l’état manuel.
Voici la description de l’entité de notre FSM en VHDL :
entité FSM est
Port (BTN_L, BTN_R, BTN_U, BTN_D, BTN_C : in std_logic_vector;---boutons d’entrée
CNT_L, CNT_RU, CNT_D : En std_logic_vector ; ---servo permettre aux signaux de compteur
CLK : Dans std_logic_vector ; ---signal d’horloge
HS, VS, MC: Out std_logic_vector ; ---activez comptoir des signaux
SERVO_L, SERVO_R, SERVO_U, SERVO_D : sortir std_logic_vector ; ---servo permettre aux signaux
CNT_RST : Dehors std_logic_vector) ; ---signal de réinitialisation pour un des compteurs
fin FSM ;
Le FSM est le cerveau du système. Il contrôle tous les signaux qui permettent d’autres composants réagir à l’entrée en conséquence. La description d’architecture VHDL se compose de deux parties. Le premier est un processus synchrone qui modifie l’état actuel (PS) de l’ordinateur d’État à l’état suivant (NS). Le deuxième est le processus combinatoire qui prend toutes les entrées et décide l’état suivant de machines à état. Ensemble, ces processus constituent les EFM.
Voici un code de notre description d’architecture. Il contient le processus synchrone et les deux premiers États de notre processus combinatoire :
État de type est (homme, hor_sweep, hor_max, vert_sweep, vert_max) ; ---définition nos États
PS de signaux : l’État ;
NS de signaux : l’État ;
sync_proc : procédé (CLK, NS)---synchrone
commencer
Si rising_edge(CLK) alors
PS < = NS ;
end if ;
sync_proc de fin de processus ;
comb_proc : processus (PS, BTN_L, BTN_R, BTN_U, BTN_D, BTN_C, CNT_L, CNT_RU, CNT_D)
commencer
SERVO_L < = « 0 » ; SERVO_R < = « 0 » ; SERVO_U < = « 0 » ; SERVO_D < = « 0 » ;
PS boîtier est
Quand l’homme = >
Si (BTN_C = « 1 ») puis
NS < = hor_sweep ; ---aller dans le premier État de calibrage Si vous appuyez sur le bouton central
CNT_RST < = « 0 » ;
HS < = « 1 » ; VS < = « 0 » ; MC < = « 0 » ; ---dire le compteur Horizontal pour démarrer le compteur vers le haut
d’autre
Si (BTN_L = « 1 ») puis SERVO_L < = « 1 » ; SERVO_R < = « 0 » ; ---de ceux-ci vous pouvez voir comment nous
d’autre SERVO_L < = « 0 » ; ---géré les servos en état manuelle
end if ;
Si (BTN_R = « 1 ») puis SERVO_R < = « 1 » ; SERVO_L < = « 0 » ;
d’autre SERVO_R < = « 0 » ;
end if ;
Si (BTN_U = « 1 ») puis SERVO_U < = « 1 » ; SERVO_D < = « 0 » ;
d’autre SERVO_U < = « 0 » ;
end if ;
Si (BTN_D = « 1 ») puis SERVO_D < = « 1 » ; SERVO_U < = « 0 » ;
d’autre SERVO_D < = « 0 » ;
end if ;
NS < = homme ; ---séjour en état manuelle
CNT_RST < = « 1 » ; ---garder la réinitialisation du compteur max
HS < = « 0 » ; VS < = « 0 » ; MC < = « 0 » ; ---ne permettent pas des compteurs
end if ;
Lorsque hor_sweep = >
SERVO_U < = « 0 » ; SERVO_D < = « 0 » ;
CNT_RST < = « 0 » ;
Si (CNT_L = « 1 ») puis
SERVO_L < = « 1 » ; SERVO_R < = « 0 » ;
HS < = « 1 » ; VS < = « 0 » ; MC < = « 0 » ;
NS < = hor_sweep ;
d’autre
SERVO_L < = « 0 » ; SERVO_R < = « 0 » ;
HS < = « 0 » ; VS < = « 0 » ; MC < = « 1 » ;
NS < = hor_max ;
end if ;
Les trois autres États sont maximisant la tension horizontale, balayant le servo vertical et puis maximiser la tension verticale. Une fois que c’est fait calibrer, il va revenir à l’état manuel. En termes de variables, HS, VS et MC sont que tous activer les signaux qui vont aux compteurs. CNT_L, CNT_RU et CNT_D sont des signaux en provenance des compteurs et dire le lecteur FSM le servo correspondant. Tous les boutons sont mappés à l’entrée dans les EFM. Ceux-ci contrôlent le mouvement initial dans l’état de l’étalonnage ainsi que déplacer les servos dans l’état manuel.