Étape 3: Tissu FPGA
Le code source a été divisé entre le tissu FPGA et l’un CPU ARM Cortex-A9 sur la puce Zynq. Le tissu FPGA a été chargé de produire une onde PWM du moteur, ainsi que de filtrage et de lecture de la vitesse du moteur.
Contrôle de moteur
Le moteur utilisé déterminé la vitesse de sortie de lecture dans le cycle d’une forme d’onde PWM de 500 Hz de la carte de Zynq. Cette génération de PWM a été faite dans le matériel. Ce bloc prendrait une valeur de cycle de service entre 0 et 100 et la sortie du PWM pour le contrôleur de moteur. L’effet net de cette est que tous le CPU devait faire pour régler la vitesse du moteur était d’écrire une valeur entre 1 et 100 dans un registre. Le moteur serait alors tourner à une vitesse prévisible.
Filtre de glitch
Alors que notre méthode de codage optique pour la détection de la vitesse a bien fonctionné, l’entrée était parfois bruyante. La solution à ce bruit était un filtre simple Pépin. Le bloc de lire dans l’encodeur optique et si les 5 dernières lectures étaient élevés, ne serait sortie une valeur élevée. Dans le cas contraire, il serait sortie une valeur faible. Cela debounced le signal bruyant de l’encodeur optique et a adapté pour la mesure.
Codeur moteur
Ce bloc a pris à l’entrée du codeur filtrée et émis une valeur de vitesse de la CPU. Il a travaillé en comptant les graduations d’une horloge de 100 MHz entre chaque front montant de l’encodeur d’entrée. En prenant une moyenne de 16 de ces valeurs, nous avons été en mesure d’obtenir une vitesse de tiques/morceau de ruban adhésif. Puis, sachant qu’il y a 8 morceaux de ruban adhésif sur le volant, nous avons pu transformer cette valeur en tiques/tour. C’est la valeur qui a été finalement passée à la CPU. La chose importante sur cette valeur, c’est que lorsque la vitesse de rotation augmente, la valeur de « vitesse » diminue. Même si nous aurions préféré passer une valeur de vitesse en tours/seconde, nous aurions besoin de prendre un inverse, qui est très coûteux dans un FPGA.