Hallo, im Rahmen meiner Masterarbeit soll ich mit einem MSP430G2553 die Phase und die Frequenz zweier sinusförmiger Signale bestimmen. Es geht dabei um Vibrationsmessungen. Das eine Signal wird von einem analogen Beschleunigungssensor erzeugt (ADXL 337). Der Sensor gibt dabei je nach Beschleunigung einen Spannungswert um Vdd/2 aus (0g Beschleunigung = Vdd/2). Das andere Signal wird von einem Piezo erzeugt und soll mittels Komparator bzw. Schmitt-Trigger „digitalisiert“ werden. Die Schwingungsfrequenz liegt zwischen 50-100Hz. Zur Bestimmung der Größen sollen 5 Perioden betrachtet werden. Das ganze sollte zudem noch möglichst energiesparend sein da es sich dabei um ein energieautarkes System handelt. Ich habe die letzten Tage den TI User’s Guide studiert und habe mir folgendem Ansatz überlegt: Den Beschleunigungssensor an einen Komparator mit Vdd/2 als Referenzspannung, den Schmitt-Trigger des Piezos an einen digitalen I/O-Pin im Capture-Mode anschließen. Timer A starten und bei jedem Aufruf der ISR den aktuellen Wert von Timer A zur späteren Auswertung in ein Array schreiben. Bei einer der beiden ISR sollte zudem ein Counter inkrementieren werden damit beim 5. Ausführen der ISR die Interrupts disabled werden und Timer A angehalten wird. Anschließend könnte aus den Werten im Array Frequenz und Phase bestimmt werden. Als Clock für Timer A hätte ich die ACLK mit LFXT1CLK als Quelle verwendet. Als LFXT1CLK hätte ich gerne eine 32kHz Quarz genommen. Das sollte ja ausreichend präzise sein, oder? Ist es richtig, dass die ACLK im LPM3 aktiv ist und die Messung somit relativ energiesparend erfolgen könnte? Ich hätte nun gerne von euch gewusst ob das alles so prinzipiell funktioniert oder ob es eine bessere Methode gibt. Evtl. gibt es auch schon irgendwo fertigen C Code für sowas. Habe bisher leider ausschließlich mit den Arduino programmiert und nur selten mal ne Funktion in C geschrieben wenn es nichts Fertiges gab;-) Vielen Dank und viele Grüße Simon
Das Problem sollte man erst einmal in 3 Teilen Betrachten: 1) Die Hardware Umsetzung, also wie bekommt man die Signal in den µC. 2) Den Algorithmus für die Frequenz und Phasenbestimmung 3) Die Umsetzung in Software Bei der Hardware ist es komisch, das einmal der AD und einmal der Komparator genutzt werden soll. Der Komparatoreingang ist gut für eine Frequenzmessung, wenn man keine Störungen hat. sonst kann es schwer / ungenau werden. Da wäre ein AD Eingang ggf. besser. Beim Algorithmus zur Auswertung hat man verschiedene Möglichkeiten. Das ist ein Abwägung zwischen Genauigkeit bzw. Toleranz gegen Störungen und dem Aufwand bzw. Stromverbrauch. Da müsste man sich klar werden welche Genauigkeit gefordert ist, und wie das Signal etwa aussieht, bzw. was an Störungen noch toleriert werden soll. Beim Komparator hat man außer den Zeiten der Nulldurchgänge nicht viel mehr Information - da kann man höchstens noch sehr schnelle Schwankungen durch Rauschen etc. Rausfiltern. Bei der Auswertung des ADC Kanals gibt es mehr Möglichkeiten - ggf. müsste man die auch parallel entwickeln um dann zu vergleichen und die passende Lösung auszusuchen. Einfach wäre es etwa die Nulldurchgänge durch lineare Interpolation zu bestimmen. Aufwändiger, aber auch besser wäre ein kompletter Sinus Fit an die Daten - das klingt sehr aufwändig, ist aber gar nicht so schlimm, wenn man einen brauchbaren Schätzwert für die Frequenz als Startwert hat. Als Zwischenlösung gäbe es auch noch erst eine Digitale Filterung und dann die Nulldurchgänge zu bestimmen. Es ginge auch ein FFT - wenn man unbedingt will, wobei das bei ca. 5 Periode eher nicht die Methode der Wahl ist. Den Vergleich der Algorithmen kann man ggf. auch am PC mit simulierten Daten machen - da ist es einfacher mit der Ausgabe von Zwischenwerten. Ein 32 kHz Quarz ist schon recht präzise. Das sollte normalerweise ausreichen: die wenigsten mechanischen Systeme sind so stabil, und mit mit Störungen auf dem Signal werden auch die Messwerte eher nicht so genau sein, das mehr Auflösung bei den Zeiten sinnvoll ist. Bei wenig Störungen und hohen Anforderungen könnte man aber ggf. mehr Zeitauflösung gebrauchen.
Simon Heller schrieb: > Habe bisher leider > ausschließlich mit den Arduino programmiert und nur selten mal ne > Funktion in C geschrieben wenn es nichts Fertiges gab;-) Dann wird's aber Zeit. Du glaubst ja nicht wirklich, dass es für Alles eine fertige Lösung im Internet gibt. So eine Einstellung wird unter Entwicklern nicht wirklich geschätzt, behaupte ich mal so. Und ich vermute mal, deine Masterarbeit ist im technischen Bereich, oder willst du direkt nen Doktor draufsetzen? Da muss man natürlich nur Internet bedienen können... So, genug gelästert, zu deinen Fragen: Du solltest darauf achten, beide Sinus Signale erstmal auf die gleiche Amplitude zu bringen, bevor du sie auf den Komparator/Schmitt-Trigger schickst. Ich würde den Schmitt-Trigger nehmen, da du damit sicherer vor "Prellern" bist. Du musst allerdings für beide Kanäle die gleiche Eingangs-Schaltung nehmen (zwei (identische) Schmitt-Trigger, oder zwei Komparatoren), denn sonst hast du eine frequenzabhängige Phasenverschiebung, da Komparator und Schmitt-Trigger an unterschiedlichen Stellen des Sinus high/low gehen würden. Die Idee mit dem 32KHz Quarz ist gut. Das Array würde ich mir sparen, einfach 5 Phasendurchläufe zählen, und den Timerwert nehmen.
Simon Heller schrieb: > Die > Schwingungsfrequenz liegt zwischen 50-100Hz. Ach je, da würde ich ganz einfach den ADC nehmen und beide Signale anschließend digital weiterverarbeiten: erstmal nen laufenden Mittelwert zum Glätten, dann generellen Mittelwert über ein paar Perioden um den mittleren Pegel zu bestimmen, dann bei beiden die Durchgänge durch den mittleren Pegel bestimmen, dann aus zeitlichem Versatz und Periode den Phasenversatz. Reicht. Aber mal was Grundsätzliches: Muß man heutzutage nicht immer noch erklären, daß man die Arbeit auf eigenem Mist hat wachsen lassen? Oder ist Guttenberg jetzt Allgemeingut? W.S.
Guten Abend, danke für den Input! Eine kurze Stellungnahme zu der angeklungenen Kritik ;-) Mir ist durchaus bewusst, dass es nicht immer eine fertige Lösung gibt aber warum sollte man das Rad neu erfinden? Meine Masterarbeit besteht auch nicht nur daraus einen MSP430 zu programmieren, sondern beinhaltet noch ein paar weitere Aufgaben. Mir wäre auch nicht bekannt, dass man sich in Internetforen keine Tipps und Anregungen holen darf ;-)Das Problem von unserm Herrn zu Guttenberg war ja leider, dass er fremdes geistiges Eigentum als sein Eigenes ausgegeben hat! Wenn ich irgendeinen Code-Schnipsel aus dem Internet verwenden würde, würde ich das natürlich kenntlich machen! Vielleicht kurz noch ein paar Worte zu meiner Arbeit: In der Arbeit geht es um die Regelung eines Energy Havesters, in diesem Fall einem Biegebalken mit einer piezoelektrischen Schicht die aus mechanischen Schwingungen kleine Mengen elektrischer Energie erzeugt. Meine Aufgabe ist es die erzeugte Spannung gleichzurichten und mit einen Buck-Boost Converter auf eine µC-verträgliche Spannung zu bekommen um den MSP430 und den ADXL337 betreiben zu können. Natürlich kann die Anregungsfrequenz variieren was dazu führt, dass die Steifigkeit des Balkens variiert werden muss um das System immer in Resonanz zu halten. Über das simple Sampeln mit dem ADC hab ich auch schon nachgedacht da ich über kurz oder lang auch die Amplitude des Beschleunigungssensors brauche. Ich habe nur gedacht, dass der Ansatz mit den Interrupts deutlich energiesparender ist. Immerhin müsste ich für 5 Perioden bei 50Hz mind. 100 ms aufnehmen. Bei einer Samplerate von 5 kHz wären das 500 Werte die ich zwischenspeichern müsste. Und dann wäre die Auswertung noch nicht gemacht. Wäre der ADC im LPM3 überhaupt zu betreiben? Wobei der Ansatz programmiertechnisch auch für mich machbar klingt;-) Letztlich interessiert mich ca. alle 30 Sekunden die Phase und vermutlich alle 60 Sekunden die Amplitude. Das gleiche „Level“ für die Signale ist schaltungstechnisch wohl etwas komplizierter. Die Spannung des Piezos wird wie gesagt mit einem Brückengleichrichter gleichgerichtet wodurch der Nulldurchgang des Sinus nicht mit dem GND des µC übereinstimmt. Das sollte sich aber messen bzw. Simulieren lassen. Der entstandene Fehler kann ja dann einfach in die Berechnung der Phase einfließen. Gruß, Simon
Hi Simon, danke für die gute Erläuterung der Arbeit (sieht man hier selten), jetzt kann man sich gleich viel besser vorstellen, wo das ganze hinführen soll. Wie viel Energie (mW/s, uW/s, nW/s?) kommt denn aus dem System in etwa heraus, damit wir eine Vorstellung bekommen, wie sparsam du mit Energie umgehen musst. Ich frage mich halt, ob man durch die Art der Programmierung hier wirklich etwas einsparen kann. Der uC muss ja eh für 5 Perioden (so ca. 0.1s) aktiv sein, und ich denke fast es ist ziemlich egal, ob er sich in dieser Zeit mit Timerwerten oder ADC Samples beschäftigt. Das mit dem Nulldurchgang kann dir wirklich noch zum Problem werden. Wenn die Amplitude des Piezosignals ein Mehrfaches der Forwardspannung der Diode ist, dann kommst du nahe dem Nulldurchgang an. Je kleiner die Piezospannung wird, sagen wir mal nur leicht über der Forwardspannung, hast du eine Phasenverschiebung von fast 90° - alleine durch den Pegel des Piezosignals. Da du ja die Amplitude der Piezospannung nicht kennst, kannst du diesen Faktor auch nicht hinterher herausrechnen. Daher ist glaube ich die von W.S. vorgeschlagene Lösung mit dem ADC sehr gut. Da bekommst du alles: Amplitude, Frequenz und Phasenlage.
Hab' mal 'ne halbe Pupille auf den MSP430 geworfen. Schickst Du den zwischenzeitlich ins Bett, so ist der Stromverbrauch echt klasse. Pass' aber auf, im Tiefschlaf lässt der sich nicht mehr besonders universell aufwecken. Wie und ob der aus einem Uhrenquarz 'nen ordentlichen Ticker (PLL ?) machen kann weis ich noch nicht. Möglicherweise benötigst Du dann zwei verschiedene Quarze. Allgemein gilt aber "echte" Uhrenquarze sind relativ genau. Beim Digitalisieren von analogen Signalen ist die Sache mit den Schwellwerten nicht ganz ohne. Am Beispiel eines Sinus: Stehst Du auf den Spitzenwert, so währe es toll, wenn das Signal konstant und sauber ist. Stehst Du aber mehr auf den Nulldurchgang, so währe es echt toll, wenn kein Versatz durch Gleichspannung Dir eine lange Nase macht. In beiden Fällen wären die Ergebnisse bestenfalls höflich. Beim Messen der Periode hilft Dir wahrscheinlich die Wiederholung.
Simon Heller schrieb: > Vielleicht kurz noch ein paar Worte zu meiner Arbeit: > In der Arbeit geht es um die Regelung eines Energy Havesters, Sehr interessantes Thema. Das wird sicher in den nächsten Jahren eines der allerwichtigsten Themen sein.
Amateur schrieb: > Hab' mal 'ne halbe Pupille auf den MSP430 geworfen. > > Schickst Du den zwischenzeitlich ins Bett, so ist der Stromverbrauch > echt klasse. > Pass' aber auf, im Tiefschlaf lässt der sich nicht mehr besonders > universell aufwecken. Hä? Einer der großen Vorteile soll sein, dass er in nullkommanix wieder wach ist Ultrafast Wake-Up From Standby Mode in less than 1 µs
>Hä? >Einer der großen Vorteile soll sein, dass er in nullkommanix wieder wach >ist Die "Aufwachzeit" hat nichts mit der reduzierten Anzahl an "Aufwachquellen" zutun.
Der steht auch noch auf meiner Agenda, aber ich habe noch fast nichts damit gemacht und erst recht noch nicht viel gelesen. Erzähl mal wie begrenzt der in diesem Bereich ist. Nur kurz umreißen.
Bin auch noch nicht besonders weit mit dem Teil. Aber soweit ich weiß kommt der vom Tiefschlaf nur durch ein externes Signal (Interrupt), in die Pötte. Ich glaube es gibt 4 Modi. Im Halbschlaf (Modus 3) geht's schon besser, der stromt aber auch stärker.
Amateur schrieb: > Bin auch noch nicht besonders weit mit dem Teil. > Aber soweit ich weiß kommt der vom Tiefschlaf nur durch ein externes > Signal (Interrupt), in die Pötte. > Ich glaube es gibt 4 Modi. Im Halbschlaf (Modus 3) geht's schon besser, > der stromt aber auch stärker. Ja eben, aber so wie es da steht, durch jeden Interrupt. Ob der nur von außen kommen darf, das weiß ich zur Zeit auch noch nicht. Der steht erst für Ende diesen Jahres, bis Mitte nächsten Jahres bei mir auf dem Plan. Ein Buch hab ich schon und da stand gleich zu Anfang, dass es einer der wesentlichen Vorteile sein soll, dass er so schnell wach wird und sich dann selbst wieder schlafen legt. Kein Hinweis, dass das begrenzt auf wenige Quellen sei.
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.