ATMega Spannungsabfall bzw Sromaufnahmeanstieg erkennen

OP #4277580
Lesenswert?

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
Angehängte Dateien:
(Firma: TravelRec.) Persönliche Seite #4277787
Lesenswert?

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.
#4277788
Lesenswert?

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
#4277805
Lesenswert?

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.
OP #4277937
Lesenswert?

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
Angehängte Dateien:
(Firma: keine) #4277966
Lesenswert?

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.
OP #4277970
Lesenswert?

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.
Gast #4277983
Lesenswert?

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!
Gast #4277991
Lesenswert?

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.
OP #4278002
Lesenswert?

@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
#4278015
Lesenswert?

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.
#4278142
Lesenswert?

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.
#4278148
Lesenswert?

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 ;)
#4278156
Lesenswert?

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.
OP #4278361
Lesenswert?

@ 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
#4278375
Lesenswert?

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.
#4278422
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren