Hallo zusammen,
mein Ziel ist es ein Schrittmotor anzusteuern, bei dem ich entweder Geschwindigkeit oder Schritte vorgebe!
Meine bisherigen Versuchen sehen jedoch nicht so toll aus.
Kurz zur Hardware:
-Raspberry Pi 2
-Motortreiberboard L298N (http://tronixlabs.com.au/news/tutorial-…2a-and-arduino/)
-Schrittmotor 103H7123-0440 (Bipolar/Unipolar; 0.83Nm; 1,8°;2A pro Phase; 3,2Ohm pro Windung)(Datenblatt im Anhang)
Verdrahtung:
Vom Pi:
Mein Raspberry versorgt das L298N mit 5V Logikspannung, ebenso habe ich Ground vom Pi an das L298N gelegt.
Zwei GPIOs steuern Enable A und Enable B das L298N.
Desweitern habe ich 4 GPIOs die das L298N ansteuern.
Vom L298N:
vier Outputs die auf die zwei spulen des Motors gehen.
Externe Netzgerät:
Das externe Netzgerät versorgt das Modul L298N mit powersupply für den Motor.
D.h. ich habe 12V und wieder 0V. Die 0V sind mit dem Ground des Pi gebrückt damit ich daselbe Potential habe...
Einstellung des Netzgerätes:
Da meine Spule 1,6 Ohm hat und der Phasenstrom und das L298N max 2 A vertragen stelle ich die Spannung wie folgt ein:
U = R * I = 3,2Ohm * 1,8A = 5,7V
D.h. ich stell mein Netzgerät auf 5,7 V!
Folgendes ist mein Test Code der nur kurz vor und wieder zurück dreht:
#!/usr/bin/python
import RPi.GPIO as GPIO
from time import sleep
# Definition der Pins am Raspberry Pi
enableA = 29 #GPIO 5 --> schwarz
enableB = 31 #GPIO 6 --> weiß
a1= 11 #GPIO 17 --> braun
a2 = 13 #GPIO 27 --> blau
b1 = 16 #GPIO 23 --> grün
b2 = 18 #GPIO 24 --> gelb
# Definitionen Time,usw.
delay = 0.05 #Einstellung Geschwindigkeit
steps = 500 #Einstellung Schritte/ Weg
# GPIO Leiste auf Pins bezogen
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
# Pins als Ausgaenge definieren
GPIO.setup(enableA, GPIO.OUT)
GPIO.setup(enableB, GPIO.OUT)
GPIO.setup(a1, GPIO.OUT)
GPIO.setup(a2, GPIO.OUT)
GPIO.setup(b1, GPIO.OUT)
GPIO.setup(b2, GPIO.OUT)
# Startwert der Ausgänge deklarieren
GPIO.output(enableA, True)
GPIO.output(enableB, True)
def setup_Step(s1, s2, s3, s4):
GPIO.output(a1, s1)
GPIO.output(a2, s2)
GPIO.output(b1, s3)
GPIO.output(b2, s4)
for i in range(0, steps):
setup_Step(0,1,1,0)
sleep(delay)
setup_Step(1,0,1,0)
sleep(delay)
setup_Step(1,0,0,1)
sleep(delay)
setup_Step(0,1,0,1)
sleep(delay)
for i in range(0, steps):
setup_Step(0,1,0,1) #a1:blau a2:orange b1:gelb b2: rot
sleep(delay)
setup_Step(1,0,0,1)
sleep(delay)
setup_Step(1,0,1,0)
sleep(delay)
setup_Step(0,1,1,0)
sleep(delay)
GPIO.output(enableA, False)
GPIO.output(enableB, False)
GPIO.cleanup()
Alles anzeigen
Nun zu meinem Problem:
Sofern ich das Programm laufen lasse mit exakt diesem "delay" von 0,05s. D.h. Der Motor beansprucht ca. 1,8A und hat ein sehr starkes Drehmoment!(Die Welle kann nicht von Hand gestoppt werden!). Sobald ich aber dieses "delay" verringere nimmt der Motor drastisch an Drehmoment und der aufgenommenen Stromstärke rapide ab.Drehzahl ist dabei ca. 5U/min. Bei einem "delay" von 0,005s dreht der Motor noch hat jedoch nur eine Stromaufnahme von ca. 100mA (Was ich nicht verstehe) und man kann ihn mühelos mit der Hand festhalten!! Drehzahl ca. 50U/min. Wenn ich das "delay" noch kleiner mache dreht der Motor nicht mehr, man hört jedoch wie die spulen angesteuert werden.
Meine Fragen:
1. Ich verstehe nicht warum ich die Drehzahl nicht durch das delay ändern kann ohne das ich Drehmoment verliere?
2. Genauso seltsam finde ich das der Motor bei 0,001s delay gar nicht mehr dreht alle Schritte verliert!????
Mögliche Fehler:
- Ich habe mal die Signale (quasi das erzeugte "PWM" Signal mit dem delay direkt am Pi und am Ausgang des L298N über ein Oszi angeschaut. Die verlaufen sehr ordentlich, sodass ich das als fehler ausschließen kann.
- Motor, Pi und Treiber L298N habe ich ersetzt, sollte also auch keine Ursache sein.
Ich wäre super dankbar wenn mir jmd weiterhelfen kann!!