Forum: Mikrocontroller und Digitale Elektronik Thorlabs Laser-Source mit über FTDI232BM ansteuern


von ThermoLab (Gast)


Angehängte Dateien:

Lesenswert?

Liebes Forum,

für einen Versuchsaufbau muss ich die Vorgaben des 
Laserschutzbeauftragten erfüllen. Dazu habe ich mir gedacht, meine 
Laserquellen (1x Thorlabs KLS635 und 3x Thorlabs TLS001) per USB mit 
einem Raspi oder Ähnlichem zu verbinden und ihnen per "USB-Befehl" gemäß 
dem (angehängten) Communications Protocol eine definierte Leistung 
zuzuweisen. Darüber hinaus möchte ich ebenfalls mittels Befehl die 
Bedienung auf Software-only ändern, damit niemand Schabernack mit den 
Drehreglern spielen kann.

Nach einigem Rumprobieren, komme ich allerdings auf keinen grünen Zweig 
mit dem "Versenden" der Befehle.

Meines Erachtens nach sollte es doch reichen, die PID und VID jeder 
Laserquelle auszulesen und dann mithilfe der python-usblib die 
angegebenen Messages zu verschicken oder? Oder übersehe ich da etwas 
grundsätzliches mit dem FTDI?

Danke schon mal für Eure Hilfe!

: Verschoben durch Moderator
von Sebastian R. (sebastian_r569)


Lesenswert?

Wenn da ein FT232 drin ist, sollte das eher über pySerial als über die 
USB-Lib gehen, da das ding eine virtuelle serielle Schnittstelle 
darstellt.

von ThermoLab (Gast)


Lesenswert?

Hallo Sebastian,

Danke für Deine schnelle Antwort. ich habe mich gerade daran versucht 
scheitere ich scheinbar bei den Messages:
1
import serial
2
s = serial.Serial('/dev/ttyUSB0 ', 115200)
3
identify =b"x23/x02/x00/x00/x50/x01"
4
s.write(identify)

Damit habe ich versucht das Geräte zur Identifikation blinken zu lassen 
(siehe Comm.-Protocoll S.40).

Der write Befehl gibt 23 zurück, was ja die Anzahl der gesendeten Bytes 
sein müsste - das verwirrt mich wiederrum, da ich ja eigentlich nur 6 
Bytes mitschicke.

Wie würdest Du nun weiter vorgehen?

von Sönke P. (snke_p)


Lesenswert?

Du musst den Bytes als Hexadezimalzahl ein \x (Backslash x) 
voranstellen:
1
...
2
identify =b"\x23\x02\x00\x00\x50\x01"
3
...

Richtig encodiert sind das dann nun auch nicht 24 (in Deinem Code 23), 
sondern lediglich 6 Bytes.

Beitrag #5990215 wurde von einem Moderator gelöscht.
von ThermoLab (Gast)


Lesenswert?

Hallo Sönke,

vielen Dank! Das hat zumindest damit geklappt. Nun kann ich das Gerät 
immerhin schon mal blinken lassen.
Auch Laser enable/disable klappt, aber leider schaffe ich es nicht ihm 
eine Leistung einzustellen (siehe S.255ff MGMSG_SET_PARAMS 0x0800).

Mein Laser hat maximal 8mW, damit sollte ja nach Anleitung ein Wert von 
0x1000 = 1mW eingestellt werden ... nach littleEndian sind das am Ende 
der Message ja die Bytes \x00\x10, oder?

Ich habe es mit folgender Message probiert:
1
setPower = b"\x00\x08\x04\x00\xD0\x01\x01\x00\x00\x10"
2
s.write(setPower)

Danach macht der Controller aber leider nichts mehr und lässt sich auch 
nicht mehr weiter ansteuern (identify oder ähnliches)

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.