Wie bei meiner ursprünglichen Frage unter raspberrypi.stackexchange.com vorgeschlagen , poste ich mein Problem auch hier, Sie finden es wörtlich am Ende dieser Frage.
Da dies jedoch eine Elektrotechnik-Seite ist, formuliere ich gerne eine etwas spezifischere Frage zum Elektrotechnik-Teil:
Ist es basierend auf dem von mir beschriebenen Problem tatsächlich wahrscheinlich, dass das
Problem durch ein Timing-Problem verursacht wird (dh suchen Sie nach einer Lösung, wie ich den
Schrittmotor anspreche, dh Softwarelösung), oder glauben Sie, dass es eine Art
elektrisches / Mechanisches Problem oder Schrittmotorcharakteristik, die mir nicht bekannt sind?
Vielen Dank im Voraus!
EDIT 1: Update basierend auf bisherigen Kommentaren: Der Chopper ist eine 1 mm dicke Aluminiumplatte mit 16 cm Durchmesser und 5 Löchern darin. Unter der Annahme einer massiven Scheibe zur Vereinfachung der Berechnung hat die Scheibe ein Volumen von 20 cm^3 und eine Masse von 54 Gramm. Das Trägheitsmoment sollte 0,5 M R^2 = 0,5 0,054 0,08^2 = 0,0001728 kg.m2 betragen. Die Umrechnung in oz.inch^2 ergibt ~9,4 oz.inch^2, was meiner Meinung nach das 2-3-fache des Motordrehmoments auf der Grundlage des Datenblatts zu sein scheint. (Ich habe die Hardware für diesen Prototyp nicht ausgewählt ... :) ) Was mich überrascht, ist, dass selbst eine 10-mal langsamere Beschleunigung (Erreichen der vollen Geschwindigkeit im Laufe von 32 Sekunden) AUCH regelmäßig fehlschlägt, typischerweise bei etwa 2000 PPS oder 10000 PPS basierend auf a paar schnelle Versuche. Die Tatsache, dass es manchmal funktioniert(wenn auch selten) überrascht mich auch.
Soweit ich das bisher verstanden habe, könnte es sein, dass der Motor zu schwach ist. Irgendwelche Erklärungen, warum es manchmal gut funktioniert und manchmal sogar bei sehr langsamen Beschleunigungen versagt?
Zusammenfassung:
Raspberry Pi steuert einen EasyDriver und einen Schrittmotor, aber die Ergebnisse sind inkonsistent und das System fällt regelmäßig aus. Kann nicht herausfinden, warum.
Langer Text:
Hallo zusammen,
Ich habe ein kleines Setup, bei dem ein Schrittmotor ein Chopperrad antreiben soll, um ein Signal zu modulieren. Das Zählen von Schritten ist nicht erforderlich, da der Motor mit einem Encoder ausgestattet ist, aber eine stabile Geschwindigkeit ist erforderlich. Ich verwende die Pigpio-Bibliothek (genauer gesagt die hardware_PWM-Funktion), um die Drehzahl auf Pin (12) auf der Himbeere einzustellen. Da das sofortige Einstellen auf volle Geschwindigkeit den Schrittmotor überhaupt nicht bewegt, habe ich einen kleinen Anstieg der Geschwindigkeit codiert. Das von mir verwendete Testskript lässt es auf 32000 ppm (20 Hz / 1200 U / min) hochfahren, dort einige Sekunden bleiben und dann wieder herunterfahren.
Ich habe regelmäßig ein Problem, bei dem der Motor zu irgendeinem Zeitpunkt während des Hochfahrens, stabilen Laufens oder Herunterfahrens (obwohl normalerweise beim Hochfahren) den „Griff“ auf der rotierenden Welle und dem Chopper zu verlieren scheint. Von diesem Moment an verlangsamt sich der Chopper auf 0 U/min, aber der Motor versucht weiterhin zu beschleunigen (Hochfahren) oder die Geschwindigkeit zu halten (stabile U/min), was ein vom normalen Betrieb abweichendes Heulen/Brummen verursacht. Ich denke derzeit, dass es sich um eine Art Timing-Problem handeln muss, da ein Schrittmotor nach meinem begrenzten Verständnis mit einer Schaukel verglichen werden kann, bei der Sie im richtigen Moment "drücken" müssen, oder er tut nichts oder ist tatsächlich langsam runter. Ist es möglich, dass an einem zufälligen Punkt eine Timing-Fehlanpassung zwischen der Impulsfolge und den "idealen Push-Timings" auftritt, die dieses Problem verursacht? Überraschenderweise,
Mir ist klar, dass dies wahrscheinlich eine Mischung aus Raspberry Pi, Hardware und Pigpio ist, aber ich hoffe, das klingelt bei jemandem, der mir helfen kann, es wäre sehr dankbar!
Einige Spezifikationen, falls sie helfen:
Motor : NEMA08-17-01D-AMT112S ( https://www.cuidevices.com/product/resource/nema08-amt112s.pdf )
Stromversorgung : LPV-150-24 (umfunktionierte LED- Treiber, https://www.meanwell-web.com/nl-nl/ac-dc-single-output-led-driver-constant-voltage-c-lpv--150--24 )
Treiber : EasyDriver ROB-12779 ( https://www.sparkfun.com/products/12779 )
Testcode : https://pastebin.com/tKS0jvDA (Es gibt einen Tippfehler in Zeile 7, der nicht im eigentlichen Code enthalten ist;))
Demo des Fehlers: https: //www.youtube.com/watch?v=KtLGCtxPLPw
Demo-Hinweise:Im ersten Zyklus fällt es beim Hochdrehen aus, Sie können hören, wie die Frequenz ansteigt, aber die Welle wird langsamer. Beim zweiten Versuch wird es so beschleunigt, wie es sollte, und scheitert dann beim Verlangsamen. An diesem Punkt wird die Melodie, die Sie hören, durch die Masse des Hubschraubers verursacht, der effektiv einen Motor ohne Stromversorgung antreibt :)
BEARBEITEN 29/04: Codeliste hinzugefügt, um wie gewünscht zu posten:
import datetime
import time
import pigpio
import numpy as np
import Rpi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(6, GPIO.OUT)
GPIO.output(6,0) #Enable motor
pi = pigpio.pi()
freq_startup_diff = 100
freq_startup_wait = 0.01
motor_freq = 32000
startup_range = np.arange(0,motor_freq+1,freq_startup_diff)
print('Motor starting')
for freq in startup_range:
pi.hardware_PWM(int(12),int(freq),int(1e6*0.5))
print("Frequency equals {}".format(freq))
time.sleep(freq_startup_wait)
print('Motor started.')
time.sleep(3)
print('Motor stopping.')
stop_range = np.flip(startup_range)
for freq in stop_range:
pi.hardware_PWM(int(12),int(freq),int(1e6*0.5))
print("Frequency equals {}".format(freq))
time.sleep(freq_startup_wait)
GPIO.output(6,1) # Disable motor
print('Motor stopped.')
```
Entweder liefert Ihr Schrittmotor nicht genug Drehmoment, um einer solchen Rampe zu folgen, oder der Strom ist zu klein für diesen Motor. Abhilfe: Acc/Dec-Rampe erhöhen und Ausgangsstromeinstellung der Treiberplatine prüfen.
Das erforderliche Drehmoment, um die Trägheitsmasse bei einem bestimmten Beschleunigungswinkel zu beschleunigen. Ist die erforderliche Beschleunigung zu hoch, dann gerät der Schrittmotor aus dem Takt und verpasst Schritte.
Ein weiterer Aspekt ist das Drehmoment VS. Geschwindigkeitseigenschaften
Bei höheren Drehzahlen fällt das Drehmoment ab. Der Kniepunkt hängt von der Motorspannungskonstante und der Versorgungsspannung ab.
BEARBEITEN:
Die Motor-Last-Kombination wirkt wie ein Torsionspendel. Die Kombination aus Rotor- und Lastträgheit mit einer Welle bildet ein schwingfähiges System. Wenn Sie den Motor mit einem Ungleichgewicht des Schwungrads drehen, erregen Sie das System tatsächlich, sobald die Resonanz erreicht ist, kann dieses Welligkeitsdrehmoment von Ihrem Motor nicht mehr aufrechterhalten werden.
HINWEIS für Ihre Rampengeneration:
Wenn Sie den Geschwindigkeitssollwert schrittweise ändern, bedeutet das theoretisch eine unbegrenzte Beschleunigung. Sie sollten die PWM so schnell wie möglich mit winzigen Beträgen aktualisieren:
Sehen Sie sich die Methode zum Erstellen einer sich kontinuierlich ändernden PWM an: So erzeugen Sie eine gleichmäßige Frequenzrampe
Mattman944
SvB
Marko Buršič
SvB
Christian B.
SvB
Christian B.
Christian B.
wait_times = (t1, t2, t3) speeds = (v1,v2,v3) for cur_wait_time, cur_speed in zip(wait_times, speeds)
und spiele dann mit den werten rum. Finden Sie die "größtmöglichen Schritte für Geschwindigkeit heraus, während Sie eine angemessene Wartezeit suchen"Mattman944
Mattman944
Mattman944
SvB
SvB
Christian B.