Moin !
Wieso nimmst du nicht den Befehl "Pulsein"
Der mißt von Flanke zu Flanke und brauchst nichts zu berechnen.
Mit Pulsein kannst du Impulse bis 680 mS messen.
Naja, prinzipiell ja ne tolle Idee. Aber die gemessenen Werte schwanken. Und das zum Teil erhelblich. Ich habe hier einen UniTest2. Das ist ein Testgerät für den Elektromodellflug. Ich gehe mal davon aus, dass dieses Gerät recht stabile Servoimpulse erzeugen kann. Andernfalls würde man das eh durch ein Zittern der Servos bemerken. Dem ist aber nicht so ...
So und wenn ich nun mit Pulsein die Impulslänge bestimme, dann kriege ich sowas:
Impuls 175
Impuls 177
Impuls 173
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 172
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 173
Impuls 177
Impuls 175
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 175
Impuls 177
Impuls 173
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 177
Impuls 172
Impuls 177
Impuls 176
Man kann schön erkennen das der Impuls im Prinzip 177 * 10µs = 1,77ms lang ist. Aber da sind eben immer diese Ausreisser. Wenn ich diese gemessenen Werte spasshalber auf ein Servo gebe (natürlich vorher in die passende Form gebracht), dann zittert sich das Servo zu Tode.
Also wie zum Henker kann ich einen Servoimpuls sauber messen? Kann doch nit so schwer sein ein ms Signal zu messen.
Auch eine Mittelwertbildung über 10 Werte macht nicht glücklich. Denn dann hat man immer noch Schwankungen von teilweise 1-2!
So und auch meine Routine hat das gleiche Verhalten.
Code:
' Impuls messen ...
Function Lopulse() As Word
While Inputpin <> 1 : Wend
Wtime = 0
While Inputpin = 1
Incr Wtime
Wend
Lopulse = Wtime
End Function Lopulse()
Das ist sicher nich die beste Routine. Aber vom Prinzip her gehts. Aber auch hier immer Schwankungen.
Ich verstehe das nicht. Auf dem µC läuft doch kein OS was irgendwelche Zeitscheiben abarbeitet ?! Da laufen doch nur ein paar Befehle die einen Impuls messen und ausgeben. Warum sind da überhaupt diese Schwankungen?
Liegt es evtl. am verwendeten Tiny26? Weil der hat keinen 16 Bit Timer. Wäre es mit einem Mage Steinchen evtl. besser zu realisieren?
Hoffe jemand hat hier noch nen Tip ?!
Lesezeichen