Forum: Mikrocontroller und Digitale Elektronik Arduino Auslastung Tacho und Drehzahl messen


von Daniel E. (everyday_fun69)



Lesenswert?

Hallo in die Runde,

ich bin in den letzten Zügen mit einem Arduino Nano einen Tacho mit 
Drehzahlmesser zu bauen. Der Tacho funktioniert tadellos mit dem 2,4 
Adafruit TFT. Evtl. erinnert sich noch einer an den Post mit dem Display 
und zu langem schreiben der Zahlen wegen der Libary   …..  ? Das ist 
gelöst und eine große Zahl am Tacho schreiben dauert nun ca. 20 s und 
eine kleine 7 ms. Maximal also 47 ms und je nachdem wie schnell man 
fährt aller zig Sekunden die hunderter Meter als kleine Zahl.

Ein Timer (1ms) ist für das Zählen der ms bis zum nächsten Impuls/ 
Interrupt in Verwendung. Der zweite Timer derzeit für das Update vom TFT 
aller 0,2 oder 0,3 s glaub ich.

Nun habe ich 3-4 Windungen mal um das Zündkabel gemacht mit der 
anliegenden Schaltung. Das Signal sieht wie im Bild aus.

Zur Weiterverarbeitung bin ich mir nicht ganz schlüssig, ob ich mit dem 
Impuls einen Ausgang high setzen soll, der beim nächsten Impuls auf low 
geht, so dass ich mit pulseIn() die Zeit messe (Standgas 2000 upm) also 
30 ms warten oder ob ich den zweiten Interrupt nutzen sollte und mit der 
Flanke die Zeit hole und bis zum nächsten Impuls warte und wieder die 
Zeit hole und damit die Drehzahl berechne.

Bezüglich Prozessorauslastung/ Abarbeitung fehlen mir leider etwas die 
Erfahrungen und ich wäre für Hilfe/ Ratschläge dankbar.

Danke.

: Bearbeitet durch User
von Daniel E. (everyday_fun69)



Lesenswert?

es klemmte... anbei die Bilder

von Enrico E. (pussy_brauser)


Angehängte Dateien:

Lesenswert?

Schalte doch die beiden 4V7 Z-Dioden antiseriell, damit am Ausgang auch 
wirklich 4,7V erreicht werden.

Bei deiner Z-Diodenschaltung kommen die Impulse nie über 0,7V und die 
Flussspannung der Gleichrichterdiode wird so kaum erreicht.

Wenn die Gleichrichterdiode eine hohe Sperrspannung aushält, dann genügt 
auch eine einzige Z-Diode parallel zum Kondensator, weil sowieso nur 
positive Impulse ausgelesen werden.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?


von Thomas F. (igel)


Lesenswert?

Daniel E. schrieb:
> Zur Weiterverarbeitung bin ich mir nicht ganz schlüssig, ob ich mit dem
> Impuls einen Ausgang high setzen soll, der beim nächsten Impuls auf low
> geht, so dass ich mit pulseIn() die Zeit messe (Standgas 2000 upm) also
> 30 ms warten oder ob ich den zweiten Interrupt nutzen sollte und mit der
> Flanke die Zeit hole und bis zum nächsten Impuls warte und wieder die
> Zeit hole und damit die Drehzahl berechne.

So kompliziert, verstehe ich nicht.

Habe schon ein paar mal Drehzahlmessungen auf Atmegas gemacht:
Dazu benutzt man den Timer1 im Input Capture Mode:
https://www.mikrocontroller.net/articles/High-Speed_capture_mit_ATmega_Timer

Beim Auslösen des Interrupts wird der 16-Bit Wert einfach in einer 
Variable abgelegt.
Berechnung der Drehzahl erfolgt dann erst beim Refresh des Displays, 
also erst wenn man den Wert braucht.

Nutzt man dann noch den Overflow-Interrupt von Timer1 so kann man den 
Timer per Software von 16 auf 24 Bit erweitern. Damit habe ich schon 
Motordrehzahlen mit einer Genauigkeit von 2U/min und einer Samplingrate 
von 1000Hz auf einem Nano gemessen. Allerdings ohne Anzeige.

von Michael B. (laberkopp)


Lesenswert?

Daniel E. schrieb:
> Nun habe ich 3-4 Windungen mal um das Zündkabel gemacht mit der
> anliegenden Schaltung. Das Signal sieht wie im Bild aus.

Merkwürdig.

Eigentlich begrenzen die Dioden auf 0.7V, die nachfolgende frisst 0.7V 
und der Kondensator wird nie entladen, es sollte also eine Dauerspannung 
bon vielleicht 0.1V anliegen.

Ums nicht abgeschirmte Zündkabel vor dem Verteiler misst man 
normalerweise durch kapazitive Kopplung die Spannung, nicht den Strom. 
Es tut dann ein hochohmiger Vorwiderstand und die 'Spule' ist am anderen 
Ende gar nicht angeschlossen

Ein ordentlich programmierter AVR hat jedenfalls keinerlei Problem, 
motorentypische Drehzahlen und Tachogeschwindigkeiten zu messen, es wird 
üblicherweise sogar durch einen Kurbelwellensensor die 60-fache Frequenz 
gemessen. Man kann durch schlechte Programmierung natürlich auch einen 
3GHz Core damit überlasten.

von Daniel E. (everyday_fun69)


Lesenswert?

> So kompliziert, verstehe ich nicht.
>
> Habe schon ein paar mal Drehzahlmessungen auf Atmegas gemacht:
> Dazu benutzt man den Timer1 im Input Capture Mode:
> https://www.mikrocontroller.net/articles/High-Speed_capture_mit_ATmega_Timer
>
> Beim Auslösen des Interrupts wird der 16-Bit Wert einfach in einer
> Variable abgelegt.
> Berechnung der Drehzahl erfolgt dann erst beim Refresh des Displays,
> also erst wenn man den Wert braucht.


Klingt sehr gut, macht meine 1ms zählen überflüssig und bringt bei hohen 
Geschwindigkeiten noch mehr Genauigkeit, danke für den Hinweis 👍

von Daniel E. (everyday_fun69)


Lesenswert?

> Merkwürdig.
>
> Eigentlich begrenzen die Dioden auf 0.7V, die nachfolgende frisst 0.7V
> und der Kondensator wird nie entladen

🙄 stimmt, so war die Sache eigentlich nicht geplant …

der Kondensator ist sehr klein in der Kapazität, Wert muss ich schauen

von Mi N. (msx)


Lesenswert?

Daniel E. schrieb:
> Klingt sehr gut, macht meine 1ms zählen überflüssig und bringt bei hohen
> Geschwindigkeiten noch mehr Genauigkeit

Für Deine Anwendung ist ein Capture-Eingang nicht zwingend notwendig. 
Schon ein PCINT eines beliebigen Pins und ein 8 Bit Timer bringen genug 
Auflösung und Genauigkeit für diese niedrigen Frequenzen. Soetwas 
funktioniert dann schon auf einem ATtiny45.
Stichwort: reziproker Frequenzzähler.

von Daniel E. (everyday_fun69)


Lesenswert?

Hallo zurück,

so wie ich den Nano verstehe bietet dieser nur einen Capture INPUT IPC 
bei Pin 12/ 8 mit Timer 1. Damit kann ich ja genau die Drehzahl messen. 
Für die Radumfangsgeschwindigkeit/Zeit bräuchte ich einen zweiten 
Capture Eingang, welchen es nicht gibt.

Also entweder mit weiter die ms zählen oder ich müsste bei HIGH Signal 
einen Timer lesen und beim nächsten HIGH Signal nochmal und mir die 
zweit zwischen den Events ausrechen. Liege ich da richtig ?

Danke.

von Michael B. (laberkopp)


Lesenswert?

Daniel E. schrieb:
> Für die Radumfangsgeschwindigkeit/Zeit bräuchte ich einen zweiten
> Capture Eingang, welchen es nicht gibt.

Nein, brauchst du nicht, du musst nur programmieren können.

von Mi N. (msx)


Lesenswert?

Daniel E. schrieb:
> Für die Radumfangsgeschwindigkeit/Zeit bräuchte ich einen zweiten
> Capture Eingang, welchen es nicht gibt.

Mi N. schrieb:
> Für Deine Anwendung ist ein Capture-Eingang nicht zwingend notwendig.

Schon ein wenig betagt:
http://mino-elektronik.de/fmeter/fm_software.htm#bsp4

von Daniel E. (everyday_fun69)


Lesenswert?

>
> Nein, brauchst du nicht, du musst nur programmieren können.

Du meinst das ? bei HIGH Signal einen Timer lesen und beim nächsten HIGH 
Signal nochmal und mir die zweit zwischen den Events ausrechen?

von Falk B. (falk)


Lesenswert?

Daniel E. schrieb:
> Du meinst das ? bei HIGH Signal einen Timer lesen und beim nächsten HIGH
> Signal nochmal und mir die zweit zwischen den Events ausrechen?

Fast. Nicht bei HIGH, sondern bei einer Flanke, die man beim Input 
Capture einstellen kann. Der Timer läuft dauerhaft durch. Der Input 
Capture speichert den Zeitpunkt in Hardware, da kann die CPU das relativ 
entspannt auslesen, speichern und irgendwann berechnen.

von Daniel E. (everyday_fun69)


Angehängte Dateien:

Lesenswert?

Grüße in die Runde, den Timer 1 capture hab ich programmiert 👍 und mit 
dem Frequenzgenerator läuft es. Das signal geht final auf einen 
Komparator mit Hysterese, bei 4 V kippt er und Hysterese ist 1 V.

Die damalige Schaltung hat sich als ungünstig erwiesen und ich habe 
anliegende realisiert. Die 15 V Suppressordiode werde ich gegen 7-9 V 
Typ final tauschen.

Leider kommt es vor, dass die Spannung gelegentlich sehr lange ins Minus 
geht und dort verbleibt. Die Aufnahme anbei war mit einer 5.1 V 
Supressordiode gemacht.

Hat jemand eine Idee und Abhilfe ?

Vielen Dank.

von Frank E. (Firma: Q3) (qualidat)


Angehängte Dateien:

Lesenswert?

Hinweis: Man kann kleine Prozessoren gewaltig entlasten, wenn man 
intelligente ("HMI") Displays verwendet. NEXTION gibts auch in 2.4".

Diese Displays haben einen eigenen Controller und Speicher, werden per 
RS232/UART über Kommandos gesteuert. Vom Hersteller gibts eine grafische 
IDE dazu ...

: Bearbeitet durch User
von Peter* (nochgast)


Lesenswert?

Hallo,

Du solltest mal in der Fahrzeugelektronik suchen!
Eingangsstufe in CMOS 4000...11 aufbauen bzw. IMG-1922jpeg ! FF und 
Tiefpass, sicher kannst Du dann Impulse für die digitale Verarbeitung 
abgreifen.

Um 1970..75 hat man so gemessen. ELV Elektor Drehzahlmesser mit 
UAA170/180

von Mi N. (msx)


Lesenswert?

Daniel E. schrieb:
> Das signal geht final auf einen
> Komparator mit Hysterese, bei 4 V kippt er und Hysterese ist 1 V.

Die Eingänge eines ATmega haben schon einen Schmitttrigger mit einer 
Hysterese von einigen 100 mV. Siehe Datenblatt. Da muß man keine 
Schaltung verwenden, die nach Übersteuerung in irgendeiner Sättigung 
verharrt.
Zusätzlich kann man die Hysterese per Hardware vergrössern und auch noch 
eine Totzeit nach Erkennen eines Impulses einfügen.

von Peter* (nochgast)


Lesenswert?

Signalleitung über Diode an Plus bzw. GND. Dioden je nach Anforderung 
von einfach bis speziell.

von Egon (egon12345)


Angehängte Dateien:

Lesenswert?

Danke für das Feedback.

Leider hat sich noch keiner dazu geäußert, warum die Signallinie von 
Zeit zu Zeit ins negative geht ? Jemand eine Idee ?

von Wastl (hartundweichware)


Lesenswert?

Egon schrieb:
> Leider hat sich noch keiner dazu geäußert, warum die Signallinie von
> Zeit zu Zeit ins negative geht ?

Welche Schaltung? Und - auch sehr wichtig - wo angeschlossen?

Also bitte einen Gesamt-Schaltplan.

von Egon (egon12345)


Angehängte Dateien:

Lesenswert?

Dieser hier, alles mit Masse verbunden.

von Wastl (hartundweichware)


Lesenswert?

Oh mann .....

Wastl schrieb:
> Und - auch sehr wichtig - wo angeschlossen?

von Daniel E. (everyday_fun69)


Lesenswert?

Wastl schrieb:
> Oh mann .....

was oh mann? alle Massen sind verbunden, der Draht ist um das Zündkabel 
gewickelt, BNC Anfang ist die 15 V Z Diode gegen Schirm

das BNC Ende (gesamte Länge 1 m) ist am Fahrzeug einseitig an Masse 
angeschlossen, wo auch am Ende das Oszi mit der Diode dran angeschlossen 
ist.

Weitere Fragen ?

von Mi N. (msx)


Lesenswert?

Daniel E. schrieb:
> Weitere Fragen ?

Ja. Das Display weiter oben sieht so süß aus. Kann man das auch essen?
Ganz cool auch die Drehzahlanzeige; da ist wohl gerade der Rückwärtsgang 
eingelegt.

Wastl schrieb:
> Oh mann .....

Siehste, das haste jetzt davon! Was fragst Du auch für komisches Zeugs?

von Frank G. (frank_g53)


Lesenswert?

Egon schrieb:
> Jemand eine Idee ?

Die Eingangsstufe ändern?
Hiermit konnte ich vor langer Zeit prima die Drehzahl vom 50er Roller 
messen:
Beitrag "Zündimpuls Ottomotor mit Arduino UNO auswerten"

von Daniel E. (everyday_fun69)


Lesenswert?

> Hiermit konnte ich vor langer Zeit prima die Drehzahl vom 50er Roller
> messen:
> Beitrag "Zündimpuls Ottomotor mit Arduino UNO auswerten"

Danke für die Verlinkung, grundsätzlich ein Ansatz, ich vermisse 
eindeutig den Überspannungsschutz hierbei...

Er hat es gefunden.. Läuft es jetzt immer noch stabil oder überhaupt, 
wäre noch die Frage...

Danke

von Peter* (nochgast)


Lesenswert?

Hallo,

Egon
> Leider hat sich noch keiner dazu geäußert, warum die Signallinie...

oh doch, man muss sich nur freimachen von diesen fachmännischen 
Lesebewertungen!!

Die ganze Eingangsstufe ist falsch und unsinnig. Es soll die Spannung 
auf "15V" begrenzen??! (evtl. 3V3) Was ist das für ein Arduino? der wird 
gegrillt. Die Diode am Ausgang ist über, wenn so abgesichert wird wie 
von mir beschrieben. Ein CMOS Gatter hat dies intern schon, evtl. noch 
eine ESD Absicherung.--jahrelang damals im Betrieb.
Achtung: Feuchtigkeit und defekte Kabel sind immer der Tot der 
Schaltung!

Aber es gibt, wie auch schon von anderen da gelegt, weitaus bessere 
Kopplungsmöglichkeiten am Fahrzeug bis hin zum Lin- oder Can-Bus.

von Steve van de Grens (roehrmond)


Lesenswert?

Egon schrieb:
> Dieser hier, alles mit Masse verbunden.

Hier wird die Spannung auf +15V begrenzt. Das ist für den 
Mikrocontroller viel zu viel.

Der Eingang des Mikrocontrollers wirkt elektrisch wie ein Kondensator 
mit ca. 5 pF Kapazität.

Die Diode (oben rechts) leitet positive Spannung zum Mikrocontroller. 
Damit wir der Kondensator (im Mikrocontroller) geladen.

Um den Eingang wieder zu entladen, brauchst du weitere Bauteile, oder 
musst das per Software erledigen. Ansonsten bleibt der Eingang 
Stundenlang auf HIGH.

Negative elektromagnetische Felder werden von der Schaltung erst ab ca. 
-1,2V durch die beiden Dioden abgeleitet. Der Eingang des 
Mikrocontroller hat allerdings Schutzdioden, die schon ab 0,6V leiten.


Elektromagnetische Felder müssen nicht zwingend von der Zündleitung 
kommen, denn sie sind überall in der Luft vorhanden.

Es fehlt eine Strombegrenzung. Du riskiert, mindestens den 
Mikrocontroller zu zerstören, eventuell auch weitere Bauteile, die damit 
verbunden sind.

Es macht keinen Sinn, diese Schaltung ohne Mikrocontroller auszumessen. 
Dann misst du irgendwas, nur nicht das, was später funktionieren soll. 
Auch solltest du die Eigenschaften deines Messgerätes kennen und 
berücksichtigen, wie es das Signal beeinflusst. Meine Multimeter würden 
das Signal wahrscheinlich so stark verändern, dass die Schaltung während 
der Messung nicht funktioniert.

Ich habe den Eindruck, dass hier ein grundlegendes Verständnis von 
Stromkreisen fehlt.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.