Forum: Mikrocontroller und Digitale Elektronik ATMega Spannungsabfall bzw Sromaufnahmeanstieg erkennen


von Kolja L. (kolja82)


Angehängte Dateien:

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

von Ulrich F. (Gast)


Lesenswert?

Ja!
Stromaufnahme messen scheint mir sinnvoller.

Spannungsquellen haben meist einen kleinen Innenwiderstand.
Darum auch der kleine Einbruch.

von Kolja L. (kolja82)


Lesenswert?

Kann ich , ohne weitere Bauteile, die Stromaufnahme auslesen?

von Ulrich F. (Gast)


Lesenswert?

Ich weiß ja gar nicht welche Bauteile du verwendest......

Wie wäre es mit einem Shunt?

von Georg G. (df2au)


Lesenswert?

Messwiderstand in die GND Leitung des Motors, Spannung am Widerstand 
messen.

von Kolja L. (kolja82)


Lesenswert?

@Georg
Das wäre dann doch ein Shunt, oder?

Könntest du es aufzeichnen?

von Kolja L. (kolja82)


Lesenswert?

Kann ein AVR die Spannung zwischen 2 Pins messen?
Also kann ich ihn wie ein Multimeter parallel zum Widerstand schalten?

Gruß Kolja

von Dussel (Gast)


Lesenswert?

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.

von Kolja L. (kolja82)


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


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.

von Michael U. (amiga)


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

von Malte S. (maltest)


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.

von Tcf K. (tcfkao)


Lesenswert?

Ich befürchte hier fehlt jedes Verständnis für "Absolute Maximum 
Ratings"... :(

von Kolja L. (kolja82)


Lesenswert?

@tcf kao
Meinst du mich, oder Malte?

von Tcf K. (tcfkao)


Lesenswert?

Kolja L. schrieb:
> Meinst du mich, oder Malte?

Den TO, also leider Dich.

von Ulrich F. (Gast)


Lesenswert?

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.

von Kolja L. (kolja82)


Lesenswert?

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 :-)

von Kolja L. (kolja82)


Angehängte Dateien:

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

von Aha (Gast)


Lesenswert?

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.

von Daniel H. (Firma: keine) (commander)


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.

von Kolja L. (kolja82)


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.

von Tcf K. (tcfkao)


Lesenswert?

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.

von Aha (Gast)


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!

von Soso (Gast)


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.

von Kolja L. (kolja82)


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

von Malte S. (maltest)


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.

: Bearbeitet durch User
von Tcf K. (tcfkao)


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.

von Crazy Harry (crazy_h)


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 ;)

von Konrad S. (maybee)


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.

von Georg G. (df2au)


Lesenswert?

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 :-)

von Kolja L. (kolja82)


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

von Tcf K. (tcfkao)


Lesenswert?

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.

von Georg G. (df2au)


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.

von Georg G. (df2au)


Lesenswert?

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.

von Malte S. (maltest)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

Die ganze Stromausleserei am Motor könnte man sich sparen, falls 
Ventilstift und Motorstift elektrisch gegeneinander isoliert sind.

von Tcf K. (tcfkao)


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

von Konrad S. (maybee)


Lesenswert?

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
Noch kein Account? Hier anmelden.