Ich steuere einen DC Bürstenmotor mithilfe eines BTS7960 H-Brücken-Modul bei einer PWM Frequenz von 15 kHz an. Der Motorstrom soll mit einem ACS712-Modul (gibt eine Spannung proportional zum Strom aus) und dem 10-Bit Analogeingang eines Arduino Mega gemessen werden. Bei 0A Motorstrom liegt das Rauschen bei +- 1 LSB. Meine Erwartung war eigentlich, dass der Motorstrom dank dessen Induktivität recht konstant ist und ich mir um Filtern des Messsignals keine Gedanken machen muss. Tatsächlich gehen die Messwerte aber völlig im Rauschen (+- 10 LSB) unter. Leider habe ich kein Oszilloskop, dass die geringen Spannungshübe darstellen kann. Wo liegt mein Denkfehler?
Wenn das die Originalschaltung des Arduino Mega 2560 ist, dann fehlen da ein paar Bauteile, die den ADC deutlich verbessern. So ist AVCC nicht über eine Drossel gespeist, sondern direkt an VCC und es fehlt ein Kondensator an AREF, der ist auf dem Board einfach freigelassen. Das hilft dem ADC schon mal, deutlich ruhiger zu arbeiten. Ausserdem verfügt der ACS712 über einen Anschluss für einen externen Filterkondensator an Pin 6, der auf jeden Fall bestückt sein sollte. Mit einem relativen dicken C (47nF) gibt Allegro einen Rauschpegel von etwa 11mV am Ausgang an. Dazu sollte aber auch der Abblockkondensator an VCC angeschlossen sein. Die Bandbreite sinkt natürlich mit einem grossen Filterkondensator, er stellt also immer einen Kompromiss zwischen Rauschen und Bandbreite dar.
was schrieb: > Meine Erwartung war eigentlich, dass der Motorstrom dank dessen > Induktivität recht konstant ist und ich mir um Filtern des Messsignals > keine Gedanken machen muss. Erwartungen werden meistens enttäuscht. Der Rippel des Stroms lässt sich mit der Schaltfrequenz und der Induktivität doch ganz gut abschätzen. Mal davon abgesehen das man analoge Signale IMMER filtern sollte, schließlich fängt man sich gerade in Umgebungen wo Dinge schnell geschaltet werden gerne Störungen ein.
was schrieb: > Tatsächlich gehen die Messwerte aber völlig > im Rauschen (+- 10 LSB) unter. Dann ist dein Signal aber ziemlich schwach. Kannst du das rauschärm verstärken oder einen anderen Strommesswiderstand verwenden? Was für eine ENOB sollte der ADC denn haben? So ein Rauschen hat man recht schnell bei ADCs wenn man Spannungen nicht filtert und auch nicht so beim Layout aufpasst. Das Rauschen muss aber ja nicht stören wenn man den Signal-Rausch-Abstand erhöhen kann.
Gustl B. schrieb: > einen anderen Strommesswiderstand verwenden? Wird bei einem Hall-Sensor schwierig....
Matthias S. schrieb: > Das hilft dem ADC schon mal, deutlich ruhiger zu arbeiten. Nunja, wie gesagt bei 0A ist da nichts auszusetzen, die Werte sind +-1 LSB stabil. Matthias S. schrieb: > Die Bandbreite sinkt natürlich mit einem grossen Filterkondensator, er > stellt also immer einen Kompromiss zwischen Rauschen und Bandbreite dar. Ich habe den Filterkondensator an Pin 6 von 47nF auf 1µF erhöht, das sollte zu einer Grenzfrequenz von ca. 100Hz führen. Dennoch, keine Besserung. Guest schrieb: > Erwartungen werden meistens enttäuscht. Der Rippel des Stroms lässt sich > mit der Schaltfrequenz und der Induktivität doch ganz gut abschätzen. Die Induktivität ist mir nicht bekannt. Es handelt sich um diesen Motor: https://www.ebikethaikit.com/uploads/443/files/MY1016Z250W.pdf
was schrieb: > Der Motorstrom soll mit einem ACS712-Modul (gibt eine Spannung > proportional zum Strom aus) und dem 10-Bit Analogeingang eines Arduino > Mega gemessen werden. ACS712 ist ein Familienname. Welchen Typ verwendest du?
Guest schrieb: > Wird bei einem Hall-Sensor schwierig.... Stimmt, aber es gibt auch unterschiedliche Sensoren. Selbst von diesem Sensor gibt es 3 verschiedene mit unterschiedlicher Spannung je Strom. Aber das sind jeweils nur ein paar mv/A. Da stellt sich die Frage: Welchen Maximalstrom erwartest du? was schrieb: > Nunja, wie gesagt bei 0A ist da nichts auszusetzen, die Werte sind +-1 > LSB stabil. Das klingt fast so als würde der Motorstrom irgendwie in den ADC einkoppeln. Hängt das an der selben Versorgung (gleiches Netzteil und wenig Entkopplung)? Hast du im Layout große Schleifen gebaut?
was schrieb: > Die Induktivität ist mir nicht bekannt. Es handelt sich um diesen Motor: > https://www.ebikethaikit.com/uploads/443/files/MY1016Z250W.pdf Also maximal rund 20 A. Das wären beim ACS712ELCTR-05B-T: 3,7 V ACS712ELCTR-20A-T: 2 V ACS712ELCTR-30A-T: 1,3 V Welchen Eingangsbereich hat denn der ADC und mit welchem Strom lässt du den Motor tatsächlich laufen?
was schrieb: > Leider habe ich kein Oszilloskop, dass die geringen Spannungshübe > darstellen kann. Das ist doof. Vielleicht schwankt dein Strom wirklich so stark. Irgendwo muss sich die PWM schließlich auswirken oder hast du deine Strommessung zum PWM-Signal synchronisiert?
Hast du diese Störungen auch ohne Motor? Oder wenn du dem Motor zeinen Strom gibst? Es könnte ja sein, dass deine PWM gar keine Pulse ausgibt wenn der Motor 0 A zieht. Und dann stört deine PWM auch nicht den ADC. Also teste mal ob es der Motor ist der den ADC stört oder die PWM Ausgabe.
Wolfgang schrieb: > ACS712 ist ein Familienname. Welchen Typ verwendest du? Den mit +-30A Messbereich, da der Motor bis knapp über 20A ziehen kann und auch weil ich keine anderen da habe. Gustl B. schrieb: > Das klingt fast so als würde der Motorstrom irgendwie in den ADC > einkoppeln. Hängt das an der selben Versorgung (gleiches Netzteil und > wenig Entkopplung)? Hast du im Layout große Schleifen gebaut? Gleiches Netzteil ja, aber zwischen den 24V für die H-Brücke und den 5V für Arduino und Hallsensor ist ein Buck-Converter mit je 1000µF an Ein- und Ausgang. Verbindung zwischen H-Brücke, Arduino und Hallsensor sind jeweils mit verdrillter Drillingslitze (GND, 5V, PWM/analog) ausgeführt, weit weg von den stromführenden Motoranschlussdrähten.
was schrieb: > Gleiches Netzteil ja, aber zwischen den 24V für die H-Brücke und den 5V > für Arduino und Hallsensor ist ein Buck-Converter mit je 1000µF an Ein- > und Ausgang. Und der Eingangskondensator für den Step-Down Wandler ist über eine Diode von den 24V entkoppelt oder stabilisierst du damit die Betriebsspannung für den Motor?
Gustl B. schrieb: > mit welchem Strom lässt du > den Motor tatsächlich laufen? Schwer zu sagen ohne Oszi, Labornetzteil zeigt 140mA an. Davon kann man grob 10mA für die 5V Spannungsversorgung abziehen. Vielleicht erwarte ich auch einfach zu viel vom ACS712, aber bei nur 100Hz Bandbreite hatte ich schon erwartet, dass die 10-Bit Auflösung des ADC der limitierende Faktor wäre. Wolfgang schrieb: > hast du deine Strommessung > zum PWM-Signal synchronisiert? Nein, ich wüsste bei 20kHz und aktuell 15% duty-cycle auch garnicht wie ich das sicherstellen könnte. Gustl B. schrieb: > Hast du diese Störungen auch ohne Motor? Nein, nur wenn der Motor auch tatsächlich angeschlossen ist.
Wolfgang schrieb: > Und der Eingangskondensator für den Step-Down Wandler ist über eine > Diode von den 24V entkoppelt [?] Ist er, ja.
was schrieb: > Den mit +-30A Messbereich, da der Motor bis knapp über 20A ziehen kann > und auch weil ich keine anderen da habe. Das führt aber auch zu einem recht schwachen Signal am Ausgang. Das solltest du so verstärken, dass es den ADC Eingangsbereich möglichst voll ausnutzt. was schrieb: > zwischen den 24V für die H-Brücke und den 5V > für Arduino und Hallsensor ist ein Buck-Converter mit je 1000µF an Ein- > und Ausgang. Nur ein Kondensator bringt nicht viel. Da sollte noch ein kleiner Widerstand oder ein Ferrit in Reihe sitzen. was schrieb: > weit weg > von den stromführenden Motoranschlussdrähten. Das ist gut. Edit: was schrieb: > Nein, nur wenn der Motor auch tatsächlich angeschlossen ist. OK. Also ist es nicht die PWM. was schrieb: > Schwer zu sagen ohne Oszi, Labornetzteil zeigt 140mA an. Davon kann man > grob 10mA für die 5V Spannungsversorgung abziehen. Das sind aber sehr kleine Ströme. Stimmt das wirklich? Wenn du nur so kleine Ströme verwendest, dann ist der Sensor ungeeignet. was schrieb: > dass die 10-Bit Auflösung des ADC der limitierende > Faktor wäre. Die Anzahl der Bits sagt aber nicht aus wie genau du mit dem ADC tatsächlich messen kannst. Gerade von einem ADC der in einem uC eingebaut ist würde ich nicht allzu viel erwarten. Und dann verschenkst du ja viele Bits dadurch, dass du den ADC nicht ordentlich aussteuerst. Wenn dein ADC z. B. von 0 bis 5 V erfassen kann, du aber nur ein Signal von 0 bis 2,5 V anlegst, dann hast du 1 Bit verschenkt. Wenn du nur ein Signal von 0 V bis 300 mV anlegst, dann verschenkst du schon 4 Bits. Wenn du den Motor tatsächlich nur mit 140 mA betreibst, dann liefert dein Sensor nur 0,14 A * 66 mV/A = 9,24 mV als Signal. Wenn dein ADC also 5 V Spanne hat, dann ist eine Stufe bei 10 Bits 5 V/2^10=4,88 mV. Bei dem Schwachen Signal ändern sich also die zwei niederwertigsten Bits.
:
Bearbeitet durch User
Gustl B. schrieb: > Das > solltest du so verstärken, dass es den ADC Eingangsbereich möglichst > voll ausnutzt. Nun, denn Messbereich brauch ich ja aber ziemlich komplett, wenn ich um 0 herum verstärke kann ich hohe Ströme nicht mehr messen. Wenn ich die 2.5V Bias rausnehme, kann ich nur noch in eine Drehrichtung messen, auch blöd. Ich seh schon, ich erwarte wohl bei den sehr kleinen Strömen die ich hier auf dem Tisch fahren kann ein zu "klares" Signal. Vielleicht schauts garnicht so schlecht aus, wenn der Strom >> 1A erreicht, leider kann ich das hier auf dem Tisch nicht prüfen, ohne dass mir der Aufbau um die Ohren fliegt :) Danke soweit für die Hinweise und gute Nacht.
was schrieb: > Ich seh schon, ich erwarte wohl bei den sehr kleinen Strömen die ich > hier auf dem Tisch fahren kann ein zu "klares" Signal. Gut möglich. was schrieb: > leider > kann ich das hier auf dem Tisch nicht prüfen, ohne dass mir der Aufbau > um die Ohren fliegt :) Du kannst vielleicht den Motor belasten, dann geht auch der Strom nach oben. Den maximalen Strom zieht der Motor dann, wenn er so stark belastet wird, dass er sich nicht mehr dreht. Gute Nacht!
:
Bearbeitet durch User
Ändere erstmal VRef auf die internen 1.1V, dann hast du schonmal etwas mehr Auflösung. Den Bias solltest du dann auch anpassen. Dann ändere mal die Verkabelung so, dass du eines der Paare ADC 0/1, 2/3, 8/9 oder 10/11 frei hast. Dann misst du differentiell, den negativen Eingang legst du an GND/Bias vom Sensor bzw. dorthin wo das GND/Bias Kabel zum Sensor angeschlossen ist. Die Software muss dann den Gain entsprechend anpassen. Wenn das Rauschen aber wirklich vom Signal kommt, hilft das auch nur begrenzt. was schrieb: > Arduino Mega Vergiss Arduino für diese Aufgabe und lies das Datenblatt, am besten das ganze Kapitel 26. https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf > Leider habe ich kein Oszilloskop, dass die geringen Spannungshübe > darstellen kann. Lass deinen Arduino über die Serielle Schnittstelle (Baudrate schnell genug einstellen) die ADC Werte ausgeben und log die am PC in eine Datei. Dann plottest du mal die Messwerte, dann sieht man ob das weißes Rauschen ist oder irgendwelche Regelmäßigkeiten hat. was schrieb: > Wenn ich die > 2.5V Bias rausnehme, kann ich nur noch in eine Drehrichtung messen, auch > blöd. Sowas gehört in den ersten Post. Wie erzeugst du den Bias und ist der gut gefiltert? Wenn eine differentielle Messung mit Gain 1 schon hilft, hat vermutlich dein Bias Störungen gehabt. Hast du die Hinweise zur Versorgung des ADC beachtet?
K. S. schrieb: > Ändere erstmal VRef auf die internen 1.1V [...] Sorry, aber deine Antwort geht komplett am Thema vorbei. Das Problem ist nicht zu geringe Auflösung des ADC und ein komplett verrauschtes Signal noch genauer angucken macht es auch nicht schöner. K. S. schrieb: >> Wenn ich die >> 2.5V Bias rausnehme, kann ich nur noch in eine Drehrichtung messen, auch >> blöd. > Sowas gehört in den ersten Post. Wie erzeugst du den Bias und ist der > gut gefiltert? Die 2.5V Bias sind eine Eigenschaft des ACS712, war also im ersten Post, ich erzeuge da garnichts. K. S. schrieb: > Lass deinen Arduino über die Serielle Schnittstelle (Baudrate schnell > genug einstellen) die ADC Werte ausgeben und log die am PC in eine > Datei. Dann plottest du mal die Messwerte, dann sieht man ob das weißes > Rauschen ist oder irgendwelche Regelmäßigkeiten hat. Wir reden hier von Störungen durch eine 20kHz PWM, so schnell ist der ADC und die serielle Schnittstelle nicht als dass man da eine Regelmäßigkeit erkennen könnte. K. S. schrieb: > Dann misst du differentiell, den > negativen Eingang legst du an GND/Bias vom Sensor bzw. dorthin wo das > GND/Bias Kabel zum Sensor angeschlossen ist. Was soll das bringen? Arduino GND == Sensor GND, auch ohne zweites Kabel. Ich würde damit einen ADC Kanal damit beschäftigen durchgehend 0V zu messen und dann von meinem Messwert 0 abzuziehen.
Man kann mich gern korrigieren aber die Sample Rate von dem Arduino ADC ist doch 10 KHz. Wie willst du bitte sauber ein Signal messen das Störungen im Bereich über 10 KHz hat? Da gabs doch mal so einen netten Herrn der Nyquist hieß. Selbst wenn du an dem ACS filterst fängst du dir garantiert über die Leitungen nochmal was ein. Filtern tut man direkt am ADC und nicht Meter weit weg.
was schrieb: > Wir reden hier von Störungen durch eine 20kHz PWM, so schnell ist der > ADC und die serielle Schnittstelle nicht als dass man da eine > Regelmäßigkeit erkennen könnte. Du könntest trotzdem mal viele Werte am Stück aufnehmen, auslesen und hier posten. Ich mach dir dann FFT und Histogramm daraus. Wichtig ist aber, dass die Werte mit einer möglichst stabilen Abtastfrequenz aufgenommen werden, also der zeitliche Abstand zwischen je zwei Werten sollte konstant sein. Und die Abtastrate kannst du ruhig schön hoch wählen. Zuerst möglichst viele Werte am Stück und ohne Pausen in das interne RAM speichern und dann über UART auslesen. Weil die Störung ja keine saubere Gleichspannung ist wird man also irgendwelche Frequenzen sehen können. Macht dein Arduino sonst noch etwas was stören könnte? Du hast das so aufgebaut wie hier https://www.marotronics.de/mediafiles/Sonstiges/BTS7960.pdf auf Seite 22? Edit: Guest schrieb: > Wie willst du bitte sauber ein Signal messen das > Störungen im Bereich über 10 KHz hat? Die Frequenz von der PWM wird man selbst nicht sehen, aber vielleicht sind auch andere Störungen dabei. Eine Unterabtastung ist es auch nicht, wenn er richtig filtert. Guest schrieb: > Selbst wenn du an dem ACS filterst fängst du dir > garantiert über die Leitungen nochmal was ein. Filtern tut man direkt am > ADC und nicht Meter weit weg. Exakt! Und dann kann man noch die Spannungsversorgung filtern und die Massenverbindung zum ADC. Wenn er aber an der falschen Stelle filtert und sich dann auf den Leitungen was einfängt, dann könnte er die unterabgetastete PWM sehen. Wolfgang schrieb: > Das ist doof. Vielleicht schwankt dein Strom wirklich so stark. was schrieb: > DC Bürstenmotor Könnten das Bürsten sein die da bei so geringer Motorlast einen unschönen Stromverlauf erzeugen?
:
Bearbeitet durch User
was schrieb: > Wir reden hier von Störungen durch eine 20kHz PWM, so schnell ist der > ADC und die serielle Schnittstelle nicht als dass man da eine > Regelmäßigkeit erkennen könnte. Da schmeißt du viele Dinge in einen Topf. Natürlich kannst du ein 20kHz mit einer niedrigeren Frequenz abtasten. Und natürlich kann man dann auch Regelmäßigkeiten erkennen - nennt sich Aliasing. Ein Signal mit 20.1kHz oder 19.9kHz, abgetastet mit 10kHz wird bspw. sauber als 100Hz Signal in den abgetasteten Werten auftauchen. Bei genügend ungeschickter Programmierung und zu langsamer Ausgabe, wird man allerdings keine Ausgabe von Werten mit konstanter Abtastfrequenz erreichen und das dürfte das Problem werden.
was schrieb: > Die 2.5V Bias sind eine Eigenschaft des ACS712, war also im ersten Post, > ich erzeuge da garnichts. Quatsch, schon mal ins Datenblatt geguckt? Der Nullpunkt vom ACS712 liegt nicht bei 2.5V, sondern - wie unter Common Operating Characteristics nachzulesen bei /VCC*0.5/ Jede Abweichung der VCC von den nominellen 5V schlägt also voll auf den Nullpunkt des ACS712 durch. Für Stabilität der Messwerte muss also im ADC genau AVCC als Referenz verwendet werden und genau diese saubere Spannung auch zur Versorgung des ACS712 heran gezogen werden.
Da der Sensor nur wenige mA Strom als Versorgung braucht könnte man auch eine Spannungsreferenz als Quelle hernehmen. Z. B. eine Shuntreferenz mit 4.096 V. Dann dürfen die 5 V etwas Rippel abbekommen.
Wolfgang schrieb: > Für Stabilität der Messwerte muss also im > ADC genau AVCC als Referenz verwendet werden und genau diese saubere > Spannung auch zur Versorgung des ACS712 heran gezogen werden. So ist es auch.
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.