Forum: Mikrocontroller und Digitale Elektronik Sollwert -100 % bis 100 % also -10V bis +10V


von Brauche_Hilfe (Gast)


Lesenswert?

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.

von Stefan M. (celmascant)


Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Brauche_Hilfe (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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.

von Brauche_Hilfe (Gast)


Lesenswert?

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  !!!!!!

von Michael (Gast)


Lesenswert?

Wie keine Antwort? Wie war denn die Frage?

von Brauche_Hilfe (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Brauche_Hilfe (Gast)


Lesenswert?

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.

von ... .. (docean) Benutzerseite


Lesenswert?

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...

von Michael (Gast)


Lesenswert?

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
}

von Brauche_Hilfe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.