Erstmal danke fürs lesen !!!! Hallo zusammen ich brauche wieder eure Hilfe, ich muss für meinen Regelkreis den Meßbereich softwaremäßig einstellen, d.h. bei -10V soll der Sollwert -100% sein und bei 0 V = 0% und bei +10 V halt 100 %. Die Strecke ist schon vorgegeben ein kleiner Lüfter wird als Drehzahlstrecke benutzt und ich soll mit einem Atmega128 einen PID Regler bauen/programmieren. Meine Frage kann man über den ADC des Atmegas den Meßbereih so einstellen, dass z.B 0-511 0V bis -10V ist und von 512- 1023 0V bis +10 V ist. Danke für eure Tips und Hilfe schonma.
Du brauchst eine geeignete Eingangbeschaltung. Am ADC müssen bei -10V von deiner Quelle 0V anliegen. Bei 0V müssen es 2,5V sein und bei +10V = 5V. Dann kannst du recht einfach Programmieren wie das Messergebniss dann genutzt werden soll. Gruss Stefan
Am Sternpunkt kannst du die Spannung abgreifen 0-5V. Die Widerstandsverhältnisse kannst du im Verhältnis beliebig anpassen. R3 ist der Eingang für die +/-10V Spannung.
Hi danke für die schnellen Antworten, die Eingangsbeschaltung habe ich schon mit einem Spannungsteiler realisiert, wäre echt nett wenn du mir vielleicht sagen könnest wie ich das Programmieren kann. Danke
Ich weiss nicht wieviel du von Regelungstechnik weisst, aber so mal eben ist das nicht. Es gibt zwei PID-Algorithmen, den Geschwindigkeits und den Stellungsalgorithmus. Der wesentliche Unterschied ist der Ort an dem die Integration durchgeführt wird. Beim Stellungsalgorithmus im Rechner beim Geschwindigkeitsalgorithmus am Stellglied. Da du wahrscheinlich die Drehzahl regeln möchtest, musst du den Stellungsalgorithmus verwenden. Von Trapezregel und Überintegration verschone ich dich jetzt mal. Du musst eine Berechnung in einer exakten Abtastzeit aufrufen. yk=y(k-1)+kr*[(1+Tv/T)*xdk-(1-T/Tn+2*Tv/T)*xd(k-1)+Tv/T*xd(k-2) mit yk = Stellgröße y(k-1) = die Stellgröße einen Abtastschritt vorher xdk = aktueller Istwert xd(k-1) = Istwert einen Abtatsschritt vorher xd(k-2) = kommst du selber drauf Regelparameter kr = Proportionalanteil Tv = D-Anteil Tn = I-Anteil T = deine Abtastzeit Falls du das programmiert bekommst, musst du immer noch die Regelparameter finden. Kannst du nicht erstmal mit einer P-Regelung evtl. PI-Regelung anfangen? Der D-Anteil wird meiner Meinung nach eh überschätzt.
HI zusammen @Michael Danke für deine Antwort, aber das ist nicht wirklich eine Antwort auf meine Frage. Stefan M. hatte ja in seinem Betrag geschrieben >-Dann kannst du recht einfach Programmieren wie das Messergebniss dann >-genutzt werden soll. @Stefan M. wenn du hier noch mal reinschaust wäre ich dir sehr dankbar wenn du mir ein Beispiel zeigen könnest. Nochmal an alle die mir geantwortet haben viele Dank !!!!!!
Hi Danke das du noch mal antwortest, meine Frage war ja wie kann ich den Sollwert softwaremäßig einstellen d.h. bei -10V soll der Sollwert -100% sein und bei 0 V = 0% und bei +10 V halt 100 %, das halt per Software. Den Regelalgorithmus zu programmieren, das kommt erst im nächsten Schritt. Also wenn ich einen Sollwert von -100 % haben möchte, will ich meine Spannungsquelle auf -10 V einstellen und diese wird von der Beschaltung vor dem ADC auf 0V gebracht. Wenn ich z.B 50 % Sollwert haben möchte, will ich 5 V vom meiner Spannungsquelle angeben und an den ADC soll halt 2,5 V. Ich hoffe mein Anliegen ist bei euch angekommen. Vielen Dank
Wie gesagt, du nimmst die Schaltung aus dem obigen Beitrag. Diese Schaltung liefert bei -10V -> 0V bis +10V -> 5V. Den Ausgang dieser Schaltung schliesst du an einen der ADC Eingänge des µC an. Im Programm kannst du nun den 10-Bit ADC verwenden. -10V -> 0 Digital 0V -> 511 Digital +10V -> 1024 Digital
Hi danke nochmal für die Antworten aber wie programmiere ich das, bei -10V -> - 100% Sollwert bei 0V -> bei -0% Sollwert bei +10V -> + 100% Sollwert ist. Bei -10V -> 0 Digital ist -10V gleich 0 % Sollwert 0V -> 511 Digital ist 50 % Sollwert +10V -> 1024 Digital gleich 100 % Sollwert und das will ich ja so nicht haben.
Was willst du genau machen? Erkläre mal ein bisschen mehr... Willst du das deine 0V den digitalen Wert 0 ergibt? Wenn ja dann zieh einfach 511 ab und schon passt es...
In deinen ersten Post klang das aber noch anders! Nimm dir eine signed int Variable(Variable mit Vorzeichen)
1 | unsigned int getADC(unsigned int _channel) |
2 | {
|
3 | ....
|
4 | |
5 | return adcwert; |
6 | }
|
7 | |
8 | void main (void) |
9 | {
|
10 | ...
|
11 | |
12 | signed int sollwert; |
13 | |
14 | sollwert = getADC(0)-511; |
15 | |
16 | ...
|
17 | |
18 | }
|
Hallo zusammen Erstmal sorry das ich jetzt erst antworte, ich war etwas beschäftigt. Also ich dachte es war von Anfang an klar das ich wissen wollte wie ich das Programmieren kann.Wie dem auch sei, vielen dank für deine Antwort. Ich werde mich bestimmt noch mal melden.
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.