instructables VHDL Motor Speed Control Bepaal richting en snelheid Linker en rechter snelheidsregelaar
OPMERKING: Deze pagina is een onderdeel van een grotere build. Zorg ervoor dat u HIER begint, zodat u begrijpt waar het volgende past binnen het grotere project
Overview
Motorsnelheid en richtingscontrole is een van de twee hoofdafdelingen in de fotodetectorrobot, de andere is de fotodetector of lichtdetectorafdeling. Terwijl de afdeling fotodetector zich richt op het zicht van de robot, richt de afdeling motorsnelheid en richtingscontrole zich op de beweging van de robot. De besturing van het motortoerental en de richting verwerkt gegevens van de fotodetectorafdeling en geeft een fysieke output in de vorm van motorbeweging.
Het doel van deze divisie is om de snelheid en richting van zowel de linker als de rechter motor van de lichtzoekende robot te regelen. Om deze waarden te bepalen, hebt u de grootte en de positie van het licht nodig dat door de camera is vastgelegd en door middel van drempels is verwerkt. U hebt ook de gemeten snelheid op elk van de motoren nodig. Vanaf deze ingangen kunt u de PWM-waarde (Pulse-Width Modulation) voor elk van de motoren uitvoeren.
Om dit te bereiken, moet u deze VHDL-modules maken (ook hieronder gelinkt):
- De controle
- De foutenberekening
- De binaire conversie
- De afwezigheid van een lichtbron
U kunt de VHDL-code voor deze divisie hier bekijken.
Benodigdheden
We raden aan om te coderen met ISE Design Suite 14.7, omdat het ook kan worden gebruikt om de code in VHDL te testen. Om de code echter in BASYS 3 te uploaden, moet u Vivado (ver. 2015.4 of 2016.4) installeren en de beperking schrijven met de extensie .xdc.
VHDL-motorsnelheidsregeling: bepaal richting en snelheid, linker- en rechtersnelheidsregelaar: pagina 1
INSTRUCTIE STAP
Stap 1: De controle
Om te begrijpen hoe je het gedrag van de lichtzoekende robot kunt sturen, leggen we het gewenste gedrag van de robot uit als hij een lichtbron ziet. Dit gedrag wordt geregeld op basis van de positie en grootte van de lichtbron.
Het gebruikte algoritme is analoog aan een RC-robotcontroller, met één hendel die naar links of rechts kan worden gedraaid en een andere hendel die naar voren of naar achteren kan worden gedraaid.
Om licht te zoeken, wil je dat deze robot in een rechte lijn beweegt als de positie van de lichtbron zich recht voor de robot bevindt. Om dat te doen, wil je dezelfde snelheid op zowel de linker als de rechter motor. Als het licht zich aan de linkerkant van de robot bevindt, wil je dat de rechtermotor sneller beweegt dan de linkermotor, zodat de robot naar links kan draaien in de richting van het licht. Omgekeerd, als het licht zich aan de rechterkant van de robot bevindt, wil je dat de linkermotor sneller beweegt dan de rechtermotor, zodat de robot naar rechts kan draaien in de richting van het licht. Dit is analoog aan de linkerhendel van een RC-controller, waar je kunt bepalen of je de robot naar links, rechts of recht wilt bewegen.
Vervolgens wil je dat de robot vooruit gaat als de lichtbron ver weg is (kleine lichtbron), of achteruit als de gedetecteerde lichtbron te dichtbij is (grote lichtbron). Je wilt ook dat hoe verder de robot van de lichtbron verwijderd is, hoe sneller de robot beweegt. Dit is analoog aan de rechterhendel van een RC-controller, waar je kunt bepalen of je vooruit of achteruit wilt gaan en hoe snel je wilt bewegen.
Je kunt dan een wiskundige formule afleiden voor de snelheid van elk van de motoren, en we kiezen het snelheidsbereik tussen -255 en 255. Een negatieve waarde betekent dat de motor achteruit draait, terwijl een positieve waarde betekent dat de motor vooruit draait.
Dat is het basisalgoritme voor de beweging van deze robot. Voor meer informatie over deze module, klik hier.
Stap 2: de foutberekening
Omdat je de doelsnelheid en richting voor de motoren al hebt, wil je ook rekening houden met de gemeten snelheid en richting van de motoren. Als het het snelheidsdoel heeft bereikt, willen we dat de motor uitsluitend op zijn momentum beweegt. Als dat niet het geval is, willen we meer snelheid aan de motor toevoegen. In de regeltheorie staat dit bekend als een regelsysteem met terugkoppeling met terugkoppeling.
Voor meer informatie over deze module, klik hier.
Stap 3: De binaire conversie
Uit eerdere berekeningen weet u al welke actie nodig is voor elk van de motoren. De berekeningen worden echter uitgevoerd met ondertekend binair getal. Het doel van deze module is om deze ondertekende waarden om te zetten in een waarde die kan worden gelezen door de PWM-generator, namelijk de richting (met de klok mee of tegen de klok in) en de snelheid (variërend van 0 tot 255). Aangezien de terugkoppeling van de motor wordt gemeten in niet-ondertekend binair getal, is er een andere module nodig om de niet-ondertekende waarden (richting en snelheid) om te zetten in een ondertekende waarde die kan worden berekend door de foutberekeningsmodule. Voor meer informatie over deze module, klik hier.
Stap 4: De afwezigheid van een lichtbron
Je hebt een robot gemaakt die beweegt om licht te zoeken wanneer de robot licht detecteert. Maar wat gebeurt er als de robot geen licht detecteert? Het doel van deze module is om voor te schrijven wat te doen wanneer een dergelijke aandoening aanwezig is.
De gemakkelijkste manier om een lichtbron te zoeken, is door de robot op zijn plaats te laten draaien. Als de robot na een bepaald aantal seconden ronddraaien nog steeds geen lichtbron heeft gevonden, wil je dat de robot stopt met bewegen om energie te besparen. Na nog een vast aantal seconden moet de robot weer op zijn plaats draaien om het licht te zoeken. Voor meer informatie over deze module, klik hier.
Stap 5: Hoe het werkt
U kunt verwijzen naar de afbeelding hierboven voor deze uitleg. Zoals vermeld aan het begin van deze instructable, hebt u de invoer "grootte" en "positie" van de drempelafdeling nodig. Om er zeker van te zijn dat deze invoer geldig was (bijvampAls je bijvoorbeeld grootte = 0 ontvangt, is grootte echt nul omdat de camera geen licht detecteert en niet omdat de camera nog aan het initialiseren was) heb je ook een soort indicator nodig, die we "GEREED" noemen. Deze gegevens worden verwerkt door de besturing (Ctrl. vhd) om de doelsnelheid van elke motor te bepalen (9 bits, getekend).
Voor een stabielere uitvoer op de motor wilt u feedback gebruiken in een systeem met terugkoppeling. Dit vereist de invoer "richting" en "snelheid" van elke motor van de motorsnelheidsmeetafdeling. Aangezien u deze invoer in uw berekeningen wilt opnemen, moet u deze niet-ondertekende waarden converteren naar 9-bits ondertekend binair getal. Dit wordt gedaan door de niet-ondertekende naar de ondertekende binaire converter (US2S.vhd).
Wat de foutberekening (error. vhd) doet, is de gemeten snelheid aftrekken van de doelsnelheid om de actie voor elke motor te bepalen. Dit betekent dat wanneer beide dezelfde waarde hebben, de aftrekking nul wordt en de motor alleen op zijn momentum zal bewegen. U kunt ook een vermenigvuldigingsfactor toevoegen, zodat de robot sneller de doelsnelheid kan bereiken.
Aangezien de motorcontroller de snelheid en richting van elke motor nodig heeft, moet u de ondertekende waarden van de actie vertalen in twee afzonderlijke niet-ondertekende waarden: snelheid (1 bit) en richting (8 bits). Dit wordt gedaan door de ondertekend-naar-niet-ondertekende binaire omzetter (S2US.vhd) en wordt invoer voor de motorbesturingsafdeling.
We hebben ook een module toegevoegd om te bepalen wat te doen als er geen licht wordt gedetecteerd (geen lichtteller. Bhd). Omdat deze module in feite een teller is, telt hij hoe lang de robot nodig heeft om te draaien of op zijn plaats te blijven. Dit zorgt ervoor dat de robot zijn omgeving 'ziet' in plaats van alleen wat ervoor staat, en bespaart batterijvermogen wanneer er geen lichtbron echt beschikbaar is.
Stap 6: Combineer de Files
Om de . te combineren files, moet u de signalen van elke module aansluiten. Om dat te doen, moet u een nieuwe module op het hoogste niveau maken file. Voeg de ingangen en uitgangen van de vorige modules in als componenten, voeg signalen toe voor de verbindingen en wijs elke poort toe aan het overeenkomstige paar. U kunt verwijzen naar de aansluitingen op de afbeelding hierboven en de code hier bekijken.
Stap 7: Test het
Nadat je klaar bent met de hele code, moet je weten of je code werkt voordat je deze naar het bord uploadt, vooral omdat delen van de code door verschillende mensen kunnen zijn gemaakt. Dit vereist een testbank, waar u dummy-waarden invoert en kijkt of de code zich gedraagt zoals we willen dat hij zich gedraagt. U kunt beginnen met het testen van elke module, en als ze allemaal correct werken, kunt u de module op het hoogste niveau testen.
Stap 8: Probeer het op de hardware
Nadat uw code op uw computer is getest, kunt u de code op de echte hardware testen. Je moet de beperking maken file op Vivado (.xdc file voor BASYS 3) om te bepalen welke in- en uitgangen naar welke poorten gaan.
BELANGRIJKE TIP: We hebben op de harde manier geleerd dat elektrische componenten een maximale waarde van stroom of volume kunnen hebbentages. Raadpleeg de datasheet voor de waarden. Zorg ervoor dat u voor PMOD HB5 het volume instelttage van de stroombron op 12 volt (aangezien dit de vereiste voltage voor de motor), en de stroom zo laag als nodig is om de motor te laten bewegen.
Stap 9: combineer het met andere onderdelen
Als de vorige stappen succesvol waren, combineer dan de code met de andere groepen om de definitieve code in de robot te uploaden. Dan, voila! Je hebt met succes een lichtzoekende robot gemaakt.
Stap 10: bijdragers
Van links naar rechts:
- Antonius Gregorius Deaven Rivaldi
- Felix Wiguna
- Nicolaas Sanjaya
- Richard Medyanto
Erg leuk: VHDL-motorsnelheidsregeling: bepaal richting en snelheid, linker- en rechtersnelheidsregelaar: pagina 6
Bedankt voor het opnieuwviewing! Dit project is eigenlijk maar een onderdeel van een klasproject (Light Seeking Robot met BASYS 3-bord en OV7670-camera), dus ik zal binnenkort de link naar de instructable van de klas toevoegen!
Geweldig: Ik kijk er naar uit om alles bij elkaar te zien.
Documenten / Bronnen
![]() |
instructables VHDL Motor Speed Control Bepaal richting en snelheid Linker en rechter snelheidsregelaar [pdf] Instructies VHDL-motorsnelheidsregeling Bepaal richting en snelheid Links en rechts snelheidsregelaar, VHDL-motorsnelheid, regeling Bepaal richting en snelheid Links en rechts snelheidsregelaar |