Forum: Mikrocontroller und Digitale Elektronik PID-Algorithmus auf Atmega128 programmieren!?


von J. R. (cia_man)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte einen PID-Algorithmus auf meinen Atmega128 programmieren um 
ein Peltier-Element zu steuern/regeln... Wer hat hier Erfahrung? Bzw. 
kann mir helfen? Im Anhang habe ich den Algorithmus als Formel....

Schon einmal Danke!

MfG

von Detlef _. (detlef_a)


Lesenswert?

Ich habe Erfahrung und kann Dir helfen!

http://catb.org/~esr/faqs/smart-questions.html

Cheers
Detlef

von J. R. (cia_man)


Lesenswert?

Detlef _a schrieb:
> Ich habe Erfahrung und kann Dir helfen!
>
> http://catb.org/~esr/faqs/smart-questions.html
>
> Cheers
> Detlef

Sehr schön! Was soll dein Link?

von Rene B. (themason) Benutzerseite


Lesenswert?

Ohne den Link gelesen zu haben vermute ich mal das du noch die ein oder 
andere Info geben solltes damit man überhaupt weiß WO man dir helfen 
soll.
Eine Aufgabenstellung und die Frage ob dir jemand helfen kann ist 
ungefähr so als wenn du zu nem Autoverkäufer sagst : Du, sag mal ... 
verkaufst du auch Autos ?
Helfen werden dir hier einige können, aber du musst schon sagen wo dein 
Problem ist, was du nicht verstanden hast. Und viel wichtiger ist : Du 
mußt zeigen das du dich damit auseinandersetzt und Eigeninitiative 
zeigst. Also nicht erwarten das dir jemand das Teil auf dem 
Silbertablett präsentiert.
Das funktioniert nicht.

Ein Autohändler würd dir ja auch nicht einfach so nen Auto schenken, 
nech ?

von J. R. (cia_man)


Lesenswert?

Okay! Das Problem ist, dass ich zwar mit dem Freescale Prozessoren schon 
etwas programmiert habe... aber noch nicht so viel mit Atmel.... da war 
ich mehr Zuschauer... deshalb bräuchte ich da ein wenig eine helfende 
Hand... ;-)

von Karl H. (kbuchegg)


Lesenswert?

J. R. schrieb:
> Okay! Das Problem ist, dass ich zwar mit dem Freescale Prozessoren schon
> etwas programmiert habe... aber noch nicht so viel mit Atmel.... da war
> ich mehr Zuschauer... deshalb bräuchte ich da ein wenig eine helfende
> Hand... ;-)

ALso liegt dein Problem gar nicht beim PID, sondern bei der 
Programmierung von AVR-Prozessoren?

Berechnungen und damit das Umsetzen von Formeln ist in C überall gleich. 
Und den Zugriff auf Peripherie findest du hier
AVR-GCC-Tutorial

von Udo S. (urschmitt)


Lesenswert?

J. R. schrieb:
> Okay! Das Problem ist, dass ich zwar mit dem Freescale Prozessoren schon
> etwas programmiert habe... aber noch nicht so viel mit Atmel.... da war
> ich mehr Zuschauer... deshalb bräuchte ich da ein wenig eine helfende
> Hand... ;-)
Dann fang an.
Suchst du ein fertiges Programm, dann geh hier oder in einem Robotik 
Forum in die Code Sammlung.
Benutze die Such Funktion
Ansonsten lass erst mal ein paar LEDs blinken.

Programmieren heisst nicht copy and paste, das geht nur bei Jura 
Dissertationen

von Rene B. (themason) Benutzerseite


Lesenswert?

@J.R.

Wie Karl Heinz schon bemerkt hat : C ist überall gleich. Und wenn du 
schonmal nen Freescale programmiert hast ist ein AVR mit etwas 
Einarbeitungszeit recht schnell zu handeln. Hab auch erst mit einem 
MSP430 angefangen und bin nachher bei Atmel gelandet. Hat bei mir länger 
gedauert da es nur Hobby-mäßig war und ich erstmal die feinen 
Unterschiede (Architektur Harvard vs von-Neumann, Fusebits, 
Programmierinterface) lernen musste. Aber da hat mir das Forum hier viel 
weitergeholfen.
Wenn du den Algorithmus verstanden hast sollte die Umsetzung nciht das 
Problem sein. Ansonsten erstmal mit dem AVR "laufen" lernen. Das ist 
wirklich nicht schwer (vor allem wenn man mit uC's schon gearbeitet 
hat).
Und dann ran an den Speck ... ähm PID-Regler.

von J. R. (cia_man)


Lesenswert?

Udo Schmitt schrieb:
> J. R. schrieb:
>> Okay! Das Problem ist, dass ich zwar mit dem Freescale Prozessoren schon
>> etwas programmiert habe... aber noch nicht so viel mit Atmel.... da war
>> ich mehr Zuschauer... deshalb bräuchte ich da ein wenig eine helfende
>> Hand... ;-)
> Dann fang an.
> Suchst du ein fertiges Programm, dann geh hier oder in einem Robotik
> Forum in die Code Sammlung.
> Benutze die Such Funktion
> Ansonsten lass erst mal ein paar LEDs blinken.
>
> Programmieren heisst nicht copy and paste, das geht nur bei Jura
> Dissertationen

Ja das schon klar ;-) Ja gibt es hier auch Codebsp? Lichter habe ich 
schon blinken lassen :p

von TestX .. (xaos)


Lesenswert?

hier in zeitdiskreter, iterativer form..
1
void PIDController::run(){
2
  // move deviationns n-1
3
  systemDeviation[2] = systemDeviation[1];
4
  systemDeviation[1] = systemDeviation[0];
5
  systemDeviation[0] = (commandVar-feedbackVar);
6
7
  // move actuating vars
8
  actuatingVar[1] = actuatingVar[0];
9
10
  // PID algorithm - time discrete, iterative Z form
11
  actuatingVar[0] = actuatingVar[1] +(Kp+Kp*t_sampling/Ti + Td*Kp/t_sampling) * systemDeviation[0]+(-Kp-2*Kp*Td/t_sampling) * systemDeviation[1] + (Kp*Td/t_sampling) * systemDeviation[2];
12
13
  // limits - anti wind up
14
  if (actuatingVar[0]>upperLimit){
15
    actuatingVar[0] = upperLimit;
16
  }
17
18
  if (actuatingVar[0]<lowerLimit){
19
    actuatingVar[0] = lowerLimit;
20
  }
21
}

von Dörte Dirac (Gast)


Lesenswert?


von J. R. (cia_man)


Angehängte Dateien:

Lesenswert?

Ich hatte nur dieses Programmbsp.... und das war nicht allzu 
aufschlussreich.... :-( von daher schon einmal soweit vielen Dank für 
eure Hilfe.... ;-)

von Udo S. (urschmitt)


Lesenswert?

Kann es sein, daß du den PID Regler nicht verstehst?
Dann solltest du dir den erst mal reinziehen, Zusammen mit ein paar 
praktischen Methoden zur Parameterbestimmung.

von J. R. (cia_man)


Lesenswert?

Udo Schmitt schrieb:
> Kann es sein, daß du den PID Regler nicht verstehst?
> Dann solltest du dir den erst mal reinziehen, Zusammen mit ein paar
> praktischen Methoden zur Parameterbestimmung.

Ja ich habe das letzt mal versucht nachzuvollziehen.... und ich merke 
gerade mir ist schon wieder viel entfallen ;-) .... sorry!

von Simon A. (testnetz)


Lesenswert?


von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Die Gleichung unten im Bild für den digitalen PID-Regler entspricht 
einem IIR-Filter.
http://www.mikrocontroller.net/articles/Digitalfilter_mit_ATmega
auf der AVR223 über Digitalfilter mit AVR aufbauend.

von J. R. (cia_man)


Lesenswert?

Christoph Kessler (db1uq) schrieb:
> Die Gleichung unten im Bild für den digitalen PID-Regler entspricht
> einem IIR-Filter.
> http://www.mikrocontroller.net/articles/Digitalfilter_mit_ATmega
> auf der AVR223 über Digitalfilter mit AVR aufbauend.

Welches Bild meinst du genau? :)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das PID.png
Das Ausgangssignal y(n) ist abhängig vom vorigen Ausgangssignal y(n-1) 
und den drei letzten Eingangssignalen e(n)...e(n-2), das ist ein 
IIR-Filter mit einem Koeffizienten im Nenner und drei im Zähler der 
Übertragungsfunktion.

von J. R. (cia_man)


Lesenswert?

Christoph Kessler (db1uq) schrieb:
> Das PID.png
> Das Ausgangssignal y(n) ist abhängig vom vorigen Ausgangssignal y(n-1)
> und den drei letzten Eingangssignalen e(n)...e(n-2), das ist ein
> IIR-Filter mit einem Koeffizienten im Nenner und drei im Zähler der
> Übertragungsfunktion.

Also kein PID? XD Lol der Prof ist auch gut ;-)

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.