Benutzer-Werkzeuge

Webseiten-Werkzeuge


anleitungen:spezial:pyprogramgenerator:direct-mode-servo

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
anleitungen:spezial:pyprogramgenerator:direct-mode-servo [2024/06/30 16:11] hlinkeanleitungen:spezial:pyprogramgenerator:direct-mode-servo [2024/07/01 11:30] (aktuell) – [Einstellung der Endlagen] hlinke
Zeile 68: Zeile 68:
  
 SERVO1 ist egal, wenn R5 nicht bestückt ist und muss geöffnet werden, wenn R5 vorher mal bestückt wurde. SERVO1 ist egal, wenn R5 nicht bestückt ist und muss geöffnet werden, wenn R5 vorher mal bestückt wurde.
 +
 +==== Adressierung der Servos ====
 +
 +Bei der modifizierten Platine belegt jeder Servo eine RGB-Adresse. (Bei der  originalen Platine hatte das gesamte Modul eine RGB-LED Adresse und die Servos wurde durch die R-G-B Kanäle angesprochen). 
 +Die Adressen bei der modifizierten Platine sind fortlaufend. D.h. erste Servo-Adresse 5, dann haben die beiden anderen Servos die Adresse 6 und 7.
 +Diese Adresse ist auch bei der Endlageneinstellung und in der Servo-Animation angegeben werden, damit der richtige Servo angesprochen wird.
  
 ==== Einstellung der Endlagen ==== ==== Einstellung der Endlagen ====
Zeile 74: Zeile 80:
 Die Beschreibung findest Du hier:  Die Beschreibung findest Du hier: 
 [[anleitungen:spezial:pyprogramgenerator:servo2_Seite|pyProgrammGenerator - Servo2 Seite]] [[anleitungen:spezial:pyprogramgenerator:servo2_Seite|pyProgrammGenerator - Servo2 Seite]]
- 
-In pyMobaLedLib die Seite "Servo2" öffnen. 
- 
-Es ist aber ganz einfach: 
-- Die Servo Position in die Mitte stellen. 
-- Die Servo Control Betriebsart auf: "Training End Pos einstellen" 
-- Von der Mitte ausgehend langsam zur gewünschten Endposition fahren. Der Servo sollte dieser Bewegung folgen. 
-- Wenn die erste Endposition erreicht ist, "Enter drücken" 
-- zur zweiten Endposition fahren. 
-- Nochmal "Enter" drücken 
-- Betriebsart wieder auf "Normal" stellen. 
- 
-Achtung: Der nachfolgende Text ist eine Sammlung von Hinweisen aus der Diskussion. Der Text wird noch etwas besser strukturiert... 
- 
- 
-Genau genommen ist der Bereich von 0 bis 255, beim Direct Mode Servo, eine Art "Zahlenwerte Matroschka"! (die russische "Puppe in der Puppe") 
- 
-Wenn du den Servo im Normalbereich mit den Endlagen trainierst, dann entspricht der Bereich von 0 bis 255 den PWM Werten von 1ms bis 2ms. Wenn du das selbe mit der Einstellung (spezial) tust, dann umfassen die Werte 0 bis 255 die PWM Werte von 0,5ms bis 2,5ms. 
- 
-Doch egal, welche Millisekunden Werte du für die Endlagen festlegst, der gewählte Bereich hat vom Python Programm Generator aus wieder den Bereich von 0 bis 255. Das wäre auch dann der Fall, wenn der Bereich zwischen den gewählten Endlagen sehr schmal ist. Damit erhält man in dem schmalen Bereich eine sehr hohe Genauigkeit! 
-Umstellen auf Endlagen 
-Schieberegler auf die eine Endlage einstellen, Enter drücken, Schieberegler auf die zweite Endlage stellen und wieder Enter drücken - fertig. Ist das so richtig? 
- 
-Dirket nach dem Flashen des Attiny85 und im Normalmodus bewegt sich der Servo mit dem Schieberegler von 0 bis 255 nur etwa 30°. Durch drücken von Enter geht er nochmal etwas weiter so dass ich in etwa auf die eigentlichen Maxima komme. Passt das soweit? 
- 
-Ja, ob die Programmierung erfolgreich war, kannst du ja daran sehen, dass sich nun der Normalbereich 0.255 innerhalb der eingestellten Endlagen bewegt. Danach sollte der DM Servo auch im Betriebsmode ansprechbar sein. Die 30 Grad default sind eine Sicherheitsfunktion, damit man sich nicht gleich seine Mechanik beschädigt. 
- 
-Ein DM Servo belegt den Adressraum einer RGB LED mit drei Mal 8 Bit bzw. Werten von 0..255! Im ersten Kanal kommt eine Steuerinformation und eine CRC Prüfsumme, im zweiten Kanal ein Stellwert von 0.255 und der dritte Kanal ist bei der Std. MLL derzeit nicht genutzt. Außerdem hat die Std. MLL die ersten beiden Kanäle technisch vertauscht. Deine Beobachtung könnte also richtig sein, wenn sich "Helligkeit" auf alle drei Kanäle gleichzeitig einer RGB LED bezieht. 
- 
-so, die Kanäle sind geklärt. Es ändert sich an einer RGB-LED an einem WS2811-Modul der rote Kanal und grün wird langsam heller. Mit einer WS2812 sind rot und grün vertauscht, also alles so wie es soll. Das passt erstmal mit deiner Beschreibung. 
- 
-Der zweite und dritte Servo haben sich auch geklärt. Ich hatte die 510 vorher an das Ende meiner Kette gehängt, wodurch sie die Adresse 47 bekommen hat. Adresse 48 und 49 sind dann Servo 2 und 3. Aber bei Adresse 48 wird zumindest bei mir die erste LED auf Kanal 1 angesprochen. Ich habe die 510 nun als erste an Kanal 0 gehängt und nun werden nach der Heartbeat auf 1, 2 und 3 die drei Servos angesprochen. 
- 
-Aber es ist bei allen drei Servos so, dass die Einstellung bei Normal Position erstmal nur in sehr begrenztem Bereich funktioniert und das auch nur in dem ich zu 0 gehe und dann mehrmals zwischen 1 und 0 wechsle, damit der Servo immer weiter zum Anschlag läuft. Das Gleiche am anderen Ende bei 255. Und ich bekomme mit meinen SG90 Servos nur 90° maximal hin. Das sollten eigenlich ca. 170° sein. 
- 
-Programmierung der Endlagen: mache ich das richtig: Training End Pos angeben, erst auf 0 stellen, Enter drücken, 255 einstellen und wieder Enter drücken? Nach dem ich das getan habe bewegen sich die Servos unter Normal Position wieder nur wie vorher beschrieben. 
- 
-ProgrammGenerator: Da ich die 510 jetzt nach zwei WS2812 und der Heartbeat auf der Hauptplatine angeschlossen habe, habe ich mit der V5.3.0J die Tabelle auf den ESP32 hochgeladen und siehe da, die Servos funktionieren und zwar laufen sie im vollen 90° wie unter Servo Test 2 eingestellt. Also hat die Programmierung der Endlagen irgendwie funktioniert. Wenngleich nur 90° statt 170°. 
- 
-Du bist, für den derzeitigen Programm-Stand, viel zu schnell mit der Maus unterwegs! Hintergrund: Modellbau Servos benötigen ein ständiges Refreshen des PWM Signals. Bei der Nutzung für die Modellbahn hat sich aber eingebürgert, das PWM Signal irgendwann abzuschalten, damit die Servos nicht am mechanischen Anschlag brummen. FastLED/MLL sendet das WS2811 Signal auch in einer refresh Loop und der pyPG synthetisiert ein Pattern, mit dem der Stellwert übertragen und eine bestimmbare Zeit nach der letzten Stellbewegung wieder abgeschaltet wird. (üblich ist, bei der Modellbahn, ca. 1 Sek.) 
- 
-Aber: das Trainieren der Endlagen ist eigentlich der Farbtest und hier werden NUR EINZELNE Werte in den WS2811 Strang übertragen, wenn der pyPG vom User eine Aktion bekommen hat. "old school" Servos speichern aber nicht den letzten empfangenen PWM Wert und laufen von alleine weiter, bis der erreicht ist, sondern vergleichen immer nur, im Moment des PWM Empfangs, die Pulsweite mit der aktuellen Stellung und treiben dann den Motor an. 
- 
-Du musst also (derzeit) den pyPG Regler so langsam bewegen, dass das Servo auch hinterher kommt! 
-Nach meinen Messungen und meiner Erfahrung haben SG90 Servos, bei der Servo Norm-PWM von 1-2ms, nur 90 Grad Stellwinkel! Die 170 Grad Aussage kommt dadurch zustande, dass fast alle eben nicht 1-2ms PWMs machen, sondern mehr! Das gibt es beim DM Servo auch und heißt "Training Pos Mode (spezial)" Warnung: (gerade auch sehr kraftvolle) Servos können sich, wenn sie an den mechanischen Anschlag gefahren werden, selbst beschädigen! 
- 
-ch habe die 510 an einer Verteilerplatine mit separater 5V-Versorgung. Das sollte kein Problem sein. Aber ich hatte für die Tests drei Servos parallel am Laufen, vielleicht ist dann der Strom doch mal zu gering. Werden die Factory Defaults dann auch gleich wieder ins EEPROM geschrieben? Sonst müssten beim nächsten Aufruf die Endlagen wieder erneut ausgelesen 
- 
-Tatsächlich haben die Tinys hinter einer echten physikalischen WS2811 oder WS2812B LED eine ganz passable Reichweite! Die nächste WS2811, hinter dem Tiny, kann auch ganz ordentlich weg sein (z.B. 70cm kein Problem), aber ATMega238 auf ATTiny85 ist irgendwie seltsam. Es wundert mich ein wenig, denn ATTiny auf ATTiny, also zwei meiner Direct Mode Servo Platinen, vertragen durchaus einen halben Meter zwischeneinander! 
-wenn das EEPROM als inkonsistent erkannt wird, erhält das EEPROM die selben default Werte, wie bei der ersten Inbetriebnahme. Die alten Endlagen sind also weg! 
- 
-Normalerweise befindet sich der ARDUINO im sogenannten "Effekt-Modus". In diesem Modus spielt er die Effekte z.B. Heartbeat, Servo Animation usw ab. Er reagiert in diesem Modus auch auf Stellbefehle, die über die USB-Schnittstelle kommen. 
- 
-Damit ich die angeschlossenen Objekte, RGB-Leds, WS2811-Platinen oder Servoplatinen direkt ansteuern kann, kann ich den ARDUINO in den sohenanten "Direkt-Modus" umschalten. In diesem Modus werden keine Effekte mehr abgearbeitet, sondern ich kann direkt jede LED adressieren und die Farbe, bzw. beim Servo die Position einstellen. 
-Du kannst den Modus unten in der Status-Leiste links sehen. Dort steht z.B. "Status: Verbunden Comx - Direct Mode" oder "Status: Verbunden Comx - Effect Mode" 
- 
-Auf der Servo2 Seite muß ich den Servo direkt anteuern. Also schalte ich dort auf den "Direct Mode" um und ide Heartbeat LED geht aus. 
- 
  
 ==== Programmierung von Animationen ==== ==== Programmierung von Animationen ====
anleitungen/spezial/pyprogramgenerator/direct-mode-servo.1719763893.txt.gz · Zuletzt geändert: 2024/06/30 16:11 von hlinke