-
        

Ergebnis 1 bis 6 von 6

Thema: Servoimpuls messen mit Timer1

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34

    Servoimpuls messen mit Timer1

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Moin !

    Kann mir jemand zufällig mit einem Schnippsel Code aushelfen?
    Ich Suche eine Interrupt Routine die an einem Pin einen Servoimpuls misst. Und das über Timer1.
    Sprich ich will da 1-2ms +-200µS messen. Es wäre gut wenn dabei der Timer1 möglichst gut ausgenutzt wird und ich ein rel. gutes Messergebniss bekomme.

    Dank schon mal!

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    37
    Beiträge
    464
    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.

    MFG

    Bertl

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34
    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 ?!

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Einfachste Lösung:

    1. Timer anwerfen ob 8 oder 16 Bit ist erst mal egal, zumal man diese Softwareseitig skalieren kann.
    2. Bei steigender Flanke den Zählerstand merken
    3. bei fallender Flanke auch
    4. das ganze voeinander subtrahieren
    5. ausgeben

    Edit: ach ja, Pulsin verursacht ein sehr unschönes und nicht wirklich genaues Codemonster.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.07.2005
    Beiträge
    34
    Moin !

    Wäre nicht das besser?

    1. Timer bei steigender Flanke anwerfen
    2. bei fallender Flanke stoppen
    3. Überläufe merken
    4. kompletten Wert bestimmen.

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von moelski
    Moin !

    Wäre nicht das besser?

    1. Timer bei steigender Flanke anwerfen
    2. bei fallender Flanke stoppen
    3. Überläufe merken
    4. kompletten Wert bestimmen.
    nö, weil man damit diesen Timer für nix anderes mehr gebrauchen kann.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •