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ß
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.
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.
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
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)
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.
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?
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.
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??
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 ?
>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.
Das Messignal auf einen Träger modulieren und im Empfänger, mit externer
Stromversorgung, demodulieren und auswerten.
Die Leistungsaufnahme des Senders sollte 'minimalst' sein.
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
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.
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?
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.
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!?
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?
>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
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.
>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.
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)?
>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.
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?
>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.
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?
>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.
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.