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
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
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.
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.
@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
@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
>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.
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
@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
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.
@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
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.
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
@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?
Ich habe mal einen einfachen Drehzahlmesser gebaut:
http://www.ees-hartz.de/pwm/page8.htmlhttp://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.
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?
>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???
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, ;-))
@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
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. :-))))
@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.
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
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.
>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.
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, ...
@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! ;-)
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, ;-(
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 ...
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.
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.
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
@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ß