Étape 8: compteurs
Un compteur est le Registre qui incrémente ou décrémente sur une base périodique. Nous utilisons trois compteurs dans notre système. Les deux premiers sont très similaires. Ils sont le compteur horizontal et vertical compteur. Dans notre système, nous avons une valeur prédéfinie qui ils comptent jusqu'à. Lorsqu’ils atteignent la valeur a été spécifiée, ils envoient un signal de commande à la FSM qui puis désactive le compteur actuel et active celle qui suit. Le compteur qui est activé à chaque fois après que le compteur horizontal et vertical counter finition incrémentation et atteignent leur valeur s’appelle le compteur max.
Le module de compteur max est le compteur qui s’incrémente dans tout le système s’étalonne tout le temps. Le compteur s’incrémente d’un chaque fois qu’il traverse le front montant du signal horloge. Chaque fois qu’une nouvelle valeur max est détectée par le comparateur, il envoie un signal de remise à zéro au compteur max. Dans ce cas, le nombre actuel qui a le compteur max redémarre à zéro et continue à incrémenter le compteur horizontal ou vertical jusqu'à la fin de son cycle de balayage. Une fois que le compteur horizontal/vertical finitions incrémentation, son signal de commande provoque alors le compteur max commencer à décrémenter. Alors que le compteur max est décrémentation, il envoie un signal de commande à la FSM qui déplace le servo arrière dans la direction de la tension max. Lorsque le compteur max a fini de décrémentation, le servo sera déplacé le panneau solaire retour jusqu’au lieu où était la dernière tension max.
Voici une description de l’entité de nos comptoirs Horizontal et Max :
horiz_counter de l’entité est
Port (CLK : dans std_logic_vector ;
HS: Dans std_logic_vector ;
CNT_L : Dehors std_logic_vector) ;
fin horiz_counter ;
max_counter de l’entité est
Port (CLK : dans std_logic_vector ;
FSM_RST : En std_logic_vector ;
Remise à zéro : En std_logic_vector ;
MC: En std_logic_vector ;
CNT_RU : Dehors std_logic_vector) ;
fin max_counter ;
Le compteur horizontal et vertical compteur sont essentiellement les mêmes, mais ils incrémentent jusqu'à des valeurs différentes, parce qu’il prend plus de temps pour faire le balayage horizontal que le balayage vertical. Elles aussi n’ont pas tout signal de reset car ils seront toujours incrémenter jusqu'à leur valeur spécifiée et réinitialisez ensuite.
Le compteur max est un peu plus complex. Il a deux signaux différents reset. On vient du comparateur afin que le compteur peut être réinitialisé lorsque la tension maximale se trouve. L’autre vient forme le FSM et n’est active que lorsque le système est en mode manuel parce que nous n’en voulons pas compter quand nous n’essayons pas de trouver la tension maximale.
Voici une description comportementale pour le compteur max :
variable currcount : STD_LOGIC_VECTOR(12 downto 0): = "0000000000000" ;
Si RESET = « 1 » ou FSM_RST = « 1 » puis
currcount: = « 0000000000000 » ;
CNT_RU < = « 0 » ;
elsif Rising_Edge(CLK) puis
Si MC = « 0 » puis
currcount: = currcount + 1 ;
CNT_RU < = « 0 » ;
elsif MC = « 1 » puis
currcount: = currcount - 1 ;
Si currcount = « 000000000000 » puis
CNT_RU < = « 0 » ;
d’autre
CNT_RU < = « 1 » ;
end if ;
end if ;
end if ;