Stap 5: Motors en stuurprogramma's (Test met fundamentele Python)
Typen en bronnen van stappenmotoren
Als u niet bekend met stappenmotoren bent, beveel ik het lezen van enkele online introducties, dit instructable en dit artikel Adafruit is echt mooi en duidelijk.
Ik mijn motoren uit oude printers en een elektrische typerwriter geborgen, scanners zijn ook vaak een goede bron, laserprinters zijn niet.
Bipolaire stappenmotoren
Als de motor 4 draden heeft dan is een bi-polaire motor en kunnen we het gebruiken. Meet de weerstand tussen elk van de vier draden, vindt u twee paren, dit zijn de coils.
Unipolaire
Als de motor 6 draden zij vertegenwoordigen de uiteinden en het midden van de twee rollen heeft. Maatregel tussen alle combinaties van de zes draden, zal er 4 lage weerstand paar (halve spoelen) en twee van de twee keer dat (volledige spoelen). Wij willen gebruiken van de twee volledige rollen in de serie, dus kijk voor de twee grootste weerstand paren.
Verbindingen
Zoals opgemerkt in de vorige stap als u zijn het voeden van de motor planken extern, zorg ervoor dat jumper J4 verwijderen uit de I2C-driver board.
Sluit de spoelen aan de motoren van bestuur, kunt u de 4-pens header of de twee schroefaansluiting, ze rechtstreeks met elkaar zijn verbonden.
Als u het gebruik van mijn code, één spoel gaat over M1 +/ M1- en de andere gaat in de M2 +/ M2-. Als u Grove stuurprogramma gebruikt's dan, voor een of andere bizarre reden één spoel naar M1 gaat +/ M2 + en de andere gaat naar M2 +/ M2-.
Huidige spanningsgrenzen
Het lezen van de Grove Wiki of het gegevensblad van de L298N die ik heb gekoppeld vertelt ons dat de h-bridge-chip een huidige limiet voor 2A per kanaal en een ingangsspanning bereik tussen 6-15V heeft
De weerstand van de windingen bepaalt hoeveel stroom kan stromen door de motoren.
Huidige = spanning/weerstand
Ik probeerde aanvankelijk sommige motoren 60 ohm op 12V (0.2a), maar ze waren niet genoeg koppel produceren. Mij vervolgens gehanteerd voor vondst sommige 4.8 ohm motoren, 12V 2.5A dat teveel continu stroom was, dus ik verminderde de voeding op de motoren naar 5V wat resulteert in een comfortabele 1A tekenen met fatsoenlijk koppel zou hebben getrokken.
Dan moet u ook om ervoor te zorgen dat de voeding die u gebruikt voor het aandrijven van de motor planken van beide motor piekstroom gelijktijdig kan verwerken.
Koeling
De L298N chip krijgt behoorlijk warm wanneer deze in de buurt van haar huidige grenzen, dus een heat sink verbonden een goed idee is. Ik had sommige fans geborgen uit oude elektronica, dus ik ze om keeep de motor stuurprogramma's cool gebruikte.
Steppers met zeer lage weerstanden (zoals de < 10 ohm motoren ik gebruikte) worden aangestuurd met beperking van de huidige circuits (genaamd "choppers"), dus ze behoorlijk warm in deze continue huidige modus krijgt, maar mijne overleefd, jouw snelheid kan variëren.
Adressen van de motor van de stuurprogramma's instellen
De adressen op de motor bestuurders (zij moeten verschillende) instellen Ik stel mij volgens de beschrijvingen in de wiki en koos '0x0a' en '0x0f'
Meer noten
- U moet zitten kundig voor stormloop naar de troepenleiding "i2cdetect -y - r 6" van de Edison-terminal om te zien de aangesloten I2C-apparaten, maar ik sommige insecten ondervonden toen ik probeerde dat kan of kan niet worden vastgesteld tegen de tijd dat je dit leest.
- Zorg ervoor dat u de nieuwste MRAA libraries geinstalleerd (ik volgde deze gids)
- Slechts 100khz I2C wordt ondersteund door de Grove I2C Motor stuurprogramma's wordt ondersteund (dit is niet een probleem voor ons project, kan een probleem wanneer het proberen om ze te gebruiken samen met de andere modules.
- De module biedt geen telemetrie of status - het accepteert alleen I2C opdrachten voor haar verschillende activiteiten. Dit is de reden waarom ik niet de free-running stepper functies gebruiken, omdat ik niet zou hebben weten wanneer ze klaar was met de stappen.
Nuttige Software bibliotheek documenten
Intel pagina op Grove I2C Motor Driver (code voorbeelden, maar niet voor Stepper)
Test Software: Python Snippets
De gemakkelijkste manier om te testen deze codefragmenten is:
- Log in met SSH via putty
- Voer de opdracht "vi test.py" openen voor bewerken met de teksteditor "vi" te maken van een nieuw bestand met de naam "test.py"
- Druk op 'i' om de invoegmodus
- Selecteer en kopieer het codefragment op uw PC
- Klik met de rechtermuisknop in het venster van de SSH te plakken van de code
- Druk op escape
- type ": wq" om te schrijven en te stoppen (of ': q! "om af te sluiten zonder de wijzigingen op te slaan)
- Voer het script met de opdracht 'python test.py"
Handmatige stappen
Dit codefragment is een beetje een lelijke hack, maar het werkt als u wilt testen van stappenmotoren van de Edison via Python. Het begeleidt gewoon door vier stappen, veranderen de polariteit van de spoelen manueel. Het is niet met behulp van de free-running stepper functies. Dit is hoe ik uiteindelijk doen het in het einde, maar ik verhoogde het aantal stappen tot acht (half stepping).
import time import pyupm_grovemd as upmGrovemd I2C_BUS = upmGrovemd.GROVEMD_I2C_BUS I2C_ADDR = 0x0f # Instantiate an I2C Grove Motor Driver on I2C bus 0 myMotorDriver = upmGrovemd.GroveMD(I2C_BUS, I2C_ADDR) myMotorDriver.setMotorSpeeds(255, 255) time.sleep(0.5) steps = [[0,1],[2,0],[0,2],[1,0]] nextStep = 0 steptime = 0.05 numSteps = 48 while True: for step in range(0,numSteps): myMotorDriver.setMotorDirections(steps[nextStep][0],steps[nextStep][1]) nextStep += 1 if nextStep > 3: nextStep = 0 time.sleep(steptime)
Gratis uitgevoerd Stepper
Dit is een voorbeeld van het gebruik van de gratis running stepper functies. Er zijn een aantal dingen aan horloge uit voor
- De spoelen zijn niet aangesloten "op op M1 één op M2" zoals men zou verwachten.
- De snelheid arg is "achteruit", het is meer als een vertraging tussen stappen (en 0 is nog niet erg snel)
- De stepper wordt uitgevoerd in de achtergrond, zoals beloofd, maar wanneer de python stopt script, onderbreekt iets het (vandaar mijn "pers ieder toonsoort voor voortzetten …").
import time import pyupm_grovemd as upmGrovemd I2C_BUS = 0 I2C_ADDR = 0x0f # Instantiate an I2C Grove Motor Driver on I2C bus 0 myMotorDriver = upmGrovemd.GroveMD(I2C_BUS, I2C_ADDR) #start up as a stepper motor print "stepper clockwise" myMotorDriver.setStepperSteps(48*4) #time.sleep(1) myMotorDriver.enableStepper(0,0) #direction 0 , speed 2 #time.sleep(20) #myMotorDriver.enableStepper(1,2) #direction 0 , speed 2 #time.sleep(20) #print "Stopping motors" #myMotorDriver.enableStepper(upmGrovemd.GroveMD.STEP_DIR_CCW,0) #myMotorDriver.disableStepper() raw_input("Press any key to continue...")