Raspberry Pi PWM über Anzahl an Zyklen, nicht über Zeitspanne?
Hallo zusammen
Ich habe gerade ein Projekt mit meinem Raspberry Pi Modell 3B bei welchem ich Schrittmotoren mit 1600 Steps / Umdrehung präzise betreiben muss. aber halt auf den Step genau und das ganze über mehrere Sekunden. Ich verwende grundsätzlich dafür PWM, nur habe ich bei meiner bisherigen Recherche nur PWM Module gefunden, bei denen alles über die Zeit gesteuert wird:
from RPi import GPIO
import time
GPIO.setup(18, GPIO.OUT)
p = GPIO.PWM(18, 1000)
p.start(50)
time.sleep(5)
p.stop()
Damit wären logischerweise 5000 Steps getan. Nun scheint mir diese Lösung recht ungenau, weil nur eine Verzögerung bzw ungenauigkeit von nur 1 ms ist ein Step zu viel. Ein Step an sich dürfte nicht weiter schlimm sein, doch es könnte sein, dass sich das aufsummiert. Das wäre ein Problem.
Gibt es eine Library, welche PWM mit einer hohen Präzision durchführt und noch so performant ist, dass theoretisch 2 channels mit bis zu 6400 Hz (eigentlich immer deutlich weniger, so in etwa 1000 Hz im Normalbetrieb) betrieben werden können?
LG
1 Antwort
Schrittmotoren mit PWM klingt nicht richtig. Schrittmotoren sind ja genau dafür, für präzise Positionierung, gemacht, und das durch kontrollierte (gezählte) Ansteuerung mit Pulsfolgen. Dafür benötigt es kein PWM, sondern einen Puls für einen weiteren Mikroschritt. Damit pulst du auch nicht für eine bestimmte Zeit, sondern durch die Anzahl Pulse - über welchem Zeitraum das geschieht, ist dann nicht so relevant.
PWM verwendest du eher für Motoren, die einfach nur ... drehen, bevorzugt solche mit Rückmeldung wann eine komplette Drehung erfolgt ist, womit dann durch Veränderug des PWM duty cycles eine Drehzahlregelung realisiert wird.
Möchtest du mit einem Stepper 5000 Schritte, dann schickst du dem halt 5000 x Anzahl Mikroschritte Pulse. Die Zeit zwischen derAnzahl Pulse wählst du so, dass die gewünschte Rotationsrate erreicht wird.
Mittels den programmierbaren timern/countern solltest du einen beträchtlichen Teil der Aktionen der Hardware überlassen können. Im Konzept wäre das: Anzahl Pulse, Zeit zwischen zwei Pulsen (also also Drehzahl), und Pulsformung selbst (richtige Pulsänge) könnten vermutlich alle von programmierbaren timern/countern im Controller übernommen werden - aber zuerst würde ich nach Verwendbarkeit eines Stepper drivers schauen, diese haben schließlich genau diese Aufgabe, Ansteuerung von Schrittmotoren einer darauf spezialisierten Komponente zu überlassen - und der Controller gibt dann nur noch das jeweilige Ziel vor.
Durch die mittlerweile beträchtliche Verbreitung von 3D Druckern - 4 oder 5 unabhängig voneinander zu steuernde Schrittmotoren sind da üblich - sind diese Treiber mittlerweile auch recht leicht günstig erhältlich, fertig aufgebaut als steckbare Module.
aber der Pi hat doch Hardware PWM Support... Krieg ich diese 5000 Schritte pro Sekunde auch Softwaretechnisch über Python hin oder ist der Pi dafür zu langsam und wie kann ich das ganze efiizienter gestalten als einfach nur ne While Schleife mit nem delay (und das ganze evtl in nem seperaten Thread)?