Forum: Mikrocontroller und Digitale Elektronik Regler bei Microcontroller


von Olli (Gast)


Lesenswert?

Ich lese mich in Regelungstechnik ein und sehe, dass für digitale Regler 
eine ADU beim Mikrocontroller verwendet werden kann (anstelle analoge 
OPV), um dann eine Berechnung für Regler zu machen. Werden solche 
Berechnungen eigentlich mitgeliefert oder wie würde ich damit vorgehen?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Olli schrieb:
> Werden solche
> Berechnungen eigentlich mitgeliefert oder wie würde ich damit vorgehen?
Nein, mitgeliefert wird da ueblicherweise nichts.
Du musst gucken, wie schnell du regeln willst, also z.B. wieviele Werte 
pro Sekunde vom ADU geliefert werden/du von dort lesen musst.
Dann musst du aus diesen gelesenen Werten, ggf. Werten aus der 
Vergangenheit und deiner Sollgroesse den Ausgangswert deines digitalen 
Reglers berechnen. Und das eben "regelmaessig"...

Gruss
WK

von Olaf (Gast)


Lesenswert?

> OPV), um dann eine Berechnung für Regler zu machen. Werden solche
> Berechnungen eigentlich mitgeliefert oder wie würde ich damit vorgehen?

Nein, den Regler musst du schon selber programmieren und parametrieren.
Ueblicherweise vermittelt dazu die Vorlesung Regelungstechnik im
Nachrichtentechnikstudium die Grundlagen.
Ersatzweise kann man vermutlich auch ein paar Buecher lesen. .-)

Olaf

von Wolfgang (Gast)


Lesenswert?

Olli schrieb:
> Werden solche Berechnungen eigentlich mitgeliefert oder wie würde ich
> damit vorgehen?

Dafür gibt es ganze Vorlesungen über digitale Abtastsysteme und 
Regelungstechnik.
Mikrocontroller sind (meist) kleine Chips in einem Plastikgehäuse, aus 
denen mehr oder weniger viele Beinchen raus gucken. Die Lieferung 
erfolgt in verschiedenen Verpackungen und dazu meist ein Label mit 
Hersteller, Typenbezeichnung, Bestellnr. usw. Sonst ist da gar nichts 
bei.

Dazu gibt es vom Hersteller Datenblätter und Entwicklungstools 
(Entwicklungssystem, Bibliotheken, Anwendungsbeispiele). Diese 
Informationen sind meist alle übers Internet zugänglich, manchmal mit 
Anmeldung.
Du solltest also zu deinem Mikrocontroller gucken, was es dazu gibt.

von Pandur S. (jetztnicht)


Lesenswert?

> .. Werden solche Berechnungen eigentlich mitgeliefert ?

YMMD ( you made my day )

Ohne E-Technik Studium, oder aehnlich, laeuft da wenig.

von Olli (Gast)


Lesenswert?

ja, ist schon klar, dass man E-Technik Grundkenntnisse benötigt. Gibt es 
besonders gute 32-Bit µC in dieser Kombination?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Olli schrieb:
> ja, ist schon klar, dass man E-Technik Grundkenntnisse benötigt. Gibt es
> besonders gute 32-Bit µC in dieser Kombination?

Wie breit die Register/Adressraum eines µC sind, hat wenig damit zu tun 
ob er besonders "gut fuer Regelungen" gedacht ist.
Koennte auch einen kleinen Unterschied machen, ob du die Position des 
Skalpells eines Hirnchirurgieroboters regeln willst, oder die Befuellung 
eines Muellautos...

Gruss
WK

von Paul (Gast)


Lesenswert?

Olli schrieb:
> Gibt es besonders gute 32-Bit µC in dieser Kombination?

Ja, die schwarzen.

von Wolle G. (wolleg)


Lesenswert?

Olli schrieb:
> Ich lese mich in Regelungstechnik ein und sehe, dass für digitale
> Regler ...
Regelungstechnik im Rahmen eines Hobbys oder zur Ergänzung analoger 
MSR-Technik?
evtl. das hier https://rn-wissen.de/wiki/index.php/Regelungstechnik
mal durcharbeiten.

von Kevin (Gast)


Lesenswert?

>Ich lese mich in Regelungstechnik ein und sehe, dass für digitale Regler
>eine ADU beim Mikrocontroller verwendet werden kann (anstelle analoge
>OPV), um dann eine Berechnung für Regler zu machen. Werden solche
>Berechnungen eigentlich mitgeliefert oder wie würde ich damit vorgehen?

Du kannst einfach einen Arduino Uno nehmen. Den Eingangswert schließt du 
an den Eingang A0 an und den Ausgang an den Anschluss 10:
1
void setup() 
2
{
3
4
5
}
6
7
uint16_t Sollgroesse=100;
8
float P_Anteil=10.5;
9
10
void loop() 
11
{
12
  uint16_t input,output;
13
  
14
  input=analogRead(A0);
15
  output=(Sollgroesse-input)*P_Anteil;
16
  analogWrite(10,output);
17
  
18
  delay(100); // sampling frequency 10 Hz
19
20
}

von Andreas B. (bitverdreher)


Lesenswert?

Kevin schrieb:
> Du kannst einfach...

Eine simple P-Regelung für Arme. ;-)

von MaWin (Gast)


Lesenswert?

Andreas B. schrieb:
> Eine simple P-Regelung für Arme. ;-)


Na immerhin, nennt man einfaches Beispiel. Du darfst I und D und 
autotune erweitern.

Es muss ja nicht immer ein fixer Kalman zur Lageregelung eines kleinen 
Quadrokopter sein.

von Olli (Gast)


Lesenswert?

Hi,
danke für den Link, ist sehr verständlich geschrieben (brauch man fast 
kein Buch mehr) Falls Ihr noch mehr Infos habt, bitte teilen :-)

von Lerninstructor (Gast)


Lesenswert?


von Stefan F. (Gast)


Lesenswert?

Wenn du so etwas mit Spaß lernen willst, dann kaufe dir einen NiboBee 
Bausatz. Denn lässt du erst mal mit gleichen PWM Werten (z.B. 50%) auf 
beiden Motoren nicht geradeaus fahren. Dann überlegst du dir, wie du die 
Kurve begradigen kannst, auch bei wechselnden Untergründen und 
Batterie-Ladeständen.

Damit hast du einen guten Einstieg in das Thema. Die nächsten Schritte 
sind dann komplexere Fahr-Manöver wie:

* einer Linie mit möglichst hoher Geschwindigkeit folgen
* Kurven schnell mit bestimmten Radius fahren ohne weg zu rutschen
* Eine Bestimmte Strecke (z.B. ind Bad und wieder zurück) fahren, um am 
Ende wieder (fast) genau dort anzukommen, wo es los ging.
* Rasch auf maximale Geschwindigkeit beschleunigen, um exakt an der 
Ziel-Linie anzuhalten.
* Überlege dir, wie du auf 0,5 cm genau abbremsen kannst, obwohl die 
Odometrie-Sensoren nur alle 2 cm einen Impuls geben.

Ich habe dabei eine Menge gelernt.
http://stefanfrings.de/nibobee/index.html

von Andreas B. (bitverdreher)


Lesenswert?

MaWin schrieb:
> Na immerhin, nennt man einfaches Beispiel.

Mit delay, ja. Da rollen sich mir die Fußnägel hoch.
Der TO tat besser daran, sich den genannten Artikel aus dem Roboternetz 
mal durchzulesen.

von Olli (Gast)


Lesenswert?

>> Zu doff für google ?!

Ja vielleicht, bei den vielen Ergebnissen...da wiederholt sich vieles 
und richtig gute Quellen (mit einfache Beschreibungen auf das 
Wesentliche reduziert) sind oft lange zu suchen...

von Kevin (Gast)


Lesenswert?

von Andreas B. (bitverdreher)
09.10.2021 16:16

>MaWin schrieb:
>> Na immerhin, nennt man einfaches Beispiel.

>Mit delay, ja. Da rollen sich mir die Fußnägel hoch.

Ja, das nennt man didaktische Reduktion oder die Reduzierung auf das 
wesentliche.
Als Übungsaufgabe darfst du jetzt das delay(100) in Relation zur 
Ausführungsgeschwindigkeit der loop() auf dem Arduino UNO setzen und den 
relativen Fehler abschätzen, der sich bei dem P-Regler ergibt.

von Kevin (Gast)


Lesenswert?

übrigens: Der gezeigte Code des P-Reglers enthält einen funktionalen 
Fehler. Mal sehen, ob ihn jemand findet ;-)

von Helmut H. (helmuth)


Lesenswert?

Kevin schrieb:
> übrigens: Der gezeigte Code des P-Reglers enthält einen funktionalen
> Fehler.

einen?
analogRead gibt Werte zwischen 0 und 1023 zurück, analogWrite erwartet 
Werte zwischen 0 und 255.
falls Input > sollgroesse gibts interessante Effekte.

von Kevin (Gast)


Lesenswert?

>einen?

warm ...

von Kevin (Gast)


Lesenswert?

>>Wolle
>>evtl. das hier https://rn-wissen.de/wiki/index.php/Regelungstechnik
>>mal durcharbeiten.
>Olli
>Hi,
>danke für den Link, ist sehr verständlich geschrieben (brauch man fast
>kein Buch mehr) Falls Ihr noch mehr Infos habt, bitte teilen :-)

Hier noch eine kleine Anekdode zu dem angegebenen Link:
Der Artikel entstand nach längerer Diskussion im Roboternetz. Es war 
gefordert einen guten Linienfolger zu schreiben. Der User "waste" hatte 
hierzu den Asuro-Roboter im Detail analysiert. Losgegangen ist das mit 
der Modellbildung der Motoren, deren elektrischen Eigenschaften. Dazu 
wurden von mehreren Nutzern Messprogramme entwickelt, die den Roboter 
beschleunigt haben und die Messdaten dann per IR-Interface an den PC 
übertragen haben. Dann kam die Modellierung des gesamten Roboters hinzu. 
Danach der Reglerentwurf. Das ganze wurde mit SciCos modeliert
http://www.scicos.org/
und die Regelungsschleife optimiert. Wenn man sucht, dürfte man im 
Roboternetz noch die ganze Entwicklung finden.

"waste" war genial: Ich kenne nur ein paar wenige Leute, die ein System 
so gut analysieren, modellieren und in der Theorie die Regler dazu 
entwerfen können. Die ganzen Berechnungen wurden in "float" auf dem 
Atmeg8 des Asuros ausgeführt. Die Verwendung von "floats" hätte ich 
damals auf diesem kleinen Mikrocontroller vermieden, aber es hat sich 
gezeigt, dass die Rechengeschwindigkeit für die mechanische Regelung 
völlig ausreicht.

Das Meisterstück war später das Balancieren der Asuro auf den 
Hinterrädern. Das ist deshalb so bemerkenswert, weil die Boden LEDs und 
die SFH300 Lichtsensoren als Abstandsensor verwendet wurden und diese 
natürlich völlig unkallibriert und von der Reflektiviät des Untergrund 
abhängen.

https://www.youtube.com/watch?v=V0VxL2VqIWQ

Wer sich für die Modellbildung und der Reglernwentwicklung auf 
Mikrocontrollern interessiert, dem ist das Durchlesen der Threads sehr 
zu empfehlen.

von max123 (Gast)


Lesenswert?

Hallo,
//Ein kurzes Beispiel für einen PID Regler
//Mit constraint könnte man die Überlaufe sichern

int Messung, Messung_alt, Messung_uralt;

//Reglereinstellung

 int DIFF = 2,3;
 int PROP = 5,2;
 int INTEG =  10;

while(1)
   {
   P  = (Messung + Messung_uralt) * PROP);
   I = Mess_alt * INTEG ;
   D = (mess - 2* mess_alt + mess_uralt) * DIFF;

   dau(D+P+I);   //ausgabe;

   delay(5);

   //Messwerte in Array Schreiben
   mess_uralt = mess_alt;
   mess_alt = mess;
   mess = adu(EinPort); //analog ein
   }

  //Achtung: Das Programm ist nicht getestet.

von max123 (Gast)


Lesenswert?

Hallo,
//Ein kurzes Beispiel für einen PID Regler
//Mit constraint könnte man die Überlaufe sichern

int Messung, Messung_alt, Messung_uralt;

//Reglereinstellung

 int DIFF = 2,3;
 int PROP = 5,2;
 int INTEG =  10;

while(1)
   {
   P  = (Messung + Messung_uralt) * PROP);
   I = Mess_alt * INTEG ;
   D = (mess - 2* mess_alt + mess_uralt) * DIFF;

   dau(D+P+I);   //ausgabe;

   delay(5);

   //Messwerte in Array Schreiben
   mess_uralt = mess_alt;
   mess_alt = mess;
   mess = adu(EinPort); //analog ein
   }

  //Achtung: Das Programm ist nicht getestet.

von Andreas B. (bitverdreher)


Lesenswert?

Kevin schrieb:
> Als Übungsaufgabe darfst du jetzt das delay(100) in Relation zur
> Ausführungsgeschwindigkeit der loop() auf dem Arduino UNO setzen und den
> relativen Fehler abschätzen, der sich bei dem P-Regler ergibt.

Du verwechselst mich mit dem TO. ;-) Ich weiß wie man Regler mit uC 
erstellt (die dazu noch viele andere Dinge parallel tun). Und zwar ohne 
delays und  Arduinos. Ein delay in solchen Beispielen ist auch als 
Vorschlag schon schlecht. Die Leute nehmen das nämlich ernst, wie man an 
den vielen Beispielen im Netz sieht.
Didaktisch reduzieren mag ja schön sein, aber man soll es wirklich nicht 
übertreiben.

von Dieter H. (kyblord)


Lesenswert?

MaWin schrieb:
> Andreas B. schrieb:
>> Eine simple P-Regelung für Arme. ;-)
>
> Na immerhin, nennt man einfaches Beispiel. Du darfst I und D und
> autotune erweitern.
>
> Es muss ja nicht immer ein fixer Kalman zur Lageregelung eines kleinen
> Quadrokopter sein.

Kalman wäre aber nur der Schätzer, der Regler fehlt da noch

von Forist (Gast)


Lesenswert?

max123 schrieb:
> Hallo,

Was meinst du, warum für C-Code unter "Wichtige Regeln - erst lesen, 
dann posten!" unter "Formatierung" Code-Tags für C-Code aufgeführt sind?

von Stefan S. (chiefeinherjar)


Lesenswert?

max123 schrieb:
> int DIFF = 2,3;
>  int PROP = 5,2;

Über diesen Teil solltest du noch ein Mal GANZ schwarf nachdenken.

: Bearbeitet durch User
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.