Inhoudsopgave:

Stepper Speed Control Menu Driven voor Arduino - Ajarnpa
Stepper Speed Control Menu Driven voor Arduino - Ajarnpa

Video: Stepper Speed Control Menu Driven voor Arduino - Ajarnpa

Video: Stepper Speed Control Menu Driven voor Arduino - Ajarnpa
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Juli-
Anonim
Stepper Speed Control Menu Driven voor Arduino
Stepper Speed Control Menu Driven voor Arduino
Stepper Speed Control Menu Driven voor Arduino
Stepper Speed Control Menu Driven voor Arduino
Stepper Speed Control Menu Driven voor Arduino
Stepper Speed Control Menu Driven voor Arduino

Deze SpeedStepper-bibliotheek is een herschrijving van de AccelStepper-bibliotheek om snelheidsregeling van de stappenmotor mogelijk te maken. Met de SpeedStepper-bibliotheek kunt u de ingestelde motorsnelheid wijzigen en vervolgens accelereren/vertragen naar de nieuwe ingestelde snelheid met hetzelfde algoritme als de AccelStepper-bibliotheek. Met de SpeedStepper-bibliotheek kunt u ook een plus- en minlimiet en een 'home'-positie instellen. Er is een goHome-commando om terug te keren naar de startpositie.

Beperkingen: De SpeedStepper-bibliotheek stuurt alleen richting- en stapuitgangen aan en moet dus worden aangesloten op een motorstuurprogramma, zoals Easy Driver, om de stappenmotor daadwerkelijk aan te drijven. De AccelStepper-bibliotheek biedt meer rij-opties die indien nodig naar deze bibliotheek kunnen worden gekopieerd.

Er worden drie voorbeeldschetsen meegeleverd, die elk zonder motor of motoraandrijving kunnen worden uitgevoerd. speedStepperPlot-schets geeft voorbeeldsnelheidscommando's en het goHome-commando en genereert een plot van de resulterende snelheid en positie. De speedStepperSetup-schets biedt een menugestuurde setup om het startpunt en de limieten van de motor in te stellen en vervolgens de motor te laten draaien en de snelheid op en neer aan te passen en goHome om te voltooien. De speedStepperProfile-schets toont een voorbeeld van het opzetten en uitvoeren van een snelheidsprofiel.

Hoewel de AccelStepper-bibliotheek een goede positiecontrole biedt, was snelheidsregeling nodig voor de prototype-ijssmeltsonde voor het verzamelen van biologische monsters op Europa. Hier is een video van een eerdere versie van het prototype, die gewicht gebruikte in plaats van een motor. Revisie 1.1 voegde snelheidsprofielen toe nadat een gebruiker een middel had gevraagd om het snelheidsprofiel van een pomp te regelen.

Deze bibliotheek draait op Arduino Uno en Mega2560, maar voor het prototype is gebruik gemaakt van het grotere geheugen / snellere processor SparkFun Redboard Turbo.

Dit instructable is ook online beschikbaar op Stepper Speed Control Library voor Arduino

Benodigdheden

Om de voorbeeldschetsen uit te voeren, zijn alleen een Arduino UNO of Mega2560 en de softwarebibliotheken nodig

Voor het testen van de bibliotheek werd een SparkFun Redboard Turbo gebruikt met een Easy Driver, een 200 stappen/omw, 12V 350mA stappenmotor en een 12 DC-voeding van 2A of groter, b.v. https://www.sparkfun.com/products/14934. USB A naar micro-kabelUSB naar TTL seriële kabelArduino IDE V1.8.9 en een computer om het op uit te voeren. SpeedStepper-bibliotheekpfodParser-bibliotheek voor de nonBlockingInput- en pfodBufferedStream-klassen millisDelay-bibliotheek voor niet-blokkerende vertragingen

Stap 1: Bibliotheekfuncties

De SpeedStepper-bibliotheek voert de stappenmotor uit die wordt beperkt door de grenzen die door de bibliotheek zijn ingesteld. Zie het bestand SpeedStepper.h voor de verschillende beschikbare bibliotheekmethoden. Hier is een overzicht van de logica erachter.

De positie van de stepper wordt bijgehouden door het aantal stappen (pulsen) te tellen. De bibliotheek beperkt de positie tussen de posities setPlusLimit(int32_t) en setMinusLimit(int32_t). De pluslimiet is altijd >= 0 en de minlimiet is altijd <= 0. Bij het opstarten is de motorpositie 0 (thuis) en zijn de limieten ingesteld op zeer grote +/- getallen (ongeveer +/- 1e9 stappen). setAcceleration(float) stelt in hoe snel de motor de snelheid omhoog of omlaag zal veranderen. Als de motor de plus- of minlimiet nadert, zal hij met deze snelheid vertragen totdat hij stopt bij de limiet. Bij het opstarten is de versnelling ingesteld op 1,0 stappen/sec/sec. De versnellingsinstelling is altijd een +ve getal. Het teken van de instelling setSpeed(float) bepaalt de richting waarin de motor zal bewegen.

setSpeed(float) stelt de snelheid in om de motor te versnellen/vertragen vanaf zijn huidige snelheid. De snelheid die kan worden ingesteld via setSpeed(float) is in absolute waarde beperkt door instellingen, setMaxSpeed(float), standaard 1000 stappen/sec en setMinSpeed(float), standaard 0,003 stappen/sec. Deze standaardwaarden zijn ook de absolute hard gecodeerde snelheidslimieten die de bibliotheek accepteert voor setMaxSpeed() en setMinSpeed(). Als u een maximale snelheid > 1000 stappen/sec wilt instellen, moet u de eerste regel in het bestand SpeedStepper.cpp bewerken om de maxMaxSpeed(1000) te wijzigen in de maximale snelheid die u wilt. In de praktijk wordt de maximale snelheid ook beperkt door de tijd tussen aanroepen van de run()-methode van de bibliotheek. Voor 1000 stappen/sec moet de methode run() minimaal elke 1 mS worden aangeroepen. Zie het gedeelte Latentie hieronder.

Als u probeert een snelheid in te stellen die lager is dan de minimumsnelheid, zal de motor stoppen. Elk van deze setters heeft een bijbehorende getter, zie het bestand SpeedStepper.h. Voor snelheid retourneert getSetSpeed() de snelheid die u hebt ingesteld via setSpeed(), terwijl getSpeed() de huidige motorsnelheid retourneert die varieert als deze versnelt/vertraagt naar de door u ingestelde snelheid. Als de motor niet in de richting gaat die u aan een +ve denkt, kunt u invertDirectionLogic() aanroepen om de richting waarin de motor beweegt om te wisselen voor +ve snelheden.

getCurrentPosition() retourneert de huidige motorpositie vergeleken met 'home' (0). U kunt de huidige motorpositie setCurrentPosition(int32_t) overschrijven. De nieuwe positie is beperkt tot binnen de ingestelde plus/min-limieten.

In eerste instantie wordt de motor gestopt op positie 0. Als u setSpeed (50.0) aanroept, begint deze te accelereren in de +ve-richting tot een maximale snelheid van 50 stappen/min. Als u hardStop() aanroept, stopt de motor onmiddellijk waar hij is. Aan de andere kant zal het aanroepen van de stop()-methode de snelheid op nul zetten en de motor vertragen tot stilstand. Als u stopAndSetHome() aanroept, stopt de motor onmiddellijk en wordt de positie op 0 gezet. De plus/min-limietwaarden worden niet gewijzigd, maar worden nu naar deze nieuwe 0 (thuis)positie verwezen. Door goHome() aan te roepen, keert de stepper terug naar deze 0 (thuis) positie en stopt. Als u setSpeed() aanroept, wordt het naar huis gaan geannuleerd.

De SpeedStepper-bibliotheek biedt ook snelheidsprofielcontrole via de methoden setProfile(SpeedProfileStruct* profileArray, size_t arrayLen), startProfile(), stopProfile(), om een actief profiel te onderbreken en isProfileRunning(). Zie de speedStepperProfile-voorbeeldschets.

Stap 2: Het SpeedStepperPlot-voorbeeld uitvoeren zonder motor

Voorbeeld van SpeedStepperPlot uitvoeren zonder motor
Voorbeeld van SpeedStepperPlot uitvoeren zonder motor

Installeer Arduino IDE V1.8.9Download en installeer de SpeedStepper-bibliotheek Sla de SpeedStepper.zip op en gebruik vervolgens het Arduino IDE-menu-item Sketch → Include Library → Add. ZIP-bibliotheek om de bibliotheek te importeren Download en installeer ook de millisDelay-bibliotheek

Open de Voorbeelden → SpeedStepper → speedStepperPlot voorbeeldschets (Herstart de IDE indien nodig). Deze schets is geconfigureerd om te werken met serieel, b.v. UNO en Mega etc. Voor het draaien op de SparkFun Redboard Turbo zie hieronder.

Er is geen driverbord of stappenmotor nodig om dit voorbeeld uit te voeren. Deze voorbeelden gebruiken D6 en D7 als uitgangen. U kunt de uitvoerpinnen wijzigen in elke digitale uitvoer door de STEP_PIN- en DIR_PIN-instellingen bovenaan de schets te wijzigen.

Upload de schets naar het bord en open vervolgens de Tools → Serial Plotter op 115200 baud om de plot van de snelheid (ROOD) en positie (BLAUW) weer te geven. De pluslimiet is ingesteld op 360, waardoor de snelheid vanaf ongeveer 100 punten naar nul gaat op de x-as. De min-limiet is -510. De positie stopt bij ~-390 omdat de snelheid is gevraagd naar 0.0. Op punt 380 op de x-as wordt de goHome-cmd uitgegeven die de stepper terugbrengt naar positie nul.

Deze speedStepperPlot-schets gebruikt millisDelays om te schakelen tussen verschillende snelheden en versnellingen. In veel gevallen is het gebruik van een SpeedStepperProfile, zoals in het volgende voorbeeld, eenvoudiger.

Stap 3: Het SpeedStepperProfile-voorbeeld uitvoeren zonder motor

Het SpeedStepperProfile-voorbeeld uitvoeren zonder motor
Het SpeedStepperProfile-voorbeeld uitvoeren zonder motor

Open de voorbeelden → SpeedStepper → speedStepperPlot-voorbeeldschets, deze schets produceert de bovenstaande plot met behulp van de Arduino Serial Plotter en is een voorbeeld van het uitvoeren van een voorgeschreven snelheidsprofiel, bijvoorbeeld als u een pomp gebruikt.

Stepper Speed Profiles bestaan uit een array van SpeedProfileStruct, die is gedefinieerd in het bestand SpeedStepper.h.

struct SpeedProfileStruct {

vlottersnelheid; // de doelsnelheid aan het einde van deze stap unsigned long deltaTms; // de tijd om te accelereren van de huidige snelheid (aan het begin van deze stap) naar de doelsnelheid };

Definieer een array van SpeedProfileStruct met de doelsnelheid voor elke stap en de tijd, deltaTms, in mS om die doelsnelheid te bereiken vanaf de vorige doelsnelheid. Als de deltaTms nul of erg klein is, springt de snelheid gewoon onmiddellijk naar de nieuwe doelsnelheid. Anders wordt de vereiste versnelling berekend. setAcceleration() wordt aangeroepen gevolgd door een aanroep van setSpeed() voor de nieuwe doelsnelheid. In alle gevallen wordt het profiel beperkt door de bestaande plus- en minpositielimieten en max/min snelheidsinstellingen. Als u een snelheid wilt vasthouden, herhaalt u gewoon de vorige snelheid met de tijd die u wilt dat deze wordt aangehouden. Aangezien de nieuwe doelsnelheid gelijk is aan de huidige snelheid, is de berekende versnelling nul en treedt er geen verandering in de snelheid op.

Deze SpeedProfileStruct-array produceerde de bovenstaande plot:

const SpeedProfileStruct profile = { { 0, 0}, // stop onmiddellijk indien nog niet gestopt { 0, 1000}, // houd nul 1 seconde vast { -50, 0}, // spring naar -50 { -200, 2000}, // oplopend naar -200 { -200, 6000}, // 6 seconden vasthouden op -200 { -50, 2000}, // aflopend naar -50 { 0, 0}, // // onmiddellijk stoppen { 0, 1500}, // houd nul 1,5 sec vast { 50, 0}, // spring naar 50 { 200, 2000}, // helling naar 200 { 200, 6000}, // houd 200 6 sec vast { 50, 2000}, // helling naar 50 { 0, 0}, // // onmiddellijk stoppen { 0, 1000} // nul vasthouden // voor plotten output }; const size_t PROFILE_LEN = sizeof(profiel) / sizeof(SpeedProfileStruct); // bereken de grootte van de profielarray

Het profiel wordt ingesteld door setProfile(SpeedProfileStruct* profileArray, size_t arrayLen) aan te roepen, b.v. stepper.setProfile (profiel, PROFILE_LEN);

Zodra het profiel is ingesteld, roept u startProfile() aan om het te starten vanaf de huidige motorsnelheid (meestal begint u vanaf gestopt). Aan het einde van het profiel loopt de motor gewoon door op de laatste doelsnelheid. De methode isProfileRunning() kan worden aangeroepen om te zien of het profiel nog actief is. Als u het profiel vroegtijdig wilt stoppen, kunt u stopProfile() aanroepen, waardoor het profiel wordt verlaten en de motor stopt.

Stap 4: Het SpeedStepperSetup-voorbeeld uitvoeren zonder motor

De voorbeeldschets is ontworpen als basis voor uw eigen stappenmotortoepassing. Het biedt een menugestuurde interface waarmee u naar de startpositie van de motor kunt gaan, als dat nog niet het geval is, en vervolgens optioneel de plus- en minlimieten kunt resetten en de motor vervolgens binnen dat bereik kunt laten draaien. Met het 'run'-menu kun je de snelheid verhogen en verlagen, bevriezen op de huidige snelheid, stoppen en ook terugkeren naar huis.

Deze schets illustreert een aantal softwarefuncties die de loop() responsief houden, zodat u uw eigen sensoringangen kunt toevoegen om de stepper te besturen. Het kost moeite om vertragingen te vermijden die de snelheidsregeling zouden verstoren. (Zie Vertragingen zijn slecht)

Installeer de bibliotheken die worden gebruikt voor het uitvoeren van de SpeedStepperPlot hierboven, en installeer vervolgens ook de pfodParser-bibliotheek. De pfodParser-bibliotheek levert de klassen NonBlockingInput en pfodBufferedStream die worden gebruikt om de gebruikersinvoer en menu-uitvoer af te handelen door te voorkomen dat de loop() wordt uitgevoerd.

Open het Voorbeeld → SpeedStepper → speedSpeedSetup voorbeeld. Deze schets is geconfigureerd om te werken met serieel, b.v. UNO en Mega etc. Voor het draaien op de SparkFun Redboard Turbo zie hieronder.

Er is geen driverbord of stappenmotor nodig om dit voorbeeld uit te voeren. Deze voorbeelden gebruiken D6 en D7 als uitgangen. U kunt de uitvoerpinnen wijzigen in elke digitale uitvoer door de STEP_PIN- en DIR_PIN-instellingen bovenaan de schets te wijzigen. Upload de schets naar het bord en open vervolgens Tools → Serial Monitor op 115200 om het SETUP-menu te zien.

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

Wanneer de schets wordt uitgevoerd, wordt de huidige positie van de stepper als 'home' (0) positie genomen. Als u de stepper opnieuw moet positioneren naar zijn echte 'home'-positie, voert u de p-opdracht in om het SET HOME-menu weer te geven

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

Zoals u kunt zien, zijn de limieten die in de schets zijn gecodeerd verwijderd, zodat u de stepper overal opnieuw kunt positioneren. Je moet oppassen dat je niet over de fysieke limiet rijdt, anders kan je iets breken.

Gebruik de + cmd om de stepper naar voren te bewegen, als je merkt dat hij in de verkeerde richting beweegt, voer dan een niet-commando in of gewoon een lege regel om hem te stoppen en gebruik dan de scommand om de richting van Vooruit om te wisselen. U moet de schets bijwerken om een aanroep naar invertDirectionLogic() in de setup op te nemen om dit voor de volgende uitvoering op te lossen.

Gebruik de + / - cmds om de stepper op de juiste nulpositie te zetten. De motor start langzaam en bouwt vervolgens snelheid op naarmate hij vordert, gebruik gewoon een lege regel om hem te stoppen. De maximale snelheid hiervoor en het limietenmenu wordt ingesteld door de MAX_SETUP_SPEED bovenaan de setupMenus.cpp.

Zodra de motor op zijn 'home'-positie is geplaatst, gebruikt u de x cmd om de huidige positie opnieuw in te stellen op 0 en terug te keren naar het SETUP-menu.

Als u de limieten moet instellen, meestal alleen bij de eerste installatie, gebruikt u de l cmd om het menu SET LIMITS te openen

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 >

Gebruik de + cmd om verder naar de pluslimiet te gaan en gebruik vervolgens de l cmd om deze in te stellen als de pluslimiet. Het h-commando kan dan worden gebruikt om terug te keren naar 0 en de - cmd kan worden gebruikt om te verplaatsen als de motor terugkeert naar de min-limiet. Gebruik opnieuw de l cmd om de min-limiet in te stellen. Let op de posities van de plus- en minlimieten en werk de setPlusLimit- en setMinusLimit-instructies van de setup()-methode bij met deze waarden.

Wanneer de limieten zijn ingesteld, gebruikt u de x cmd om terug te keren naar het SETUP-menu en vervolgens kunt u de r cmd gebruiken om het RUN-menu te openen

RUN MENU pos:0 sp:3.31 +Lim:500000 -Lim:-500 LATENCY: stepper:944uS loop:5796uS + -- Versnellen - -- Versnellen h -- goHome. -- hardStop -- bevriezen Snelheid >+ 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

De + cmd begint in voorwaartse richting te versnellen en drukt elke 2 seconden de positie en snelheid af. Wanneer de motor de gewenste snelheid bereikt, kunt u de acceleratie stoppen met een andere toets (of een lege invoer). U kunt de snelheid verlagen met de – cmd omlaag om te stoppen. Indien gestopt, zal de – cmd achteruit accelereren.

Dit RUN-menu biedt handmatige bediening van uw project. Voor automatische besturing moet u enkele andere sensoren toevoegen.

Stap 5: Latentie

De stappenmotorbesturing is afhankelijk van de software die elke stap bestuurt. Om de ingestelde snelheid te behouden, moet je schets de methode stepper.run() vaak genoeg aanroepen om de volgende stap op het juiste moment voor de huidige snelheid af te vuren. Voor aansturing via sensoren moet je nieuwe metingen snel kunnen verwerken. De afdruk van de positie/snelheid bevat twee LATENCY-metingen om u te laten controleren of uw schets snel genoeg is.

Stepper-latentie (pfodBufferedStream)

De stepper-latentie meet de maximale vertraging tussen opeenvolgende aanroepen van de stepper.run()-methode. Om de stappenmotor met 1000 stappen per seconde te laten draaien, moet de latentie van de stappenmotor minder zijn dan 1000uS (1mS). De eerste versie van deze schets had een latentie van vele milliseconden. Om deze extra aanroepen van de methode runStepper() (die stepper.run() aanroept) te ondervangen, werden ze toegevoegd via de code. Dit loste het probleem niet volledig op omdat de menu- en uitvoerafdrukinstructies de schets blokkeerden zodra de kleine Serial Tx-buffer vol was. Om deze blokkering te voorkomen, werd pfodBufferedStream uit de pfodParser-bibliotheek gebruikt om een afdrukbuffer van 360 bytes toe te voegen waarnaar de afdrukinstructies snel konden worden geschreven. Dan geeft pfodBufferedStream de bytes vrij met de baudrate die in dit geval 115200 is opgegeven. pfodBufferedStream heeft de optie om te blokkeren wanneer de buffer vol is of om de overlooptekens te laten vallen. Hier is het ingesteld om extra tekens te laten vallen wanneer de buffer vol is, zodat de schets niet wordt geblokkeerd in afwachting van Serial om tekens te verzenden.

Loop-latentie (NonBlockingInput)

De luslatentie meet de maximale vertraging tussen opeenvolgende aanroepen van de loop()-methode. Hiermee stelt u in hoe snel u nieuwe sensormetingen kunt verwerken en het ingestelde motortoerental kunt aanpassen. Hoe snel dan moet zijn, hangt af van wat je probeert te controleren.

De vertragingen als gevolg van de afdrukinstructies zijn verwijderd door pfodBufferedStream hierboven te gebruiken, maar om de invoer van de gebruiker te verwerken, moet u de eerste char van de invoer nemen en de rest van de regel negeren. De NonBlockingInput-klasse in de pfodParer-bibliotheek wordt gebruikt om een niet-nul teken te retourneren wanneer er invoer is, met behulp van readInput(), en om de volgende tekens te wissen en weg te gooien met behulp van clearInput(), totdat er gedurende 10 mS geen tekens worden ontvangen zonder de lus te blokkeren ()

Uiteraard wordt de loop latency verhoogd door de extra code die je toevoegt om de sensoren uit te lezen en de nieuwe ingestelde snelheid te berekenen. Veel sensorbibliotheken kiezen ervoor om gewoon vertraging (..) te gebruiken tussen het starten van een meting en het ophalen van het resultaat. U moet deze bibliotheken herschrijven om in plaats daarvan millisDelay te gebruiken, om de meting op te halen na een geschikte niet-blokkerende vertraging.

Stap 6: SpeedStepperSetup uitvoeren met een stappenmotor en SparkFun Redboard Turbo

Running SpeedStepperSetup met een stappenmotor en SparkFun Redboard Turbo
Running SpeedStepperSetup met een stappenmotor en SparkFun Redboard Turbo
Running SpeedStepperSetup met een stappenmotor en SparkFun Redboard Turbo
Running SpeedStepperSetup met een stappenmotor en SparkFun Redboard Turbo

Om de SpeedStepperSetup-schets echt uit te voeren, hebt u een stappenmotor, driver en voeding nodig en in dit voorbeeld SparkFun Redboard Turbo.

Bovenstaand aansluitschema (pdf-versie) geeft de aansluitingen weer. Wijzig in de SpeedStepperSetup-schets de SERIAL-definitie in #define SERIAL Serial1

Stappenmotor, voeding, driver en bescherming

Er zijn veel soorten en maten stappenmotoren. Hier wordt een tweespoel 12V 350mA stappenmotor gebruikt voor het testen. Om deze stepper van stroom te voorzien heb je een voeding nodig van 12V of meer en groter dan 350mA.

Deze bibliotheek biedt alleen een richtings- en stapuitgang, dus u hebt een stuurprogramma nodig om te communiceren met de stappenmotor. De Easy Driver en Big Easy Driver regelen de stroom naar de spoelen van de motor zodat u veilig een voeding met een hogere spanning kunt gebruiken, bijvoorbeeld 6V voeding voor een 3,3V motor. De Easy Driver kan tussen 150mA/spoel en 700mA/spoel leveren. Voor hogere stromen kan de Big Easy Driver tot 2A per spoel leveren. Lees de veelgestelde vragen onderaan de Easy Drive-pagina.

Deze voorbeelden gebruiken D6 en D7 als de stap- en richtingsuitgangen. U kunt de uitvoerpinnen wijzigen in elke digitale uitvoer door de STEP_PIN- en DIR_PIN-instellingen bovenaan de schets te wijzigen.

Programmeren van de Sparkfun Redboard Turbo

Het programmeren van de Redboard Turbo is problematisch. Als het niet lukt om te programmeren, druk dan eerst eenmaal op de reset-drukknop en selecteer de COM-poort opnieuw in het Arduino Tools-menu en probeer het opnieuw. Als dat niet werkt, drukt u tweemaal op de reset-drukknop en probeert u het opnieuw.

De Easy Driver aansluiten

Twee spoel stappenmotoren hebben 4 draden. Gebruik een multimeter om de paren te vinden die op elke spoel zijn aangesloten en sluit vervolgens een spoel aan op de Easy Driver A-aansluitingen en de andere spoel op de B-aansluiting. Het maakt niet uit op welke manier je ze bedraden, want je kunt de s cmd in het setup-menu gebruiken om de bewegingsrichting om te wisselen.

De motorvoeding is aangesloten op de M+ en GNDStel het logische niveau van de kaart in met de 3/5V-link. Sluit de link samen voor 3.3V microprocessoruitgangen, zoals de SparkFun Redboard Turbo (als je het open laat is het geschikt voor 5V digitale signalen, bijv. UNO, Mega) Sluit de GND, STEP, DIR pinnen aan op de microprocessor GND en de stap en dir output pinnen. Er zijn geen andere aansluitingen nodig om de motor aan te drijven.

USB naar TTL seriële kabel

Wanneer u de SpeedStepperSetup-schets van de Uno/Mega naar de Redboard Turbo verplaatst, kunt u naïef #define SERIAL Serial vervangen door #define SERIAL SerialUSB om te passen bij de seriële USB-verbinding van de Redboard Turbo, maar u zou merken dat de resulterende stepper-latentie ongeveer 10 mS is. Dat is 10x langzamer dan voor de UNO. Dit vanwege de manier waarop de Redboard-cpu omgaat met de USB-verbinding. Om dit te verhelpen, sluit u een USB naar TTL seriële kabel aan op D0/D1 en stelt u #define SERIAL Serial1 in om de hardware seriële verbinding te gebruiken om de stappenmotor te besturen. Het gebruik van Serial1 geeft LATENCY: stepper:345uS loop:2016uS wat 3 keer sneller is dan de UNO voor de stepper en loop latency

Terminal-programma

De Arduino Serial Monitor is iets moeilijker te gebruiken om de stappenmotor te besturen, omdat je de char in de cmd-regel moet invoeren en vervolgens op Enter moet drukken om deze te verzenden. Een snellere, meer responsieve manier is om een terminalvenster te openen, TeraTerm voor pc (of CoolTerm Mac), aangesloten op de USB-naar-TTL-kabel COM-poort. Als je in dat venster op een cmd-toets drukt, wordt het onmiddellijk verzonden. Door op Enter te drukken, stuurt u gewoon een lege regel.

Het motortoerentalbereik instellen

Zoals hierboven bedraad, is de Easy Drive geconfigureerd voor 1/8e stappen, dus 1000 stap/sec zal de motor draaien op 1000 / 8 / 200 stap/omwenteling = 0,625 toeren per seconde of 37,5 rpm maximaal. Door de ingangen te wijzigen in MS1/MS2 kunt u schakelen tussen 1/8, ¼, ½ en volledige stappen. Sluit voor volledige stappen zowel MS1 als MS2 aan op GND. Dit maakt snelheden tot 300 tpm mogelijk. Door de juiste MS1/MS2-instellingen te kiezen, kunt u de geïnstalleerde overbrengingsverhouding tussen de motor en het aangedreven onderdeel aanpassen.

Hardwarebescherming

Terwijl u met de SpeedStepper-bibliotheek positielimieten voor de motorbeweging kunt instellen, wordt het overstag gaan van de positie gedaan door de stappen te tellen die door de software worden uitgevoerd. Als de motor afslaat, d.w.z. het koppel is onvoldoende om de motor de volgende stap aan te drijven, dan zal de softwarepositie niet synchroon lopen met de motorpositie. Wanneer u vervolgens het 'goHome'-commando gebruikt, schiet de motor voorbij de startpositie. Om schade aan de hardware te voorkomen, moet u eindschakelaars op de harde limieten plaatsen om de motorvoeding af te sluiten

Motorstroomlimiet instellen

Zet deze eerst op de laagste stand van de potmeter. d.w.z. de spanning op TP1 is minimaal. De potentiometer is delicaat, dus forceer de potentiometer niet voorbij de mechanische aanslagen. Stel de motor in met een langzame, constante snelheid en langzaam en draai vervolgens langzaam aan de potentiometer totdat de motor niet overslaat of schokt tussen de stappen.

Conclusie

Dit project laat zien hoe de SpeedStepper-bibliotheek in een praktische toepassing kan worden gebruikt. Hoewel de AccelStepper-bibliotheek een goede positiecontrole biedt, was snelheidsregeling nodig voor de prototype-ijssmeltsonde voor het verzamelen van biologische monsters op Europa, dus de AccelStepper-bibliotheek werd herschreven om snelheidsregeling met eindlimieten en een goHome-functie te bieden.

Aanbevolen: