Hallo! Ich möchte einen Joystick mithilfe eines STM32F1 development board auslesen. Ein Bild des Joystick findet ihr im Anhang. Es funktioniert quasi wie ein Drehpotentiometer (R unbekannt, Batterie des Multimeters wird leer). Die Spannung skaliert mit der Position des Hebels. Der Zweck der ganzen Schaltung ist es die Drehzahl eines Schrittmotors zu steuern. Jedenfalls habe ich das Problem, dass das gemessene Signal ungemein rauscht. Die Messungen die ich mit dem 12bit-ADC alle 10ms durchführe weichen im Extremfall um bis zu 120inc voneinander ab. (Da Vcc 3.3V ist, müssten 120inc wohl etwa 10mV sein.) Derart große Sprünge messe ich aber nur alle paar Sekunden. Ich habe sehr rudimentäre Debounce-Funktion geschrieben die so lange den alten Wert ausgibt, bis der neue um mindestens +-128 abweicht. Das funktioniert auch, allerdings schränke ich damit die Auflösung des Joysticks auf quasi 4bit ein. Das möchte ich vermeiden. In der Hoffnung die Toleranzschwelle verringern zu können, habe ich noch einen RC-Tiefpass an den Eingang des ADC geschaltet. (Anordnung: STM32-ADC-Pin - (C=100nF gegen Masse) - R=10kOhm - Potischleifer.) Es wundert mich, dass ich dadurch die Toleranzschwelle nur kaum verringern konnte. Nachdem die Einstreuungen wohl sehr hochfrequent sind, hätte ich gedacht, sie mit den gewählten Werten locker wegbügeln zu können. Ich glaube, dass ich hier irgendwo etwas übersehe oder mir irgendwelche Zusammenhänge noch nicht ganz klar sind. Könnt ihr mir helfen? Vielen Dank! Hier ein Link zum verwendeten development board: https://www.openimpulse.com/blog/products-page/product-category/stm32f103c8t6-arm-development-board-cortex-m3/
Hast du mal eine einfache Mittelwertbildung ausprobiert? Also anstatt alle 10ms abzutasten, beispielsweise alle 1ms und dafür über 10 Messungen zu mitteln? (Wenn du das noch optimiert machen willst, dann mittle über 2^N Messungen, das geht meist einfacher/schneller beim Berechnen). Ansonsten kannst du auch mal deinen Aufbau hier posten, du kannst dir Störungen auch extern einfangen.
Manuel W. schrieb: > Hier ein Link zum verwendeten development board: > https://www.openimpulse.com/blog/products-page/product-category/stm32f103c8t6-arm-development-board-cortex-m3/ Vergleich mal die Kondensatoren an der Stromversorgung Deines Boards mit dem Datenblatt von ST. Bei Vdda sieht es zwar nicht so schlecht aus, aber bei den normalen Vdds: ST möchte zwischen den verschiedenen Vdd und Vss 5 Stück 100nF und 1 4.7µF haben, wobei der 4.7µF nahe an Vdd3 sein muss. Da ist Dein Board weit von weg. Digital- und Analogversorgung sind nur über die kleine Spule/Ferrit entkoppelt. Wenn die Digitalversorung wegen falscher Dimensionierung zusammenbricht, hat das auch ziemlich schnell Auswirkungen auf den Analogbereich.
Johannes O. schrieb: > Hast du mal eine einfache Mittelwertbildung ausprobiert? > Also anstatt alle 10ms abzutasten, beispielsweise alle 1ms und dafür > über 10 Messungen zu mitteln? > (Wenn du das noch optimiert machen willst, dann mittle über 2^N > Messungen, das geht meist einfacher/schneller beim Berechnen). > > Ansonsten kannst du auch mal deinen Aufbau hier posten, du kannst dir > Störungen auch extern einfangen. Das war ein guter Tipp, die Mittelwertbildung hat das Problem tatsächlich gemindert. Ich habe auch ein paar Blogposts gefunden, in denen für solche Anwendungsfälle eine Medianbildung empfohlen wird. Theoretisch müsste diese wirklich sehr gut geeignet sein -- der Nachteil dieser Lösung ist halt die Rechenzeit, da eine ständige Sortierung der Samples notwendig ist. Auch der Hinweis mit den externen Störungen war richtig. Anbei ist ein Bild vom Aufbau. Es scheint, als hätte ich mir über die 10cm-Leitungen an denen die Entwicklungsplatine mit dem µC die Einstreuungen eingefangen. Quelle der Einstreuungen ist der Schrittmotortreiber unten-links. Wenn ich ihn deaktiviere, tritt quasi kein Rauschen mehr auf. (Übersprechen zwischen den 10cm-Leitungen dürfte kaum stattfinden, da die meisten davon noch elektrisch tot sind.)
Gerd E. schrieb: > Manuel W. schrieb: >> Hier ein Link zum verwendeten development board: >> > https://www.openimpulse.com/blog/products-page/product-category/stm32f103c8t6-arm-development-board-cortex-m3/ > > Vergleich mal die Kondensatoren an der Stromversorgung Deines Boards mit > dem Datenblatt von ST. Bei Vdda sieht es zwar nicht so schlecht aus, > aber bei den normalen Vdds: > > ST möchte zwischen den verschiedenen Vdd und Vss 5 Stück 100nF und 1 > 4.7µF haben, wobei der 4.7µF nahe an Vdd3 sein muss. Da ist Dein Board > weit von weg. Ich denke, dass ich mir das nächste mal wohl eine Platine aus westlicher Fertigung holen werden. Die paar gesparten Euro sind mir die potentiellen Probleme nicht wert. > Digital- und Analogversorgung sind nur über die kleine Spule/Ferrit > entkoppelt. Wenn die Digitalversorung wegen falscher Dimensionierung > zusammenbricht, hat das auch ziemlich schnell Auswirkungen auf den > Analogbereich. Wie meinst du "wenn die Digitalversorgung zusammenbricht"? Wenn die Spannung wegbricht ist der ganze Chip doch ohnehin tot. Auch wenn der Analogteil noch Saft hätte. Ich denke, ich verstehe dich irgendwie falsch. 8-)
Manuel W. schrieb: > Wie meinst du "wenn die Digitalversorgung zusammenbricht"? Wenn die > Spannung wegbricht ist der ganze Chip doch ohnehin tot. der µc zupft digital an der versorgungsspannung und streut so möglicherweise störungen in den analogteil ein. ich hab nicht ins datenblatt geschaut, aber der chip läuft wahrscheinlich auch noch weiter wenn vdd kurz von 3.3 auf 3.0v zusammenbricht. normalerweise macht man zwischen benachbarte vdd/vss pins deswegen kleine (100n) puffer/entstörkondensatoren. wenn ich mir https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/STM32F103C8T6-Schematic-Diagram.pdf anschaue frage ich mich ob die pins von vdd_(n) und vss_(n) eventuell soche nebeneinanderliegende pins sind, und warum dann keine c's dazwischen sind. wenn du magst, frickel doch mal welche dran :)
Manuel W. schrieb: >> Digital- und Analogversorgung sind nur über die kleine Spule/Ferrit >> entkoppelt. Wenn die Digitalversorung wegen falscher Dimensionierung >> zusammenbricht, hat das auch ziemlich schnell Auswirkungen auf den >> Analogbereich. > > Wie meinst du "wenn die Digitalversorgung zusammenbricht"? Wenn die > Spannung wegbricht ist der ganze Chip doch ohnehin tot. Auch wenn der > Analogteil noch Saft hätte. Ich denke, ich verstehe dich irgendwie > falsch. 8-) Die Digitalversorung ist auf diesem Board nicht ausreichend mit Kondensatoren entkoppelt. Wenn der µC kurze Strompeaks aus der Digitalversorung zieht, sinkt daher dort die Spannung kurzzeitig. Und das kann durchaus kräftig runtergehen. Das meinte ich mit "zusammenbrechen". Das schlägt dann auch auf die Analogversorgung durch und Deine Messwerte vom ADC werden instabil.
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.

