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?
Ist es denn moeglich den ADC eines controllers arbeiten zu lassen, obwohl der controller im "Sparbetrieb" laeuft?
>Ist es denn moeglich den ADC eines controllers arbeiten zu lassen, >obwohl der controller im "Sparbetrieb" laeuft? Beim MSP ja.
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.
Ah ja, braeuchte ich nicht auch noch externen Speicher, um die Werte aus dem ADC "aufzubewahren"?
>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)?
Und kann ich im Sleep mode noch was ins RAM speichern?
>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.
Wo bekommt der ADC im Sleep Mode denn seinen Takt her?
>Wo bekommt der ADC im Sleep Mode denn seinen Takt her?
Bei LPM3 nur von ACLK. Im LPM0 läuft die gesamte Taktgenerierung noch.
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.
Ich koennte den Controller doch auch aus dem LPM3 ueber den internen Komparator aufwecken, richtig?
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.
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.