Forum: Analoge Elektronik und Schaltungstechnik Regelkreis, DC Motor mit PWM und H-Brücke


von Nikias Klohr (Gast)


Lesenswert?

Hallo,
da dies mein erster Post in diesem Forum ist will ich mich kurz
Vorstellen:
Ich Studiere E-Technik im 5. Semester und beschäftige mich seit ca. 6
Monaten mit µCs um meinen Erfahrungshorizont um die praktische
Elektrotechnik zu erweitern. In dieser Zeit hab ich diese Seite sehr
häufig zu Rate gezogen. Vielen Dank dafür!

So hier zu meinem Projekt/Problem:
Ich will einen Motor-Schiebepoti ansteuern. Dieser soll in einem
"Schwung" möglichst genau einen Zielwert treffen.

Es handelt sich um ein Alps-10cm-10kOhm-DC-Motor-Riemenantrieb Poti,
wie es in digitalen Mischpulten zu finden ist.

Bei einer AD-Wandler genauigkeit von 10Bit kann ich Theoretisch auf
0.1mm(10 Ohm, oder bei 5V Referenz, 48mV) genau feststellen wo das Teil
steht. Derzeit schaffe ich aber höchstens 8 Bit, bei Verwendung eines
Mittelwerts von 100 Messungen.

Problem 1:
Wie kann ich eine höhere Genauigkeit erreichen? Ich bekomme meine
Referenzspannung einfach nicht glatt. Habe schon Z-Diode+Drossel+RC
Glied versucht. Ohne Erfolg. Vor allem bei 4MHz habe ich 100mV
Amplitude drauf!!! Andererseits habe ich mir überlegt dass 1. bei
125KHz Wandlerfrequenz das eigentlich egal sein müsste. Und 2. mein
Aufbau mit der Referenzspannung über einem Schiebepotie die Welligkeit
eigentlich egal sein müsste !? Misst ja "relativ". Es sei denn es
liegt an irgendwelchen Kapazitäten auf Kabeln oder Poti.
Sleep während der Wandlung bringt leider auch nichts.


Die Ansteuerung sieht folgendermaßen aus:
PWM->RC-Glied->Bipolar-als-Spannungfolger->H-Brücke.
Das heißt ich kann Richtung und Geschwindigkeit(Spannung) steuern.
Derzeit benötige ich dafür 5 Bipolar-Transistoren.

Problem 2:
Diese Lösung gefällt mir nicht ganz so gut. Ich habe auf meiner Suche
nach einer Integrierten H-Brücke (am besten MosFet) leider noch keine
gefunden, die auch eine andere Spannung für den Motor erlaubt. Kennt
hier vielleicht jemand eine solche? Ich benötige 2,5V (da steht das
Poti) bis 5V bei 250mA. Ich kann die Spannung gerne von außen per PWM
und meinem RC-Glied bereitstellen.


Das letzte Problem betrifft die Regelung. Derzeit werte ich Ist-Wert zu
Soll-Wert aus. Daraus entscheide ich dann wohin ich mich mit welcher
Geschwindigkeit bewegen will. Je näher ich dem Ziel komme, desto
langsamer werde ich. Nur leider erreiche ich je nach Parametern
entweder das Ziel nicht. Oder ich schieße darüber hinnaus und muss
gegenregeln, was dann zu einer Oszillation des Systems führt.
Gibt es da einen Regelungstechnischen Trick? Da ich die letzten 100
Werte sowiso schon hab, dachte ich mir ich könnte möglicherweise auch
die aktuelle Geschwindigkeit mit einbeziehen? Grade in dieser Richtung
fehlt mir aber leider noch die Theorie. (Wie gesagt, erst 5. Semester)

Vielen Dank schonmal,
Nikias


Achso, ich verwende einen Atmega8 bei 16MHz, aber das dürfte ja egal
sein.

von Ulrich (Gast)


Lesenswert?

Also ich brauche in einem Hobby-Projekt gerade auch einen Regler,
deswegen habe ich mich da mal ein bissele eingelesen.

Du hast warscheinlich bisher einen P-Regler???

Wenn du noch einen I-Anteil hinzurechnest, dann erreichst du das Ziel
auf jedenfall. Außerdem dürfte dann auch das Schwingen beherschbarerer
werden (P-Anteil abbauen...)

Also suche mal nach PI-Regler.

Zum Glück (oder doch Unglück) habe ich bisher noch nicht studiert. Auf
den Non-Sense den man da lernt bin ich nicht scharf. Vieles interesiert
einen nicht und vieles weiß ich schon und das was mich interessieren
würde bringe ich mir selber daheim bei....und nebenher kann man
arbeitetn gehen und ich finde das ist guter ompromiss ;-)

von Sebastian (Gast)


Lesenswert?

Hallo,

nimm eine externe referenz als IC, das ist meist am einfachsten und
wenn der wert absolut genau sein soll auch.
Aber man kann die U Ref auch selbst erzeugen. Konstantstromquelle ->
widerstand.
Oder Diode zum entkoppeln von der VCC und dann Z Diode + RC +Spule.
Die Z Dioode ist aber temperaturabhängig, das sollte man nicht
vernachlässigen.

Zum Regeln:
Ich habe die besten ergebnisse mit einem PID Regler + Dynamischer
nachführung der Reglerparameter erziehlt.
Abhängig von der Regeldifferenz definiert man Kurven für Kp, Ti und D.
somit hat man für jeden fall immer optimale reglereinstellungen.
Das erfordert aber eine auffwendige einstellung der Kurven.

Sebastian

von Michael P. (Gast)


Lesenswert?

Deine Strecke hat I-Verhalten. D.h. du gibst z.B. ein Volt auf den Motor
und der Motor integriert bis ins unendliche oder bis zum Anschlag. Deine
Ansteuerung mit dem Transistor hat ein PT verhalten. D.h. eingestellter
Stellwert kommt mit einer Verzögerung durch das RC erst beim Motor an.

Mein Vorschag:

PD - Regler in uC (damit wird die Regler ausreichent schnell und
ereicht mit hoch genugen P-Anteil den Entwert. Formel sieht ungefähr so
aus:

Fehler = Sollwert - Istwert
Stellwert = KP * Fehler + KD * (Fehler - Fehler_alt)
Fehler_alt = Fehler

KP stellst du so hoch ein das es schwingt (mit KD = 0) dann KD soweit
erhöhen das Schwingung wieder aufhört.

Auserdem:

Auf RC Glied verzichten und den Motor direckt mit PWM ansteuern, da
Regelungstechnisch einfacher.

Störungen in AD Wandler umbedingt beseitigen, kann dir helfen wenn du
Layout + Schaltplan zeigst.

PS: Kann man natürlich alles exakt berechnen, kommt dann in
Regelungstechnik 1 ;-)

Michael

von Nikias Klohr (Gast)


Angehängte Dateien:

Lesenswert?

Vielen dank schonmal für die Regler Tips...
Das funktioniert schon ganz gut.

Allerdings glaube ich das ichs nicht mehr genauer bekomme weil meine
Referenzspannung eben nicht glatt ist!

Anbei ein Screenshot vom OSZI.
Rot ist AREF, Blau ist VCC, VORSICHT unterschiedliche Y-Achsen!

AREF ist jetzt von VCC folgendermaßen entkoppelt:
 VCC
  |
 220R
  |
 (L)
  |
  +--+--+-AREF
  |  |  |
  c1 c2 Z
  |  |  |
  +--+--+-GND

Z= Zehner 4.3V
c1=100nF
c2=4.7µF
L war bei diesem Screenshot nicht drinn.

Probiert hatte ich auch schon L=10mH - keine Änderung.

Ich muss zugeben ich stocher hier grad im Dunkeln rum...bin auch schon
etwas müde mitlerweile.

Das ganze ist auf einem Experimentierboard aufgebaut.

Gruß,
Nikias

von Nikias Klohr (Gast)


Angehängte Dateien:

Lesenswert?

Hab noch ein bischen weiter gemacht.
Hier ein Bild von Messwert zu Referenzspannung bei zufälligen
Poti-Bewegungen. Blau ist Poti-Messwert, Rot ist Referenzspannung.
Interessant ist, das die Poti-Spannung, wie auch die Referenzspannung
gleichzeitig immer gegen Ende eines Stellvorgangs schwingen. Ich kann
mir das eigentlich nur damit erklären, dass da ja die PWM nicht mehr
auf dauer AN ist, und ich dadurch eine Schwingung auf VCC bekomme?
Natürlich ist es ziemlich blöd das diese Schwingung immer genau zu dem
Zeitpunkt stattfindet, wo ich die höchste genauigkeit benötige.
Also muss ich irgendwie die Schwingung durch die PWM
verringern...hmmm...
bin für jeden Tip dankbar!

Gruß,
Nikias

von Olaf (Gast)


Lesenswert?

Du glaubst das deine maximal erzielbare Genauigkeit von deinem
AD-Wandler abhaengt. Ich glaube aber das dein Poti ungenauer ist.

Ueberpruef das mal. :-)

Olaf

von Jochen (Gast)


Lesenswert?

Seperate Masse Vcc Leitungen verwendet? da Leitung eine Induktivität
enthält und bei der hohen frequenz von der PWM nicht mehr zu
vernachlässigen ist, und sich durch gemeinsam genutzte Leitungen
einkoppelt.
Galvanische Kopplung

von Jochen (Gast)


Lesenswert?

achja nicht nur die treiber vom Motor
der µC versaut natürlich auch noch die Masse

von Nikias Klohr (Gast)


Lesenswert?

Wie ist denn die Genauigkeit eines solchen Potis definiert.
Ich hab mal kurz das Multimeter rangehoben, wenn ich das Poti irgendwo
hinbewege stellt sich für den Wiederstand erst relativ gemächlich ein
stabiler Wert ein! Der schwankt dann so um die 10 Ohm, was bei meiner
Genauigkeit von derzeit 8 Bit OK wäre...ich kann 39 Ohm auflösen.  Aber
bis er mal so fest ist schwankt er durchaus +- 100 Ohm ... für ca. 2
Sekunden wobei ich natürlich nicht weiß ob das auch an meinem trägem
Multimeter liegt.

Gibt es eine vernünftige Definition/Messmethode für sowas?

Gruß,
Nikias

von Winfried (Gast)


Lesenswert?

Aufbau auf einem Experimentierboard - naja, mach dir nicht zu viel
Hoffnungen, solche Probleme darauf in den Griff zu bekommen. Ab einem
gewissen Punkt braucht es dann doch ein ordentliches Layout auf einer
Platine.

von Unbekannter (Gast)


Lesenswert?

Wenn Du 10 Bit AD-wandeln willst, brauchst Du schon ordentliche Masse
und saubere Entkopplugen usw. Aus einem Steckboard holst Du kaum mehr
als 8 Bit heraus.

Das andere Probleme ist die 4,3 Volt Zenerdiode. Zenerdioden sind
Rauschweltmeister...

Aber Du brauchst doch gar keine exakte Referenzspannung. Mit dem Poti
machst Du ja einen Spannungsteiler, und der AD-Wandler misst bezüglich
des AREF-Signals. Also enstörst Du das AREF-Signal ordentlich mit
kleiner Spule und kleinem Elko und 100nF Keramik. Dann hängst Du das
eine Ende des Potis an den AREF und das andere an GND. Der
Mittelabgriff des Potis geht an den AD-Wandler Pin.

AGND und Poti-GND und AREF und Poti-AREF am Pin des Controllers
zusammenführen, so daß da keine Ströme drüberfließen und
Spannungsabfälle keine Rolle spielen.

Mit dieser Konfiguration spielt die tatsächliche Höhe der AREF-Spannung
keine Rolle mehr, sondern nur noch die Stellung des Potis
(Spannungsteiler).

Dann noch ein Punkt: Keine Ahnung welchen Controller Du verwendest,
aber je schneller Du AD-wandelst, desto ungenauer wird das. Schaue mal
im Datenblatt nach, ob der Controller bei 125 kHz überhaupt noch mit 10
Bit wandeln kann. Notfalls musst Du eben langsamer wandeln. Das bringt
auch nochmals Genauigkeit.

von Nikias Klohr (Gast)


Lesenswert?

Hallo,
ja das mit dem Spannungsteiler war mir ja eigentlich auch schon
bewusst. Hatte ich in meinem ersten Post schon angedeutet. Nur kann es
eben sein das durch Kapazitäten auf dem Poti und den Leitungen der
Spannungsteiler nicht Frequenzunabhängig linear ist!

Wie geschrieben verwende ich einen Atmega8 @ 16MHz. In der Doku steht,
das der AD-Wandler zwischen 50 und 200KHz Wandlerrate liegen sollte.
Ich habe einen Teiler von 128 gewählt was 125KHz enspricht -> müsste
also gehen.

Die Zehnerdiode werde ich dann mal wieder weglassen.

von Unbekannter (Gast)


Lesenswert?

Na, dass die Zeitkonstante aus Poti und Leitungskapazitäten größer ist
als die mechanische Zeitkonstante deines Motors mit Getriebe und Poti,
bezweifle ich doch sehr...

Und wenn ich mich recht erinnere, steht in der Atmega8-Dokumentation
auch irgendwo, bei welcher Taktfrequenz der AD-Wandler noch 10 Bit
Auflösung bringt. Und wenn mich nicht alles täuscht, war das deutlich
niedriger als 125 kHz.

Und ansonsten, zur Regelung: Ab in die Bibliothek und mit den
Suchwörtern "Regelungstechnik Grundlagen" und "Regelungstechnik
Einführung" im Katalog suchen. Du interessierst Dich für alles, was
mit "PID" zu tun hat.

Selbst mit der Wikipedia kommst Du schon weit:

   http://de.wikipedia.org/wiki/Regelungstechnik

Aber als Student im 5. Semester solltest Du inzwischen doch gelernt
haben, wie man ein Problem löst, oder?

Und ein Ingenieur (auch ein angehender) vermutet, glaubt und probiert
nicht sinnlos in der Gegend rum, sondern berechnet und misst nach. Wenn
Du also wirklich denkst, Du hättest ein Leitungskapazitäts-Problem, dann
rechne Dir doch mal die Leitungskapazität aus, oder miss sie aus, oder
miss doch gleich mal den kompletten Frequenzgang inkl.
Phasenverschiebung Deiner AREF-Stabilisierung mit Poti und
Leitungskapazität.

So planlos im Nebel stochern ist doch armateurhaft!

von Thomas Winkel (Gast)


Lesenswert?

Hallo,
Michael P. hat eigentlich schon alles gesagt:
-Deine Strecke hat I-Verhalten, ist also in der Lage Fehler völlig zu
beseitigen. Ein weiterer I-Anteil im Regler beeinträchtigt nur die
Stabilität deines Systems, darauf solltest du also verzichten, es sei
denn, die Strecke soll auch stetigen Führungsgrößenänderungen folgen
können.
-Schmeiß das RC-Glied raus, dein Motor bildet schon einen Tiefpass, der
die Grundschwingung der PWM filtert. Das RC-Glied erhöht nur die Ordnung
deines Systems, verbrät unnötig Leistung und vor allem ist es ja auch
gerade der Sinn einer PWM, die Mosfets als Schalter zu betreiben!

Hinzufügen wollte ich noch, da du es bereits erwähnt hast, dass es
durchaus Sinn macht, die Geschwindigkeit mit einzubeziehen. Das
Stichwort heißt: "Velocity-Feedback". Wenn du die Position
differenzierst, erhälst du ja die Geschwindigkeit. Kann man diese aber
direkt messen, macht es Sinn, sie über ein Gain (Kv) auf den
Regleroutput zurückzuführen und von diesem abzuziehen. Dadurch ergibt
sich die selbe Characteristische Gleichung wie bei einem PD Regler. Der
Unterschied ist, dass hier dem System keine Nullstelle zugefügt wird,
dadurch ist es weniger empfindlich gegen Rauschen, und Nachteile wie
der "Set-Point-Peak" fallen meißt völlig weg. Meine Empfehlung lautet
also: P-Regler + Velocity-Feedback.

Zu deinem Rauschen, wie ist denn der Messaufbau? Bei der eingestellten
Empfindlichkeit musst du auf jeden Fall mit geschirmten Leitungen
messen und das GND (für den Schirm) direkt von der Schaltung holen,
also da wo du misst. Sonst kann das alles Mögliche sein was da
eingestreut wird, da bin ich auch schon mal drüber gestolpert.

Gruß,
Thomas

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.