Hallo liebe Helfer,
erstmal ein großes Kompliment an euch. Habe schon oft hier mitgelesen
und viele nützliche Tipps und Anregungen durch euch und dieses Forum
erhalten.
Auch für meine Schaltung, die mit einem Atmega16 Frequenzen messen soll,
was prinzipiell auch gut funktioniert, zumindest mit dem
Geschwindigkeitssignal oder einem Frequenzgenerator.
Benutze dazu die Input-Capture-Funktion des Timer 1, ausserdem habe ich
auch noch einen weiteren Timer als Zeitbasis laufen. Als
Geschwindigkeitssignal erhalte ich ca. 70Hz bei 100KMH, als
Drehzahlsignal sind es ca. 3,3Hz pro 100RPM. Diese Werte habe ich einem
Werkstatt-Handbuch meines Wagens entnommen und konnte diese auch mit
meiner Stromzange(mit Frequenzmessfunktion) verifizieren.
Das Messen des Geschwindigkeitssignals funktioniert tadellos. Sowohl
wenn ich im Capture-Interrupt nur die eintreffenden Flanken in einer
Variablen aufaddiere und über den anderen Timer jede Sekunde ausgebe und
zurücksetze, als auch über die Periodendauermessung mit ICR1.
Die Drehzahlmessung liefert mir hingegen keine brauchbaren Ergebnisse,
bei beiden Methoden nicht. Selbst bei der Zählmethode schwankt der Wert
(scheinbar willkürlich) um mindestens 25Hz pro Sekunde??? :/ Bei der
Periodendauermessung ändern sich die Werte so schnell, das ein Ablesen
vom Display gar nicht mehr möglich ist.
Beide Signale kommen auf demselben Weg (aber jeweils nur eins von
beiden)
in den Controller. Über einen 10K-Serienwiderstand an ICP(PB0) mit
aktiviertem Pullup.
Kann es wirklich sein, dass das Drehzahlsignal soviel mehr mit Störungen
behaftet ist als das Geschwindigkeitssignal und deswegen die Flanken
nicht richtig erkannt werden?? Das Drehzahlsignal kommt laut Schaltplan
aus dem ICM(Ignition Control Module), das Geschwindkeitssignal direkt
vom VSS(Vehicle Speed Sensor). Habe leider kein Oszilloskop zur Hand um
mir die Signale anzusehen.
Da die Stromversorgung meiner Schaltung noch nicht KFZ-fest ist,
betreibe ich den ATMega testweise über eine Batterie (Masse der Batterie
ist auch mit Fahrzeugmasse verbunden)
Wäre für jeden Tipp dankbar.
MFG
Danny
Hi Danny,
um zu beurteilen, warum das Drehzahlsignal nicht präzise gemessen wird,
wäre ein Oszilloskop schon sehr nützlich.
Variante a) Wenn Du ein Notebook und einen Line-/Mikro-Eingang hast,
dann könntest Du Umsonst-Software nutzen, die ein Oszilloskop mittels
Soundkarte realisiert (suche auf mikrocontroller.net). Mit über 40kHz
Abtastrate kann man Drehzahlsignale "messen" (zumindest qualitativ,
nicht unbedingt millivolt-genau) und darstellen (nur leicht verfälscht,
weil die gemeine Soundkarte keine Gleichspannungen messen kann).
Variante b) Mach einen kurzen Aufruf im Forum und schau, ob jemand in
Deiner Nähe mit einem Oszilloskop vorbeikommen mag. Musste nur sagen, wo
ungefähr Du wohnst; logisch. Derartige Begegnungen bringen auch noch
viele andere Mehrwerteffekte weil Leute mit Oszilloskopen vielleicht
schonmal selbst so eine Schaltung gebaut haben...
Variante c) Du könntest das Drehzahlsignal auch mit einem LM2917 in eine
Gleichspannung wandeln die Du mittels ADC misst. Diese LM2917 schlucken
schon ziemlich viele lutige Signalformen und sind auch für den rauen
KFZ-Alltag konzipiert. Keine prozentgenaue Messung, aber wer braucht das
schon?
liebe Grüße
318ishonk
Ohne Angabe der Ausgangsbeschaltung lässt sich wenig dazu sagen.
Ist diese für beide Signale wirklich identisch ?
Wie sind die Spannungspegel ?
Hängt am Ausgang des Geschwindigkeitssignals auch Dein realer Tacho ?
Ist ein Drehzahlmesser vorhanden oder ist der Drehzahlausgang evtl.
"offen" ?
Otto
Danny schrieb:> Beide Signale kommen auf demselben Weg (aber jeweils nur eins von> beiden)> in den Controller. Über einen 10K-Serienwiderstand an ICP(PB0) mit> aktiviertem Pullup
Damit verringerst Du schon mal den Störspannungsabstand. Der Atmel hat
sowieso schon eine ziemlich niedrige Schaltschwelle fürs Auto (Stichwort
Masseversatz).
Ich würde wie folgt vorgehen:
Amplitude des Drehzahlsignals ermitteln. Bei der niedrigen Frequenz gehe
ich mal davon aus daß es der Drehzahlausgang von der Motorsteuerung ans
Getriebe ist. (2 Pulse / TDC).
Über Spannungsteiler so anpassen daß der Atmel ca bei der halben
Spannung schaltet. Der Längswiderstand muß dabei den Strom auf 0,5 - 1mA
Begrenzen falls 12-16V anliegen.
Den internen Pull-up auf jeden Fall ausschalten. Falls ein Pull-up
benötigt wird dann einen externen verwenden je nach "Endstufe" an 5V
oder 12V. (Vor dem Serienwiderstand). Im Pull up dürfen im Auto ruhig
mal so 10 mA fließen. (Bei 12V ca 1 KOhm).
Die Masseleitung direkt vom ICM abgreifen um den Masseversatz gering zu
halten.
Falls das nicht ausreicht noch mit einem Filter-Kondensator
(Zeitkonstante ca 1 ms) filten + Schmitt Trigger verwenden.
Gruß Anja
Vielen Dank erstmal für die schnellen Antworten.
318ishonk schrieb:
> Variante a) Wenn Du ein Notebook und einen Line-/Mikro-Eingang hast,> dann könntest Du Umsonst-Software nutzen, die ein Oszilloskop mittels> Soundkarte realisiert
Die Idee mit dem Software-Oszilloskop hört sich verlockend an,
allerdings müsste ich da wohl auch erstmal eine geeignete
Schutzbeschaltung bauen, um die Soundkarte vor Schäden zu bewahren?!?
Otto schrieb:
> Ohne Angabe der Ausgangsbeschaltung lässt sich wenig dazu sagen.>> Ist diese für beide Signale wirklich identisch ?
Ja, ich habe eine Schraubklemme, die mit dem Capture-Eingang des Atmega
verbunden ist, dort kann ich dann abwechselnd entweder das Kabel vom
Geschwindigkeitssensor oder das vom Drehzahlmesser anschliessen.
Zwischen dieser Schraubklemme und den Kabeln mit den Signalen habe ich
noch ein Steckbrett dazwischen, wo sich momentan nur der
Serienwiderstand befindet.
Otto schrieb:
> Wie sind die Spannungspegel ?>> Hängt am Ausgang des Geschwindigkeitssignals auch Dein realer Tacho ?
Spannungspegel beim Drehzahlsignal liegt bei 12V, beim
Geschwindigkeitssignal muss ich morgen nochmal messen.
Ja, beide Signale sowie Masse habe ich direkt auf der Rückseite vom
Kombiinstrument an den Analoginstrumenten angezapft.
Anja schrieb:
> Über Spannungsteiler so anpassen daß der Atmel ca bei der halben> Spannung schaltet. Der Längswiderstand muß dabei den Strom auf 0,5 - 1mA> Begrenzen falls 12-16V anliegen.
Das mit dem Spannungsteiler zusammen mit dem RC-Filter + Schmitt-Trigger
werde ich mal ausprobieren, muss nur die Bauteile dafür noch besorgen
(ich sollte mir echt mal ein Sortiment zulegen) ;)
Aber wegem dem Spannungsteiler: Ich dachte für den Capture-Eingang wären
die 12V wegen der internen Schutzdioden kein Problem und nur ein
Serienwiderstand zur Strombegrenzung nötig?!?
Anja schrieb:
> Den internen Pull-up auf jeden Fall ausschalten. Falls ein Pull-up> benötigt wird dann einen externen verwenden je nach "Endstufe" an 5V> oder 12V.
OK, da das Drehzahlsignal eine Amplitude von 12V hat und der interne
Pullup nach 5V geht, leuchtet mir ein dass das eventuell Probleme geben
könnte (obwohl mir die Geschichte mit den Pullups immer noch nicht zu
100% klar ist).
Aber wenn ich jetzt einen Spannungsteiler auf 5 Volt hätte, wo wäre dann
der Vorteil eines externen Pullups im Vergleich zum internen??
MFG
Danny
Danny schrieb:> Aber wenn ich jetzt einen Spannungsteiler auf 5 Volt hätte, wo wäre dann> der Vorteil eines externen Pullups im Vergleich zum internen?
Nehmen wir mal folgenden Fall an. Dein Drehzahlausgang liefert als
Low-Pegel nicht 0V sondern 1V. (Vielleicht hast Du ja Glück und kannst
den realen Pegel bei Motorstillstand messen). Dein Serienwiderstand hat
10k der interne Pullup hätte ca 50k. -> an deinem CCP-Pin hast Du als
Low-Pegel 1V + (5V - 1V) * 10K (10K + 50K) = 1,666 V. Die Schaltschwelle
des Eingangs liegt bei 5V Versorgung irgendwo zwischen 1V und 3V (also
z.B. bei 2V) -> Dein Störspannungsabstand ist typ. 0,333V. (bzw. im
worst case -0,666V ... 1.333V)
Mit externem Pull-up gibt es keine Beeinflussung des Pegels am CCP-Pin
durch den Serienwiderstand -> Störspannungsabstand geht auf 1V typ (bzw.
Worst Case 0 .. 2V).
Mit Spannungsteiler 1:1 und externem Pull-up wäre der Low-Pegel am
CCP-Pin 0,5V und damit im sicheren Bereich.
Gruß Anja