Rachet inverterad pendel kontroll (3 / 7 steg)
Steg 3: FPGA tyg
Kodbasen delades mellan FPGA tyget och ARM Cortex-A9 CPU på Zynq chip. FPGA tyget var ansvarig för mata en PWM våg till motorn, och filtrering samt motor läshastighet.
Motoriska föraren kontroll
Motoriska drivrutinen används bestäms utdata hastigheten av behandlingen i intermittensen av 500 Hz PWM waveform från Zynq styrelsen. Denna PWM generation var sker i hårdvara. Detta block skulle ta i en duty cycle värde mellan 0-100 och PWM-utgång till motor controller. Nettoeffekten av detta var att allt CPU hade att göra för att ange motor var att skriva ett värde mellan 1 och 100 till ett register. Motorn skulle sedan snurra till en förutsägbar hastighet.
Glitch Filter
Medan vår optiska kodningsmetod för hastighet upptäckt fungerade bra, var indata bullriga ibland. Lösningen på detta buller var en enkel glitch filter. Blocket läsa i från optiska kodaren och om de 5 sista behandlingarna var höga, skulle ut ett högt värde. Annars skulle det utgång ett lågt värde. Detta debounced bullriga signalen från optiska kodaren och gjorde den lämplig för mätning.
Motor kodare
Detta block tog i filtrerade encoder indata och utdata en hastighet värde till CPU. Det fungerade genom att räkna Klockan tickar för en 100 MHz klocka mellan varje stigande kanten av kodaren ingång. Genom att ta ett genomsnitt av 16 av dessa värden, kunde vi få en hastighet i fästingar/bit tejp. Sedan, att veta att det fanns 8 bitar av tejp på svänghjulet, vi kunde förvandla detta värde till fästingar/varv. Detta är värdet som antogs slutligen till CPU. Viktiga med detta värde är att rotationshastigheten ökar, minskar värdet "hastighet". Även om vi skulle ha föredragit att passera en hastighet värdet i rotationer/sekund, skulle vi behöva ta en invers, som är mycket kostsamt i en FPGA.