LabVIEWForum.de
Problem bei Sinus-Bewegung - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Problem bei Sinus-Bewegung (/Thread-Problem-bei-Sinus-Bewegung)

Seiten: 1 2


Problem bei Sinus-Bewegung - Bigles - 24.07.2014 13:15

Hallo zusammen!

Ich habe ein nicht ganz einfaches Problem mit meinem Labview-Programm zu lösen und ich habe keine Ahnung wie! Confused Falls mir jemand helfen könnte wäre ich seehr dankbar!!

Ich habe ein Linearmotor der tierische Sehnen zyklisch dehnen soll. Dazu benützte ich einen Linearmotor von der Firma Zaber. Da die Dehn-Bewegung sinusförmig sein soll, sende ich auf den Motor Geschwindigkeitssignale und approximiere so einen Sinus. Z.B. möchte ich mit 1Hz zyklisch dehnen, dann sende ich pro Sekunde 40 Geschwindigkeitssignale an den Motor, in regelmässigen Abständen, und eine Funktion berechnet die zugehörige Geschwindigkeit um einen Sinus zu erhalten. Das funktioniert eigenlich sehr gut. Das Problem beginnt dann, wenn im Hintergrund des Computers irgendwelche Prozesse zu arbeiten beginnen und dadurch der Computer (Intel i5-3220M @2.6GHz, 4Gb RAM) leicht verzögert die Signale ausgibt. Dann verfälscht sich (logischerweise) die relative Position der Dehnbewegung. Z.B. wenn ich während dem Betrieb ein Programm öffne, der Computer kurzzeitig erhöhte Aktivität hat, sendet er einen Geschwindigkeits-Befehl ein paar ms zu spät und um diese Zeit verschiebt sich die Position. Hat irgend jemand Erfahrung mit diesem Problem und einen Tipp wie ich das beheben könnte?

Vielen Dank schon im voraus für jede Antwort!
LG Bigles


RE: Problem bei Sinus-Bewegung - jg - 24.07.2014 13:32

Geh nicht davon aus, dass unter Windows eine Schleife einen festen Takt einhält. Das geht halt nicht.

Mögliche Lösungs-Ideen:
- Verwende das Metronom zur Schleifentaktung.
- Verwende eine Timed-Loop. Die taktet sich selber (auch auf Windows) wieder in das feste Zeitraster ein.
- Berechne die verstrichene Zeit seit Messbeginn und nimm diese zur "Beschleunigungsberechnung".

Gruß, Jens


RE: Problem bei Sinus-Bewegung - GerdW - 24.07.2014 13:48

Hallo Bigles,

Zitat:Da die Dehn-Bewegung sinusförmig sein soll
Noch ein Lösungsvorschlag: Nimm einen rotierenden Motor und ein Getriebe/Gestänge (wie bei einem handelsüblichen Hubkolbenmotor)…
Dann kannst du mit gleichmäßiger Geschwindigkeit arbeiten!


RE: Problem bei Sinus-Bewegung - Bigles - 24.07.2014 14:52

@jg: Ah, ich dachte so eine Schleife mit einem wait-element sei konstant! Vielen, vielen Dank für die Lösungsvorschläge. Ich werde die der Reihe nach mal ausprobieren.

@GerdW: Stimmt, auch eine gute Möglichkeit! Würde meine Konstruktion aber ziemlich verkomplizieren. Falls sich das Problem aber nicht softwaretechnisch lösen lässt, werde ich dass definitiv mal in Betracht ziehen.

Besten Dank euch beiden!
Lg Bigles


RE: Problem bei Sinus-Bewegung - kpa - 24.07.2014 15:03

Hallo Bigles,

ein Hubkolben beschreibt keinen Sinus.

http://de.wikipedia.org/wiki/Schubkurbel

Grüße

kpa


RE: Problem bei Sinus-Bewegung - GerdW - 24.07.2014 15:07

Hallo,

dafür aber einen Kosinus… Smile

Und den dann aber sehr viel gleichmäßiger als ein Motor, der über eine normale Loop auf einem Windows-PC in der Geschwindigkeit variiert wird…


RE: Problem bei Sinus-Bewegung - Lucki - 24.07.2014 15:54

Wie ist denn die genaue Hardware-Konfiguration?
In der Regel wird der Stepper-Motor doch nicht wegen jedes Steps vom PC aus gesteuert, sondern zwischen PC und Motor ist ein Controller mit eigener Intelligenz und mit der Leistungelektronik für den Motor. Der PC ist mit dem Controller z.B über RS232 verbunden. Man kann dem Controller vom PC aus ganze Bewegungsprofile übergeben, die dann autark ausgeführt werden. Ein Stottern am PC wirkt sich dann überhaupt nicht auf die Bewegeung aus. Ist das bei Dir nicht so? Wenn es einen Controller gibt, wie sieht der Befehlssatz aus? Muß man die RS232-Befehle selbst generieren oder gibt es eine DLL-Bibliothek als Schnittstellentreiber? Im Idealfall kann die Firma sogar "Labview-Treiber" anbieten. Dabei handelt es sich im eine Sammlung von Funktionen (die man auch selbst erstellen könnte) , die auf die DLL (oder direkt auf die serielle Schnittstelle) zugreifen.
Gruß Ludwig


RE: Problem bei Sinus-Bewegung - kpa - 24.07.2014 20:31

(24.07.2014 15:07 )GerdW schrieb:  Hallo,

dafür aber einen Kosinus… Smile

Und den dann aber sehr viel gleichmäßiger als ein Motor, der über eine normale Loop auf einem Windows-PC in der Geschwindigkeit variiert wird…

Hallo Gerd,

der Kolbenhub beschreibt auch keinen Kosinus. Ich habe ein Bild gemacht an dem Du sehen kannst was der Kolben macht.
Das ergibt so einen verzerrten Kosinus der oben schmal und unten breit ist. Im Bild ist der Radius 1 und die Pleuelstange 1,5. Wenn die Pleuelstange größer gegenüber dem Radius wird dann geht es mehr in Richtung Kosinus aber es kann nie ein Kosinus werden. (Hier hat noch der Herr Phytagoras seine Finger im Spiel, die Pleuelstange ist meistens nicht in Hubrichtung.)

Grüße

kpa


RE: Problem bei Sinus-Bewegung - Bigles - 25.07.2014 08:52

Hallo zusammen!

Vielen Dank für die vielen Anregungen!

Nur kurz zur Sinus-Cosinus-Disskusion! Smile Es ist mir bewusst, dass es nicht einen exakten Sinus gibt; der Fehler ist für medizinische Versuche allerdings vernachlässigbar, es geht mehr darum natürliche Belastungen zu simulieren die natürlich in der Natur auch keinem perfekten Sinus entsprechen. Allerdings wäre es mechanisch für meinen Versuchsaufbau nur sehr schwer umsetztbar mit einem Kolbenhub zu arbeiten.

@Ludwig: Ich verwende einen Linear-Schrittmotor von der Firma Zaber (NA23C60) mit einem Controller. Die stellen eine Labview-Library zur verfügung, allerdings sehr einfach gehalten. Es gibt ca. 30 Commands von denen nur etwa 5 zur Positionsveränderung sind: Move relative, Move absolute, Move at constant speed, Set speed, Set acceleration. Die Library macht eigenlich nichts anders als den Befehl in ein 6-byte Datenpacket zu wandeln und diesen an den Controller per Visa zu senden.
Ich verwende jetzt "Move at constant speed", wobei ich einen Sinus in 40/Frequenz = steps unterteile. Z.B. bei 1Hz -> 40 Steps, bei 0.5Hz -> 80steps, ect. Dann hab ich einen While-Loop in Labview und berechne abhängig von i (der Laufvariable) die aktuelle Geschwindigkeit und gebe sie per command "move at constant speed" an den Controller.
Das Problem: sobald die Commands nur einige Millisekunden verspätet an den Controller gesendet werden, verschiebt sich die absolute Position der Motorenwelle. Z.B. Windows startet eine Hintergrundaktion oder ich öffne ein Programm, der Computer ist kurzzeitig ausgelastet (wobei das Problem schon bei ca 30% Computerauslastung auftritt) und sendet den nächsten "move at const. speed"-Befehl z.B. 3ms zu spät; dann bin ich um "s=v*t" also: "aktuelle geschwindigkeit * 3ms" an einer falschen Position: was in relaität dann oft etwa 0.05mm sind, was bei einer Gesamtdehnung von 0.3mm einen ziemlich grossen Fehler ist.
Das man Bewegungsprofile übergeben kann, ist (soweit ich weiss) nicht möglich.
Was ich also bräuchte wäre eine völlig genaue Taktgebung von Labview unabhängig davon was Windows im Hintergrund bastelt. Ich habe das Metronom mal ausprobiert; ändert aber nichts. Mit timed-loop kenn ich mich nicht aus, aber werde mich heute mal einlesen.


RE: Problem bei Sinus-Bewegung - jg - 25.07.2014 09:05

Dich wird nicht nur Windows bei diesem Konzept stören.
Du musst auch bedenken, dass ein Senden eines Strings per RS-232 (inkl. VISA-API) auch nicht echtzeitfähig ist, und da hast so gut wie keinen Einfluss drauf.
- VISA Write hat einen Buffer, der Treiber entscheidet das genaue Timing des Abschickens.
- Die Datenübertragung selber dauert (Bsp: bei 9600 baud braucht 1 ASCII Zeichen ca. 1 ms).
- Du hast keinen Einfluss über die Empfangsseite..., wann verarbeitet der Controller den Empfang und wie schnell setzt er ihn um.

Gruß, Jens