Innehållsförteckning:

Stepper Speed Control Menu Driven för Arduino: 6 steg
Stepper Speed Control Menu Driven för Arduino: 6 steg

Video: Stepper Speed Control Menu Driven för Arduino: 6 steg

Video: Stepper Speed Control Menu Driven för Arduino: 6 steg
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Juli
Anonim
Stepper Speed Control Menu Driven för Arduino
Stepper Speed Control Menu Driven för Arduino
Stepper Speed Control Menu Driven för Arduino
Stepper Speed Control Menu Driven för Arduino
Stepper Speed Control Menu Driven för Arduino
Stepper Speed Control Menu Driven för Arduino

Detta SpeedStepper -bibliotek är en omskrivning av AccelStepper -biblioteket för att möjliggöra hastighetskontroll av stegmotorn. Med SpeedStepper -biblioteket kan du ändra det inställda motorvarvtalet och sedan accelerera/sänka hastigheten till det nya inställda varvtalet med samma algoritm som AccelStepper -biblioteket. Med SpeedStepper -biblioteket kan du också ställa in plus- och minusgräns och en "hemposition". Det finns ett goHome -kommando för att återgå till utgångsläget.

Begränsningar: SpeedStepper -biblioteket driver bara riktnings- och stegutgångar och måste därför anslutas till en motordrivrutin, till exempel Easy Driver, för att faktiskt styra stegmotorn. AccelStepper -biblioteket erbjuder fler köralternativ som kan kopieras till detta bibliotek om det behövs.

Tre exempelskisser tillhandahålls, var och en kan köras utan motor eller motorförare. speedStepperPlot -skissen ger exempel på hastighetskommandon och goHome -kommandot och genererar en ritning över den resulterande hastigheten och positionen. SpeedStepperSetup -skissen ger en menystyrd inställning för att ställa in motorns hem och gränser och sedan köra motorn och justera hastigheten upp och ner och gå hem för att avsluta. SpeedStepperProfile -skissen visar ett exempel på hur du konfigurerar och kör en hastighetsprofil.

Medan AccelStepper-biblioteket ger bra positionskontroll, behövdes hastighetskontroll för Prototype Ice-Smelting Probe för insamling av biologiska prover på Europa. Här är en video av en tidigare version av prototypen, som använde vikt istället för en motor. Revision 1.1 lade till hastighetsprofiler efter att en användare begärt ett sätt att kontrollera hastighetsprofilen för en pump.

Detta bibliotek körs på Arduino Uno och Mega2560, men för prototypen användes den större minnes / snabbare processorn SparkFun Redboard Turbo.

Denna instruerbara är också tillgänglig online på Stepper Speed Control Library för Arduino

Tillbehör

För att köra exempelskisserna behövs bara en Arduino UNO eller Mega2560 och programvarubiblioteken

För bänkprovning av biblioteket användes en SparkFun Redboard Turbo med en Easy Driver, en steg på 200 steg/varv, 12V 350mA stegmotor och en 12 DC matning 2A eller större, t.ex. https://www.sparkfun.com/products/14934. USB A till mikrokabel USB till TTL seriell kabel Arduino IDE V1.8.9 och en dator att köra den på. SpeedStepper bibliotekpfodParser bibliotek för icke-blockerande ingång och pfodBufferedStream klasser millis Fördröjning bibliotek för icke-blockerande förseningar

Steg 1: Biblioteksfunktioner

SpeedStepper -biblioteket kör stegmotorn begränsad av gränser som anges av biblioteket. Se filen SpeedStepper.h för de olika tillgängliga biblioteksmetoderna. Här är en översikt över logiken bakom dem.

Stepparens position spåras genom att räkna antalet steg (pulser). Biblioteket begränsar positionen mellan positionerna setPlusLimit (int32_t) och setMinusLimit (int32_t). Plusgränsen är alltid> = 0 och minusgränsen är alltid <= 0. Vid start är motorläget 0 (hem) och gränserna är inställda på mycket stora +/- siffror (ca +/- 1e9 steg). setAcceleration (float) anger hur snabbt motorn kommer att ändra hastighet antingen upp eller ner. När motorn närmar sig plus- eller minusgränsen kommer den att retardera med denna hastighet tills den stannar vid gränsen. Vid start är accelerationen inställd på 1,0 steg/sek/sek. Accelerationsinställningen är alltid ett +ve -tal. Tecknet på setSpeed (float) -inställningen anger riktningen motorn ska röra sig.

setSpeed (float) ställer in hastigheten för att accelerera / sakta ner motorn till, från dess nuvarande varvtal. Hastigheten som kan ställas in via setSpeed (float) är i absoluta värden begränsad av inställningar, setMaxSpeed (float), standard 1000 steg/sek och setMinSpeed (float), standard 0,003 steg/sek. Dessa standardvärden är också de absolut hårdkodade hastighetsbegränsningar som biblioteket accepterar för setMaxSpeed () och setMinSpeed (). Om du vill ange en maxhastighet> 1000 steg/sek måste du redigera den första raden i SpeedStepper.cpp -filen för att ändra maxMaxSpeed (1000) till den maxhastighet du vill ha. I praktiken är den maximala hastigheten också begränsad av tiden mellan samtal till bibliotekets run () -metod. För 1000 steg / sek måste metoden run () anropas minst var 1: e ms. Se avsnittet Latency nedan.

Om du försöker ställa in en hastighet som är lägre än min hastighet kommer motorn att stanna. Var och en av dessa setrar har en motsvarande getter, se filen SpeedStepper.h. För hastighet returnerar getSetSpeed () den hastighet du ställde in via setSpeed (), medan getSpeed () returnerar den aktuella motorhastigheten som varierar när den accelererar/saktar ner till den inställda hastigheten. Om motorn inte går i den riktning du tänker på en +ve kan du ringa invertDirectionLogic () för att byta riktning motorn rör sig för +ve hastigheter.

getCurrentPosition () returnerar den aktuella motorpositionen jämfört med 'home' (0). Du kan åsidosätta den aktuella motorpositionen setCurrentPosition (int32_t). Den nya positionen är begränsad till att ligga inom de inställda plus/minus -gränserna.

Till en början stannade motorn i läge 0. Om setSpeed (50.0) anropas kommer den att börja accelerera i +ve -riktningen till en maximal hastighet på 50 steg/min. Om du ringer hardStop () stoppas motorn omedelbart där den är. Å andra sidan ställer man in metoden () för att ställa in hastigheten till noll och sänka motorn till ett stopp. Genom att ringa stopAndSetHome () stannar motorn omedelbart och ställer dess position till 0. Gränsvärdena för plus/minus ändras inte utan hänvisas nu till denna nya 0 (hem) position. Om du ringer goHome () återgår steget till denna 0 (hem) position och stannar. Att ringa setSpeed () avbryter hemresan.

SpeedStepper -biblioteket ger också kontroll av hastighetsprofil via metoderna setProfile (SpeedProfileStruct* profileArray, size_t arrayLen), startProfile (), stopProfile (), för att avbryta en löpande profil och isProfileRunning (). Se exempelskissen speedStepperProfile.

Steg 2: Kör SpeedStepperPlot -exemplet utan motor

Köra exempel på SpeedStepperPlot utan motor
Köra exempel på SpeedStepperPlot utan motor

Installera Arduino IDE V1.8.9 Ladda ner och installera SpeedStepper -biblioteket Spara SpeedStepper.zip och använd sedan menyalternativet Arduino IDE Skiss → Inkludera bibliotek → Lägg till. ZIP -bibliotek för att importera biblioteket Ladda ner och installera också millisDelay -biblioteket

Öppna exemplen → SpeedStepper → speedStepperPlot exempelskiss (Starta om IDE om det behövs). Denna skiss är konfigurerad för att fungera med Serial, t.ex. UNO och Mega etc. För att köra på SparkFun Redboard Turbo se nedan.

Ingen förarkort eller stegmotor behöver köras i detta exempel. Dessa exempel använder D6 och D7 som utgångar. Du kan ändra utgångsstiften till valfri digital utgång genom att ändra inställningarna STEP_PIN och DIR_PIN nära toppen av skissen.

Ladda upp skissen till brädet och öppna sedan Verktyg → Seriell plotter vid 115200 baud för att visa diagrammet över hastigheten (RÖD) och position (BLÅ) Plusgränsen är satt till 360 vilket får hastigheten att rampa till noll från cirka 100 punkter på x-axeln. Minusgränsen är -510. Positionen stannar vid ~ -390 eftersom hastigheten har krävts till 0,0. Vid 380-punkten på x-axeln utfärdas goHome cmd som återför steget till position noll.

Denna speedStepperPlot -skiss använder millisDelays till tidsväxling mellan olika hastigheter och accelerationer. I många fall är det enklare att använda en SpeedStepperProfile, som i nästa exempel.

Steg 3: Kör SpeedStepperProfile -exemplet utan motor

Köra exempel på SpeedStepperProfile utan motor
Köra exempel på SpeedStepperProfile utan motor

Öppna exemplen → SpeedStepper → speedStepperPlot exempelskiss, denna skiss producerar ovanstående diagram med Arduino Serial Plotter och är ett exempel på att köra en föreskriven hastighetsprofil till exempel om du kör en pump.

Stepper Speed Profiles består av en uppsättning SpeedProfileStruct, som definieras i SpeedStepper.h -filen.

struct SpeedProfileStruct {

flottörhastighet; // målhastigheten i slutet av detta steg osignerade långa deltaTms; // tiden för att accelerera från aktuell hastighet (i början av detta steg) till målhastigheten};

Definiera en uppsättning SpeedProfileStruct som innehåller målhastigheten för varje steg och tiden, deltaTms, i mS, för att nå den målhastigheten från den tidigare målhastigheten. Om deltaTms är noll eller mycket liten, hoppar hastigheten bara omedelbart till den nya målhastigheten. Annars beräknas den nödvändiga accelerationen setAcceleration () anropas följt av ett samtal till setSpeed () för den nya målhastigheten. I alla fall kommer profilen att begränsas av befintliga plus- och minuspositionsgränser och max/min hastighetsinställningar. Om du vill hålla en hastighet upprepar du bara föregående hastighet med den tid du vill att den ska hållas. Eftersom den nya målhastigheten är densamma som den aktuella hastigheten, kommer den beräknade accelerationen att vara noll och ingen förändring sker eftersom hastigheten inträffar.

Denna SpeedProfileStruct -matris producerade ovanstående tomt

const SpeedProfileStruct -profil = {{0, 0}, // stopp omedelbart om den inte redan har stoppats {0, 1000}, // håll noll i 1sek {-50, 0}, // hoppa till -50 {-200, 2000}, // ramp till -200 {-200, 6000}, // håll vid -200 i 6 sekunder {-50, 2000}, // ramp ner till -50 {0, 0}, // // stoppa omedelbart {0, 1500}, // håll noll i 1,5 sekunder {50, 0}, // hoppa till 50 {200, 2000}, // rampa till 200 {200, 6000}, // håll 200 i 6 sekunder {50, 2000}, // ramp till 50 {0, 0}, // // stoppa omedelbart {0, 1000} // håll noll // för att plotta utmatning}; const size_t PROFILE_LEN = sizeof (profil) / sizeof (SpeedProfileStruct); // beräkna storleken på profilmatrisen

Profilen ställs in genom att anropa setProfile (SpeedProfileStruct* profileArray, size_t arrayLen) t.ex. stepper.setProfile (profil, PROFILE_LEN);

När profilen har ställts in, ring startProfile () för att börja köra den från det aktuella motorvarvtalet (vanligtvis börjar du från stoppat). I slutet av profilen fortsätter motorn bara att gå med den sista målhastigheten. Metoden isProfileRunning () kan anropas för att se om profilen fortfarande körs. Om du vill stoppa profilen tidigt kan du ringa stopProfile () som överger profilen och stannar motorn.

Steg 4: Kör exempel på SpeedStepperSetup utan motor

Exempelskissen är utformad till en bas för din egen stegmotorapplikation. Det ger ett menystyrt gränssnitt som låter dig flytta till motorn till sitt utgångsläge, om det inte redan finns och sedan valfritt återställa plus- och minusgränserna och sedan köra motorn inom det intervallet. Med "kör" -menyn kan du öka och minska hastigheten, frysa med aktuell hastighet, stoppa och även återvända till hemmet.

Denna skiss illustrerar ett antal programvarufunktioner som håller öglan () responsiv så att du kan lägga till dina egna sensoringångar för att styra steget. Det gör ont att undvika förseningar som kan störa hastighetskontrollen. (Se Delays are Evil)

Installera biblioteken som används för att köra SpeedStepperPlot ovan och installera sedan också pfodParser -biblioteket. PfodParser -biblioteket förser NonBlockingInput- och pfodBufferedStream -klasserna som används för att hantera användarinmatning och menyutmatning med att blockera loop () från att köras.

Öppna exemplen → SpeedStepper → speedSpeedSetup -exempel. Denna skiss är konfigurerad för att fungera med Serial, t.ex. UNO och Mega etc. För att köra på SparkFun Redboard Turbo se nedan.

Ingen förarkort eller stegmotor behöver köras i detta exempel. Dessa exempel använder D6 och D7 som utgångar. Du kan ändra utgångsstiften till valfri digital utgång genom att ändra inställningarna STEP_PIN och DIR_PIN nära toppen av skissen. Ladda upp skissen till tavlan och öppna sedan Verktyg → Seriell bildskärm vid 115200 för att se menyn INSTÄLLNINGAR.

INSTÄLLNING pos: 0 sp: 0.00 +Lim: 500000 -Lim: -500 LATENCY: stepper: 492uS loop: 0uS p -set Home l -set limits h -goHome r -run>

När skissen körs tas stegets nuvarande position som "hem" -position (0). Om du behöver flytta steget till dess riktiga "hemposition" anger du kommandot p för att visa menyn SET HOME

SET HOME pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 752uS loop: 3852uS x -setHome here and exit + -Forward - -Reverse s -swap Forward/Reverse -hardStop >

Som du kan se har gränserna som är kodade i skissen tagits bort så att du kan placera steget igen var som helst. Du måste se till att du inte kör den förbi de fysiska gränserna eller så kan du bryta något.

Använd + cmd för att börja flytta steget framåt, om du tycker att det rör sig i fel riktning anger du ett icke-kommando eller bara en tom rad för att stoppa det och använd sedan kommandot för att byta riktning framåt. Du bör uppdatera skissen för att inkludera ett samtal till invertDirectionLogic () i installationen för att åtgärda detta för nästa körning.

Använd + / - cmds för att placera steget till rätt nolläge. Motorn startar långsamt och bygger sedan upp hastigheten när den fortskrider. Använd bara och töm linjen för att stoppa den. Maxhastigheten för detta och gränserna -menyn ställs in med MAX_SETUP_SPEED högst upp i setupMenus.cpp.

När motorn har placerats i sitt "hem" -läge, använd x cmd för att återställa den aktuella positionen till 0 och återgå till menyn INSTÄLLNINGAR.

Om du behöver ställa in gränserna, vanligtvis bara på den första installationen, använd l cmd för att öppna menyn SET LIMITS.

SET LIMITS pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 944uS loop: 5796uS l -setLimit here + -Forward - -Reverse h -goHome x -exit -hardStop>

Använd + cmd för att gå vidare till plusgränsen och använd sedan l cmd för att ställa in den som plusgränsen. Kommandot h kan sedan användas för att återgå till 0 och - cmd använda för att flytta om det går tillbaka till positionen motorn vid minusgränsen. Använd igen l cmd för att ställa in minusgränsen. Notera positionerna för plus- och minusgränserna och uppdatera setup () -metodens setPlusLimit- och setMinusLimit -satser med dessa värden.

När gränserna är inställda använder du x cmd för att återgå till SETUP -menyn och sedan kan du använda r cmd för att öppna RUN -menyn

RUN MENU pos: 0 sp: 3.31 + Lim: 500000 -Lim: -500 LATENCY: stepper: 944uS loop: 5796uS + -Speed up - -Speed down h -goHome. -hardStop-fryshastighet> +pos: 4 sp: 9.49 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 42 sp: 29.15 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 120 sp: 49.09 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 238 sp: 69.06 +Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS

+ Cmd börjar accelerera i riktning framåt och skriver ut position och hastighet varannan sekund. När motorn når den hastighet du vill kan du stoppa accelerationen med valfri annan knapp (eller en tom ingång). Du kan minska hastigheten med - cmd ner för att stoppa. Om stoppat kommer - cmd att accelerera i omvänd ordning.

Denna RUN -meny ger manuell kontroll av ditt projekt. För automatisk kontroll måste du lägga till några andra sensorer.

Steg 5: Latency

Stegmotorstyrningen beror på att programvaran styr varje steg. För att bibehålla den inställda hastigheten måste din skiss ringa metoden stepper.run () tillräckligt ofta för att avfyra nästa steg vid rätt tidpunkt för aktuell hastighet. För kontroll via sensorer måste du snabbt kunna bearbeta nya mätningar. Utskriften av position/hastighet innehåller två LATENCY -mätningar så att du kan kontrollera att din skiss är tillräckligt snabb.

Stepper Latency (pfodBufferedStream)

Stepper latency mäter den maximala fördröjningen mellan på varandra följande samtal till stepper.run () metoden. För att köra stegmotorn med 1000 steg per sekund måste steglatenheten vara mindre än 1000uS (1mS). Den första versionen av denna skiss hade en latens på många millisekunder. För att övervinna detta extra samtal till runStepper () -metoden (som kallar stepper.run ()) där det läggs till genom koden. Detta löste inte problemet helt eftersom meny- och utskriftsuttryck blockerade skissen när den lilla Serial Tx -bufferten var full. För att undvika detta blockerades pfodBufferedStream från pfodParser -biblioteket för att lägga till en utskriftsbuffert med 360 byte som utskriftssatserna snabbt kunde skriva till. Sedan släpper pfodBufferedStream byte med den baudhastighet som anges 115200 i detta fall. pfodBufferedStream måste välja att antingen blockera när bufferten är full eller bara släppa överflödet. Här är den inställd på att släppa alla extra tecken när bufferten är full så att skissen inte blockeras i väntan på att Serial ska skicka tecken.

Loop Latency (NonBlockingInput)

Loop latency mäter den maximala fördröjningen mellan på varandra följande samtal till loop () -metoden. Detta anger hur snabbt du kan bearbeta nya sensormätningar och justera motorns inställda varvtal. Hur snabb då måste vara beror på vad du försöker kontrollera.

Fördröjningarna på grund av utskriftsuttalanden togs bort med hjälp av pfodBufferedStream ovan, men för att bearbeta användarens inmatning måste du ta den första tecknen på ingången och ignorera resten av raden. NonBlockingInput-klassen i pfodParer-biblioteket används för att returnera en icke-noll char när det finns inmatning, med readInput (), och för att rensa och kasta följande tecken med clearInput (), tills inga tecken tas emot under 10 ms utan att blockera slingan ()

Självklart kommer loop -latensen att ökas med den extra kod du lägger till för att läsa sensorerna och beräkna den nya inställda hastigheten. Många sensorbibliotek tar typ av att bara använda fördröjning (..) mellan att starta en mätning och hämta resultatet. Du måste skriva om dessa bibliotek för att använda millisDelay istället för att hämta mätningen efter en lämplig icke-blockerande fördröjning.

Steg 6: Kör SpeedStepperSetup med en stegmotor och SparkFun Redboard Turbo

Running SpeedStepperSetup med en stegmotor och SparkFun Redboard Turbo
Running SpeedStepperSetup med en stegmotor och SparkFun Redboard Turbo
Running SpeedStepperSetup med en stegmotor och SparkFun Redboard Turbo
Running SpeedStepperSetup med en stegmotor och SparkFun Redboard Turbo

För att köra SpeedStepperSetup -skissen på riktigt behöver du en stegmotor, drivrutin och strömförsörjning och i detta exempel SparkFun Redboard Turbo.

Kopplingsschemat ovan (pdf -version) visar anslutningarna. I SpeedStepperSetup -skissen ändrar du SERIAL -definieringen till #define SERIAL Serial1

Stegmotor, strömförsörjning, förare och skydd

Det finns många typer och storlekar av stegmotorer. Här används en tvåspole 12V 350mA stegmotor för testning. För att driva denna stegmaskin behöver du en strömförsörjning på 12V eller mer och större än 350mA.

Detta bibliotek ger bara en riktning och stegutgång så att du behöver en drivrutin för att ansluta till stegmotorn. Easy Driver och Big Easy Driver styr strömmen till motorns spolar så att du kan använda en strömförsörjning med en högre spänning säkert, till exempel med 6V -matning för en 3.3V -motor. Easy Driver kan leverera mellan 150mA/spole och 700mA/spole. För högre strömmar kan Big Easy Driver leverera upp till 2A per spole. Läs vanliga frågor och svar längst ned på sidan Easy Drive.

Dessa exempel använder D6 och D7 som steg- och riktningsutgångar. Du kan ändra utgångsstiften till valfri digital utgång genom att ändra inställningarna STEP_PIN och DIR_PIN nära toppen av skissen.

Programmering av Sparkfun Redboard Turbo

Att programmera Redboard Turbo är problematiskt. Om det inte går att programmera, tryck först på återställningsknappen en gång och välj COM -porten igen i Arduino Tools -menyn och försök igen. Om det inte fungerar, dubbeltryck på återställningsknappen och försök igen.

Anslutning av Easy Driver

Två spolmotorer har 4 trådar. Använd en multimeter för att hitta paren som ansluts till varje spole och sedan koppla en spole till Easy Driver A -terminalerna och den andra spolen till B -terminalen. Det spelar ingen roll vilken väg du kopplar dem eftersom du kan använda s cmd i inställningsmenyn för att byta rörelseriktning.

Motorns strömförsörjning är ansluten till M+ och GNDS Ställ in logiknivån för kortet med 3/5V -länken. Korta länken tillsammans för 3,3V mikroprocessorutgångar, som SparkFun Redboard Turbo (om du lämnar den öppen är den lämplig för 5V digitala signaler, t.ex. UNO, Mega) Anslut GND, STEP, DIR -stiften till mikroprocessorn GND och steget och Inga andra anslutningar behövs för att driva motorn.

USB till TTL seriell kabel

När du flyttar SpeedStepperSetup -skissen från Uno/Mega till Redboard Turbo kan du naivt bara ersätta #define SERIAL Serial med #define SERIAL SerialUSB för att passa Redboard Turbo usb seriell anslutning, men du skulle upptäcka att den resulterande steglatency är cirka 10 ms. Det är 10x långsammare än för UNO. Detta på grund av hur Redboard -cpu hanterar USB -anslutningen. För att komma över detta, anslut en USB till TTL seriell kabel till D0/D1 och ställ in#definiera SERIAL Serial1 för att använda maskinvarans seriella anslutning för att styra stegmotorn. Att använda Serial1 ger LATENCY: stepper: 345uS loop: 2016uS som är 3 gånger snabbare än UNO för steg och loop latens

Terminalprogram

Arduino Serial Monitor är lite svårare att använda för att styra stegmotorn eftersom du måste ange char i cmd -raden och tryck sedan på Enter för att skicka den. Ett snabbare och mer responsivt sätt är att öppna ett terminalfönster, TeraTerm för PC (eller CoolTerm Mac), anslutet till USB till TTL kabel COM -porten. Sedan i det fönstret trycker du på en cmd -tangent omedelbart. Om du trycker på Enter skickar du bara en tom rad.

Inställning av motorvarvtal

Som kopplad ovan är Easy Drive konfigurerad för 1/8: e steg, så 1000 steg/sek kommer att vrida motorn vid 1000/8/200 -steg/varv = 0,625 varv per sekund eller max 37,5 varv/min. Genom att ändra ingångarna till MS1/MS2 kan du växla mellan 1/8, ¼, ½ och hela steg. För fullständiga steg ansluter du både MS1 och MS2 till GND. Detta tillåter hastigheter upp till 300 varv / min. Genom att välja lämpliga MS1/MS2 -inställningar kan du justera för installerat utväxlingsförhållande mellan motorn och den drivna delen.

Hårdvaruskydd

Medan SpeedStepper -biblioteket låter dig ställa in positionsbegränsningar på motorrörelsen, görs positionen genom att räkna ut de steg som matas ut av programvaran. Om motorn stannar, dvs vridmomentet är otillräckligt för att driva motorn nästa steg, kommer mjukvarupositionen att vara ur synk med motorläget. När du sedan använder kommandot 'goHome' kommer motorn att skjuta över utgångspositionen. För att förhindra skador på hårdvaran bör du sätta in gränslägesbrytare vid de hårda gränserna för att koppla bort motorns strömförsörjning

Inställning av motorströmgräns

Sätt först den till den lägsta inställningen på potentiometern. dvs spänningen vid TP1 är minimal. Potentiometern är känslig, så tvinga inte potentiometern förbi de mekaniska stoppen. Ställ motorn i en långsam, jämn hastighet en långsam, vrid sedan långsamt potentiometern tills motorn inte hoppar eller ryckar mellan stegen.

Slutsats

Detta projekt visar hur du använder SpeedStepper -biblioteket i en praktisk applikation. Medan AccelStepper-biblioteket ger bra positionskontroll, behövdes hastighetskontroll för Prototype Ice-Smelting Probe för insamling av biologiska prover på Europa så AccelStepper-biblioteket skrevs om för att ge hastighetskontroll med slutgränser och en goHome-funktion.

Rekommenderad: