Zeiger Instrument mit Dämpfung

Rund um die LCL und andere Komponenten
hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Zeiger Instrument mit Dämpfung

Beitrag von hpt »

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.

mse
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

Beitrag von mse »

Aus dem Kopf, nicht nachgeprüft:
Eine Dämpfung kann z.B. durch regelmässigen Aufruf von

Code: Alles auswählen

 
 Ua:= Ua+(Ue-Ua)*a;
 
simuliert werden. a bestimmt die Einschwingzeit und sollte << 1 sein.

Horst_h
Beiträge: 74
Registriert: Mi 20. Mär 2013, 08:57

Re: Zeiger Instrument mit Dämpfung

Beitrag von Horst_h »

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

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
 
Je größer die Dämpfung, desto größer a.

Gruß Horst

mse
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

Beitrag von mse »

Das wäre dann eine Spitzenwertanzeige, beim normalen mechanisch gedämpftem Drehspulinstrument wirkt die Dämpfung in beide Richtungen.

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Zeiger Instrument mit Dämpfung

Beitrag von hpt »

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

Mathias
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

Beitrag von Mathias »

Ich habe es ausprobiert, nach meiner Meinung sie das Ergebniss recht gut aus.
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

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Zeiger Instrument mit Dämpfung

Beitrag von hpt »

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

Komoluna
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

Beitrag von Komoluna »

Aufwändig ist ein bisschen übertrieben:

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;   
(Habs nicht getestet)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

mse
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

Beitrag von mse »

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

Horst_h
Beiträge: 74
Registriert: Mi 20. Mär 2013, 08:57

Re: Zeiger Instrument mit Dämpfung

Beitrag von Horst_h »

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.
capture3131.png
capture3131.png (5.75 KiB) 2896 mal betrachtet
Gruß Horst
Dateianhänge
Schwingung.zip
(3.77 KiB) 89-mal heruntergeladen

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Zeiger Instrument mit Dämpfung

Beitrag von hpt »

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

wbeppler
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

Beitrag von wbeppler »

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

Horst_h
Beiträge: 74
Registriert: Mi 20. Mär 2013, 08:57

Re: Zeiger Instrument mit Dämpfung

Beitrag von Horst_h »

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

wbeppler
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

Beitrag von wbeppler »

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 :-)

hpt
Beiträge: 48
Registriert: Sa 26. Jul 2014, 18:45
OS, Lazarus, FPC: Lazarus
CPU-Target: 32Bit

Re: Zeiger Instrument mit Dämpfung

Beitrag von hpt »

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:

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;  
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
Zuletzt geändert von Lori am Do 26. Mär 2015, 19:20, insgesamt 1-mal geändert.
Grund: Highöighter

Antworten