Stap 13: Python Code om te rijden de steppers
Waarom dit doen in Python?
Het is mogelijk om te sturen de Grove I2C Motor Driver V1.3 een opdracht moet worden uitgevoerd van een stepper voor een opgegeven aantal stappen zonder te geven elke stap afzonderlijk, maar dit helpt ons niet, we willen weten precies wanneer elke stap gebeurt en wanneer een reeks stappen zijn voltooid, zodat wij de LED in- en uitschakelen op het juiste moment kunnen omzetten.
Als u wilt dat de free-running stepper kenmerken van dit bord en je motor is stuurprogramma alleen geladen met V1.2 als mijne was, dan u moet aan het upgraden van de firmware, zoals ik eerder in dit Instructable deed.
Ook als ik net Python.
Maar Python is niet realtime, u niet rijden motoren mee!
Dat is waar, en dat is niet waar. Het is dicht genoeg bij realtime voor dit doel. Als de stap tijden enigszins inconsistent zijn echt is het niet een big deal. Ik echter verzorgen processen uitgevoerd in draden, zodat de motoren kunnen gelijktijdig worden uitgevoerd en andere processen (zoals draaien in- en uitschakelen van de LED) zijn behandeld in draden, zodat ze niet de stepping tijd storen en dus ook de dynamiek van de LED-vergadering (die zou veroorzaken trillingen).
De Stepper-klasse
In Python ik heb gemaakt een stepper klasse waarin een paar variabelen over de huidige stand van de motoren worden opgeslagen
- stappen: deze array bevat de 8 individuele polariteit paren die deel van een volledige rotatie voor een half-intensivering motor uitmaken
- nextStep: dit is de index van de next step in de matrix moet worden gebruikt
- richting: slaan We de richting die de tekenreeks langer, dit in feite bepaalt of wij zijn intensivering vooruit of achteruit door de array.
class stepper: steps = [[2,2],[2,0],[2,1],[0,1],[1,1],[1,0],[1,2],[0,2]] nextStep = 0 direction = 1 #1 or -1 #can be inverted to invert motor direction stepCount = 0
De stappenmotor initialisatie functie is ingesteld van de GroveMD-stuurprogramma's. Zorg ervoor dat u de juiste I2C adres zoals deze is geconfigureerd op de board dip-schakelaars.
Neem nota van de "setMotorSpeeds", waarin de PWM van het motor-stuurprogramma. Voor steppers de PWM moet altijd 255 als actieve of 0 wanneer uitgeschakeld, doet geen afbreuk aan snelheid, de vertraging tussen stappen die wordt ingesteld.
def __init__(self, I2C_ADDR, I2C_BUS,direction): self.motorDriver = upmGrovemd.GroveMD(I2C_BUS, I2C_ADDR) self.motorDriver.setMotorSpeeds(255,255) time.sleep(0.05) self.direction=direction
De step()-functie neemt in één argument is waar of onwaar. Als het argument is waar vervolgens de motor stappen in de richting waarin de tekenreeks zal verlengen.
def step(self,lengthen): """ Take one step in either direction. Takes a boolean argument to indicate lengthen or shortening string """ if (lengthen): self.stepCount += 1 self.nextStep += self.direction else: self.stepCount -= 1 self.nextStep -= self.direction if self.nextStep > 7: self.nextStep = 0 if self.nextStep < 0: self.nextStep = 7 self.motorDriver.setMotorDirections(self.steps[self.nextStep][0],self.steps[self.nextStep][1]