Forum: Mikrocontroller und Digitale Elektronik mC zur Frequenzmessung


von Sepp (Gast)


Lesenswert?

Hallo,

gibt es irgendeinen Microcontroller, mit dem ich direkt Frequenzen 
messen kann? oder muss ich das immer über nen Interrupt oder F/U-Wandler 
machen???

am besten wär ein mC mit direkt 2 Frequenzeingängen

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Interrupt ist nicht nötig, aber jeder Frequenzzähler braucht zwei Timer, 
das wird knapp für zwei unabhängige Frequenzmessungen.

von Owz (Gast)


Lesenswert?

Hallo!

µCs die direckt Frequenzen messen können sind mir nicht bekannt. Aber 
schau dir mal die Serie c8051f von Silabs an! Die haben Schnelle 
Hochauflösende ADCs und DACs im Bauch. Und es gibt fertige FFT rutinen 
für den Controller. Damit lässt sich vieles ohne großen Schaltungs- und 
Programieraufwand erschlagen.

mfg Owz

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Hier ein Frequenzzähler mit AVR2313 und HD44780-Display:
http://www.birch.net/~petek/atmel/freq/freq.htm

von Konrad (Gast)


Lesenswert?

dto. www.mino-elektronik.de/fmeter/fmeter.htm

von Sepp (Gast)


Lesenswert?

Also ich muss hier zwei Frequenzen bis max 200 Hz einlesen und ein PWM 
ausgeben.

von Peter D. (peda)


Lesenswert?


von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Wie genau muß die Messung sein, also auf wieviele Stellen?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

PWM braucht nochmal einen Timer, das wären dann normalerweise 5 Stück. 
Mit Tricksen läßt sich das sicher reduzieren, aber der normale AVR hat 
nur zwei, das wird sehr knapp.

von Gast (Gast)


Lesenswert?

Hi,
schau Dir mal die M16/Tiny Reihe an. Mit TimerB ist es definitiv 
machbar, wir messen mit dem TimerB am M16C26A Frequenzen bis 50kHz.
Evtl. kann man sogar die R8C-Reihe einsetzen. Bei Renesas sind 
Appl.-Notes (PWM-Messung etc.) erhältlich.

von Sepp (Gast)


Lesenswert?

>auf wieviele Stellen?

von 1 - 200 Hz ganzahlig reicht vollkommen aus
aber mal zwie, da ich 2 signale lesen muss

von Falk (Gast)


Lesenswert?

@Sepp

>auf wieviele Stellen?

>von 1 - 200 Hz ganzahlig reicht vollkommen aus
>aber mal zwie, da ich 2 signale lesen muss

Sinnvollerweis mit zwei ICP (Input Capture) Eingängen. Erzeugt praktisch 
kaum CPU Last. Dann braucht es nur noch zwei OCP (Output Compare) 
Ausgänge und fertig sind zwei PWMs. Und das alles mit einem einzigen 
Timer.

MFG
Falk

von Sepp (Gast)


Lesenswert?

@Falk
>Sinnvollerweis mit zwei ICP (Input Capture) Eingängen.

hast du direkt nen Controller im Kopf der die hat???

von Falk (Gast)


Lesenswert?

@Sepp

>>Sinnvollerweis mit zwei ICP (Input Capture) Eingängen.

>hast du direkt nen Controller im Kopf der die hat???

Hmmm, die "kleinen" AVRs nur einen ICP Eingang, für zwei braucht man 
einen AVR mit 2 16 Bit Timern (Mega64/128 etc.)

Wobei man es bei deinen relativ geringen Genauigkeitsanforderungen 
sicherlich auch mittels externem Interrupt machen kann. Wenn du 200 Hz 
(5ms) auf 1 Hz genau messen willst sind das immer noch 25us Messfehler 
die man sich erlauben kann. Das sollte mit 1 MHz Takt locker machbar 
sein. Dann tuts auch ein tiny2313.

MFG
Falk

von Sonic (Gast)


Lesenswert?

>PWM braucht nochmal einen Timer, das wären dann normalerweise 5 Stück.
Geht's nicht aiuch so (habe ich noch nicht probiert): Timer 0 für die 
Torzeit, Impulse über T1 dem Timer 1 zuführen, ICP (auch Timer 1) zur 
Messung der zweiten Frequenz benutzen. So brauchst du nur zwei Timer für 
zwei Frequenzen, bleibt Timer 2 für den (evtl. Software) PWM.

von Peter D. (peda)


Lesenswert?

Bei schnarchlahmen 200Hz brauchst Du keinen ICP oder Timer als Zähler, 
das geht ganz bequem mit nem externen oder Pin-Change Interrupt.

200Hz sind riesige 40.000 Zyklen bei 8MHz, da dreht der ATTiny25 nur 
Däumchen.

Vielleicht ihn nebenbei noch Schach spielen lassen, damit er sich nicht 
so langweilt.


Peter

von Sepp (Gast)


Lesenswert?

?????????????????????

>Pin-Change Interrupt

?????????????????????

von Falk (Gast)


Lesenswert?

@Peter Dannegger

>Bei schnarchlahmen 200Hz brauchst Du keinen ICP oder Timer als Zähler,
>das geht ganz bequem mit nem externen oder Pin-Change Interrupt.

>200Hz sind riesige 40.000 Zyklen bei 8MHz, da dreht der ATTiny25 nur
>Däumchen.

Du hast das Posting vom Sepp gelesen? Du hast meins gelesen?

Es geht um zwei Eingänge mit Frequenzzählung und auch bei der relativ 
geringen Genauigkeit kommt man schon in relativ kleine Zeitfenster (25 
us).

>Vielleicht ihn nebenbei noch Schach spielen lassen, damit er sich nicht
>so langweilt.

Natürlich hat der uC fast nix zu tun, aber wenn man mehrere Dinge 
parallel in Software machen will kann es einem bisweilen böse 
Verzögerungen reinhauen (wenn mehrere Interrupts aktiv sind).

MfG
Falk

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Den Pin-change-Interrupt könnte man mit einem Timer-Interrupt z.B. alle 
25us simulieren. In der Interruptroutine werden Änderungen seit dem 
letzten Aufruf registriert. Die Zahl der Interrupts bis zum übernächsten 
Wechsel an einem Pin ergibt die Periodendauer.

von Falk (Gast)


Lesenswert?

@Christoph Db1uq

>Den Pin-change-Interrupt könnte man mit einem Timer-Interrupt z.B. alle
>25us simulieren. In der Interruptroutine werden Änderungen seit dem

So kann man auch CPU-Leistung verheizen . . . ;-)

MFG
Falk

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Na aber z.B. 8 Frequenzzähler mit nur einem Timer, da bleibt noch einer 
für die PWM übrig. Port einlesen, mit dem vorherigen Zustand EXORen, 
wenn keine Änderung war ist das Zeroflag gesetzt, Interruptzähler eins 
weiter zählen, fertig, das geht in weit weniger als 25 us.

von Peter D. (peda)


Lesenswert?

Falk wrote:

> Es geht um zwei Eingänge mit Frequenzzählung und auch bei der relativ
> geringen Genauigkeit kommt man schon in relativ kleine Zeitfenster (25
> us).

Wenn man nur eine Periode mißt, können es 25µs (= 200 Zyklen) 
Unterschied sein, sollte trotzdem reichen.

Da er aber bis zu 1Hz runter messen will, reicht ihm also eine Meßrate 
von 1 Messung pro Sekunde aus, d.h man kann bei 200Hz über mehrere 
Perioden messen und hat dann wieder wesentlich mehr Auflösung. Damit ist 
es dann von der CPU-Zeit gesehen völlig unkritisch (C-Programm selbst 
bei 1MHz Quarz möglich).

Beim ATtiny25 kann man für die beiden Eingänge den externen Interrupt 
und den  Comparatorinterrupt nehmen.


Peter

von Falk (Gast)


Lesenswert?

@Christoph Db1uq

>Na aber z.B. 8 Frequenzzähler mit nur einem Timer, da bleibt noch einer

Hier gehts aber nur um zwei!

MfG
Falk

von Marko B. (glagnar)


Lesenswert?

PSoC mit 16 Digitalmodulen = 16 * 8-bit Counter/Timer/PWM bzw. 8 * 
16-bit Counter/Timer/PWM bzw. 4 * 32-bit Counter/Timer/PWM ...

von Obelix (Gast)


Lesenswert?

@Falk

>Es geht um zwei Eingänge mit Frequenzzählung und auch bei der
>relativ geringen Genauigkeit kommt man schon in relativ kleine
>Zeitfenster (25us).

Mit 8MHz getakteten AVR ist es wohl auch ohne Probleme möglich 1000 
Frequenzen bis 200Hz zu messen (theoretisch natürlich nur, oder gibt es 
auch einen AVR mit 1000 Pins ;-) ).
Wie kommst du auf 25µs?

von F.H. (Gast)


Lesenswert?

Ich habe mal einen einfachen Drehzahlmesser gebaut:

http://www.ees-hartz.de/pwm/page8.html
http://www.ees-hartz.de/

______________________________________________
Obelix:
Mit 8MHz getakteten AVR ist es wohl auch ohne Probleme möglich 1000
Frequenzen bis 200Hz zu messen (theoretisch natürlich nur, oder gibt es
auch einen AVR mit 1000 Pins ;-) ).

Tausend Pins kann man ja noch locker Multiplexen,aber dann wird es wohl 
knapp,mit der Zeit,ich habs noch nicht ausprobiert.

von Sonic (Gast)


Lesenswert?

Ich hab's doch oben geschrieben, wozu sind die Eingänge T0 und T1 da? 
Und der ICP? Genau! zum Frequenzen oder Impulse messen! Also warum so 
umständlich?

von Sonic (Gast)


Lesenswert?

Ach ja: wenn schon umständlich, dann einen Analogschalter und die 
Frequenzen nacheinander messen. Dann braucht's halt 2s zur Messung, na 
und?

von Sepp (Gast)


Lesenswert?

>Da er aber bis zu 1Hz runter messen will, reicht ihm also eine Meßrate
>von 1 Messung pro Sekunde aus, d.h man kann bei 200Hz über mehrere
>Perioden messen und hat dann wieder wesentlich mehr Auflösung.

1s wird wahrscheinlich knapp, da ich die Frequenzen zur erkennung von 
Schlupf benötige, und diesen innerhalb 0,1s ausregeln muss.

Würde es vieleicht einfacher gehen, wenn ich einfach zwei F-U-Wandler 
benutze um die Frequenzen dann über je einen analogpin einzulesen?

oder bin ich dann noch langsamer???

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Eine Frequenz von 1 Hz kann man schlecht in 0,1 Sekunden messen, da hat 
Peter schon recht. Wenn es symmetrisch wäre, würde eine haölbe Sekunde 
reichen

von Sepp (Gast)


Lesenswert?

stimmt auch wieder

von Christian (Guest) (Gast)


Lesenswert?

Wenn es ein Sinus ist kann man das messen:

Bsp:
abtasten mit 100 fachem oversampling
und den sinus approximieren

wo ist das Problem?

Man braucht keinen kompletten sinus, um den sinus
zu bestimmen, ;-))

von Sepp (Gast)


Lesenswert?

ist aber ein rechtecksignal

von Falk (Gast)


Lesenswert?

@Obelix

>Mit 8MHz getakteten AVR ist es wohl auch ohne Probleme möglich 1000
>Frequenzen bis 200Hz zu messen (theoretisch natürlich nur, oder gibt es
>auch einen AVR mit 1000 Pins ;-) ).

Kaum. Auch nicht mit 1000 Pins.

>Wie kommst du auf 25µs?

Ganz einfach. Siehe mein Posting.
"Wenn du 200 Hz (5ms) auf 1 Hz genau messen willst sind das immer noch 
25us Messfehler die man sich erlauben kann."

@Sonic

>Ich hab's doch oben geschrieben, wozu sind die Eingänge T0 und T1 da?

Mit T0 und T1 kannst du die Freqenz messen (Messung der Takte pro 
Zeitfenster) aber nciht die Periodendauer.

>1s wird wahrscheinlich knapp, da ich die Frequenzen zur erkennung von
>Schlupf benötige, und diesen innerhalb 0,1s ausregeln muss.

Womit du min. 10 Hz am Eingang brauchst.

>Würde es vieleicht einfacher gehen, wenn ich einfach zwei F-U-Wandler
>benutze um die Frequenzen dann über je einen analogpin einzulesen?

NEIN! Das wäre vollkommener Unsinn, ein digitales Signal in anlaog zu 
wandeln und dann wieder zu digitalisieren.

>oder bin ich dann noch langsamer???

JA!

@Christian

>Wenn es ein Sinus ist kann man das messen:

>Bsp:
>abtasten mit 100 fachem oversampling
>und den sinus approximieren

>wo ist das Problem?

Ganz einfach. Dein Schuss aus der Hüfte geht direkt in den Fuss.

>Man braucht keinen kompletten sinus, um den sinus
>zu bestimmen, ;-))

Wirklich? Das klappt bestenfalls wenn Amplitude und Frequenz bekannt 
sind, anderenfalls siehe oben. Und in dem Fall raucht es keine Messung.

MFG
Falk

von Sepp (Gast)


Lesenswert?

Vielen Dank schonmal für Eure Hilfe, ich werde mal versuchen dies in die 
Realität umzusetzen.

Gruß, der Sepp

von Christian (Guest) (Gast)


Lesenswert?

Zu Falk:

Kurvenapproximation

3 Variable:
Ampli.
Frequenz
Phase

Wieviel Messwerte braucht es da?

Die 100 Sample war nur so, ;-))
Überabtastung ist aber wichtig: wegen Abtasttheorem.


Wenn mein Schuß in den Fuss geht, .... :-))  lol....


Mal doch mal 3 Punkte auf ein Blatt papier und versuch mal
per hand einen Sinus da anzupassen.

Es gibt pkts, da geht es nicht.
Bei Überabtastung ist es eher eine Frage der Genauigkeit-
die wurde nicht benannt, und die per Software analysiert
(Ermittelt) werden kann.

Guten Morgen
c.  :-))))

von Johnny (Gast)


Lesenswert?

mC = Milli-Controller
uC = Mikro-Controller

:-)

von Sonic (Gast)


Lesenswert?

@Falk:
>Mit T0 und T1 kannst du die Freqenz messen (Messung der Takte pro Zeitfenster) 
aber nciht die Periodendauer.

Brauchste auch nicht für eine Frequenzmessung. Die Periodendauer-Messung 
ist bei niedrigen Frequenzen sinnvoll, weil hohe Auflösung, dagegen ist 
die Torzeit-Messung bei höheren Frequenzen besser aufgelöst. Eine 
Umschaltung der beiden Messverfahren am Punkt, an dem beide Auflösungen 
gleich sind ist sinnvoll.

von Sonic (Gast)


Lesenswert?

>Kurvenapproximation

Zur Frequenzmessung? Ist das nicht etwas 'over the top'?
Eine Nulldurchgangserkennung täte es bei einem Sinus wohl auch, oder?

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Sonic
erst lesen - es geht um die Frage, ob man schon aus einem Teilstück 
einer Sinusschwingung deren Frequenz bestimmen kann, bevor zwei (drei) 
Nulldurchgänge um sind

von Sonic (Gast)


Lesenswert?

Also wenn ich das richtig interpretiere will er eine Antischlupfregelung 
oder Ähnliches bauen. Da sollte der Frequenzbereich per Geber auf ein 
vernünftiges Fenster geplant werden.
ich habe sowas mal für ein RC-Car gebaut, vier Frequenzen per Hallsensor 
gemessen (an jedem Rad), ausgewertet und die Regelung realisiert.

von Sepp (Gast)


Lesenswert?

>Also wenn ich das richtig interpretiere will er eine Antischlupfregelung
>oder Ähnliches bauen.

Richtig!

Ich habe einen Drehgeber antriebsseitig und einen abtriebsseitig an ner 
kuppeleinheit wenn nun ne blockade am abtrieb auftritt wird diese freq 
langsamer also hab ich schlupf, nu muss ich mit dem pwm ein ventil zum 
regeln einer hyd schalteinheit ansteuern, die dann den schlupf ausregeln 
soll.

von Christian (Guest) (Gast)


Lesenswert?

Zu Sonic:

Kurvenapprox.

Ja, etwas hoch im Aufwand - aber ggf. sehr schnell.

zB 0.1 Hz kann man damit in wenigen sekunden ermitteln.

Wenn man Power hat (die uCs können ja einiges)
führt das zu einer schnelleren Freq.-bestimmung.

- Nulldurchgang ist einfacher, ;-))
   aber ich warte dann auch 2 Nullen lang
Vorteil:
  die "quarzgenaue Messung"

- FFT bei n Freq.
usw.

Vorteil bei dem obigen überabtasten (Kurvenapp)
ist auch die schnellere Erkennung der Freq.-änderung:
  der Sinus ist halt anders
Vorsicht:
  die Auflösung (ADU)
  und der Abtastzeitpunkt sind dann ggf. krit.!!

Ich habe nicht alle Beiträge gelesen - falls dieser nicht passt, sorry!
Ist primär als Antwort zu  SONIC gedacht.

c.

p.s.:
falls der ADU permanent mitläuft, geht das noch einfacher & schneller!
Aber bevor ich jetzt wieder ins Bein/Fuß schieße, .....

p.s.s.:
MC  = Mikrocontroller
uC  = Mikrocontroller
Beides wird verwendet - zumind. in Bücher, ...

von Gast (Gast)


Lesenswert?

Was haltet ihr vom XC866 HOT von infineon hört sich in diesem fall hier 
nach ner recht warmen angelegenheit an

von Sonic (Gast)


Lesenswert?

@Christian:
Haste schon Recht, das geht mit etwas mehr Aufwand recht gut, bei Sinus 
oder Dreiecksignal für Frequenzen <1Hz durchaus empfehlenswert.
Für die über 1Hz würde ich empfehlen nur die Eingangsimpulse zu zählen. 
Wenn zum Abtastzeitpunkt eine Differenz besteht habe ich Schlupf. Den 
Umweg über die Frequenz muss ich gar nicht gehen.
So würde ich das machen, bin von Haus aus faul! ;-)

von Christian (Guest) (Gast)


Lesenswert?

Hab' obiges erneut "überflogen"

da er 1-200 Hz hat, meßbar in 1,2,3,... 200 Hz (ganzzahlig)

das in 0,1 sek. haben will & (eine Zeile; rechtecksignal ist)
geht das ganze nicht.

ZB:
bei 1 Hz ist ein Rechtecksig. länger als 0,1 Sek
1 oder 0
=> nicht machbar
Erst ab höheren Frequenzen, kann er sein Ziel:
nach 0,1 Sek die Freq. zu haben,
erreichen, ;-).

Ich bin von einem Sinus ausgegangen, dann würde es gehen.

Gruss & ciao,
c.

p.s.: schön wäre es gewesen, wenn die Randbed. komplett im
1. Beitrag ständen, ;-(

von Sepp (Gast)


Lesenswert?

Randbed

hyd beauschlagte Reibkup. antriebsseite und abtriebsseite der einheit 
werden über sechs zähne signale erzeugt. bei einem f-unterschied von 
mehr als sagen wir 30% soll schlkupf erkannt werden bei erkennen soll 
der öldruck in der Kuppeleinheit geregelt werden PID -> PWM -> 
Propventil. strategie, lüften schließen ...

von Christian (Guest) (Gast)


Lesenswert?

Das ist ein Teil der Randbed. ;-)

Lastwechsel, etc. wären auch gut - aber damit kann ich so
nichts anfangen: weil nicht vom Fach!



Anregung/Motto:
  wenn eine Seite festgehalten wird (max. Last zu groß?)
  dann kann ich die 30% Abweichung der Umdrehung durch
  einen Zeitversatz des erwarteten Signalwechsels des Ausgangs
  rel. zum Eingang ermitteln:
dazu brauche ich:
  Freq. (besser die aktuelle Umdrehung/sek)
dann per uC:
  30 % bedeutet n Sek bis zum Signalwechsel

Einfacher:
  wenn am eingang ein Wechsel nach 100 msec stattfindet,
  muss am Ausgang ein wechsel nach max 130 msec stattfinden - sonst 
regeln
Aber achtung:
  wenn eine Große Masse am Ausgang, kann eingang langsamer sein
als ausgang - was dann ?


Ich hatte gerade in einem andern Beitrag
auf SCILAB/SCICOS hingewiesen, damit könnte man ggf.
so etwas simulieren = Aufwand.

Die Frage ist,
Wie sicher & schnell kann man die 30 % erkennen?
(deine Frage, ;-)

=>  1. Freq. bestimmung/ besser Zeiten der Pegeländerung) +
2. Damit dann die 30 % unterschied

(es liegen nur rechtecksig. vor ?
oder werden die Zähne so gemessen, dass da das Signal
   "recheckähnlich" ist?
das würde für die Auswertung ggf. mehr möglichkeiten liefern?

Die Freq. wird eigentlich nicht benötigt -nur die
Zeiten der Nulldurchgänge, ;-)
(dies kann bei schnellen Änderungen des Antriebs relevant sein)


GRuss,c.

von Christian (Guest) (Gast)


Lesenswert?

pid + pwm + ventil

Das ventil ist ggf. auch ein "I" + totzeit.

Die PWM braucht etwas Zeit (vermutl nicht rel., da schnell)
Der Antrieb dann auch
Das Ventil: es strömt etwas rein und fängt an zu wirken.

Anregung:
Beim modellieren/auslegen des Reglers kann das relevant sein
weil kleines Ventil braucht viel Zeit, bis die Wirkung "wirkt", ,-)


gruss, c.

von Sepp (Gast)


Lesenswert?

Die Lastwechsel spielen vorerst keine Rolle.

Die Kuppl. befindet sich im Antriebsstrang für eine Kreselegge.

Bei diesem Projekt geht zur Zeit nur Um die Realisierung der 
Schlufperkennung und die beseitigung durch ab und einschalten der 
kupplung über einen hydZylinder

von Börny (Gast)


Lesenswert?

@Sepp
Hallo Sepp.
Vielleicht bist du ja noch in deinem Beitrag aktiv.
Ich versuche auch mit meinem Team angehender Techniker etwas ähnliches 
zu realisieren.
Es geht um Elektrofahrzeug, bei dem ich ganz einfach in den Sollwertpoti 
eingreifen kann.
Das größere Problem ist also die auswertung der Raddrehzahlen:
Die Abfrage soll auch über hallsensoren erfolgen.
Hast du damals eine funktionstüchtige Lösung entwickelt?

Oder kann mir vieleicht jemand anderes einen fortgeschritten 
Lösungsansatz bieten?

Gruß

von Linker (Gast)


Lesenswert?


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.