Forum: Mikrocontroller und Digitale Elektronik Bascom Single vs. Integer


von Marco P. (Gast)


Lesenswert?

Guten Morgen zusammen!

Ich programmiere in Bascom und möchte einen PID-Regler realisieren.
Das ganze soll in möglichst kurzer Zeit ablaufen und da ist mir der 
Gedanke gekommen, bevor ich groß in Single und Double rechne kann ich 
die Zeit ja auch als Kehrwert 1/0,002s in die Berechnung nehmen und 
komplett in Integer rechnen.

Jetzt ist die Frage wie hoch ist der Zeitgewinn und ob ich überhaupt 
Zeit damit spare.

PID-Regler läuft nach dieser Formel
1
Abweichung = Soll - Ist;
2
 Summe_Abweichungen = Summe_Abweichungen + Abweichung;
3
 Differenz_zur_letzten_Abweichung = Abweichung - Abweichung_alt;
4
 
5
 Gegensteuern = Verstärkungsfaktor_Prop * Abweichung 
6
 + Verstärkungsfaktor_Inte * Zeit * Summe_Abweichungen
7
 + (Verstärkungsfaktor_Diff * Differenz_zur_letzten_Abweichung) / Zeit;
8
 
9
 Abweichung_alt = Abweichung;
Grüße
Marco

von Oliver (Gast)


Lesenswert?

Der Zeitgewinn ist ganz erheblich, allerdings musst du aufpassen, daß du 
keine Überläufe in den Berechnungen bekommst.

Oliver

von Marco P. (Gast)


Lesenswert?

Ok, danke.
Weißt du vielleicht auch wieviele Prozessortakte für Single berechnungen 
und wieviele für integer benötigt werden?

von screwdriver (Gast)


Lesenswert?

Marco P. schrieb:
> Weißt du vielleicht auch wieviele Prozessortakte für Single berechnungen
> und wieviele für integer benötigt werden?
1
$regfile = "m32def.dat"
2
Dim Abweichung As Integer
3
Dim Soll As Integer , Ist As Integer
4
Dim Summe_abweichungen As Integer
5
Dim Differenz_zur_letzten_abweichung As Integer
6
Dim Abweichung_alt As Integer
7
Dim Gegensteuern As Integer
8
Dim Gegensteuern_temp As Integer
9
Dim Verstaerkungsfaktor_prop As Integer
10
Dim Verstaerkungsfaktor_inte As Integer
11
Dim Zeit As Integer
12
Dim Verstaerkungsfaktor_diff As Integer
13
14
nop
15
Abweichung = Soll - Ist
16
Summe_abweichungen = Summe_abweichungen + Abweichung
17
Differenz_zur_letzten_abweichung = Abweichung - Abweichung_alt
18
19
Gegensteuern = Verstaerkungsfaktor_prop * Abweichung
20
21
Gegensteuern_temp = Verstaerkungsfaktor_inte * Zeit
22
Gegensteuern_temp = Gegensteuern_temp * Summe_abweichungen
23
Gegensteuern = Gegensteuern + Gegensteuern_temp
24
25
Gegensteuern_temp = Verstaerkungsfaktor_diff * Differenz_zur_letzten_abweichung
26
Gegensteuern_temp = Gegensteuern_temp / Zeit
27
Gegensteuern = Gegensteuern + Gegensteuern_temp
28
29
Abweichung_alt = Abweichung
30
31
Nop
Codelänge: 606 Byte
Prozessortakte: 335


1
$regfile= "m32def.dat"
2
Dim Abweichung As Single
3
Dim Soll As single , Ist As single
4
Dim Summe_abweichungen As single
5
Dim Differenz_zur_letzten_abweichung As single
6
Dim Abweichung_alt As single
7
Dim Gegensteuern As single
8
Dim Gegensteuern_temp As single
9
Dim Verstaerkungsfaktor_prop As single
10
Dim Verstaerkungsfaktor_inte As single
11
Dim Zeit As single
12
Dim Verstaerkungsfaktor_diff As single
13
14
nop
15
Abweichung = Soll - Ist
16
Summe_abweichungen = Summe_abweichungen + Abweichung
17
Differenz_zur_letzten_abweichung = Abweichung - Abweichung_alt
18
19
Gegensteuern = Verstaerkungsfaktor_prop * Abweichung
20
21
Gegensteuern_temp = Verstaerkungsfaktor_inte * Zeit
22
Gegensteuern_temp = Gegensteuern_temp * Summe_abweichungen
23
Gegensteuern = Gegensteuern + Gegensteuern_temp
24
25
Gegensteuern_temp = Verstaerkungsfaktor_diff * Differenz_zur_letzten_abweichung
26
Gegensteuern_temp = Gegensteuern_temp / Zeit
27
Gegensteuern = Gegensteuern + Gegensteuern_temp
28
29
Abweichung_alt = Abweichung
30
31
Nop
Codelänge: 1110 Byte
Prozessortakte: 1153

Mit besten Grüßen
screwdriver

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.