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
Interrupt ist nicht nötig, aber jeder Frequenzzähler braucht zwei Timer, das wird knapp für zwei unabhängige Frequenzmessungen.
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
Hier ein Frequenzzähler mit AVR2313 und HD44780-Display: http://www.birch.net/~petek/atmel/freq/freq.htm
Also ich muss hier zwei Frequenzen bis max 200 Hz einlesen und ein PWM ausgeben.
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.
>auf wieviele Stellen?
von 1 - 200 Hz ganzahlig reicht vollkommen aus
aber mal zwie, da ich 2 signale lesen muss
@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
@Falk
>Sinnvollerweis mit zwei ICP (Input Capture) Eingängen.
hast du direkt nen Controller im Kopf der die hat???
@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
@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
PSoC mit 16 Digitalmodulen = 16 * 8-bit Counter/Timer/PWM bzw. 8 * 16-bit Counter/Timer/PWM bzw. 4 * 32-bit Counter/Timer/PWM ...
@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.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.
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?
Ach ja: wenn schon umständlich, dann einen Analogschalter und die Frequenzen nacheinander messen. Dann braucht's halt 2s zur Messung, na und?
>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???
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
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
Vielen Dank schonmal für Eure Hilfe, ich werde mal versuchen dies in die Realität umzusetzen. Gruß, der Sepp
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.
>Kurvenapproximation
Zur Frequenzmessung? Ist das nicht etwas 'over the top'?
Eine Nulldurchgangserkennung täte es bei einem Sinus wohl auch, oder?
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, ...
Was haltet ihr vom XC866 HOT von infineon hört sich in diesem fall hier nach ner recht warmen angelegenheit an
@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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.