Forum: Mikrocontroller und Digitale Elektronik Einfacher Regler? Bascom/Mega8


von Sebastian (Gast)


Lesenswert?

Hey,

ich versuche z.Zt nen ganz einfachen Regler mit nem Mega8 zu bauen.
Ich hab mir nachfolgenden Code ausgedacht, der funzt aber net, der 
Ausgang schwingt hoch und runter (PWM = 0-1023)

Logisch gedacht müsste er doch funzen, oder kapier ich was net?
Anbei mein BASCOM-Code:

1
$regfile = "m8def.dat"
2
$crystal = 8000000
3
4
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1
5
6
Config Adc = Single , Prescaler = Auto , Reference = Avcc
7
8
T1 Alias Pinb.4
9
Config T1 = Input
10
Portb.4 = 1
11
12
T2 Alias Pinb.5
13
Config T2 = Input
14
Portb.5 = 1
15
16
Dim Soll As Word
17
Dim Ist As Word
18
Dim Ausgang As Word
19
20
Soll = 512
21
22
Do
23
Ist = Getadc(0)
24
25
Debounce T1 , 0 , On_t1 , Sub
26
Debounce T2 , 0 , On_t2 , Sub
27
28
If Ist < Soll Then
29
Incr Ausgang
30
End If
31
32
If Ist > Soll Then
33
Decr Ausgang
34
End If
35
36
Compare1a = Ausgang
37
38
Loop
39
End
40
41
On_t1:
42
Incr Soll
43
Cls
44
Return
45
46
On_t2:
47
Decr Soll
48
Cls
49
Return

von H.Joachim S. (crazyhorse)


Lesenswert?

Welche Art von Regler soll das sein? Richtig kann ich es nicht lesen, 
soll wohl eine Art P-Regler darstellen?

Natürlich musst du der Regelstrecke auch die benötigte Zeit geben, 
überhaupt was zu tun.

von Sebastian (Gast)


Lesenswert?

Ja, geht in Richtung P-Regler... glaub ich... ^^

Die Regelstrecke is nen P-Channel-MOSFET mit Treibertransistor, dass 
wird ne Spannungsregelung, bei der die Spannung auch bei hoher 
Stromabnahme konstant bleiben soll...

Ich bin net so fit in Regelungstechnik, kenne nur die Grundlagen 
(Berufsschule vor 2 Jahren)

von Jan-Henrik B. (vedaykin)


Lesenswert?

Hi,

also anstatt des Vergeleichens würde ich einfach mal die Regeldifferenz 
e ausrechnen => soll - ist = e

Anschließend könntest Du einen Proportionalfaktor Kp einführen und die 
Regeldiffernz e damit multiplizieren => Reglerausgang u, Kp*e = u. Die 
Größe u kannst Du dann direkt auf den Aktor geben.

Je größer Kp, deste schneller. Zu schnell kann dann eventuell in 
Aufschwingen resultieren, dann einfach Kp wieder verkleinern.

Grüße,

Jan

von Jan-Henrik B. (vedaykin)


Lesenswert?

Hier mal eine Möglichkeit eines PI-Reglers als Funktion, je größer Kp 
deto schneller und je größer Ki desto schneller stationäre 
Regeldifferenz minimiert. fltControlsignal ist dann der aktuelle Ausgabe 
wert an den Aktor.
1
float fltControlsignal(float lfltKp, float lfltKi, float lfltIst, float lfltSoll)
2
{                  
3
gfltEk1 = gfltEk0; //Abspeichern der letzten Regeldifferenz
4
    gfltEk0 = lfltSoll - lfltIst; //Berechnung der aktuellen Regeldifferenz
5
    gfltUk1  = gfltUk0;  //Abspeichern des letzten Steuersignals
6
    gfltUk0 = gfltUk1 + lfltKp * (gfltEk0 - gfltEk1) + lfltKi * gfltEk0;    //Berechnung des aktuellen Steuersignals/Ausgangssignals
7
    
8
    return(gfltUk0);                              //Rückgabewert an die Funktion als float
9
  }

von MWS (Gast)


Lesenswert?

Sebastian schrieb:
> Die Regelstrecke is nen P-Channel-MOSFET mit Treibertransistor, dass

Und wie sieht's mit Filterung aus ? Eine PWM hat prinzipiell erst mal 
keine Spannung dazwischen, nur max und min. Wenn die dann auf den ADC 
geht, dann misst der eben zu einem bestimmten Zeitpunkt entweder max 
oder min, klar kann da nix regeln.

von Jan-Henrik B. (vedaykin)


Lesenswert?

Achso, er misst gar keinen analogen Ist-Wert proportional zur Spannung 
mit getadc(0)?

von Karl H. (kbuchegg)


Lesenswert?

> Und wie sieht's mit Filterung aus ? Eine PWM hat prinzipiell erst mal
> keine Spannung dazwischen, nur max und min. Wenn die dann auf den ADC
> geht, dann misst der eben zu einem bestimmten Zeitpunkt entweder max
> oder min, klar kann da nix regeln.

@TO
Und selbst wenn da eine Filterung ist (Kondensator, Spule), musst du der 
Regelschleife etwas Verzögerung geben (das Kp), denn natürlich benötigt 
die Spannung am Filterelement ein wenig Zeit bis sie der PWM nachläuft. 
Nur weil du die PWM (angenommen) von 0 auf 100% setzt, ist ja nicht die 
Spannung sofort von 0 auf 100%. Die läuft langsamer hoch. Und in der 
Zeit inkrementierst du deinen PWM Wert bis zum Anschlag (wenn du dann 
auch noch verhinderst, dass der über bzw. unterlaufen kann, was du 
momentan nicht getan hast)

von Purzel H. (hacky)


Lesenswert?

Schon masl einen Gedanken an die Zykluszeit des Reglers verschwendet ? 
Wie passt diese auf den Prozess, und wie passt diese auf das Stellglied 
und auf den ADC ?

von MWS (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> @TO
> Und selbst wenn da eine Filterung ist (Kondensator, Spule), musst du der
> Regelschleife etwas Verzögerung geben (das Kp), denn natürlich benötigt
> die Spannung am Filterelement ein wenig Zeit bis sie der PWM nachläuft.

Nur weil bei 'ner 50% PWM 'ne Led halb so hell leuchtet, mögen manche 
annehmen, sie bekäme 'ne niedrigere Spannung. Das ging nicht aus des 
TO's Nachricht hervor, dass ihm dies klar bewusst ist.

Sollte diese irrige Annahme der Fall sein, dann scheitert's bereits 
daran und nicht erst weil dem Regelalgorithmus keine Zeit gegeben wurde.

von Sebastian (Gast)


Angehängte Dateien:

Lesenswert?

Nenenenene :-)

Ich geb nen PWM-Signal auf den MOSFET, welcher z.Zt. ne 12V/55W 
Halogenlampe dimmt.
Die Spannung der Lampe greife ich über ein (experimentell zwei) 
RC-Tiefpassfilter ab und lege sie auf den ADC(0) des Mega8.

Dass ich das über nen Standard-P-Regler machen kann, ist mir fast klar, 
ich wollte nur wissen, welchen Hintergrund es hat, dass mein Regler 
schwingt wie bekloppt...

Ich bin Elektroniker und ich hab schon zwei lineare Netzteile gebaut, 
will jetzt aber in Richtung SNT gehen. En bissel Erfahrung mit µC's hab 
ich auch schon...

Im Anhang nen kleiner Schaltplan.

Ich versuche jetzt, das Rauschen des ADC mit Kondensatoren zu 
minimieren...
Dass wird sicherlich en bissel helfen.
Und ich mach nen P-Regler draus...

von Karl H. (kbuchegg)


Lesenswert?

Sebastian schrieb:

> Dass ich das über nen Standard-P-Regler machen kann, ist mir fast klar,
> ich wollte nur wissen, welchen Hintergrund es hat, dass mein Regler
> schwingt wie bekloppt...

Da spielt mehreres zusammen

Erst mal:
der schwingt höchst wahrscheinlich nicht, sondern

If Ist < Soll Then
Incr Ausgang
End If

das läuft über. Der Ist Wert ist zu klein und mit einem Affenzahn zählst 
du hier sukzessive die Variable Ausgang hoch. Blöd nur, dass du mit 
einem Wert von 1024 in Ausgang die PWM effektiv wieder auf 0 setzt. 
Wodurch die Ist Spannung wieder kleiner wird, was zu weiterem Erhöhen 
von "Ausgang" führt.

Du musst die Werte auf jeden Fall erst mal begrenzen!
Ohne brauchst du gar nicht weiter machen.


> Ich versuche jetzt, das Rauschen des ADC mit Kondensatoren zu
> minimieren...
> Dass wird sicherlich en bissel helfen.

Korrigier erst mal deine Programmfehler, ehe du versucht mit 
untauglichen Mitteln ein verkorkstes Programm zu 'debuggen'.

von Sebastian (Gast)


Lesenswert?

Ichhab netzt nen P-Regler auf Basis von Jan-Henriks Code gebaut,
Foglendes Problem:

Soll = 200
Ist  = 400

Soll - Ist = -200 = E

E * Kp (-200 * 10) = -2.000


Ausgang (PWM) = -2.000 ???????????????


Was verstehe ich net? Steh grad aufm Schlauch...

von Karl H. (kbuchegg)


Lesenswert?

Sebastian schrieb:

> Was verstehe ich net?

* Das ein P-Regler alleine die Regelabweichung nicht ausgleicht.
* Dass du Stellgrößen auf ihre überhaupt möglichen Werte limitieren 
musst

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

>> Was verstehe ich net?
>
> * Das ein P-Regler alleine die Regelabweichung nicht ausgleicht.
> * Dass du Stellgrößen auf ihre überhaupt möglichen Werte limitieren
> musst


Zu letzterem:
Dein Temperaturregler ist gerade drauf gekommen, dass er die Heizung auf 
'negativ' stellen möchte um die Temperatur runterzukriegen. Das wäre 
schön, wenn das ginge, aber mehr als aus kann eine Heizung nun mal nicht 
sein. Allerdings könnte der Regler die Kühlung einschalten (wenn es eine 
gibt) und so eine 'negative Heizung' erreichen.

Daher: Die Stellgröße muss auf das physikalisch mögliche eingegrenzt 
werden.

von Jan-Henrik B. (vedaykin)


Lesenswert?

Angenommen der Sollwert wäre 0Volt und Du misst schon eine Ist-Spannung 
von 1Volt am Messwiderstand R2, dann würde der Regler am liebsten -1Volt 
ausgeben bei Kp = 1. Eine negative Spannung über eine PWM realisieren 
geht glaube ich so nicht.

Bei einem Sollwert von 0Volt sollte eigentlich auch eine Ist-Spannung 
von 0Volt rauskommen, da Du ja praktisch alles ausgeschaltet hast => PWM 
= 0%. Dann stimmt glaube ich was nicht mit der Schaltung, da schon eine 
Spannung am Messwiderstand R2 abfällt, obwohl der Transistor T1 noch gar 
nicht geschaltet hat. Ich könnte also Deine ganze Steuerung von Q1 
entfernen und würde trotzdem eine Offsetspannung an R2 messen?

von Sebastian (Gast)


Lesenswert?

Okay, das mit dem Regler ist jetzt abgehakt, vielen Dank für die Infos 
und Tipps.

Anderes Problem... :-)
Im Schaltplan oben seht ihr mein RC-Glied, zum filtern der Messspannung.
Sobalt die Spannung über ca. 9V(Lampe) (3,2V am ADC, ca.65% PWM) 
hinausgeht, wird der ADC-Wert wieder 0...

Hängt das mit dem RC-Tiefpass zusammen?
Ich hab schon verschiedene C's eingesetzt, immer dasselbe...

von Jan-Henrik B. (vedaykin)


Lesenswert?

Vielleicht lehne ich mich ein wenig weit aus dem Fenster, aber Dein 
ursprünglicher Code dürfte ein reiner I-Regler sein, daher 
wahrscheinlich eher langsam aber nicht ungeeignet. Die aktuelle und 
vergangene Regeldifferenz wird in "Ausgang" gespeichert und 
aufsummiert/integriert. Wenn man mit Begrenzung in den Stellgliedern 
arbeitet, dann sollte bei einem Integrierer (großer Speicher 
vorausgesetzt) immer ein Antiwindup mit rein, ansonsten dauert das ewig 
bis der Speicher/"Ausgang" wieder leer ist, sollte die Regeldifferenz 
mal in die andere Richtung laufen.

von Sebastian (Gast)


Lesenswert?

Ne, ich hab den Regler jetzt rausgeworfen und mach das über Festwere, 
die ich per up/down-Taster verändere, um die Spannung (einigermaßen) 
konstant zu halten, mess ich den Stom und passe dann die Festwerte 
entsprechend an, nicht die feine englische Art, aber brauchbar, funzt 
gut.

Aber warum das mit der Spannungsmessung?

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.