umstellen auf pigpio

This commit is contained in:
2021-03-05 15:09:21 +01:00
parent e1b7352d91
commit 56dfc2251e
5 changed files with 141 additions and 88 deletions

View File

@@ -1,21 +1,16 @@
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
freq = 800
freq_halten = 30000
cyc_halten = 12
cyc_halten = 20
pins_out = {
'kamera' : {'nr' : 2, 'name' : 'Relais, Kamera', 'state' : GPIO.HIGH},
'encoder' : {'nr' : 3, 'name' : 'Relais, Encoder', 'state' : GPIO.HIGH}
'kamera' : {'nr' : 2, 'name' : 'Relais, Kamera', 'state' : True},
'encoder' : {'nr' : 3, 'name' : 'Relais, Encoder', 'state' : True}
}
pins_in = {
'endschalter1' : {'nr' : 23, 'name' : 'Endschalter, Motor 1', 'state' : GPIO.HIGH},
'endschalter2' : {'nr' : 26, 'name' : 'Endschalter, Motor 2', 'state' : GPIO.HIGH},
'endschalter3' : {'nr' : 25, 'name' : 'Endschalter, Motor 3', 'state' : GPIO.HIGH}
'endschalter1' : {'nr' : 23, 'name' : 'Endschalter, Motor 1', 'state' : True},
'endschalter2' : {'nr' : 26, 'name' : 'Endschalter, Motor 2', 'state' : True},
'endschalter3' : {'nr' : 25, 'name' : 'Endschalter, Motor 3', 'state' : True}
}
m1_a1 = 17

View File

@@ -1,11 +1,12 @@
from src.einstellungen import *
import RPi.GPIO as GPIO
#import RPi.GPIO as GPIO
import time
import pigpio
import threading
import math
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
#GPIO.setmode(GPIO.BCM)
#GPIO.setwarnings(False)
class motor():
@@ -31,32 +32,48 @@ class motor():
self.pwm4 = 0
def start(self):
GPIO.setup(self.sp1, GPIO.OUT)
GPIO.setup(self.sp2, GPIO.OUT)
GPIO.setup(self.sp3, GPIO.OUT)
GPIO.setup(self.sp4, GPIO.OUT)
pi.set_mode(self.sp1, pigpio.OUTPUT)
pi.set_mode(self.sp2, pigpio.OUTPUT)
pi.set_mode(self.sp3, pigpio.OUTPUT)
pi.set_mode(self.sp4, pigpio.OUTPUT)
#GPIO.setup(self.sp1, GPIO.OUT)
#GPIO.setup(self.sp2, GPIO.OUT)
#GPIO.setup(self.sp3, GPIO.OUT)
#GPIO.setup(self.sp4, GPIO.OUT)
self.pwm1 = GPIO.PWM(self.sp1, self.freq)
self.pwm1.start(0)
pi.set_PWM_range(self.sp1, 100)
pi.set_PWM_range(self.sp2, 100)
pi.set_PWM_range(self.sp3, 100)
pi.set_PWM_range(self.sp4, 100)
pi.set_PWM_frequency(self.sp1, self.freq)
pi.set_PWM_dutycycle(self.sp1, 0)
#self.pwm1 = GPIO.PWM(self.sp1, self.freq)
#self.pwm1.start(0)
pi.set_PWM_frequency(self.sp2, self.freq)
pi.set_PWM_dutycycle(self.sp2, 0)
self.pwm2 = GPIO.PWM(self.sp2, self.freq)
self.pwm2.start(0)
#self.pwm2 = GPIO.PWM(self.sp2, self.freq)
#self.pwm2.start(0)
self.pwm3 = GPIO.PWM(self.sp3, self.freq)
self.pwm3.start(0)
pi.set_PWM_frequency(self.sp3, self.freq)
pi.set_PWM_dutycycle(self.sp3, 0)
#self.pwm3 = GPIO.PWM(self.sp3, self.freq)
#self.pwm3.start(0)
if self.halten == 1:
self.pwm4 = GPIO.PWM(self.sp4, self.freq_halten)
self.pwm4.start(cyc_halten)
pi.set_PWM_frequency(self.sp4, self.freq_halten)
pi.set_PWM_dutycycle(self.sp4, cyc_halten)
#self.pwm4 = GPIO.PWM(self.sp4, self.freq_halten)
#self.pwm4.start(cyc_halten)
else:
self.pwm4 = GPIO.PWM(self.sp4, self.freq)
self.pwm4.start(0)
def stop(self):
self.pwm1.stop()
self.pwm2.stop()
self.pwm3.stop()
self.pwm4.stop()
pi.set_PWM_frequency(self.sp4, self.freq)
pi.set_PWM_dutycycle(self.sp4, 0)
#self.pwm4 = GPIO.PWM(self.sp4, self.freq)
#self.pwm4.start(0)
def vorwaerts(self, schritte, eichen=0):
ges_schritte = schritte * 8
@@ -69,7 +86,8 @@ class motor():
temp_t2 = self.t2
if self.halten == 1:
self.pwm4.ChangeFrequency(self.freq)
pi.set_PWM_frequency(self.sp4, self.freq)
#self.pwm4.ChangeFrequency(self.freq)
for i in range(int(schritte)):
if self.pos >= self.schritte_max:
@@ -78,22 +96,25 @@ class motor():
self.pos += 1
temp_pos = i * 8
einzelschritt(self.pwm1, 1, ges_schritte, temp_pos, temp_t1, temp_t2)
einzelschritt(self.pwm4, 0, ges_schritte, temp_pos + 1, temp_t1, temp_t2)
einzelschritt(self.pwm2, 1, ges_schritte, temp_pos + 2, temp_t1, temp_t2)
einzelschritt(self.pwm1, 0, ges_schritte, temp_pos + 3, temp_t1, temp_t2)
einzelschritt(self.pwm3, 1, ges_schritte, temp_pos + 4, temp_t1, temp_t2)
einzelschritt(self.pwm2, 0, ges_schritte, temp_pos + 5, temp_t1, temp_t2)
einzelschritt(self.pwm4, 1, ges_schritte, temp_pos + 6, temp_t1, temp_t2)
einzelschritt(self.pwm3, 0, ges_schritte, temp_pos + 7, temp_t1, temp_t2)
einzelschritt(self.sp1, 1, ges_schritte, temp_pos, temp_t1, temp_t2)
einzelschritt(self.sp4, 0, ges_schritte, temp_pos + 1, temp_t1, temp_t2)
einzelschritt(self.sp2, 1, ges_schritte, temp_pos + 2, temp_t1, temp_t2)
einzelschritt(self.sp1, 0, ges_schritte, temp_pos + 3, temp_t1, temp_t2)
einzelschritt(self.sp3, 1, ges_schritte, temp_pos + 4, temp_t1, temp_t2)
einzelschritt(self.sp2, 0, ges_schritte, temp_pos + 5, temp_t1, temp_t2)
einzelschritt(self.sp4, 1, ges_schritte, temp_pos + 6, temp_t1, temp_t2)
einzelschritt(self.sp3, 0, ges_schritte, temp_pos + 7, temp_t1, temp_t2)
#print(str(self.pos))
if self.halten == 1:
self.pwm4.ChangeFrequency(self.freq_halten)
self.pwm4.ChangeDutyCycle(self.cyc_halten)
pi.set_PWM_frequency(self.sp4, self.freq_halten)
pi.set_PWM_dutycycle(self.sp4, cyc_halten)
#self.pwm4.ChangeFrequency(self.freq_halten)
#self.pwm4.ChangeDutyCycle(self.cyc_halten)
else:
self.pwm4.ChangeDutyCycle(0)
pi.set_PWM_dutycycle(self.sp4, 0)
#self.pwm4.ChangeDutyCycle(0)
def rueckwaerts(self, schritte, eichen=0):
ges_schritte = schritte * 8
@@ -106,10 +127,12 @@ class motor():
temp_t2 = self.t2
if self.halten == 1:
self.pwm4.ChangeFrequency(self.freq)
pi.set_PWM_frequency(self.sp4, self.freq)
#self.pwm4.ChangeFrequency(self.freq)
for i in range(int(schritte)):
if GPIO.input(self.endschalter) == GPIO.LOW:
#if GPIO.input(self.endschalter) == GPIO.LOW:
if pi.read(self.endschalter) == 0:
print('Endschalter ' + self.name)
self.pos = 0
break
@@ -117,25 +140,29 @@ class motor():
self.pos -= 1
temp_pos = i * 8
einzelschritt(self.pwm3, 1, ges_schritte, temp_pos, temp_t1, temp_t2)
einzelschritt(self.pwm4, 0, ges_schritte, temp_pos + 1, temp_t1, temp_t2)
einzelschritt(self.pwm2, 1, ges_schritte, temp_pos + 2, temp_t1, temp_t2)
einzelschritt(self.pwm3, 0, ges_schritte, temp_pos + 3, temp_t1, temp_t2)
einzelschritt(self.pwm1, 1, ges_schritte, temp_pos + 4, temp_t1, temp_t2)
einzelschritt(self.pwm2, 0, ges_schritte, temp_pos + 5, temp_t1, temp_t2)
einzelschritt(self.pwm4, 1, ges_schritte, temp_pos + 6, temp_t1, temp_t2)
einzelschritt(self.pwm1, 0, ges_schritte, temp_pos + 7, temp_t1, temp_t2)
einzelschritt(self.sp3, 1, ges_schritte, temp_pos, temp_t1, temp_t2)
einzelschritt(self.sp4, 0, ges_schritte, temp_pos + 1, temp_t1, temp_t2)
einzelschritt(self.sp2, 1, ges_schritte, temp_pos + 2, temp_t1, temp_t2)
einzelschritt(self.sp3, 0, ges_schritte, temp_pos + 3, temp_t1, temp_t2)
einzelschritt(self.sp1, 1, ges_schritte, temp_pos + 4, temp_t1, temp_t2)
einzelschritt(self.sp2, 0, ges_schritte, temp_pos + 5, temp_t1, temp_t2)
einzelschritt(self.sp4, 1, ges_schritte, temp_pos + 6, temp_t1, temp_t2)
einzelschritt(self.sp1, 0, ges_schritte, temp_pos + 7, temp_t1, temp_t2)
#print(str(self.pos))
if self.halten == 1:
self.pwm4.ChangeFrequency(self.freq_halten)
self.pwm4.ChangeDutyCycle(self.cyc_halten)
pi.set_PWM_frequency(self.sp4, self.freq_halten)
pi.set_PWM_dutycycle(self.sp4, cyc_halten)
#self.pwm4.ChangeFrequency(self.freq_halten)
#self.pwm4.ChangeDutyCycle(self.cyc_halten)
else:
self.pwm4.ChangeDutyCycle(0)
pi.set_PWM_dutycycle(self.sp4, 0)
#self.pwm4.ChangeDutyCycle(0)
def eichen(self):
if GPIO.input(self.endschalter) == GPIO.LOW:
#if GPIO.input(self.endschalter) == GPIO.LOW:
if pi.read(self.endschalter) == 0:
self.vorwaerts(10, 1)
self.rueckwaerts(self.schritte_max, 1)
@@ -158,10 +185,12 @@ def einzelschritt(spule, status, ges_schritte, schritt, t1, t2):
if status == 1:
for i in range(0, 91, 5):
dc = round(math.sin(math.radians(i)) * 100, 0)
spule.ChangeDutyCycle(dc)
pi.set_PWM_dutycycle(spule, dc)
#spule.ChangeDutyCycle(dc)
time.sleep(t)
else:
for i in range(0, 91, 5):
dc = round(math.cos(math.radians(i)) * 100, 0)
spule.ChangeDutyCycle(dc)
pi.set_PWM_dutycycle(spule, dc)
#spule.ChangeDutyCycle(dc)
time.sleep(t)