Projekt 40: Regelung eines fertigen Laborversuchsaufbaus "Lageregelung"

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen


Autoren: Martins, Ilya Raza
Betreuer: Prof. M. Göbel

Aufgabe

Entwurf eines Reglers für einen mechanisch und elektrisch fertigen Laborversuch.


Erwartungen an die Projektlösung

  • Darstellung der Theorie
  • Entwurf eines Regelkreises
  • Recherche zu bestehenden Lösungen
  • Systemidentifikation (Übertragungsfunktion der Regelstrecke bestimmen)
  • Vergleichen und bewerten Sie verschiedene Regleransätze (2-Punkt, 3-Punkt, P, I, D), Darstellung der Soll-/Istgrößen.
  • Programmiersprache: C
  • Test und wiss. Dokumentation
  • Live Vorführung während der Abschlusspräsentation


Schwierigkeitsgrad

Anspruchsvoll (***)



Einleitung

Dieses Projekt wurde im Rahmen des Elektrotechnikfachpraktikums angeboten und von mir ausgewählt. Die Hauptaufgabe des Projektes besteht darin, einen Regler softwaremäßig zu entwickeln, der am besten für dieses System geeignet ist. Dabei soll das Verhalten verschiedener Regeltypen untersucht und verglichen werden.



Ablauf des Projektes

Im Folgenden ist das Gantt-Diagramm dargestellt. Das Diagramm zeigt den zeitlichen Ablauf des Projektes.

Abbildung 1: Ablauf des Projektes



Beschreibung des Versuchsaufbaus

Abbildung 2: Schematische Darstellung des Versuchsaufbaus

In Abbildung 2 ist die schematische Darstellung des Versuchsaufbaus dargestellt.

Mithilfe des Servomotors 1, der in beiden Richtungen betrieben werden kann, wird die Kugelgewindespindel 2 in die Rotationsbewegung gebracht. Die Rotationsbewegung der Gewindespindel soll den Schlitten 3 in die gew¨unschte Position entlang der Spindelachse bringen. Die aktuelle Position des Schlittens wird mithilfe des Positionssensors (Linearpotentiometer) 4 ermittelt. Für die Betreibung des Versuchsaufbaus sind zwei Spannungsquellen erforderlich. Mithilfe der ersten Quelle werden Sensoren versorgt, während die zweite Quelle die Versorgung für den Motor sicherstellt. Das System wird mithilfe des Arduino-Boards angesteuert. Der Arduino-Board soll mit dem PC verbunden werden, da die Spannungsversorgung des Arduinos durch USB-Anschluss erfolgt.







In der Tabelle 1 ist die Pinbelegung von den verwendeten Pins dargestellt:


Tabelle 1: Pinbelegung
Pin an Arduino Uno Pin/Bezeichnung an dem Laborversuchsaufbau
1 A0 Poti - "Sollwert"
2 A1 Poti - "P-Anteil"
3 A2 Poti - "I-Anteil"
4 A3 Poti - "D-Anteil"
5 A4 Poti - Linear
6 3 (PWM) Motor rechts (an der H-Br?ucke Schaltung)
7 4 (PWM) Motor ENB (an der H-Br?ucke Schaltung)
8 5 (PWM) Motor links (an der H-Br?ucke Schaltung)

Ersatz des defekten Bauteils

Abbildung 3: L298N [1]

Bei den ersten Versuchen den Programmkode auszuführen, hat der Servomotor keine Reaktionen gezeigt. Nach der genaueren Untersuchung und in Absprache mit dem betreuenden Professor hat sich herausgestellt, dass der L298N Motortreiber beschädigt ist. Der L298N Motortreiber ist eine H-Brücke Schaltung, siehe Abbildung 3, die für die Motoransteuerung zuständig ist. Diese Schaltung wurde von mir ausgetauscht. Die Ursache für die Funktionsbeeinträchtigung des Motortreibers ist unklar geblieben.








Realisierung

Im Folgenden wird die Realisierung des Projektes beschrieben.


Regelkreis

Abbildung 4: Regelkreis

In Abbildung 4 ist der Entwurf des Regelkreises des Systems dargestellt. Mithilfe des Potentiometers (Potiwert) an dem Versuchsaufbau wird der Soll-Wert eingestellt. Arduino Board gilt als Regler. Die Regelstrecke ist hier der Servomotor, die Kugelgewindespindel und der PWM-Signal. Der Ist-Wert wird mithilfe des Positionssensors (Potentiometer) ermittelt.











PI-Regler

Die Reglergleichung des PI-Reglers ist definiert durch:

Abbildung 5: Sprungantwort PI-Regler

Bei der Programmierung des Reglers wurde fertige Funktion aus der Arduino Bibliothek benutzt. Die kp und ki Beiwerte wurden so bestimmt, dass verschiedene Werte eingesetzt wurden und die Sprungantwort beobachtet.



Programmcode

Im Folgenden ist der Programmkode:


#include <PID_v1.h>


double Setpoint, Input, Output;
double Kp=3, Ki=0.01, Kd=0;
double e;

PID myPID(&Input, &Output, &Setpoint,Kp,Ki,Kd, DIRECT);
int MotorENB = 4;     // digital in
int MotorRechts = 3;  // digital (pwm) in
int MotorLinks = 5;   // digital (pwm) in
int PotLi = 4;        // analog out
int PotSoll = 0;      // analog out

//int PotKp = 1; //Poti I-anteil
//int PotKi = 2; //Poti p-Anteil
//int PotKd = 3; //Poti d-Anteil
double pwm;

  
 void setup() 
{  
  pinMode(MotorENB, OUTPUT); 
  pinMode(MotorRechts, OUTPUT);
  pinMode(MotorLinks, OUTPUT);
  Serial.begin(9600);
  myPID.SetMode(AUTOMATIC);
}


void loop() 
{   
Input = analogRead(PotLi);        // 115-983    
Setpoint = analogRead(PotSoll);      // 0-1023
Setpoint = Setpoint/1023*13.5;           // Wird in cm umgerechnet
Input = (Input - 126)/803 *13.7; // Wird in cm umgerechnet
Input = abs(Input - 13.7);
e = Setpoint-Input; 


Serial.print(millis());
Serial.print("; Ist: ");
Serial.print(Input);
Serial.print(" cm ; Soll: ");
Serial.print(Setpoint);
Serial.println(" cm ,");
 myPID.Compute();
pwm = abs(Output);

if(e > 0)
{
  myPID.SetControllerDirection(DIRECT);
 forward(pwm);
}
if(e < 0)

{
  myPID.SetControllerDirection(REVERSE);
  backward(pwm);
}


}
void forward(double pwm)
{ 
  digitalWrite(MotorLinks, LOW);
  digitalWrite(MotorRechts, pwm);
  digitalWrite(MotorENB, HIGH);
  
}
 
void backward(double pwm)
{
  digitalWrite(MotorRechts, LOW);
  digitalWrite(MotorLinks, pwm);
  digitalWrite(MotorENB, HIGH);
}



Fazit

Im Laufe dieses Projektes konnten neue Erfahrungen aus der Regelungstechnik gesammelt werden. Es hat sich auch gezeigt, dass es manchmal nicht so einfach das theoretische Wissen in der Praxis umzusetzen ist. Das Projekt ist nicht abgeschlossen, da aus zeitlichen Gründen nicht alle Regelansätze untersucht und nicht alle Erwartungen aus der Aufgabenstellung an das Projekt erfüllt werden konnten.

Quellen

  1. [1] www.amazon.com/Generic-Module-Stepper-Controller- Arduino/dp/B00HHYBW0E, abgerufen am 20.01.2015, 10:39




→ zurück zum Hauptartikel: Fachpraktikum Elektrotechnik (WS 14/15)