Das mit dem Draht um ein Zündkabel rum haben wir vor zig Jahren schon mal an einem Auto ausprobiert.
Es hat nicht vernünftig funktioniert.
Bei bestimmten Drehzahlen funktionierte die Anzeige bei höheren Drehzahlen wurde dann mal wieder gar nichts angezeigt, oder gar der doppelte Wert.
Da die Sensorwicklung ja nur hochohmig abgeschlossen werden kann scheiden Optokoppler zur galvanischen Trennung vom Zündkreis aus.
Als erstem solltest Du versuchen ein vernünftiges Signal aus deiner Sensorwicklung zu erhalten. Das sollte sich mit einem Oszilloskop und ein paar Widerständen als Last machen lassen.
Da sich der Zündstrom und somit die induzierte Spannung in deiner Sensorspule ändert musst Du auch einen Überspannungsschutz in deiner Schaltung einbauen. Ein Widerstand und eine Z-Diode sollten dieser Aufgabe gerecht werden.
Danach sollte eine Impulsformer - Schmitt Trigger oder Schwellwertschalter folgen um Controller gerechte Impulse zu kriegen.
Für eine so einfache Aufgabe wie einen Drehzahlmesser ist ein ATMEGA 32 eigentlich überdimensioniert. Ein ATMEGA 16 sollte den gleichen Zweck erfüllen und ist Pin Kompatibel zum M32.
Ich würde versuchen auf eine drehende Welle einen kleinen Magneten zu kleben und die Umdrehungen mit einem Hallsensor ( z.B. TLE 4905 ) abzufragen. Letzlich dürfte das einfacher zu bauen sein, als sich mit undefinierbaren Schwingungen in der Abnahmespule abzuplagen.
Zum Programm:
Prinzipiell gibt es zur Drehzahlerfassung mit einem AVR Controller mehrere Möglichkeiten.
1. Man verwendet die Taktimpulse deiner Abnahmeschaltung ( s. O. ) und nimmst die als Taktung für eine Timer her.
Ein zweiter Timer wird als Zeitbasis für 1 Sekunde verwendet.
Ist dieser zweite Timer abgelaufen, werden die gezählten Impulse des 1 Timers ausgelesen und dieser zurückgesetzt. Wenn Du diese Impulsanzahl mal 60 nimmst hast Du den Wert deiner Drehzahl.
Diese Variante dürfte die wenigste Rechenzeit des Controllers verbrauchen, das die Drehzahlerfassung fast komplett in Hardware läuft.
2. Die Taktimpulse werden auf einen Interrupteingang des Controllers geschaltet. In dieser Interruptroutine wird eine Variable hochgezählt.
Das Rücksetzen und Auswerten erfolgt wie bei Variante 1 uber einen 1 sek Timer.
3. Man lässt einen Timer frei laufen und ruft bei jedem Umdrehungsimpuls per Interrupt ( z.B. INT0 oder ICP ) eine Interruptroutine auf die diesen Timer ausliest und den Wert der vorherigen Umdrehungsberechnung abzieht. Der Vorteil dieser Methode ist, das man bei jeder Umdrehung eine Drehzahlberechnung durchführen kann ( =schnell ) . Allerdings verbraucht diese Methode auch die meiste Rechenzeit des Controllers.
Lesezeichen