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
Ich habe Erfahrung und kann Dir helfen! http://catb.org/~esr/faqs/smart-questions.html Cheers Detlef
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?
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 ?
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... ;-)
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
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
@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.
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
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 | }
|
J. R. schrieb: > Ja gibt es hier auch Codebsp? http://www.technik-elite.de/klausuren/rt_02-03_14.pdf
Ich hatte nur dieses Programmbsp.... und das war nicht allzu aufschlussreich.... :-( von daher schon einmal soweit vielen Dank für eure Hilfe.... ;-)
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.
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!
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.
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? :)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.