Schönen Guten Abend,
Ich arbeite momentan an einer Linearführung die per Schrittmotor und Riemen auf Knopfdruck nach vorne bis zu einem Induktiven Näherungssensor(INS) fährt und danach wieder auf Anfang(auch bis zu einem INS) zurück fährt. Das ganze hat auch noch ein UI das primär aber mit dieser "Achse" nichts zu tun hat. Die Fahrt bis zum Ende und zurück auf Anfang funktioniert einwandfrei. Was ich nun aber gerne noch einbauen möchte ist eine Art Notaus Schalter mit dem man die Fahrt abbrechen kann und der Wagen der Linearführung langsam zurück zum Anfang fährt.
Momentan ist es so das ich per PWM bis zum hintern INS fahre und dann die nächste Funktion startet die wieder zum Anfang fährt. Da es mehrere Funktionen sind habe ich diese in einer Liste die nacheinander abgearbeitet wird:
def A2Fahrt(): # Wird per Hardware Taster aufgerufen
GUIsperren() # Sperrt das User Interface
A2Fahrt1() # Fährt nach vorne bis zum INS
A2Fahrt2() # Fährt nach hinten bis zum INS am Anfang
GUIentsperren() # Entsperrt das User Interface
def A2Fahrt1():
GPIO.output(A2M2, False)
GPIO.output(A2M, True)
GPIO.output(A2D, True)# Direction an
pi.hardware_PWM(A2S, 1450, 500000)
time.sleep(1)
GPIO.output(A2M, False)
GPIO.output(A2M2, True)
pi.hardware_PWM(A2S, 450, 500000)
time.sleep(0.25)
print("warte auf Sensor INS")
while True:
if (GPIO.input(1) == False):
pi.hardware_PWM(A2S, 550,500000)
else:
pi.hardware_PWM(A2S,0,0)
time.sleep(0.2)
pi.hardware_PWM(A2S, 250, 250000) #100
time.sleep(0.8) #0,4
pi.hardware_PWM(A2S,0,0)
time.sleep(0.5)
break
def A2Fahrt2():
GPIO.output(12, False)# Direction aus
GPIO.output(A2M2, True)#Microstepping an
pi.hardware_PWM(A2S, 650, 500000)
time.sleep(0.5)
pi.hardware_PWM(A2S,0,0)
time.sleep(0.1)
#-----------------------andere Richtung?
GPIO.output(A2M2, False)
GPIO.output(A2M, True)#Microstepping aus
time.sleep(0.1)
pi.hardware_PWM(A2S, 1450, 500000)
time.sleep(0.9)
pi.hardware_PWM(A2S, 650, 500000)
time.sleep(0.3)
while True:
if (GPIO.input(21) == False):
GPIO.output(A2M, False)
GPIO.output(A2M2, True)#Microstepping an
pi.hardware_PWM(A2S, 550, 500000)
else:
pi.hardware_PWM(A2S, 0, 0)
GPIO.output(A2M2, False)#Microstepping aus
GPIO.output(A2M, True)
break
Alles anzeigen
Hat jemand eine Idee wie ich das Ganze am besten realisieren könnte? Einfach den Strom für den Motor kappen möchte ich nicht, da die Software ja dann noch wartet bis der INS am Ende auf den Wagen wartet. Eine Idee von mir wäre noch vor jedem neu generierten PWM Signal ein If Statement einzufügen das checkt ob der Notaus Taster betätigt wurde. Das glaube ich aber, selbst wenn es halbwegs funktioniert nicht die richtige Lösung.
Ich hoffe jemand kann mir helfen oder mich in die richtige Richtung leiten