Zunächst eine kurze Seite. Sie scheinen ein leichtes Missverständnis darüber zu haben, wie Servos funktionieren. Servos werden nicht von PWM gesteuert und sie wissen oder kümmern sich nicht darum, dass Sie Impulse mit 49 Hz senden. Sie wissen nicht, dass der Puls ein Prozentsatz einer beliebigen Periode ist. Dem Servo ist es egal, wie lange die Zeit zwischen den Impulsen dauert. Ich sage das, weil Sie sich ungewöhnlich auf Dinge konzentrieren, die eigentlich keine Rolle spielen.
Servos wissen oder kümmern sich nicht einmal wirklich darum, dass die Spannung zu einem bestimmten Zeitpunkt hoch oder niedrig ist. Sie kümmern sich nur um eines: die Zeit zwischen steigender und fallender Flanke.
Das Servo wird gesteuert, indem eine ansteigende Spannungsflanke erfasst und die Zeit bis zu einer abfallenden Flanke gemessen wird. Gültige Zeiten liegen normalerweise zwischen 1,0 und 2,0 ms, können jedoch von Servo zu Servo variieren.
Sie können es mit 1 Hz, 10 Hz, 50 Hz, 100 Hz steuern. Die meisten reagieren auf noch höhere Pulsraten, aber auch dies ist variabel. Ich versuche zu sagen, dass die Frequenz, das Tastverhältnis und die Dauer zwischen den Impulsen für Ihr Problem nicht weniger relevant sein können, dh, das Servo reagiert nicht, wenn Sie es erwarten.
Das einzige, was relevant ist, sind Kanten Ihres Pulses, denen Sie keine Aufmerksamkeit geschenkt haben. Wenn Sie dies herausfinden möchten, schauen Sie sich zunächst die wichtigen Dinge an und erfassen Sie Ihre Pulsflanken aus nächster Nähe. Sie haben in diesen Screenshots nichts Nützliches aufgenommen, weshalb es wahrscheinlich kein Problem oder keinen Unterschied gibt. Es gibt viele Probleme oder Unterschiede, die bei Ihren Messungen niemals sichtbar wären.
Was ich sehen kann, ist, dass die Erfassung der nicht funktionierenden Impulsfolge merklich schmutziger ist, sowohl der Impuls als auch der Boden, als bei allen anderen. Was seltsam ist, da es die gleiche Funktion wie die anderen aufrufen sollte. Warum ist das so viel lauter?
Noch wichtiger ist, dass Sie in der nicht funktionierenden Erfassung die „Herbstzeit“ betrachten. 809µs? Ihr Oszilloskop glaubt, eine Abfallzeit von 0,8 ms zu sehen. Das ist schlecht. Das ist natürlich falsch, aber die Tatsache bleibt, das ist es, was es misst.
Das ist ein klassisches Zeichen für eine schmutzige Kante. Denk darüber nach. Wenn dieser Impuls Ihr High-End-Testgerät, das Ihr Oszilloskop ist, dazu bringt, eine lächerlich lange Flanke oder Abfallzeit zu sehen, oder wenn es so schmutzig ist, dass es die fallende Flanke nicht immer richtig erkennen kann (oder wer weiß), dann Welche Chance hat dieses arme, beschissene kleine 8-Dollar-Servo, eine anständige Fallflanke zu bekommen?
Wenn ein Servo keinen gültigen Impuls erhält (z. B. wenn die fallende Flanke zu lange dauert, zu schmutzig ist oder übersehen wird), innerhalb des akzeptablen Impulsbereichs und von den Servos, die mit den Flanken rechnen, die möglicherweise etwas zu tun haben oder nicht Machen Sie mit dem, was Sie für die Impulsflanken halten, dann reagiert es so, als wäre es ausgeschaltet.
Mit anderen Worten, es bewegt sich nicht nur nicht, sondern widersteht auch nicht der Bewegung seiner Welle. Es wird einfach schlaff sein, genau wie Sie sehen.
Nun stellt sich die Frage ... warum sollte der Aufruf von servo.write die Kantenqualität beeinflussen?
Du hast einen Klon gesagt. Wie dieser?
Insbesondere diese Klone neigen aufgrund der unglaublich schlechten Entkopplung dazu, sich unregelmäßig zu verhalten. An jedem Stromanschluss und so nahe wie möglich am Mega2560 sollten Entkopplungskondensatoren vorhanden sein. Und auf dem eigentlichen Arduino gibt es tatsächlich. Auf diesen Klonen sind sie jedoch viel zu weit entfernt oder fehlen vielleicht, es ist schwer zu sagen. Es ist offensichtlich, dass es sich nicht zuverlässig verhält, das ist das Wichtigste.
Was ist der Unterschied?
Wenn Sie servo.write aufrufen, wird der Stapel höher geschoben als beim Aufrufen von writeMicroseconds. Angesichts des 3-Byte-Stapelzeigers des Mega2560 (17 Bit) muss er eine Reihe kritischer Bits umdrehen, die beim Aufrufen von Schreibsekunden nicht erforderlich sind. Ich weiß, dass dies ein unwahrscheinlicher Unterschied zu sein scheint, aber ich habe meinen fairen Anteil an schlecht entkoppelten Mikrocontrollern erlebt, und insbesondere die Atmosphäre scheint ein merkwürdiges Verhalten zu zeigen, insbesondere wenn Timer verwendet und / oder der Stapel gedrückt oder geknallt wird. Ähnliches passierte für mich, nur der Stack war beschädigt, als ich versuchte, LEDs mit PWM anzusteuern, aber wenn ich alles inline stellte, ohne den Stack zu verschieben, funktionierte es. Eine schlechte Entkopplung war letztendlich das Problem.
Ich würde voll und ganz erwarten, dass eine schlechte Entkopplung aus Gründen, die dem atmega2560 und niemand anderem bekannt sind, sich nachteilig auf die Kantenqualität dieses Impulses auswirkt, jedoch nur, wenn Sie den Stapel unmittelbar zuvor drücken. Dieses Servo ist einfach nicht in der Lage, die Art und Weise zu handhaben, in der diese Kanten besudelt werden, sodass in diesem Fall keine gültigen Impulse angezeigt werden. Andere Servos schaffen es offensichtlich.
Das Entkoppeln von Sachen ist immer so bizarr und hyper-spezifisch. Deshalb ist die Entkopplung so wichtig. Halten Sie die albtraumhafte Hölle voller Probleme. Mangelnde Kapazität kann Sie mit schönen, fetten Keramikkappen und so nah wie möglich am Chip in Schach halten.