instructables-logotyp

instructables VHDL Motorhastighetskontroll Bestäm riktning och hastighet vänster och höger hastighetsregulator

instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-PRODUCT

NOTERA: Den här sidan är en del av ett större bygge. Se till att du börjar HÄR, så att du förstår var följande passar in i det större projektet

Överview

Motorhastighets- och riktningskontroll är en av de två huvudavdelningarna i fotodetektorroboten, den andra är fotodetektor- eller ljusdetektoravdelningen. Medan fotodetektoravdelningen fokuserar på robotens syn, fokuserar avdelningen för motorhastighet och riktningskontroll på robotens rörelse. Motorns hastighet och riktningsstyrning processdata ges från fotodetektordivisionen och ger en fysisk utdata i form av motorrörelse.

Syftet med denna uppdelning är att styra hastigheten och riktningen för både vänster och höger motor i den ljussökande roboten. För att bestämma dessa värden behöver du storleken och positionen för ljuset som hade fångats av kameran och bearbetats med tröskelvärde. Du behöver också den uppmätta hastigheten på var och en av motorerna. Från dessa ingångar kommer du att kunna mata ut PWM-värdet (Pulse-Width Modulation) för var och en av motorerna.

För att uppnå detta måste du göra dessa VHDL-moduler (även länkade nedan):

  1. Kontrollen
  2. Felberäkningen
  3. Den binära konverteringen
  4.  Frånvaron av en ljuskälla

Du kan titta på VHDL-koden för denna division här.

Tillbehör
Vi rekommenderar att du kodar med ISE Design Suite 14.7 då den även kan användas för att testa koden i VHDL. Men för att ladda upp koden till BASYS 3 måste du installera Vivado (ver. 2015.4 eller 2016.4) och skriva begränsningen med .xdc-tillägget.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-1

VHDL motorhastighetskontroll: Bestäm riktning och hastighet, vänster och höger hastighetskontroll: Sida 1

INSTRUKTIONSSTEG

Steg 1: Kontrollen
För att förstå hur man styr beteendet hos den ljussökande roboten kommer vi att förklara det önskade beteendet hos roboten när den ser en ljuskälla. Detta beteende kommer att styras i enlighet med ljuskällans position och storlek.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-

Algoritmen som används är analog med en RC-robotkontroller, med en spak som kan vridas åt vänster eller höger, och en annan spak som kan vridas framåt eller bakåt.

För att söka ljus vill du att denna robot ska röra sig i en rak linje om ljuskällans position är precis framför roboten. För att göra det vill du ha samma hastighet på både vänster och höger motor. Om lampan sitter på robotens vänstra sida vill du att den högra motorn ska röra sig snabbare än den vänstra motorn så att roboten kan svänga åt vänster mot ljuset. Omvänt, om ljuset är placerat på höger sida av roboten vill du att vänster motor ska röra sig snabbare än höger motor så att roboten kan svänga åt höger mot ljuset. Detta är analogt med den vänstra spaken på en RC-kontroller, där du kan styra om du vill flytta roboten åt vänster, höger eller rakt.

Sedan vill du att roboten ska röra sig framåt om ljuskällan är långt borta (liten ljuskälla), eller gå bakåt om den detekterade ljuskällan är för nära (stor ljuskälla). Du vill också att ju längre bort roboten är från ljuskällan, desto snabbare rör sig roboten. Detta är analogt med den högra spaken på en RC-kontroll, där du kan styra om du vill flytta framåt eller bakåt, och hur snabbt du vill att den ska röra sig.

Du kan sedan härleda en matematisk formel för varvtalet för var och en av motorerna, och vi väljer hastighetsintervallet mellan -255 till 255. Ett negativt värde betyder att motorn kommer att svänga bakåt, medan ett positivt värde betyder att motorn kommer att svänga framåt.

Det är den grundläggande algoritmen för rörelsen av denna robot. För att lära dig mer om denna modul, klicka här.

Steg 2: Felberäkningen
Eftersom du redan har målhastighet och riktning för motorerna vill du också ta hänsyn till motorernas uppmätta hastighet och riktning. Om den har nått hastighetsmålet vill vi att motorn ska röra sig enbart på sitt momentum. Om det inte har gjort det vill vi lägga till mer hastighet till motorn. I styrteorin är detta känt som ett återkopplingsstyrsystem med sluten slinga.

För att lära dig mer om denna modul, klicka här.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-2

Steg 3: Den binära konverteringen
Från tidigare beräkningar har du redan vetat vilken åtgärd som krävs för var och en av motorerna. Beräkningarna görs dock med binärt tecken. Syftet med denna modul är att konvertera dessa teckenvärden till ett värde som kan läsas av PWM-generatorn, vilket är riktningen (antingen medurs eller moturs) och hastigheten (mellan 0 till 255). Dessutom, eftersom återkopplingen från motorn mäts i binärt tecken utan tecken, behövs en annan modul för att omvandla de osignerade värdena (riktning och hastighet) till ett tecken med tecken som kan beräknas av felberäkningsmodulen. För att lära dig mer om denna modul, klicka här.

Steg 4: Frånvaron av ljuskälla
Du har gjort en robot som rör sig för att söka ljus när ljus detekteras av roboten. Men vad händer när roboten inte upptäcker ljus? Syftet med denna modul är att diktera vad man ska göra när ett sådant tillstånd föreligger.

Det enklaste sättet och en ljuskälla att söka är att roboten roterar på plats. Efter att ha roterat i ett visst antal sekunder, om roboten fortfarande inte har hittat en ljuskälla, vill du att roboten ska sluta röra sig, för att spara ström. Efter ytterligare ett antal sekunder ska roboten rotera på plats igen för att söka ljuset. För att lära dig mer om denna modul, klicka här.

Steg 5: Hur det fungerar
Du kan se bilden ovan för denna förklaring. Som nämndes i början av den här instruktionsboken behöver du ingångarna "storlek" och "position" från tröskeldivisionen. För att säkerställa att dessa inmatningar var giltiga (t.exampNär du får storlek = 0, är ​​storleken verkligen noll eftersom kameran inte känner av ljus och inte för att kameran fortfarande initierades) behöver du också någon form av indikator, som vi kallar "READY". Dessa data kommer att bearbetas av kontrollen (Ctrl. vhd) för att bestämma målhastigheten för varje motor (9 bitar, signerad).

För en mer stabil effekt på motorn vill man använda återkoppling i ett slutet system. Detta kräver ingångarna "riktning" och "hastighet" för varje motor från motorhastighetsmätningen. Eftersom du vill inkludera dessa indata i dina beräkningar, måste du konvertera dessa osignerade värden till 9-bitars signerad binär. Detta görs av den osignerade till den signerade binära omvandlaren (US2S.vhd).

Vad felberäkningen (error. vhd) gör är att subtrahera den uppmätta hastigheten från målhastigheten för att bestämma åtgärden för varje motor. Detta betyder att när båda har samma värde, blir subtraktionen noll och motorn kommer att röra sig enbart på sitt momentum. Du kan också lägga till en multiplikationsfaktor så att roboten kan nå målhastigheten snabbare.

Eftersom motorstyrningen behöver hastigheten och riktningen för varje motor, måste du översätta de signerade värdena för åtgärden till två separata osignerade värden: hastighet (1 bit) och riktning (8 bitar). Detta görs av den signerade-till-osignerade binära omvandlaren (S2US.vhd), och kommer att bli ingångar till motorstyrenheten.

Vi har också lagt till en modul för att avgöra vad som ska göras när ljus inte upptäcks (ingen ljusräknare. Bhd). Eftersom denna modul i grunden är en räknare, kommer den att räkna hur länge roboten behöver antingen rotera eller stanna på plats. Detta kommer att säkerställa att roboten "ser" sin miljö snarare än bara vad som finns framför den, och sparar batteriström när ingen ljuskälla verkligen är tillgänglig.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-3

Steg 6: Kombinera Files
Att kombinera files måste du ansluta signalerna från varje modul. För att göra det måste du skapa en ny toppnivåmodul file. Sätt in de tidigare modulernas in- och utgångar som komponenter, lägg till signaler för anslutningarna och tilldela varje port till motsvarande par. Du kan referera till anslutningarna på illustrationen ovan och titta på koden här.instructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-4

Steg 7: Testa det
Efter att du är klar med hela koden måste du veta om din kod fungerar innan du laddar upp den till tavlan, speciellt eftersom delar av koden kan vara gjorda av olika personer. Detta kräver en testbänk, där du kommer att mata in dummyvärden och se om koden beter sig som vi vill att den ska bete sig. Du kan vila börja med att testa varje modul, och om de alla fungerar korrekt kan du sedan testa toppnivåmodulen.

Steg 8: Prova på hårdvaran
Efter att din kod har testats på din dator kan du testa koden på den riktiga hårdvaran. Du måste göra begränsningen file på Vivado (.xdc file för BASYS 3) för att styra vilka ingångar och utgångar som går till vilka portar.

VIKTIGT TIPS: Vi lärde oss den hårda vägen att elektriska komponenter kan ha ett maximalt värde på ström eller voltages. Se till att se databladet för värdena. För PMOD HB5, se till att ställa in voltage från strömkällan vid 12 volt (eftersom detta är den erforderliga voltage för motorn), och strömmen så lite som behövs för att motorn ska röra sig.

Steg 9: Kombinera den med andra delar
Om de föregående stegen lyckades, kombinera koden med de andra grupperna för att den slutliga koden ska laddas upp till roboten. Då, voila! Du har framgångsrikt skapat en ljussökande robot.

Steg 10: Bidragsgivare
Från vänster till höger:

  • Antonius Gregorius Deaven Rivaldi
  • Felix Wiguna
  • Nicholas Sanjaya
  • Richard Medyantoinstructables-VHDL-Motor-Speed-Control-Decide-Direction-and-Speed-Left-and-Right-Speed-Controller-fig-6

Mycket trevligt: VHDL motorhastighetskontroll: Bestäm riktning och hastighet, vänster och höger hastighetskontroll: Sida 6
Tack för reviewing! Det här projektet är faktiskt bara en del av ett klassprojekt (Light Seeking Robot med BASYS 3-kort och OV7670-kamera), så jag lägger till länken till klassens instruktionsbok snart!

Fantastisk: Jag ser fram emot att se allt samlat.

Dokument/resurser

instructables VHDL Motorhastighetskontroll Bestäm riktning och hastighet vänster och höger hastighetsregulator [pdfInstruktioner
VHDL motorhastighetskontroll Bestäm riktning och hastighet vänster och höger hastighetsregulator, VHDL motorhastighet, kontroll avgör riktning och hastighet vänster och höger hastighetsregulator

Referenser

Lämna en kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade *