Hallo Elektroniker Wir sitzen immer noch, oder schon wieder vor diesem Problem. Versuchsaufbau: Arduino kompatibles Board mit ATMega328, Spannungsversorgung über den USB Adapter. Es wird ein Motor (3V mit Getriebe) direkt an einem digitalen Pin betreiben. Dieser Motor soll ein Ventil schließen, wofür aus dem Getriebe ein kleiner Stift heraus geschraubt wird. Dieser Stift stößt erst nach einer gewissen Zeit gegen den Stift des Ventils. Und genau diesen Zeitpunkt wollen wir herausfinden. In der Grafik ist ein Diagramm abgebildet, wo über die Zeit die gemessene Spannung aufgetragen ist. Gemessen wird mit 50 Werten pro Sekunde. Nach ca. 10 Sekunden (bei Wert 482) treffen sich die beiden Stifte. Der Abfall der Spannung ist relativ gering und außerdem Schwankt diese auch noch. Würde es einfacher, wenn den Anstieg der Stromaufnahme messen? Oder gibt es eine ganz andere, bessere Methode? Grüße Kolja
Ja! Stromaufnahme messen scheint mir sinnvoller. Spannungsquellen haben meist einen kleinen Innenwiderstand. Darum auch der kleine Einbruch.
Kann ich , ohne weitere Bauteile, die Stromaufnahme auslesen?
Ich weiß ja gar nicht welche Bauteile du verwendest...... Wie wäre es mit einem Shunt?
Messwiderstand in die GND Leitung des Motors, Spannung am Widerstand messen.
@Georg Das wäre dann doch ein Shunt, oder? Könntest du es aufzeichnen?
Kann ein AVR die Spannung zwischen 2 Pins messen? Also kann ich ihn wie ein Multimeter parallel zum Widerstand schalten? Gruß Kolja
Kolja L. schrieb: > Kann ein AVR die Spannung zwischen 2 Pins messen? Nicht zwischen beliebigen. Aber er kann eine Spannung gegen Masse messen. Das sollte dir für Georgs Ansatz weiterhelfen. Bei dem Strom würde ich aber noch einen Verstärker vorsehen.
Mit dem Multimeter gemessen: Die Stromaufnahme ändert sich von 50mA im Leerlauf zu 60mA sobald das Ventil getroffen wurde. Diesen Unterschied möchte ich jetzt mit dem AVR messen.
Wenn der Shunt 1Ohm beträgt, macht das 10mV Unterschied. Kann man mit dem internen Verstärker, der in manchen AVR verbaut ist, gut messen. Wenn man den nötigen Tiefpass nicht in Software nachbilden will, sollte die Messspannung extern gut geglättet werden. Schaltungsbeispiele gibt es in den diversen Heizungsregler-Threads hier im Forum.
Hallo, a) nur AVR-Pin -> Motor(+) -> Motor(-) an GND? b) zwischen 2 Pins mit Drehrichtungsumkehr? Wenn a) 10Ohm in die LEitung Motor-GND, ADC an die Verbindung Motor-Widerstand. Bei 50mA sind das 500mV, bei 60mA eben 600mV. Die sind mit interner Refernez gut auswerbar. b) wäre merklich komplizierter. Gruß aus Berlin Michael
Kolja L. schrieb: > Es wird ein Motor (3V mit Getriebe) direkt an einem digitalen Pin > betreiben. Kolja L. schrieb: > Die Stromaufnahme ändert sich von 50mA im Leerlauf > zu 60mA sobald das Ventil getroffen wurde. Aus dem Datenblatt des ATmega328/unter Absolute Maximum Ratings: > DC current per I/O pin.................................................. 40.0mA Außer einem Shunt solltest du dem Motor noch einen Treiber spendieren...auch wenn das erstmal so funktioniert.
Ich befürchte hier fehlt jedes Verständnis für "Absolute Maximum Ratings"... :(
Kolja L. schrieb: > @tcf kao > Meinst du mich, oder Malte? Ich übersetze dir das! Die Herren und /oder Damen meinen, dass ein typischer AVR Pin mit 40mA schon quasi überlastet ist.
Ok ok, ich habs verstanden. Wobei das am eigentlichen Problem nicht viel ändert. Und da es der einzige Pin ist, den wir betreiben, möchte ich es gerne erstmal so weiter versuchen. Es ist ja auch kein Kernkraftwerk, was wir damit steuern wollen :-)
So, alles nochmal zurück gebaut und nochmal mit dem Multimeter den Strom gemessen. Das Bild zeigt die Stromaufnahme am Ende des Fahrweges, wenn der Motor sich nicht mehr bewegt. Im Leerlauf zieht er ca. 15mA unter Last ca.20mA. Kein Plan, wo meine Werte aus dem oberen Beitrag herkamen... Sorry für die Verwirrung und danke dafür das ihr mich "genötigt" habt nochmal zu messen. Es bleibt das Problem, das die Werte (mit dem Multimeter gemessen) sehr schwanken. Im Leerlauf zwischen 13 und 18 mA. Unter Last zwischen 18 und 23 mA. Das Multimeter misst aber auch nur im Sekundentakt (geschätzt). Kann die Spannung nicht mit einem Kondensator geglättet werden? Wenn ja, wie berechnet man die richtige Größe? Gruß Kolja
Kolja L. schrieb: > Wenn ja, wie berechnet man die richtige Größe? Man muss gar nichts berechnen wenn man lernresistent ist: Kolja L. schrieb: > Und da es der einzige Pin ist, den wir betreiben, > möchte ich es gerne erstmal so weiter versuchen.
Kolja L. schrieb: > Im Leerlauf zwischen 13 und 18 mA. > Unter Last zwischen 18 und 23 mA. Und? Damit hast du eine definierte Bedingung zum anhalten, nämlich Strom >= 19mA. Also (wie schon hier geschrieben wurde) 10 Ohm Widerstand in die GND-Leitung vom Motor und Spannungsabfall messen. Wenn Spannung >= 190mV Motor abschalten. Bei 3V VCC kann der ADC des Atmega328 etwa 3mV auflösen, die Differenz zwischen 18mA (180mV) und 19mA (190mV) lässt sich also ohne Weiteres messen. Alternativ den Widerstand verkleinern und den Spannungsabfall per Differenzverstärker so auskoppeln, dass der Schaltpunkt sicher bestimmt werden kann.
Ich verstehe solche Beiträge nicht. Ob und wie ich mit meinem Eigentum umgehe ist doch hier gar nicht die Frage. OK, wenn Gefahr für Leib und Leben bestehen würde, könnte ich ja noch einiges verstehen. Aber wenn ich mir meinen AVR zerschieße, weil ich nicht auf Hinweise höre,ist und bleibt das meine Sache. Zumal ich doch mit meinem letzten Beitrag versucht habe zu zeigen, dass ich nicht lernresistent bin, sondern Aufgrund der Hinweise alles nochmal überprüft habe und zu einem anderen (hoffentlich) besseren Ergebnis gekommen bin. Was juckt es in deinen Fingern solch einen, für das Thema, unnützen Beitrag zu schreiben? Das war eine ernst gemeinte Frage mit der Bitte um Antwort. Gerne auch per Mail Gruß Kolja P.S. Ich schätze dieses Forum als eine der größten Quellen für meine Projekte und freue mich über jede Antwort die mir gegeben wird oder die ich lese, weil jemand anderes schon eine ähnliche Frage gestellt hat. Desweiteren ist es gerade für Quereinsteiger wie mich sehr hilfreich von Projekten und Ideen Anderer zu lesen.
Kolja L. schrieb: > Aber wenn ich mir meinen AVR zerschieße, weil ich nicht auf Hinweise > höre,ist und bleibt das meine Sache. Völlig richtig, solange daraus nicht wieder eine Arbeitslast für andere generiert wird.
Kolja L. schrieb: > sondern Aufgrund der Hinweise alles > nochmal überprüft habe > und zu einem anderen (hoffentlich) besseren Ergebnis gekommen bin. Was gibt es zu überprüfen wenn der uC auserhalb seiner Spez. (Abs. max. rat.) betrieben wird? Da ist jede Hilfe "Perlen vor die...". Daraus können andere lernen und daher nicht unnütz!
Ja und wo ist da jetzt das Problem? Die Werte vom Anfang hat er doch schon überprüft und korrigiert! Jetzt passen die sogar zu der Belastbarkeit, 20mA schafft der AVR doch. Außerdem kann man durchaus erkennen, dass er Kritik ernst nimmt, seine Sache noch mal überprüft und auch korrigiert. Wo ist denn das Problem? Nicht jeder kennt alle Grundlagen und weiß genau wie der ADC funktioniert, deshalb kommen viele hier her: um es zu lernen! @OP Der ADC misst mit Bezug auf die Masse des μC. Daher kann man nicht wie beim Multimeter zwischen zwei belibigen Punkten messen. Das ist hier aber kein Problem, denn man kann den Messwiderstand ja problemlos "hinter" den Motor schalten (also Pin->Motor->Messwiderstand->Masse) und dann zwischen Motor und Widerstand den ADC anschließen. Dadurch wird gerade genau die Spannung die am Widerstand anliegt gemessen.
@Tcf Kao Ich hoffe, hier hilft jeder freiwillig :-) @Aha Überprüft habe ich meinen Aufbau, aber ich vermute langsam du möchtest mich nicht verstehen. In dem ganzen fachfremden Geschreibe ist mir fast der Eintrag von Daniel entgangen. Wenn die Werte, die der ATMega misst auch so eindeutig wären, dann wäre das die Lösung: einfach bei 19mA aussortieren. Leider schwanken die Messwerte jedoch so stark, dass eine saubere Trennung nicht möglich ist (siehe Diagramm ganz oben). In Excel kann ich die Kurve wunderbar mit einem PID Regler glätten, jedoch glaube ich nicht, dass ich den Regler in den Loop reinschreiben kann. Für Glättungskondensatoren finde ich nur Anwendungen nach Transformatoren und Gleichrichtern,aber eigentlich müsste das doch auch hier funktionieren. Nur die Größe muss passen. Ist er zu klein, glättet er nicht genug, ist er zu groß, glättet er auch die zu messende Stelle weg... Danke schon mal für den Hinweis mit der Auflösegenauigkeit! Kannst du mir noch zwei Fragen beantworten? Was macht die ADC Pins so besonders für diese Aufgabe? Warum muss der Widerstand zwischen GND und Motor und nicht auf die andere Seite? Danke und Gruß Kolja
Machst du den Shunt auf die High Side, musst du die gemessene Spannung von Vcc abziehen - und dazu eigentlich Vcc auch noch messen. Auf der Low Side ist dein Messwert direkt proportional zum Spannungsabfall am Shunt. Zum Glätten brauchst du einen Tiefpass. In Hardware als RC-Glied am Messpunkt oder in Software z.B. durch Mittelwertbildung der Messwerte (Moving Average). Dann kannst du auch an Veränderungen im geglätteten Stromfluss den Anschlagpunkt bestimmen, ohne dich auf einen absoluten Schwellwert festzulegen.
:
Bearbeitet durch User
Kolja L. schrieb: > @Tcf Kao > Ich hoffe, hier hilft jeder freiwillig :-) Ja, genau -- oder eben auch nicht. Kolja L. schrieb: > @Aha > Überprüft habe ich meinen Aufbau, > aber ich vermute langsam du möchtest mich nicht verstehen. > In dem ganzen fachfremden Geschreibe [...] Keiner versteht Dich -- dabei kam das meiste fachfremde Geschreibe von Dir. Wenn Du glaubst dass jetzt alles wunderbar ist weil die Spezifikationen ja eingehalten werden dann denke doch mal einfach darüber nach was passiert wenn der Motor überlastet wird oder einen Kurzschluss hat. Mit einem weiteren, für solche Zwecke vorgesehenen Motortreiber geht eben schlimmstenfalls nur dieser Treiber kaputt. Hier in Deiner Schaltung kann aber der µC beschädigt werden, dessen späterer Austausch (Neuprogrammierung, Beschaffung der Programmierdaten, ursprüngliche Ansprechpartner nicht mehr greifbar) dann wesentlich mehr Aufwand ist als der Austausch des Treibers. So etwas nennt man designed to fail. Damit bin ich wieder zum selben Punkt: Natürlich kannst Du Dir soviel zerschießen wie Du möchtest. Wenn daraus aber Arbeitslast für andere entsteht ist das bequem, vorsichtig ausgedrückt.
Hängt dein Motor nun an einem Mega-Pin und GND oder (zwecks umpolung) an zwei Mega-Pins ? Bei letzterem ist die Shunt-Messung auch nicht möglich, da sich GND beim Motor ändert. Klar wenn du nur den Strom in eine Drehrichtung messen willst geht das, nur bekommt dann dein ADC (evtl. über einen Verstarker/OP) auch manchmal die volle UB mit. Also nur in einer Drehrichtung messen ;)
Wenn mit dem ADC genaue Messungen gemacht werden sollen, dann schlagen die Datenblätter der AVRs vor, den Controller während der Messung in den Schlaf zu schicken um Störungen durch Schaltvorgänge zu reduzieren. Jetzt überlastest du einen Ausgang. Infolgedessen bricht die interne Spannung des Controllers ein. ... Ja, ich kann nachvollziehen, dass du keine brauchbaren Messwerte vom ADC bekommst.
Ganz dumme Frage: Was passiert, nachdem der Motor einmal in den Anschlag gefahren ist? Bleibt er da für immer stehen? Oder wird von Hand zurück gedreht? Tut mir Leid, aber mir erschliesst sich der Sinn deiner Vorrichtung noch nicht. Und ich nun mal neugierig :-)
@ Crasy H. Ja,der Motor hängt an zwei normalen Pins, aber wir wollen die Stromaufnahme nur in eine Richtung ermitteln. @ Konrad Wie kann der AVR denn schlafen während der Messung, der soll doch den Motor stoppen, wenn die Spannung fällt. @ Georg Ja, wenn der Motor das Ventil geschlossen hat, kaufen wir einen Neuen :-) Die Ventile die wir nutzen sind ganz normale Heizkörperventile. Je weiter der Stift in das Ventil gedrückt wird, desto weiter schließt das Ventil. Auf dem Ventil haben wir einen Getriebemotor, welcher mit einem kleinen Gewindestift das Ventil schließen kann. Wenn der Motor ganz zurückgefahren ist, das Ventil also offen, gibt es eine kleine Lücke zwischen dem Stift vom Motor und dem vom Ventil. Wir wollen jetzt wissen, wann der Motor(stift) gegen den Ventilstift drückt, also ab wann sich das Ventil zu schließen beginnt. Ganz schließen müssen wir das Ventil nicht, aber natürlich wieder öffnen. Daher ist der Motor auch an zwei normale Pins des AVR angeschlossen. Gruß Kolja
Kolja L. schrieb: > Ja,der Motor hängt an zwei normalen Pins, > aber wir wollen die Stromaufnahme nur in eine Richtung ermitteln. Lecker, auch noch ohne Freilaufdiode -- mal gucken wie lange es dauert bis sich der µC verabschiedet. Dieses Konzept ist Murks, aber dafür braucht es ein Mindestmaß an Einsichtsfähigkeit.
Kolja L. schrieb: > Daher ist der Motor auch an zwei normale Pins des AVR angeschlossen. Wenn du das im ersten Posting geschrieben hättest, hätte man manchen Irrweg vermeiden können. Da der ATMega328 keine Differenz-Eingänge am ADC hat, hast du die Wahl zwischen einem externen Differenzverstärker und Messung des Stromes über einen AD-Kanal oder die legst beide Seiten des Mess-Shunt über je einen Tiefpass an je einen AD-Kanal und bildest die Differenz per Software. In jedem Fall empfiehlt es sich, keine feste Schwelle zu wählen sondern auf einen Anstieg des Mittelwertes zu reagieren.
Tcf K. schrieb: > Freilaufdiode Wie macht man das, wenn man Richtungsumkehr haben möchte? Bucherot Glieder wären ein Ausweg. Aber da hätte ich Angst um die Ausgangstreiber im Prozessor. Wie schon von einigen hier angemerkt, bietet das Konzept noch Optimierungsmöglichkeiten.
Georg G. schrieb: > Tcf K. schrieb: >> Freilaufdiode > > Wie macht man das, wenn man Richtungsumkehr haben möchte? Die zwei Pins des µC bilden dann eine H-Brücke also kommen an jeden der Pins zwei Dioden jeweils in Sperrrichtung zu den Rails. Parallel zu den Schutzdioden des Pins, die diese Aufgabe derzeit mit Vergnügen mitübernehmen.
Die ganze Stromausleserei am Motor könnte man sich sparen, falls Ventilstift und Motorstift elektrisch gegeneinander isoliert sind.
Kolja L. schrieb: > Es wird ein Motor (3V mit Getriebe) direkt an einem digitalen Pin > betreiben. Kolja L. schrieb: > Ja,der Motor hängt an zwei normalen Pins, Georg G. schrieb: > Wenn du das im ersten Posting geschrieben hättest, hätte man manchen > Irrweg vermeiden können. Genau so ist es... aber wir wollen den TO ja absichtlich nicht verstehen und behindern ihn in seinem Tun, und überhaupt ist das alles fachfremdes Geschreibe hier... Malte S. schrieb: > Parallel zu den > Schutzdioden des Pins, die diese Aufgabe derzeit mit Vergnügen > mitübernehmen. Richtig, zurzeit werden die Spikes dann halt über den µC und seine Versorgung abgeleitet... eine stabile Lösung! Wolfgang schrieb: > Die ganze Stromausleserei am Motor könnte man sich sparen, falls > Ventilstift und Motorstift elektrisch gegeneinander isoliert sind. Oder wenn man die Konstruktion ändert und den Spalt überhaupt vermeidet. Oder den Motor mit reduzierter Spannung bis an den Stift anfahren und blockieren lässt, und dann erst mit voller Spannung ansteuert. Georg G. schrieb: > Da der ATMega328 keine Differenz-Eingänge am ADC hat, hast du die Wahl > zwischen einem externen Differenzverstärker und Messung des Stromes über > einen AD-Kanal oder die legst beide Seiten des Mess-Shunt über je einen > Tiefpass an je einen AD-Kanal und bildest die Differenz per Software. In > jedem Fall empfiehlt es sich, keine feste Schwelle zu wählen sondern auf > einen Anstieg des Mittelwertes zu reagieren. Wozu Mess-Shunt? Das ist für Pedanten. Der nächste logische Vorschlag wäre es das Rds des jeweiligen Low-Ausgang als Mess-Shunt zu benutzen und einen Kalibrierlauf zu starten...
Kolja L. schrieb: > @ Konrad > Wie kann der AVR denn schlafen während der Messung, > der soll doch den Motor stoppen, wenn die Spannung fällt. Datenblatt lesen zählt wohl nicht zu deinen Lieblingsbeschäftigungen? ;-)
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.