-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Anregung zu Signalauswertung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235

    Anregung zu Signalauswertung

    Anzeige

    Tag zusammen,

    Ich hab folgendes Problem. Ich möchte ein Signal einer Tachowelle auswerten. Der Verlauf des Signals ist zwar etwas komisch, aber das sollte nicht das Problem sein.
    Ich bekomme bei ca. 70cm Laufstrecke eines Reifens eine Pegeländerung von HIGH auf LOW. Wobei LOW nur kurz ansteht und der Pegel dann wieder HIGH ist...quasi ein Kurzer Impuls alle 70cm.
    Das Problem ist dass ich im Maximalfall alle 8,3ms einen Impuls bekommen (entspricht ca. 300km/h) und im Minimalfall alle 2,52s einen Impuls bekomme (entspricht 1km/h.
    Das ganze soll ausgewertet werden und 3-stellig auf einen 128x64 LCD ausgegeben werden (also wenn die Geschwindigkeit 47km/h beträgt soll 047 km/h ausgegeben werden). Das Display soll ca. alle 500ms aktualisiert werden.

    Jetzt ist mein erstes Problem die Signalerfassung ohne dass mein Signal prellt.
    Das zweite Problem ist dass sich mein ATMEGA32 bei höheren Geschwindkigkeiten (ca. 120km/h) aufhängt, bzw sich wieder neu startet. Ich weis nicht ob das was mit der Impulsdauer und der Ausgabezeit zu tun hat. Im Moment lasse ich einen Timer laufen, der pro 1s 10000 Überläufe liefert (ist etwas übertrieben glaub ich....aber in der Overflowroutine frage ich auch den Zustand des Eingangspins für die Pegeländerung ab und da muss die Abtastrate bei hohen Geschwindigkeiten auch so hoch sein).
    Gibt es da nicht eine bessere Lösung? Bin um jeden Beitrag und Kritik dankbar.

    Mfg Mel
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hi,

    so etwas hatte ich auch mal vor, doch leider wieder verworfen. Wie hast Du das Signal denn an den atmega angeschlossen ? Wie sieht dein Code aus ?

    Gruß BlaueLed

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235
    Ich bastel im Moment noch wie ich das beste Signal bekomme. Im Moment hab ich die Tachowelle über einen Spannungsteiler einfach an nen Pin gehängt. Wenn ich es schaffe stell ich nachher mal das oszilloskopierte Signal und Code rein.
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    06.11.2006
    Beiträge
    1.078
    Hallo
    Löse bei einer Zustandsänderung einen Interrupt aus, dann brauchst Du nicht ständig zu "lauschen" oder leg das Signal gleich auf einen Counter.

    Mit freundlichen Grüßen
    Benno
    Wo man nicht mit Vernunft handelt, da ist auch Eifer nichts nütze; und wer hastig läuft, der tritt fehl.
    Ein König richtet das Land auf durchs Recht; wer aber viel Steuern erhebt, richtet es zugrunde

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.07.2008
    Ort
    Moosburg
    Alter
    39
    Beiträge
    49
    Hi!

    Ich denke, dass Du bei hohen Geschwindigkeiten einen Stack-Überlauf produzierst und der AVR dadurch vermeintlich neu gestartet wird. Nimm lieber den den Timer/Counter und zähl die Impulse, die anliegen. IMHO kann der mit maximal fosz / 4 getaktet werden.

    Du must nur in regelmäßigen Abständen den Zählerstand auslesen und auf 0 setzen.

    MfG

    Markus

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    @ cipher

    wie möchtest du mit dem timer die impulse "zählen"?

    du hängst das sginal an den ICP und bekommst dann nur timerwerte und nen interrupt geliefert, ob man die zeit jetzt aus dem ICR nimmt oder in der ISR aus dem CNT register nimmt, macht jetzt nicht so unbändig viel unterschied, wenn die frequenz zu hoch wird läufst du auch da in einen stacküberlauf ....

    das einzige was man noch probieren könnte, wäre einen mux vor das signal zu hängen, sodass er nur alle 8 impulse einen impuls zum controller sendet ..

    udn wenn der mux hops geht wegen ner spannungsspitze, kann man den immernoch besser tauschen als den controller (wo man ein neues programm aufspielen müsste ...

    am besten vor dem mux noch einen auf GND und VCC versorgten OPAMP in komparatorschaltung als level-converter einsetzen, so bleibt die elektronik länger heile)

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Selbst wenn alle 8 ms ein Siganl kommt, ist das für den Controller noch eine recht lange Zeit, es sei denn man arbeitet mit weniger 32 kHz Takt.

    Wenn das Signal sauber ist, also kein Prellen oder so, könnte man den externen Zähler Eingagn nutzen. Der externe Counter Eingang ist aber bei schlechtem Signal schnell unbrauchbar, denn da kann man wenige fasche Pulse nicht mal erkennen.

    Der ICP Eingang bietet da deutliche Vorteile. Man mißt die Zeit für eine Umdrehung. Und kreigt dadurch besonders auch bei niedrieger Geschwindigkeit ein sehr gute Auflösung. Einige fasche Impulse kann man, wenn es sein muß, auch noch per Software aussortieren.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Eine Impulszählung in einem Timer ist bei so wenigen Impulsen nicht sinnvoll. Andererseits ist auch die maximale Impulsrate nicht sonderlich hoch.
    Der Weg von Besserwessi mit der Periodendauermessung ist, auch meiner Meinung nach, der Goldene.
    Wenn dein Sensor für eine Umdrehung 2,5 sek braucht, kannst Du nach 0,5sek keinen neuen Wert im Display haben.
    Das geht im Idealfall bei einer Geschwindigkeit von 5km/h.
    Denn erst ab da kommt auch alle 0,5sek ein Impuls vom Geber.

    Eventuell kannst Du das auch so lösen, das die Displayrefreshrate zuerst vom Impuls des Gebers abhängt und dann bei höheren Geschwindigkeiten mit einem Timer auf 0,5 sek eingestellt wird.
    Das kann man ja sehr schön über die Werte des Zählers, der für die Periodendauermessung zuständig ist erkennen.

    Bei Zeiten über 2,5 sek sollte aber dann eine Overflow Routine zuschlagen, die dann die Geschwindigkeit auf 0 setzt.


    Ich lass für solche Zwecke den Timer frei laufen und ziehe den vorherigen Zählerstand vom aktuellen ab.
    Da für die Aktion mit ziemlicher Sicherheit ein Überlaufzähler verwendet wird, der in der Timer Overflow Routine hochzählt wird, ist die Benutzung des Input Capture Registers im dazugehörigen Interrupt sinnvoll.
    Das hochgezählte Register des Timer Overflow Interrupts wird natürlich in die Berechnung mit einbezogen.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    29
    Beiträge
    235
    Ja bis jetzt hab ich die Zeit zwischen zwei Impulsen gemessen und ausgewertet. Dabei hab ich den alten Wert mit dem aktuellen verglichen und sobald der aktuelle größer ist wird das neue ergebnis mit dem aktuellen Wert verrechnet. Werde es mal mit dem ICP versuchen. Vielen Dank für eure Antworten
    Elektronische Bauteile funktionieren mit Rauch. Lässt man den Rauch raus, sind sie kaputt.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    ich dachte es ging hier darum, dass die impulse so schnell sind dass der controller NICHT hinterherkommt ?!

    aber wo ich den o-topic lese seh ich es auch grad
    hab mich mehr an den folgenden antworten orientiert XD

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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