Forum: Mikrocontroller und Digitale Elektronik 4-Kanal Drehzahlmessung mit ATmega88


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

In den letzten Monaten wurden hier Schaltungen für reziproke 
Frequenzzähler vorgestellt, die nach Möglichkeit höchste Frequenzen bei 
möglichst vielen angezeigten Stellen bieten sollten.
Siehe:
Beitrag "Frequenzzähler 1Hz - 40MHz"
oder auch
Beitrag "PIC - Frequenzzähler weit über 50 MHz auf die minimalistische Art"

Für niedrige Frequenzen haben diese jedoch den Nachteil, daß zwischen 
den einzelnen Messungen immer Lücken vorhanden sind, um neu zu 
synchronisieren. Bei 1 Hz Eingangsfrequenz wird daher nur jede zweite 
Periode erfaßt.

Zu "immer schneller, weiter, höher" ist hier ein Gegenentwurf, der sich 
speziell für tiefere Drehzahlen / Frequenzen eignet und diese lückenlos 
erfaßt und auswertet. Anstatt ein einzelnes Signal zu messen werden hier 
4 Kanäle mit je 5-stell. Auflösung gleichzeitig gemessen. Genau genommen 
ist es also eine Messung mit 20 Stellen (4 x 5) und damit doch wieder 
ein neuer Rekord :-)
Die angehängte .c-Datei wurde unter AVR-Studio 4.18 erstellt. Benutzt 
werden die float-Routinen, die AVR-GCC zur Verfügung stellt. Es findet 
keinerlei Programmierung in Assembler statt. Mit 5,5KB Code läßt ein 
Atmega88 noch genug Platz für eigene Anpassungen.

typ. Daten:
4 Eingänge für Drehzahlen von 1 U/min – 1000000 U/min
gleichzeitige Messung aller Eingänge
3 Messungen/s oder min. ein Eingangsimpuls (<180.00 U/min)
5 gültige Stellen
5-stellige Anzeige bis 99999, darüber hinaus 6. oder 7. Ziffer als '0'

zur Schaltung:
Die Schaltung benötig nur wenige Bauteile: Atmega88 + LCD 16x2 + 
Kleinteile
Die Signale werden an den Eingängen PC.2 – PC.5 (1.Kanal – 4.Kanal) 
erwartet. Pullups sind aktiviert, sodaß Hallsensoren oder prellfreie 
Signalquellen direkt angeschlossen werden können.
Die LC-Anzeige nebst Programmierstecker werden lt. Schaltbild 
angeschlossen.

Zum Programm:
Die Eingangsimpulse lösen den PCINT1-Interrupt aus, welcher nur die 
negativen Flanken wertet. Fortlaufend erfaßt werden die Anzahl der 
Impulse und der Zeitpunkt des letzten Impulses.
Gleichzeitig wird grob ermittelt, wie lange die laufende Messung 
andauert. Die Überläufe von T1 im 3,3ms Raster werden dazu genutzt. Dies 
geschieht für alle vier Kanäle gleichzeitig.

Die Auswertung erfolgt mit den Differenzen der Anzahl der Impulse und 
der Zeit  (Endwert – Startwert). Abschließend werden die aktuellen 
Endwerte als Startwert für die nächste Messung abgelegt. Auf diese Weise 
geht kein Eingangsimpuls verloren. Der Zähler der Messdauer wird 
gelöscht und die neue Mindestzeit abgewartet.

Auswertung und Anzeige eines Signals erfolgen hier asynchron zu den 
Eingangsimpulsen; daher müssen folgende Bedingungen eingehalten werden:
1. eine Mindestzeit von 0,33 Sekunden ist seit der letzen Auswertung 
verstrichen
2. mindestens ein Eingangsimpuls ist aufgetreten
3. zwischen Beginn der Messung und letztem Impuls ist eine Mindestzeit 
abgelaufen.

zu 1. Für eine 5-stellige Auflösung bei 330ms (Mindest-)Messdauer muß 
die Zeit auf 3,3µs genau erfaßt werden. Die PCINT1-Routine 'schafft' 
dies, wobei die Dauer des Interrupts auch vom gleichzeitigen Auftreten 
der Eingangsimpulse abhängt. Selbst wenn die 3,3µs überschritten werden, 
ist dies kaum nachteilig, da eine Anzeige immer mit +/- 1 Digit gewertet 
werden sollte.

zu 2. Ohne Eingangsimpuls kann natürlich nichts gemessen werden. Nach 60 
Sekunden ohne Eingangsimpuls (timeout), wird die Anzeige des Kanals 
gelöscht (Anzeige von "-.-").

zu 3. Gleich zu Beginn einer neuen Messung kann zum Beispiel nach 1ms 
ein Impuls eintreffen und danach kein weiterer. Bedingungen 1. und 2. 
wären erfüllt, das eff. Meßintervall aber zu kurz, um daraus fünf 
gültige Stellen abzuleiten. Im Programm wird daher ein Mindestintervall 
von 250ms vorgegeben (F_CLOCK/4).

Angezeigt werden die vier Kanäle auf einem 'üblichen' 16x2 Display, was 
aber wenig Raum für formatierte Ausgaben bietet. Drehzahlen von 1.0000 – 
99999 werden dimensionslos mit korrekter Auflösung gerundet angezeigt. 
Um Werte von 100000 –  5000000 (max. bei nur einem Kanal) unverstümmelt 
auszugeben, werden die 6. oder ggf. 7. Stelle als '0' angezeigt.
Wem dies nicht gefällt kann eine andere Anzeige verwenden 
(beispielsweise 4 x 20) und das Ausgabeformat optimieren.  Wie dies 
gehen könnte, wird hier gezeigt:
Beitrag "einfache Drehzahlmessung mit ATmega88"

Wer weitergehende Informationen zum Meßverfahren braucht oder 
speziellere Problemlösungen sucht, kann sich hier umsehen:
http://www.mino-elektronik.de/fmeter/neue_versionen.htm

Das Programm ist ganz frisch und braucht noch einen abschließenden Test. 
Anregungen, konstruktive Kritik und Erfahrungsberichte würden mich 
freuen.

von m.n. (Gast)


Angehängte Dateien:

Lesenswert?

Nach dem langen Text noch zwei Fotos der Anzeige, die die Funktion 
verständlicher machen.
1. Der Startbildschirm mit der Kanal-Zuordnung und 2. die Messergebnisse 
mit 5-stelliger Auflösung auch bei sehr niedrigen Drehzahlen.

von interesse (Gast)


Lesenswert?

Kann ich das ganze in 6 Fach ausführung bauen mit einem attiny2313 und 
die Werte per uart senden?

von Michael H. (michael_h45)


Lesenswert?

nein.

von Bastler (Gast)


Lesenswert?

interesse schrieb:
> Kann ich das ganze in 6 Fach ausführung bauen mit einem attiny2313 und
> die Werte per uart senden?
Das kommt drauf an, wie gut du mit µC-Programmierung umgehen kannst.
Noch wird der UART nicht benutzt ;-)

von m.n. (Gast)


Lesenswert?

interesse schrieb:
> Kann ich das ganze in 6 Fach ausführung bauen mit einem attiny2313 und
> die Werte per uart senden?

Wegen der Codegröße müßte es mindestens ein ATtiny4313 sein, wenn man es 
kompakt programmieren kann.

Mit einem ATmega88 ist man aber auch bei ungeschickter Programmierung 
auf der sicheren Seite.
Man kann ein 2x20 oder 2x40 Display nehmen, wenn alle Werte gleichzeitig 
ablesbar sein sollen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.