ich versuche schon seit ewigkeiten einen ABS-Sensor auszulesen, die Taktanzahlen zu speichern
und ab einer gewissen Zeit diese wieder zu löschen. Dabei sind die Takte speichern und löschen relativ einfach, aber die Takte Zählen, da komme ich überhaupt nicht weiter.
Problem das Sensorsignal kommt ohne Hilfe nicht über 3Volt, also habe ich da einen Verstärker zwischen geschaltet.
Ich habe es mal ausgerechnet, bei einer Raddrehzahl von 250 kmh ergibt sich ein Pulsabstand von 556 Microsekunden. Das müsste doch eigentlich über den TIMER1 und denn als externe Taktquelle einlesen Funktionieren, also er müsste schnell genug sein?
Ist den überhaupt der Operationsverstärker schnell genug??
Ich hoffe deine Rechnung stimmt, eine Raddrehzahl in Km/h habe ich noch nie gesehen. Drehzahl bitte nicht mit Geschwindigkeit verwechseln. Und ob es funktioniert kannst du über eine Vergleichsmessung mit einem Drehzahlmesser, Tacho oder sonstigem machen. Falls es nicht reicht gibt es evtl. noch die Möglichkeit über Frequenzteiler das Signal zu halbieren oder vierteln und nachher wieder hochzurechnen.
Ich habe noch nie solche Messungen gemacht, von daher weiß ich nicht was schnell genug ist. Das hängt mit Sicherheit auch davon ab was, wie oft und worauf du die Daten abspeichern willst.
Ein reguläres Motorrad hat einen 17" Reifen und bei dem ABS Sensor handelt es sich um einen Hall-Sensor an einer gelochten/geschlitzen Scheibe.
Viele Modelle haben 32-48 Löcher im ABS-Ring, je nach Generation.
Macht bei einem ABS System auch Sinn damit es schnell reagieren kann. Um nur die Geschwindigkeit zu messen ist das schon stramm und evtl. einfacher einen eigenen Sensor anzubringen. Das wäre auch wäre auch die einzigste sinnige Lösung falls das Auto innerhalb der StVO betrieben wird.
Ein Timer (Timer1) müßte schnell genug sein, AFAIR geht seine Eingangsfrequenz bis clk/4 (4MHz). Die Frequenz hängt natürlich von der Drehzahl ab, Du mußt schon selbst wissen, womit Du den Sensor betreibst.
Statt Operationsverstärker würde ich einen Komparator verwenden, der ist für hohe Geschwindigkeit gebaut.
Welchen Timer Du per externem Clock hochzählen lassen kannst, wird Sich im Datenblatt verstecken.
Dort musst Du 'nur noch' recht genau und regelmäßig diesen Zählerstand auslesen (ich würde Den wirklich NUR lesen, nicht zurück setzen - DAS kann man errechnen, für's Zurücksetzen brauchst Du wieder Zeit, Die Du wohl kaum haben wirst - oder Du sch**ßt auf die paar Signale - zumindest wäre Das immer die gleiche Zeit, Die Du blind bist.
Ok - nun habe ich alle 0,25 Sekunden (oder schneller) meinen Wert (Drehwinkel Rad in Grad) - was nun?
Scherheinz:
...Um nur die Geschwindigkeit zu messen ist das schon stramm...
Macht auch normalerweise keiner. Das Tachosignal kommt üblicherweise vom Getriebe - jedenfalls beim Vierradl.
@TO: Schau mal bei Hella, die haben da einiges über ABS-Sensoren zusammengeschrieben. Es gibt passive und aktive. Vielleicht ist da was hilfreiches dabei.
Danke schon mal für die schnellen Antworten.
Das mit dem komparator werde ich nochmal testen. Vielleicht hilft der ja.
Nein ich habe die drehzahl nicht mit kmh verwechselt. Ich habe es ausgerechnet, indem ich den Umfang des ABS Ringes besorgt habe und die zahnanzahl. Dadurch habe ich mir den zahnabstand errechnet. Wenn zum Beispiel ch nun 100 Impulse in 250 millis bekommen weiß ich die Zeit und den Weg, den es zurück gelegt habe. Somit kann ich mit dem verhältnis zwischen rad und welle die kmh berechnen.
Das ich schon mal gut zu wissen das der timer schnell genug sein müsste.
Eine weitere Idee war eventuell noch, den timer1 mit zwei Overflow A und B zu ersehen. Da könnte ich die impulsanzahl die er zählen soll ja festlegen und bei A und B jeweils die microsekunden zählen? Was haltet ihr davon??
Der Umfang des ABS-Sensor-Rad ist dafür ziemlich egal - wichtig ist nur die Zähnezahl, da Du so auf den Winkel rückschließen kannst, Den das Rad gedreht wurde - und daraus lässt sich die Geschwindigkeit mit etwas Dreisatz berechnen.
100 Impulse in 250ms ist für den Arduino nun keine sonderliche Herausforderung - aber ja, ich habe mir noch keinen größeren Kopf gemacht, wie oft die Reifen an meinem TöffTöff sich denn drehen, wenn ich über den dritten Gang hinaus komme
Dein Overflow-Timer wird Dich aber schwer enttäuschen, wenn das Rad vor dem Overflow keine Impulse mehr liefert.
Was spricht dagegen, von mir aus einen Timer in Hardware die Impulse zählen zu lassen.
Diesen Counter fragst Du alle x Millisekunden ab - da Dir der zeitliche Abstand der Abfragen bekannt ist, kannst Du so auch wieder auf die Geschwindigkeit rückschließen.
Auch wäre Das 'Stillstand-sicher' - dann hat der Counter eben bei zig Auslesevorgängen den gleichen Wert - könnte 'Geschwindigkeit Null' andeuten.
Ob's dafür einen weiteren Timer braucht, oder ob die Arduino-Board-Mittel dafür ausreichend genau sind - Versuch macht kluch.
Du meinst also einen Timer, der nur meine Impulse zählt und denn alle x Sekunden Abfragen. Ja ist eine gute Idee, die hatte ich auch schon mal. Einzigstes Problem, ich würde das wieder gerne mit einem Timer Abfragen, weiß aber garnicht wie ich zwei Timer einstellen kann, so dass sie beide laufen. Weißt du dazu was??
Einer der denn nur Impulse zählt und der andere der den Zählerwert nach zum Beispiel 250 millis ausliest und zurück setzt.
Wenn Dein Sketch nicht nur mit delay() aufgefüllt ist, kannst Du doch mit millis()-letztestartzeit>=wartezeit bei jedem loop()-Durchlauf prüfen, ob's jetzt Zeit ist - wofür noch einen Timer?
Wenn er einen Zähler möchte, der auch bei häufigen Ereignissen nicht die Übersicht verliert und die CPU nicht schon mit Zählen an's Limit bringt, ist ein Timer mit externer Clock sehr elegant.
Kostet NULL CPU-Power und ist selbst bei Tempo 300 noch lange nicht ausgereizt.
Timer auslesen, millis() seit dem letzten Auslesen checken und man hat Pulse pro Zeit -> Geschwindigkeit. Dann Timer auf Null, aktuelle Zeit merken und bis zur Nächsten Auslesung schön die Daten auswerten während der Timer zählt. Repeat.
In meinen Augen perfektes Szenario für so einen Timer.
Hallo alle zusammen, ich wollte nochmal eine Rückmeldung geben. Unzwar funktioniert es jetzt einwandfrei. Habe es noch nicht am auto selbst getestet, aber habe über einen programm den sensor simuliert. Die simulation hatte 50 mikrosekunden Abstände und es funktioniert ohne Probleme.
Habe es jetzt mit einem komparator gelöst wie ihr gesagt hattet, der meine Spannung vergleicht und denn schaltet. Das auslesen findet denn über den ICP1 pin statt der nur die takte zählt und über Timer 1 lese ich alle 250 millisekunden die takte aus und setzte sie zurück. Danke danke für eure Hilfe.