Stap 3: FPGA stof
De codebase werd gesplitst tussen het FPGA weefsel en de ARM Cortex-A9 CPU op de Zynq-chip. De FPGA stof was verantwoordelijk voor outputten een PWM Golf aan de motor, evenals het filteren en het lezen van de motorsnelheid.
Motor Driver controle
De motor stuurprogramma gebruikt bepaald de uitvoersnelheid door lezing in het pulserend sproeien van een 500 Hz PWM golfvorm van het Zynq-bord. Dit PWM-generatie werd gedaan in de hardware. Dit blok zou nemen in een plicht cyclus waarde tussen 0-100 en het PWM-uitgang naar de motor controller. Het netto-effect van deze was dat alles wat de CPU moest doen om de motorsnelheid schrijven een waarde tussen 1 en 100 tot een documentenregister. De motor zou dan op een voorspelbare snelheid draaien.
Glitch Filter
Terwijl onze optische coderingsmethode voor snelheidsopsporing goed werkte, was de ingang luidruchtig op keer. De oplossing voor deze ruis was een eenvoudige glitch-filter. Het blok van de optische encoder in leest, en als de laatste 5 lezingen hoog waren, zou de uitgang van een hoge waarde. Anders zou het de uitgang van een lage waarde. Dit debounced het lawaaierige signaal van de optische encoder en maakte het geschikt voor meting.
Motor Encoder
Dit blok nam in de gefilterde encoder input en output van de waarde van een snelheid naar de CPU. Het werkte door het tellen van de klok-teken voor een 100 MHz clock tussen elke stijgende rand van het coderingsprogramma input. Door middel van een gemiddelde van 16 van deze waarden, konden we om een snelheid in teken/stukje tape. Vervolgens, wetende dat er 8 stukjes tape op het vliegwiel, konden we deze waarde omzetten in teken/omwenteling. Dit is de waarde die ten slotte werd doorgegeven aan de CPU. Het belangrijke ding over deze waarde is dat als de verhoging van de rotatiesnelheid, de "snelheid" waarde afneemt. Hoewel we liever geschiedde een snelheid waarde in rotaties per seconde, zouden we moeten een inverse, die zeer duur in een FPGA.