Light Plotter with Intel Edison (5 / 16 steg)
Steg 5: Motorer och drivrutiner (Test med grundläggande Python)
Typer och källor till stegmotorer
Om du inte är bekant med stegmotorer, jag rekommenderar att läsa några online Introduktioner, detta instructable och denna Adafruit artikel är verkligen bra och tydlig.
Jag räddade min motorer ur gamla skrivare och en elektrisk typerwriter, scanners är ofta också en bra källa, laser-skrivare är inte.
Bipolära Stepper
Om motorn har 4 trådar sedan är det en bipolära motor och vi kan använda den. Mäta resistansen mellan varje av de fyra kablarna, hittar du två par, dessa är spolarna.
Unipolär
Om motorn har 6 trådar de representerar slutet på och i mitten av de två spolarna. Mått mellan alla kombinationer av sex trådarna, det blir 4 lågt motstånd par (halva ringar eller rullar) och två av två gånger de (full spolarna). Vi vill använda två full spolarna i serien, så leta efter de två största motstånd par.
Anslutningar
Som nämnts i det föregående steget, om du driva motor styrelser externt, se till att ta bort bygeln J4 från I2C förare ombord.
Ansluta spolarna motors styrelse, kan du använda rubriken 4-pin eller de två skruvplintar, de är direkt anslutna till varandra.
Om du använder min kod, en spole går över M1 / M1- och de andra går över M2 / M2-. Om du använder Grove drivrutiner då, av någon bisarr anledning, en spole går till M1 / M2 + och den andra går till M2 / M2-.
Aktuella spänningsgränser
Läst Grove Wiki eller databladet för den L298N som jag har bifogat berättar att h-bridge chip har en nuvarande gräns på 2A per kanal och en ingångsspänningens intervall mellan 6-15V
Motståndet av spolarna bestämmer hur mycket ström kan flöda genom motorerna.
Nuvarande = spänning/motstånd
Jag först provade några 60 ohm motorer vid 12V (0.2A), men de var inte producerar tillräckligt vridmoment. Sedan lyckades jag hitta några 4,8 ohm motorer, 12V skulle har dragit 2.5A som var för mycket kontinuerlig ström, så jag sänkte strömförsörjningen på motorerna till 5V vilket resulterar i en bekväm 1A rita med bra vridmoment.
Du måste också se till att strömförsörjningen du använda att driva motor styrelser kan hantera både motor toppströmmen samtidigt.
Kylning
L298N chip kan bli ganska varm när du arbetar nära sina nuvarande gränser, så bifoga en kylfläns är en bra idé. Jag hade några fans som bärgades från gamla elektronik, så jag använde dem till keeep motor förare coola.
Steppers med mycket lågt motstånd (som den < 10 ohm motorer jag använde) drivs med ström-begränsa kretsar (kallas "hackar"), så de kommer att få ganska varmt i denna fortlöpande nuvarande läge, men min överlevde, din antall Maj variera.
Ange adresser motor drivrutiner
Ange adresser på motor förare (de måste vara olika). Jag sätta min enligt beskrivningarna i wikin och valde "0x0a" och "0x0f"
Fler anteckningar
- Du bör kunna köra kommandot "i2cdetect -y - r 6" från Edison terminal att se anslutna I2C enheter, men jag stött på några buggar när jag försökte att som kan eller inte kan fastställas när du läser detta.
- Kontrollera att du har de senaste MRAA biblioteken installerat (jag följde denna guide)
- Endast 100khz I2C stöds stöds av Grove I2C Motor förare (detta är inte ett problem för vårt projekt, det kan vara ett problem när du försöker använda dem tillsammans med andra moduler.
- Modulen ger inte någon telemetri eller status - det accepterar endast I2C kommandon för dess olika operationer. Det är därför jag inte använda den fri-running stepper funktion, eftersom jag inte vet när de hade avslutat stegen.
Användbara program bibliotek dokument
Intellekten sida på Grove I2C motorn förarens (kod exempel, men inte för steppers)
Testar program: Python snuttar
Det enklaste sättet att testa dessa kodavsnitt är:
- Logga in med SSH via putty
- Ange kommandot "vi test.py" att skapa en ny fil som heter "test.py" och öppna den för redigering med texteditor "vi"
- Tryck på "i" för att ange infogningsläge
- Markera och kopiera koden beckasin på din PC
- Högerklicka i fönstret SSH för att klistra in koden
- Tryck på escape
- typ ": wq" att skriva och avsluta (eller ": q!" vill avsluta utan att spara ändringar)
- Kör skriptet med kommandot "python test.py"
Manuell kliva
Denna kodsträng är lite av en ful hacka, men det fungerar för att testa stegmotorer från Edison via Python. Det kliver helt enkelt igenom fyra steg, ändra polariteten på spolarna manuellt. Det inte använder gratis-running stepper funktioner. Detta är hur jag hamnade göra det i slutet, men jag har ökat antalet steg till åtta (halv kliva).
Importera tid
importera pyupm_grovemd som upmGrovemd
I2C_BUS = upmGrovemd.GROVEMD_I2C_BUS
I2C_ADDR = 0X0F
# Instansiera en I2C Grove Motor Driver på I2C buss 0
myMotorDriver = upmGrovemd.GroveMD (I2C_BUS, I2C_ADDR)
myMotorDriver.setMotorSpeeds (255, 255)
Time.Sleep(0.5)
steg = [[0,1], [2,0], [0,2], [1,0]]
nextStep = 0
steptime = 0,05
numSteps = 48
samtidigt sant:
för steg i range(0,numSteps):
myMotorDriver.setMotorDirections(steps[nextStep][0],steps[nextStep][1])
nextStep += 1
om nextStep > 3:
nextStep = 0
Time.Sleep(steptime)
Lösspringande Stepper
Detta är ett exempel på hur du använder funktionerna gratis rinnande stepper. Det finns några saker att se upp för
- Spolarna är inte ansluten "på på M1 en på M2" som man kan förvänta sig.
- Speed arg är "bakåt", det är mer som en fördröjning mellan steg (och 0 är fortfarande inte mycket snabb)
- Nummerlistan körs i bakgrunden som utlovat, men när python skript hållplatser, något avbryter det (därav min "pressa någon nyckel till fortsätta...").
Importera tid
importera pyupm_grovemd som upmGrovemd
I2C_BUS = 0
I2C_ADDR = 0X0F
# Instansiera en I2C Grove Motor Driver på I2C buss 0
myMotorDriver = upmGrovemd.GroveMD (I2C_BUS, I2C_ADDR)
#start upp som en stegmotor
skriva ut "stepper medurs"
myMotorDriver.setStepperSteps(48*4)
#time.sleep(1)
myMotorDriver.enableStepper(0,0) #direction 0, hastighet 2
#time.sleep(20)
#myMotorDriver.enableStepper(1,2) #direction 0, hastighet 2
#time.sleep(20)
#print "Stoppa motorer"
#myMotorDriver.enableStepper(upmGrovemd.GroveMD.STEP_DIR_CCW,0)
#myMotorDriver.disableStepper()
raw_input ("Tryck någon nyckel till fortsätta...")