Zeiger Instrument mit Dämpfung
Zeiger Instrument mit Dämpfung
Werte Gemeinde
Ich suche nach einem Algorithmus für ein analog anzeigendes Insturment (habe ich eigentlich schon) aber mit der Besonderheit, einer Dämpfung, damit die Anzeigen nicht ruckartig, sondern so reel wie möglich mit einer Dämpfung wie bei den Drehspul- Insturmenten funktioniert. Mir macht vor allem das Echtzeitverhalten Probleme. Wenn jemand schon soetwas entwickelt hat, würde ich mich über einige Infos, oder Tipps bzw. Hilfestellung oder Erfahrungsaustausch sehr freuen.
Ich suche nach einem Algorithmus für ein analog anzeigendes Insturment (habe ich eigentlich schon) aber mit der Besonderheit, einer Dämpfung, damit die Anzeigen nicht ruckartig, sondern so reel wie möglich mit einer Dämpfung wie bei den Drehspul- Insturmenten funktioniert. Mir macht vor allem das Echtzeitverhalten Probleme. Wenn jemand schon soetwas entwickelt hat, würde ich mich über einige Infos, oder Tipps bzw. Hilfestellung oder Erfahrungsaustausch sehr freuen.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Zeiger Instrument mit Dämpfung
Aus dem Kopf, nicht nachgeprüft:
Eine Dämpfung kann z.B. durch regelmässigen Aufruf von
simuliert werden. a bestimmt die Einschwingzeit und sollte << 1 sein.
Eine Dämpfung kann z.B. durch regelmässigen Aufruf von
Code: Alles auswählen
Ua:= Ua+(Ue-Ua)*a;
Re: Zeiger Instrument mit Dämpfung
Hallo,
von der Optik her würde ich vermuten, dass der Zeiger sofort eine neue höhere Spannung annimmt und langsam zurückfällt ( RC-Glied ).
Wenn die Erneuerungsrate der Daten immer konstant ist, ist auch dt und damit e^(-dt/tau)= konst
Je größer die Dämpfung, desto größer a.
Gruß Horst
von der Optik her würde ich vermuten, dass der Zeiger sofort eine neue höhere Spannung annimmt und langsam zurückfällt ( RC-Glied ).
Wenn die Erneuerungsrate der Daten immer konstant ist, ist auch dt und damit e^(-dt/tau)= konst
Code: Alles auswählen
IF Ua > Ue then
Ue := Ua
else
Ue := Ua*(1-a)+Ue*a;//:= Ua +( Ue-Ua)*a//a = [0..1] wie von mse
Gruß Horst
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Zeiger Instrument mit Dämpfung
Das wäre dann eine Spitzenwertanzeige, beim normalen mechanisch gedämpftem Drehspulinstrument wirkt die Dämpfung in beide Richtungen.
Re: Zeiger Instrument mit Dämpfung
Hallo
Danke an beide Experten. Noch hat aber ( bei mir) keine der beiden Vorschläge zum gewünschten Effekt geführt. Hoffe es liegt nicht an mir, denn ich gehe davon aus, dass mit ue wohl die Eingangsspannung (in meinem Fall ein Wert von einer TrackBar - Komponente kommt) und mit ua die Spannung bzw. die Positionen für das analoge Messwerk gemeint ist! Aber das steigert wohl nur meine Neugierde und ich freue mich schon auf weitere Hilfestellungen.....
Danke an beide Experten. Noch hat aber ( bei mir) keine der beiden Vorschläge zum gewünschten Effekt geführt. Hoffe es liegt nicht an mir, denn ich gehe davon aus, dass mit ue wohl die Eingangsspannung (in meinem Fall ein Wert von einer TrackBar - Komponente kommt) und mit ua die Spannung bzw. die Positionen für das analoge Messwerk gemeint ist! Aber das steigert wohl nur meine Neugierde und ich freue mich schon auf weitere Hilfestellungen.....
-
- Beiträge: 6984
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Zeiger Instrument mit Dämpfung
Ich habe es ausprobiert, nach meiner Meinung sie das Ergebniss recht gut aus.
Als Eingabe habe ich direkt die Koordinaten des Form verwendet.
Als Eingabe habe ich direkt die Koordinaten des Form verwendet.
Code: Alles auswählen
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer);
begin
PosX := X;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const
zeit: single = 0.1;
begin
Shape1.Width := Round(Shape1.Width + (PosX - Shape1.Width) * zeit);
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Zeiger Instrument mit Dämpfung
Danke! Ich denke das Problem ist im Wesentlichen gelöst. Es funktioniert mit der Dämpfung nach Mathias ziemlich realistisch! Ich mußte nur das "Round" weglassen, da sonst der Endwert nicht stimmt! !
Alles lässt sich noch steigern - man könnte noch über eine Art "gedämpfte Schwingung" des Zeigers nach Erreichung des Messendwertes nachdenken. Wenn ich mein reales Analog-Multimeter beobachte, gibt es ein kurzes Überschwingen und anschließendem Einschwingen zum Endwert. Ob jedoch der Aufwand hier nicht schon zu groß wird?!
Danke und einen schönen Abend
Alles lässt sich noch steigern - man könnte noch über eine Art "gedämpfte Schwingung" des Zeigers nach Erreichung des Messendwertes nachdenken. Wenn ich mein reales Analog-Multimeter beobachte, gibt es ein kurzes Überschwingen und anschließendem Einschwingen zum Endwert. Ob jedoch der Aufwand hier nicht schon zu groß wird?!
Danke und einen schönen Abend
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Zeiger Instrument mit Dämpfung
Aufwändig ist ein bisschen übertrieben:
(Habs nicht getestet)
MFG
Komoluna
Code: Alles auswählen
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer);
begin
PosX := X;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
const
zeit: single = 0.1;
begin
VelX := VelX + (PosX - Shape1.Width) * Zeit;
Shape1.Width := Round(Shape1.Width + VelX * Zeit);
end;
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Zeiger Instrument mit Dämpfung
Da brauchtst du ein Filter zweiter Ordnung. Dessen Koeffizienten gewinnt man meist über die bilineare Z-Transformation, Impuls-invariant wie im ersten Beispiel ist auch möglich und für die Zeigersimulation vermutlich besser geeignet. Bei hohem Abtastrate/Grenzfrequenz Verhältnis unterscheiden sie sich kaum. tsigfilter im skf_lp2binilinear-Modus realisiert ein solches Filter.hpt hat geschrieben: Alles lässt sich noch steigern - man könnte noch über eine Art "gedämpfte Schwingung" des Zeigers nach Erreichung des Messendwertes nachdenken. Wenn ich mein reales Analog-Multimeter beobachte, gibt es ein kurzes Überschwingen und anschließendem Einschwingen zum Endwert.
https://gitlab.com/mseide-msegui/mseide ... filter.pas
Die Koeffizientenberechnung geschieht in tsigfilter.sighandlerb2bi().
Zuletzt geändert von mse am Do 26. Mär 2015, 07:44, insgesamt 1-mal geändert.
Re: Zeiger Instrument mit Dämpfung
Hallo,
ich habe mal ein Programm umgestrickt, das ein gedämpftes Feder-Masse System mittels Runge-Kutta Verfahren berechnet.
Dazu wird aus den Zustandsdaten t der neue Wert bei t+dt berechnet.
Netterweise, kann man die einwirkende Kraft nach jeder Berechnung ändern.
Zu Beginn wird eine Kraft, die die Feder um 1 m dehnen oder eindrücken müßte aufgebracht. Nach einer gewissen Zeit wird die Kraft dann halbiert.
Button1-> starke Dämpfung. Button2 schwächere Dämpfung.
Aufgetragen als Zahl un Prograssbar von oben nach unten: Weg, Geschwindigkeit und Beschleunigung , darunter die Zeit.
Gruß Horst
ich habe mal ein Programm umgestrickt, das ein gedämpftes Feder-Masse System mittels Runge-Kutta Verfahren berechnet.
Dazu wird aus den Zustandsdaten t der neue Wert bei t+dt berechnet.
Netterweise, kann man die einwirkende Kraft nach jeder Berechnung ändern.
Zu Beginn wird eine Kraft, die die Feder um 1 m dehnen oder eindrücken müßte aufgebracht. Nach einer gewissen Zeit wird die Kraft dann halbiert.
Button1-> starke Dämpfung. Button2 schwächere Dämpfung.
Aufgetragen als Zahl un Prograssbar von oben nach unten: Weg, Geschwindigkeit und Beschleunigung , darunter die Zeit.
Gruß Horst
- Dateianhänge
-
Schwingung.zip
- (3.77 KiB) 89-mal heruntergeladen
Re: Zeiger Instrument mit Dämpfung
Servus
ich bin sehr dankbar für Eure Beiträge dieses wie es scheint, hoch spannenden und komplexen Themas.
Das Beispiel von horst_h ist praktisch genau das, was ich mir so als "Löter" vorstelle. Relativ überschaubar, aber für mich im Moment noch zu verdauendes Beispiel. Ich bin neugierig, wie es sich in der Anwendung verhält. Ob - wenn das Messwerk im Ausschwingen ist, und sich der Eingangswert (z.B. Spannung) verändert, das auch in Echtzeit so realisierbar ist.
Leider bin ich zur Zeit nicht zu Hause und kann es gleich testen - aber da freu ich mich schon drauf.
mfG HPT
ich bin sehr dankbar für Eure Beiträge dieses wie es scheint, hoch spannenden und komplexen Themas.
Das Beispiel von horst_h ist praktisch genau das, was ich mir so als "Löter" vorstelle. Relativ überschaubar, aber für mich im Moment noch zu verdauendes Beispiel. Ich bin neugierig, wie es sich in der Anwendung verhält. Ob - wenn das Messwerk im Ausschwingen ist, und sich der Eingangswert (z.B. Spannung) verändert, das auch in Echtzeit so realisierbar ist.
Leider bin ich zur Zeit nicht zu Hause und kann es gleich testen - aber da freu ich mich schon drauf.
mfG HPT
-
- Beiträge: 131
- Registriert: So 20. Jul 2014, 10:27
- OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
- CPU-Target: 8-64 bit
- Wohnort: bodensee
- Kontaktdaten:
Re: Zeiger Instrument mit Dämpfung
hi
sehr warscheinlich brauchst / meinst du ein PID-Regler
siehe
http://brettbeauregard.com/blog/2011/04 ... roduction/
somit bestimmst du mit dem I-Anteil die geschwindigkeit des nachstellens und mit dem D-Anteil das uebersteuern des zeigers, ist ne einfache formel in C aber sicher auch schnell in Pascal umgesetzt
wenn du mit durchschnittswerten arbeitestist (z.b. 10 mal messen, durchschnitt ermitteln, anzeigen) ist das sicher schnell passiert aber eben brauchst du dann 10 messungen. was misst du denn und wie schnell ist das teil ? also wie oft pro sec ist ne messung da, wie schenll soll der zeiger reagieren ?
lies mal das im link und dann sollte einiges klar werden
gruss
w
sehr warscheinlich brauchst / meinst du ein PID-Regler
siehe
http://brettbeauregard.com/blog/2011/04 ... roduction/
somit bestimmst du mit dem I-Anteil die geschwindigkeit des nachstellens und mit dem D-Anteil das uebersteuern des zeigers, ist ne einfache formel in C aber sicher auch schnell in Pascal umgesetzt
wenn du mit durchschnittswerten arbeitestist (z.b. 10 mal messen, durchschnitt ermitteln, anzeigen) ist das sicher schnell passiert aber eben brauchst du dann 10 messungen. was misst du denn und wie schnell ist das teil ? also wie oft pro sec ist ne messung da, wie schenll soll der zeiger reagieren ?
lies mal das im link und dann sollte einiges klar werden
gruss
w
Re: Zeiger Instrument mit Dämpfung
Hallo,
hpt will doch nur einen Analog-Zeiger mit überschwingen simulieren.
Der Vorschlag von Komoluna ist ja leider nur 2 RC-Glieder hintereinander. die schwingen nicht über.
Das Feder Masse System mit Dämpfung entspricht doch auch mechanisch dem Zeiger eines Drehspulinstrumentes mit Wirbelstrombremse ( ich hoffe Kraft proportional Geschwindigkeit ). Da wird nichts geregelt.
Ein wenig Offtopic:
Reibung wäre ja nahezu unabhängig von v und man hätte einen Schleppfehler ( x% vom Endwert ),
Bei Reibung müßte man die Berechnung anpassen und ein ar = Reibkraft/Masse in die Parameter einführen.Ich hätte Fx auch ax= Fx/Masse benennen sollen.
Man muss es mit der Genauigkeit der Simulation nicht übertreiben
Die Geschwindigkeit spielt wohl keine Rolle.Man sieht ja auch nicht genau > 50 Hz == 20 ms pro Bild.Deshalb hat mein Programm auch sleep(20) eingebaut.
Sonst etwa 8 Mio Berechnungen/ Sekunde bei mir.
Gruß Horst
hpt will doch nur einen Analog-Zeiger mit überschwingen simulieren.
Der Vorschlag von Komoluna ist ja leider nur 2 RC-Glieder hintereinander. die schwingen nicht über.
Das Feder Masse System mit Dämpfung entspricht doch auch mechanisch dem Zeiger eines Drehspulinstrumentes mit Wirbelstrombremse ( ich hoffe Kraft proportional Geschwindigkeit ). Da wird nichts geregelt.
Ein wenig Offtopic:
Reibung wäre ja nahezu unabhängig von v und man hätte einen Schleppfehler ( x% vom Endwert ),
Bei Reibung müßte man die Berechnung anpassen und ein ar = Reibkraft/Masse in die Parameter einführen.Ich hätte Fx auch ax= Fx/Masse benennen sollen.
Man muss es mit der Genauigkeit der Simulation nicht übertreiben

Die Geschwindigkeit spielt wohl keine Rolle.Man sieht ja auch nicht genau > 50 Hz == 20 ms pro Bild.Deshalb hat mein Programm auch sleep(20) eingebaut.
Sonst etwa 8 Mio Berechnungen/ Sekunde bei mir.
Gruß Horst
-
- Beiträge: 131
- Registriert: So 20. Jul 2014, 10:27
- OS, Lazarus, FPC: kubuntu, raspbian, laz 1.2 / 0.9 microcontroller
- CPU-Target: 8-64 bit
- Wohnort: bodensee
- Kontaktdaten:
Re: Zeiger Instrument mit Dämpfung
hi,
mein vorschalg mit dem pid-regler war ja nicht weil ich das als notwendig erachte, sondern weil es nur 3 variablen braucht und 4-5 zeilen code und schneller ist als 2 RC-glieder. sicher wird niemand nen unterschied feststellen. frueher hatte ich hier aus paar werten den durchschnitt berechnet und gut sein lassen, ja aber auch da paar zeilen code gebraucht. aber man lernt nie aus, erfahre ich doch was ueber schleppmomente des drehspuhlinstrumentes (ich hab noch eins).
ich finde das thema aber spannend
mein vorschalg mit dem pid-regler war ja nicht weil ich das als notwendig erachte, sondern weil es nur 3 variablen braucht und 4-5 zeilen code und schneller ist als 2 RC-glieder. sicher wird niemand nen unterschied feststellen. frueher hatte ich hier aus paar werten den durchschnitt berechnet und gut sein lassen, ja aber auch da paar zeilen code gebraucht. aber man lernt nie aus, erfahre ich doch was ueber schleppmomente des drehspuhlinstrumentes (ich hab noch eins).
ich finde das thema aber spannend

Re: Zeiger Instrument mit Dämpfung
Servus Experten.
Horst hat ein tolles Tool bereitgestellt - danke. Ich habe jetzt versucht mal im Trockentraining eine TrackBar zu nehmen und probiert, so ähnlich wie es in den Button1 bzw. Button2 geschieht, es einfach zu probieren und zwar wie folgt:
Habe natürlich auch das Sleep auf (1) reduziert und den 2. Aufruf (with Param do) ausmaskiert.
Es funktioniert, aber nicht so wie es soll ..... Vor allem, wenn während des Ausschwingens, der Steller der TrackBar verändert wird. Da müsste man wohl die Gesamtheit besser verstehen (denk ich mir).
Wenn es schon solche Experten wie Horst gibt, kommt man in die Versuchung, auch hier um einen Tipp zu bitten.
Wie könnte man eine TrackBar und wo einbinden, damit ein Stellen und Nachschwingen realistisch wird?!
mfG HPT
Horst hat ein tolles Tool bereitgestellt - danke. Ich habe jetzt versucht mal im Trockentraining eine TrackBar zu nehmen und probiert, so ähnlich wie es in den Button1 bzw. Button2 geschieht, es einfach zu probieren und zwar wie folgt:
Code: Alles auswählen
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
with Parameter do
begin
masse := 1;
c := 1;
cm := c / Masse;
b := 0.5 / cm;
Fx := TrackBar1.Position/100;
end;
calculate(self);
end;
Es funktioniert, aber nicht so wie es soll ..... Vor allem, wenn während des Ausschwingens, der Steller der TrackBar verändert wird. Da müsste man wohl die Gesamtheit besser verstehen (denk ich mir).
Wenn es schon solche Experten wie Horst gibt, kommt man in die Versuchung, auch hier um einen Tipp zu bitten.
Wie könnte man eine TrackBar und wo einbinden, damit ein Stellen und Nachschwingen realistisch wird?!
mfG HPT
Zuletzt geändert von Lori am Do 26. Mär 2015, 19:20, insgesamt 1-mal geändert.
Grund: Highöighter
Grund: Highöighter