Forum: Mikrocontroller und Digitale Elektronik Ultra low power frequenzmessung /-analyse


von tiptop (Gast)


Lesenswert?

Hallo,

ich hätte da mal einigen Fragen, da ich noch nicht der erfahrenste auf 
diesem Gebite bin.
Und zwar möchte ich gerne die Fequenz (Frequenzband zwischen 10 und 400 
kHz) eines Sensorsignals mit einem Controller messen und gegebenenfalls 
auch genauer anlysieren (z.B. FFT).
Allerdings soll der Controller sich die meiste Zeit im Sleep mode 
befinden um Energie zu sparen, da die gesamte Anwendung auf Low Power 
getrimmt sein soll. Daher kann ich nicht permanent die Eingänge abfragen 
bzw. eine A/D-Wandlung vornehmen. Meine Idee ist nun, dass Signal 
zunächst über analoge Filter entsprechend zu begrenzen (auch hier bin 
ich noch nicht der erfahrenste) und anschließend auf einen Integrator 
laufen zu lassen. Hieran soll sich dann ein Komparator anschließen, der 
halt schaltet, wenn der Integrator einen entsprechenden Wert erreicht 
hat und somit dem Controller das Signal gibt aus seinem Sleep Mode 
(Ext.Interrupt) aufzuwachen, um das Signal digital zu wandeln bzw. 
weiter zu verarbeiten. Meine grundsätzliche Frage ist, ob das 
prinzipiell so funktionieren kann.
Die nächste Frage ist, ob es da nicht elegantere, sprich 
energieeffizientere Wege gibt. Das Ding ist halt, dass nur Signale mit 
bestimmter Amplitude oder Frequenz genauer untersucht werden sollen, der 
Sensor aber durchaus auch uninterressantere Frequenzen ausspuckt.

Der nächste Punkt ist, ob man durch den Einsatz digitaler Filter unterm 
Strich nicht evtl. weniger Energie verbraucht, da die analoge Filterung 
ja auch nicht ohne Energie auskommt.

Ich kanns leider noch nicht genauer beschreiben (z.B. Controllertyp), da 
ich noch in den Vorüberlegungen zu dieser Thematik stecke und da evtl. 
auch noch ein wenig grün hinter den Ohren bin. Ich brauch ganz einfach 
Meinungen und Input von erfahrenen Leuten.

Schonmal Danke für die hoffentlich zahlreichen Antworten.

Gruß

von Alexander L. (lippi2000)


Lesenswert?

Also ein paar Angaben musst du schon noch machen.

Frequenzbereich soll 10k-400kHz sein. D.h. du benötigst eine Abtastrate 
von mindestens 1.6MHz damit deine Amplitude bei 400kHz nicht schon stark 
gedämpft ist. Da kannst du jetzt schon mal die internen ADC's bei den 
8-Bit'ern vergessen. (Atmel liegt glaub ich bei 200kSPS.) Sprich 
externer ADC. Als nächstes sollte klar sein welche Auflösung und 
Messbereich du realisieren willst.
Klar sein sollte, dass du mit die FFT erst nach dem Samplen durchführen 
kannst. Hier ist gleich der nächste offene Punkt: Wieviele Sample willst 
du am Stück abspeichern? In welchen Abständen wird eine Messung erneut 
gestartet? Eine FFT-Berechnung dauert einige Berechnungszeit. Wie willst 
du die Daten auslesen?

Zu deinem LowPower-Modus:
Was willst du mit einem Integrator? Wenn du ein AC-Signal hast, kommt da 
nix raus. Entweder du triggerst mit einem Komparator auf einen 
Signalpegel oder du willst exakte Messraten realisieren und verwendest 
die internen Timer.

von Ulrich (Gast)


Lesenswert?

Wenn man nur an jeweils einem kleinen Frequenzbereich interessiert ist, 
könnte man das Signal ersteinmal analog durch mischer in einen besser zu 
handhabenen Frequenzbereich von z.B. 1-10 kHz bringen. Man ist dann aber 
auf jeweils einen kleinen Frequenzbereich eingeschränkt. Eventuell macht 
es auch sinn 2 mixer zu nehmen und dann mit I und Q Signal zu arbeiten.

Damit würde man wahrscheinlich mit dem internen AD-wandler und weniger 
Speicher und Rechenoperationen auskommen. Ob dieser Weg sinn mahct, 
hängt aber vom Sensorsignal und der geplanten Analyse ab. Ist auch etwas 
die Frage was mit ultra low power gemeint ist und wie schnell es gehen 
soll.

von tiptop (Gast)


Lesenswert?

Also als Controller habe ich den msp430 von ti ins Auge gefasst Dieser 
hat einen internen 12 Bit ADC. Das Wechselsignal des Sensors kann man 
doch zuvor gleichrichten. Es soll naemlich auch nur dann eine genauere 
Betrachtung des Signals unternommen werden, wenn es fuer einen gewissen 
Zeitraum einen Pegel ueberschreitet.
Je nach den Ergebnissen der Frequenzanalyse soll eine spezifische 
Alarmmeldung z.B. per zigbee weggefunkt werden.
Mit Ultra low power ist gemeint, dass alles wirklich auf minimalen 
Energieverbrauch getrimmt sein soll. Zeitanforderungen sind da 
sekundaer. Echtzeit ist nicht gefordert. Es soll nur "irgendwann" die 
Meldung kommen: da war was ungewoehnliches

von Alexander L. (lippi2000)


Lesenswert?

Messsignal entkoppeln, gleichrichten und in einen Integrator geben. Kenn 
mich mit dem MSP430 nicht aus, aber beim AVR lässt sich zum Beispiel der 
Sleep-Modus durch den internen Analogkomparator beenden. Ansonsten musst 
du nen analogen noch davor bauen. Anschließend mit nem ext.ADC den SRAM 
füllen und die Alarmmeldung ausgeben. Anschließend ist es dir 
überlassen, was du mit den Messwerten anfängst. Bei dem ADC würde ich 
mal schauen, ob du einen mit enable-Eingang bekommst. Ansosnten 
Betriebsspannung mit High-Side-FET trennen. Musst natürlich eine 
Schutzzeit abwarten, damit die Spannung beim anschalten wieder sauber 
steht.

Die OpApm's hochohmig ausführen irgendwas um die 100k sollten die 
Widerstände schon haben. (Bsp. Inv.-Verstärker mit G = -2 --> R1 = 100k 
und R2 = 200k und maximalen Signalpeak von 2,5V. Sprich 25µA gegen 
virtuelle Masse und 12,5µA vom Ausgang. Der OPV selbst hat dann 
vielleicht 100µA Stromaufnahme --> macht ca.140µA/OpAmp)

von Oha (Gast)


Lesenswert?

Lowpower... wenn der ADC dauernd mit 1MSample arbeiten soll, und dann 
noch Analysen ausfuehrt, so ist nichts mit Stromspar. Die Frage ist, ob 
es sich um Einzelereignisse handelt, die analysiert werden muessen, oder 
ob man eine Vorlaufzeit hat. Eine kontinuierliche FFT ist in den meisten 
Faellen wahrscheinlich overkill.

von tiptop (Gast)


Lesenswert?

Es handelt sich um Einzelereignisse, die dann entsprechend genauer 
untersucht werden sollen. Ist es sparsamer einen ext. ADC laufen zu 
lassen und im Falle des Falles (Komparator schaltet) diese Daten dann zu 
analysieren?

von Oha (Gast)


Lesenswert?

Allenfalls koennte ein externer ADC an einem FPGA samplen und die Werte 
in einem Ringbuffer ablegen. Ein Amplituden Komparator haette auch noch 
Platz. Das Fifo muesste so tief sein, wie die Aufstartzeit des 
Prozessors lang.

von tiptop (Gast)


Lesenswert?

Ich ueberlge grade ob es moeglich ist das Signal auch noch zu 
verarbeiten, nachdem der Komparator geschaltet hat. Also ob die 
Schwingung noch vorliegt oder schon zu stark abgeklungen ist. Dann 
wuerde zwar nicht genau der Zeitpunkt der Schwingung analysiert, der die 
Analyse verursacht hat, sondern ein schwaecheres, aber vom 
Frequenzmuster her immer noch das selbe Signal oder? Das koennte man 
sich dann doch wohl noch irgendwie rekonstruieren, oder ist meine 
Ueberlegung falsch??

von Oha (Gast)


Lesenswert?

Ich denke schon. Wenn das Signal von einem Resonator mit einer festen 
Frequenzkommt, kann man wie vorgesehen irgendwann nach dem Maximum zu 
messen beginnen und immer noch etwas wissen - ausser der Amplitude. In 
diesem Fall, braucht man aber keine FFT, da die Frequenz ja schon 
bekannt ist. Auf der anderen Seite, wenn das signal irgendwas ist, so 
sollte man schon alles messen, um zu einer Aussage zu kommen.

Worum geht es denn ?

von Jörg S. (joerg-s)


Lesenswert?

>Ist es sparsamer einen ext. ADC laufen zu lassen und im Falle des Falles
>(Komparator schaltet) diese Daten dann zu analysieren?
Wenn der externe ADC weniger verbraucht als der MSP schon, aber das wird 
wohl kaum der Fall sein.

von Heinrich 2/3-Hertz (Gast)


Lesenswert?

Das Messignal auf einen Träger modulieren und im Empfänger, mit externer 
Stromversorgung, demodulieren und auswerten.
Die Leistungsaufnahme des Senders sollte 'minimalst' sein.

von tiptop (Gast)


Lesenswert?

hmmm....das ganze sollte ohne externe Versorgung auskommen.
Es geht um eine Art Ueberwachung. Einfach ausgedrueckt: Einer haut mit 
nem Hammer auf das Objekt oder bohrt drauf rum....dies soll dann einen 
Alarm und auch eine moegliche Untersuchung / Analyse ausloesen, z.B. 
auch durch Schwingungen, die durch ermuedungsbrueche oder aehnliches 
verursacht werden

von Alexander L. (lippi2000)


Lesenswert?

Das bedeutet du kannst dir keine Verzögerung zwischen dem Ereignis und 
der Messwerterfassung leisten. Mein Vorschlag wäre folgender:

1. µC für Kommunikation wird erst durch Ereignis geweckt und aktiviert 
erst dann alle benötigten Übertragungseinheiten (Funkmodule etc.)

2. Analoge Messwertüberwachung und Trigger-Generierung 
(Entkoppeln,TP,evtl.Gleichrichter u.Integrator, Komparator)

3. Externen ADC, SRAM und CPLD für Steuersignale

Der CPLD enthält nur die Logic zum Auslesen des ADC über xx-Werte und 
Ablegen in den SRAM. Der Vorgang wird durch den Trigger gestartet. 
Trigger aktiviert gleichzeitig den µC. Dieser wartet bis CPLD den SRAM 
freigibt und kann die Daten auslesen. Aktiviert seine Übertragungsmodule 
und gibt Alarm. Am Ende wird der CPLD freigegeben, Übertragungsmodule 
abgeschalten und µC ist im Sleep.

Sollte doch vollkommen ausreichen. Und die Stromaufnahme sollte noch 
recht niedrig sein.

von tiptop (Gast)


Lesenswert?

Joa, also waere der CPLD, der ADC und der SRAM immer aktiv und der 
controller und die funkeinheit wuerden nur bei entsprechender Triggerung 
die Werte aus dem SRAM weiterverarbeiten. Hmmm also muesste ich ohnehin 
quasi immer digital wandeln, um die Daten im Falle des Falles zur 
Verfuegung zu haben. Koennte man dann nicht auch gleich den internen ADC 
eines sparsamen Controllers nutzen und nur fuer den zeitpunkt der 
komplexeren Auswertung den Takt hochfahren?

von tiptop (Gast)


Lesenswert?

Ist es denn moeglich den ADC eines controllers arbeiten zu lassen, 
obwohl der controller im "Sparbetrieb" laeuft?

von Jörg S. (joerg-s)


Lesenswert?

>Ist es denn moeglich den ADC eines controllers arbeiten zu lassen,
>obwohl der controller im "Sparbetrieb" laeuft?
Beim MSP ja.

von Alexander L. (lippi2000)


Lesenswert?

Hab mal kurz in DB vom MSP geschaut. Über den Sparbetrieb bin ich jetzt 
nicht informiert. Da du aber eine conversion time von 3,1µs hast kommst 
du gerade mal auf ca. 300kHz Abtastrate. Deine höchste Signalfrequenz 
liegt aber bei 400kHz. Selbst wenn du mit 800kH abtastest, ist die 
Amplitude bei 400kHz schon ordentlich gedämpft. Wenn du ne ordentliche 
Amplitude haben willst, solltest du schon in der Region 2MSPS arbeiten.

Von daher nichts mehr mit Controller allein.

von tiptop (Gast)


Lesenswert?

Also koennte ich im Sleep mode den ADC laufen lassen und so immer die 
aktuellen Werte digital vorraetig haben, um im Falle des Falles diese 
dann (mit hoeheren Takt) verarbeiten zu koennen!?

von tiptop (Gast)


Lesenswert?

hups, zu spaet gelesen ;)

hmmm denk grad noch an eine andere Anwendung,.........ein max. 20 kHz 
Signal koennte ich dann aber doch noch problemlos abtasten oder?

von Jörg S. (joerg-s)


Lesenswert?

>Also koennte ich im Sleep mode den ADC laufen lassen und so immer die
>aktuellen Werte digital vorraetig haben, um im Falle des Falles diese
>dann (mit hoeheren Takt) verarbeiten zu koennen!?
Ja

von Alexander L. (lippi2000)


Lesenswert?

Genau, dann würd ich auch alles im Controller machen. Unbenutzte 
Kommunikationsmodule wie RS232-Treiber o.ä. können meist auch disabled 
werden. Dann läuft nur noch der Analogteil und der Controller im Sleep 
mode.

von tiptop (Gast)


Lesenswert?

Ah ja, braeuchte ich nicht auch noch externen Speicher, um die Werte aus 
dem ADC "aufzubewahren"?

von tiptop (Gast)


Lesenswert?

Der msp430 hat schon ein Funkmodul integriert!??

von Jörg S. (joerg-s)


Lesenswert?

>Der msp430 hat schon ein Funkmodul integriert!??
Nein. Soll aber evt. mal kommen.

>Ah ja, braeuchte ich nicht auch noch externen Speicher, um die Werte aus
>dem ADC "aufzubewahren"?
Kommt darauf an wie viel du speichern willst. Die größten MSPs haben 
16kB RAM.

von tiptop (Gast)


Lesenswert?

Welcher mode waere den bestenfalls (moeglichst wenig Energie) noch 
moeglich, um den ADC noch sinnig betreiben zu koennen, also ich mein um 
noch hoch genug abtatsen zu koennen (z.B. mit 40kHz)?

von tiptop (Gast)


Lesenswert?

Und kann ich im Sleep mode noch was ins RAM speichern?

von Jörg S. (joerg-s)


Lesenswert?

>Welcher mode waere den bestenfalls (moeglichst wenig Energie) noch
>moeglich, um den ADC noch sinnig betreiben zu koennen,...
LPM3 ist der kleinste wo interne Peripherie noch laufen kann. Allerdings 
muss man natürlich sagen das der ADC schon recht viel Strom verbraucht. 
Ich weiss nicht ob ein laufender µC noch so viel ausmacht. 
Wahrscheinlich wird LPM0 (CPU Stop) schon ausreichen.

>Und kann ich im Sleep mode noch was ins RAM speichern?
Ja. D.h. der ADC kann was speichern. Dein Programmcode natürlich nicht.

von tiptop (Gast)


Lesenswert?

Wo bekommt der ADC im Sleep Mode denn seinen Takt her?

von Jörg S. (joerg-s)


Lesenswert?

>Wo bekommt der ADC im Sleep Mode denn seinen Takt her?
Bei LPM3 nur von ACLK. Im LPM0 läuft die gesamte Taktgenerierung noch.

von tiptop (Gast)


Lesenswert?

Mit was fuer einer Stromaufnahme durch den adc muesste man denn rechnen, 
wenn man z.B. mit 10kHz abtasten moechte? Die digitalisierten Daten 
sollten dann ins interne RAM geschrieben werden. Jeder Datenpunkt sollte 
dann ca. 1S gespeichert bleiben, bevor er dann vom naechst aktuelleren 
ueberschrieben wird. Falls vom analogen Komparator die Schaltschwelle 
ueberschritten wird, soll der Controller aufwachen und die (noch 
gespeicherten) Daten verarbeiten. So haette ich keinen Datenverlust, da 
der Controller ja auch ein wenig Zeit braucht um anzulaufen und evtl. 
auch die Daten vor der Schwellueberschreitung interessant sind.
Ist das so realisierbar? Schon jemand Erfahrungen damit gemacht?
Wie schreibe ich die Daten vom adc direkt in den Speicher?

von Jörg S. (joerg-s)


Lesenswert?

>Mit was fuer einer Stromaufnahme durch den adc muesste man denn rechnen,
>wenn man z.B. mit 10kHz abtasten moechte?
Laut Datenblatt um die 1mA.

>digitalisierten Daten sollten dann ins interne RAM geschrieben werden.
>Jeder Datenpunkt sollte dann ca. 1S gespeichert bleiben, bevor er dann
>vom naechst aktuelleren ueberschrieben wird.
MSP hat maximal 16kB RAM = 16384Byte a 2Byte pro Messung = 8192 
Messungen
Kommt also nicht ganz hin mit 10.000 Messungen pro Sekunde. Wären dann 
nur um 8000.

>...da der Controller ja auch ein wenig Zeit braucht um anzulaufen ...
Das geht schnell (ca. 1µS).

>Wie schreibe ich die Daten vom adc direkt in den Speicher?
DTC konfigurieren.

von tiptop (Gast)


Lesenswert?

Ich koennte den Controller doch auch aus dem LPM3 ueber den internen 
Komparator aufwecken, richtig?

von tiptop (Gast)


Lesenswert?

Dann koennte ich mir doch im internen Ram eine Art Ringpuffer aufbauen, 
in den der DMA jeden neuen Wert des ADC reinschreibt. Also zum Beispiel 
10KB vom RAM nehmen um Werte des ADC zu puffern und das ganze dann ohne 
Verbrauch durch die CPU. Schon jemand Erfahrung damit gesammelt?

von Jörg S. (joerg-s)


Lesenswert?

>Ich koennte den Controller doch auch aus dem LPM3 ueber den internen
>Komparator aufwecken, richtig?
Ja, der hat auch einen Interrupt wenn mich nicht alles täuscht.

von Ulrich (Gast)


Lesenswert?

Wenn es wirklich low power sein soll, dann sollte man die AD wandlung 
erst starten wenn wriklich eine gewisse Schwelle überschritten wird. Je 
nach Controller sollte es weniger als 1 ms dauern die AD wandlung zu 
starten. Gegen die 1 s Messzeit sollte das zu vernachlässigen sein.  Die 
ansprechschwelle könnte man auch relativ niedrig legen und ggf. bei 
einem zu kleinen Signal auch nach ein paar ms die Messung wieder 
abbrechen.

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.