Seite 1 von 1

Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 14:37
von Sigurd
Hallo,
ich habe vor kurzem angefangen mit Python3 zu arbeiten. Mit meiner Datei habe ich versucht einen Schrittmotor anzusteuern, was auch funktioniert hat. Jetzt müsste ich nur noch ein while Loop einführen , weiß dort aber nicht wie ich dies machen muss damit es auch funktioniert.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 15:09
von __deets__
Und ohne den Code zu sehen, wissen wir das auch nicht.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 15:49
von Sigurd
wie kann ich meine datei anhängen?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 15:54
von __deets__
Du kopierst den Inhalt hier rein, und benutzt die Code-Tags (</>-Knopf im vollstaendigen Editor) damit der Code vernuenftig formatiert und lesbar ist.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 15:58
von Sigurd
Hier der code:

import pigpio
import time

pi = pigpio.pi()
pi.set_mode(18, pigpio.OUTPUT)
pi.set_mode(17, pigpio.OUTPUT)
pi.set_mode(27, pigpio.OUTPUT)
pi.set_mode(22, pigpio.OUTPUT)

while True:
pi.write(18, 1)
time.sleep(0.01)
pi.write(18, 0)
time.sleep(0.01)
pi.write(17, 1)
time.sleep(0,01)
pi.write(17, 0)
time.sleep(0,01)
pi.write(27, 1)
time.sleep(0,01)
pi.write(27, 0)
time.sleep(0.01)
pi.write(22, 1)
time.sleep(0,01)
pi.write(22, 0)
time.sleep(0,01)

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 16:00
von __deets__
Na das mit den Code-Tags hat ja schonmal nicht geklappt.

Und da ist doch ein while-Loop. Was also genau passt nicht?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 16:16
von Sigurd
ich würde gerne wissen wie ich bestimmen kann wie oft ich das ganze durchlaufen lasse

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 16:22
von __deets__
Indem du statt while eine for-Schleife benutzt, und die macht das ganze dann eben n Schritte. Dann wuerde man das ganze natuerlich so programmieren, dass die einzelnen Schritte erzeugt werden, so das man nicht nur immer eine volle Sequenz durchstiefelt.

Aber das Thema ist ja nun schon wirklich gut abgehangen, da findet man ja nun auch viel vorherigen Code, zB https://github.com/stripcode/pigpio-stepper-motor (ist etwas aelter). Daran wuerde ich mich orienteren.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 16:25
von __blackjack__
@Sigurd: Bei solchen grundlegenden Fragen würde ich empfehlen ein Grundlagentutorial durchzuarbeiten. In der Python-Dokumentation gibt es beispielsweise eines das man mal gelesen haben sollte.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Dienstag 30. Januar 2024, 16:39
von Sigurd
Danke für die schnellen antworten bei weiteren fragen melde ich mich noch einmal

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 11:25
von Sigurd
Ich habe das jetzt passend umgeschrieben, jetzt kommt meine nächste frage, wie lasse ich meine Datei den Winkel in schritte umrechnen, sodass ich den winkel eingeben kann und dann die passende anzahl an schritten gemacht wird.

Hier mein jetziger Code:

import pigpio
import time

pi = pigpio.pi()
pi.set_mode(18, pigpio.OUTPUT)
pi.set_mode(17, pigpio.OUTPUT)
pi.set_mode(27, pigpio.OUTPUT)
pi.set_mode(22, pigpio.OUTPUT)

for i in range(256):
pi.write(18, 1)
time.sleep(0.01)
pi.write(18, 0)
time.sleep(0.01)
pi.write(17, 1)
time.sleep(0.01)
pi.write(17, 0)
time.sleep(0.01)
pi.write(27, 1)
time.sleep(0.01)
pi.write(27, 0)
time.sleep(0.01)
pi.write(22, 1)
time.sleep(0.01)
pi.write(22, 0)
time.sleep(0.01)

for i in range(256):
pi.write(22, 1)
time.sleep(0.01)
pi.write(22, 0)
time.sleep(0.01)
pi.write(27, 1)
time.sleep(0.01)
pi.write(27, 0)
time.sleep(0.001)
pi.write(17, 1)
time.sleep(0.01)
pi.write(17, 0)
time.sleep(0.01)
pi.write(18, 1)
time.sleep(0.01)
pi.write(18, 0)
time.sleep(0.01)

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 11:44
von __deets__
Und taeglich gruesst das Murmeltier: immer noch keine Code-Tags. Ist das wirklich so schwer?

Fuer einen gegebenen Winkel muss man einfach nur

Code: Alles auswählen

schritte = int(winkel / 360 * SCHRITTZAHL_PRO_UMDREHUNG)
benutzen.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 12:10
von Sirius3
Statt hier zigmal den selben Code zu kopieren, würde man Funktionen benutzen. Das Programm wird dadurch strukturierter und besser zu Lesen und zu Warten.
Statt magische Nummern für Pins zu benutzen, definiert man sich einmal Konstanten.

Code: Alles auswählen

import pigpio
import time

MOTOR_PINS = [18, 17, 27, 22]

def initialize():
    pi = pigpio.pi()
    for pin in MOTOR_PINS:
        pi.set_mode(pin, pigpio.OUTPUT)  
    return pi

def step(pi, motor_pins, amount=256, reverse=False)
    for _ in range(amount):
        pins = reversed(motor_pins) if reverse else motor_pins
        for pin in pins:
            pi.write(pin, 1)
            time.sleep(0.01)
            pi.write(pin, 0)
            time.sleep(0.01)

def main():
    pi = initialize()
    step(pi, MOTOR_PINS)
    step(pi, MOTOR_PINS, reverse=True)

if __name__ == "__main__":
    main()

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 13:15
von Sigurd
Hat funktioniert, aber wie mache ich es so, dass das Ergebnis der Rechnung automatisch eingesetzt wird, sodass der Motor automatisch so viele Schritte wie ausgerechnet macht?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 17:32
von Sigurd
ok habe es selber herausgefunden, aber kann mir jemand sagen wie man funktionen kapselt?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Mittwoch 7. Februar 2024, 17:38
von Sirius3
Was meinst Du damit? Funktionen sind die Kapselung.

Re: Schrittmotor ansteuern mit Python3

Verfasst: Donnerstag 8. Februar 2024, 10:20
von Sigurd
Wie kann ich hier
schritte = int(360 / 360 * 516)
ruekwaertsschritte = int(180 / 360 * 516)
eine variable angeben sodass diese mit dem Rest gekapselt wird?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Donnerstag 8. Februar 2024, 10:26
von __deets__
Habe ich doch oben geschrieben, mit "winkel"?

Re: Schrittmotor ansteuern mit Python3

Verfasst: Donnerstag 8. Februar 2024, 11:05
von Sigurd
Und wie kapsel ich jetzt die Berechnungen mit den dazugehörigen Funktionen?

import pigpio
import time

pi = pigpio.pi()
pi.set_mode(18, pigpio.OUTPUT)
pi.set_mode(17, pigpio.OUTPUT)
pi.set_mode(27, pigpio.OUTPUT)
pi.set_mode(22, pigpio.OUTPUT)

winkel = 180 * 5
winkel_2 = 180 * 2
schritte = int(winkel / 360 * 516)
ruekwaertsschritte = int(winkel_2 / 360 * 516)

for i in range(schritte):
pi.write(18, 1)
time.sleep(0.01)
pi.write(18, 0)
time.sleep(0.01)
pi.write(17, 1)
time.sleep(0.01)
pi.write(17, 0)
time.sleep(0.01)
pi.write(27, 1)
time.sleep(0.01)
pi.write(27, 0)
time.sleep(0.01)
pi.write(22, 1)
time.sleep(0.01)
pi.write(22, 0)
time.sleep(0.01)

for i in range(ruekwaertsschritte):
pi.write(22, 1)
time.sleep(0.01)
pi.write(22, 0)
time.sleep(0.01)
pi.write(27, 1)
time.sleep(0.01)
pi.write(27, 0)
time.sleep(0.001)
pi.write(17, 1)
time.sleep(0.01)
pi.write(17, 0)
time.sleep(0.01)
pi.write(18, 1)
time.sleep(0.01)
pi.write(18, 0)
time.sleep(0.01)

Re: Schrittmotor ansteuern mit Python3

Verfasst: Donnerstag 8. Februar 2024, 11:52
von Sirius3
Du mußt nur das Argument übergeben, das die Anzahl der for-Schleifen-Durchläufe bestimmt.

Code: Alles auswählen

    step(pi, MOTOR_PINS, schritte)
    step(pi, MOTOR_PINS, rueckwärtsschritte, reverse=True)
Und natürlich hat das auch seinen Sinn, dass __deets__ eine Konstante eingeführt hat.

Code: Alles auswählen

SCHRITTZAHL_PRO_UMDREHUNG = 516

def rotate_motor(pi, motor_pins, angle):
    step(pi, motor_pins, abs(angle) * SCHRITTZAHL_PRO_UMDREHUNG  // 360, reverse=angle < 0)

...
rotate_motor(pi, MOTOR_PINS, winkel)
rotate_motor(pi, MOTOR_PINS, -winkel2)