---
tags: Instruction
---
# CM300xi-SiPh instruction

# Table of contents
[toc]
---
# Instrument
```sequence
CM300xi -> CM300xi ctrl PC: Ctrl command
Light source (LS)->Light:
LS ctrl PC->CM300xi ctrl PC: Ctrl command
LS ctrl PC-->User PC: Data transfer
LS ctrl PC->Light source (LS): Polarization
LS ctrl PC->Light source (LS): Ctrl command
User PC->LS ctrl PC: Auto ctrl command
```
## **CM300xi-SiPh \[CM3]** (300 mm SiPh Probe Station)
### **Software**
**FFI Photonics Controller Interface \[PCI]**

* Controls manual positioning, scan parameters, initial optical alignment, etc.
* **Tabs**: **Main/display**, **Scan Parameters**, etc.
* **Power meter**
**SiPh-tools \[SPT]**

* Probe position control
* **Tabs**: **Probe Control**, log, etc.
* **Output Z controls**
**Velox \[VLX]**
* Probe Station Control Software
* **Wafer mapping**
**Scripting Console \[SPC]**
* Stop \[SPT]
### **Hardware**
* Fiber array, Fiber/Array Holders, Reconfigurable Fiber Arm
* RF Probing
* eVue Digital Imaging System
* Thermal Systems
## **T100S-HP \[T10]** (Tunable Laser) & **CT440** (Optical Component Tester)
### **Software**
**CT440 \[CT4]**
### **Hardware**
* **Default setting**: $\lambda = 1310$ (nm), $P = 1.0$ (mW), $I = 39.4$ (mA)
## **PSY-201 \[PSY]** (Polarization Synthesizer)
### **Software**
**PolaView**
### **Hardware**
## RF Probing (?)
* To be done
---
# Fiber array setup
* 1DGC
* 2DGC
* 12MMI
* 22MMI
* MRM
* PD
---
# Light calibration
```python=
def LIGHT_CAL_MANL():
[CT4] Fiber.Docking(input, output1) # Cali.channel(1)
[CT4] CT4.run()
[CT4] Calibration()
[CT4] Calibration.reset()
[CT4] Calibration.Cali(1)
[CT4] Fiber.Docking(input, output2) # Cali.channel(2)
[CT4] Calibration.Cali(2)
[CT4] Check.Update("C:\Users\Public\Documents\Yenista Optics\CT440\Calib\FileYO181010144.dat")
[CT4] Cali_file.Backup("C:\Users\fengyuan\Calib\FileYO181010144.dat")
def LIGHT_CAL_AUTO():
[1zq] CT440_calibration.py
[1zq] Fiber.Docking(input, output1) # Cali.channel(1)
[1zq] ENTER
[1zq] Fiber.Docking(input, output2) # Cali.channel(2)
[1zq] ENTER
[1zq] Check.Update("C:\Users\Public\Documents\Yenista Optics\CT440\Calib\FileYO181010244.dat")
[1zq] Cali_file.Backup("C:\Users\fengyuan\Calib\FileYO181010244.dat")
```
---
# Wafer loading
```python=
def WAFER_LOADING():
if [PCI] restart:
[PCI] Reload("Wafer map") # otherwise Z might be locked
else:
pass
[SPT] Output_Probe_Probe_Z_height(>=500) # prevent probe crush
[VLX] CtrlCenter_Chuck.Z_Setup("Separation height")
[VLX] Toolbar.Move_to("Chuck load position")
[CM3] Door.open()
[CM3] Wafer.load()
[CM3] Wafer.align()
[CM3] Wafer.fix("suck")
[CM3] Door.close()
[VLX] Toolbar.Move_to("Chuck load position")
[VLX] CtrlCenter_Chuck.Z_Setup("Separation height")
```
---
# Wafer alignment
```python=
def WAFER_ALN():
[VLX] Find_Target_Pattern()
[VLX] Auto_Align()
[VLX] Auto_Align.Train()
[VLX] Auto_Align.Train("Zoom in") # needs to preserve enough outside info of pattern
[VLX] Auto_Align_Wizard("Train Light Settings"==True,
"Use Current Index Size"==False,
"Calculate Die Size"==True)
![VLX] Toolbar.set_home()
![VLX] Toolbar.set_home("Set")
# [VLX] CtrlCenter_Chuck.Z_Setup("Contact height")
```
---
# Light alignment
```python=
def LIGHT_ALN():
# check light status
[PCI] Find_standard("Standard device") # 1DGC_2066
[PCI] Scan_Parameters.NanoAreaScanPara(all=50, step_spacing=0.1)
# Scan_Parameters might changed after disscuss with NV
[SPT] Output_Probe_XY_Controls(X+=500) # not to block the device
[VLX] Select_Lens(Magnification==Lowest) # otherwise SPT might crash
[SPT] Train.Output_HOM()
[SPT] Select_target("Down-left of fiber array")
[SPT] Train.Output_HOM(X=250, Y=750)
[SPT] Select_target("Device") # check device position in VLX
[SPT] Train.Output_HOM("Yes")
# always check λ == 1310 before any action
[T10] Set_λ(1310)
# lower the probe
for i in range(step_need_for_z_align):
if [SPT] Z_position == "out of range":
[SPT] Z_position = Output_Probe_Z_Controls(+200)
elif [SPT] 200 >= Z_position > 100:
[SPT] Z_position = Output_Probe_Z_Controls(+100)
elif [SPT] 100>= Z_position > 50:
[SPT] Z_position = Output_Probe_Z_Controls(+50)
elif [SPT] 50 >= Z_position > 10:
[SPT] Z_position = Output_Probe_Z_Controls(+10)
else:
[SPT] Z_position = Output_Probe_Z_Controls(+1)
# when Z_position is not as lower as expected, probe is close to wafer
if [SPT] ΔZ_position << Output_Probe_Z_Controls(input_value):
break
else:
continue
[SPT] Calibrate.outputZ.offset(Z=0)
[SPT] Find(Z=20)
# find light
[T10] Set_λ(1310) # always check λ == 1310 before any action
[PCI] Search_First_Light.Output_Side()
[PCI] Area_Scan.Out_Nano()
# [PCI] Graient_Scan.Out_Nano(), might changed after disscuss with NV
if [PCI] Power Meter << -30:
[SPT] Re_train_HOM() or LIGHT_CAL()
else:
[SPT] Output_Probe_XY_Controls("Set")
```
---
# Manual Meas.
```python=
# Check Master/Slave Mode
if Mode(Slave) == True:
[SPC] Run_script("StopSiPTools")
[SPT] Mode = "Master Mode"
[SPT] Initialized()
else:
pass
# Check Wafer status
if Wafer.exist==False or Wafer.change==True:
[VLX] WAFER_LOADING()
[VLX] WAFER_ALN()
else:
pass
# Check Calibration (MANL)
# Always check λ == 1310 before any action
if Calibration(need) == True:
[CT4] LIGHT_CAL_MANL()
else:
pass
# Check light status
# Always check λ == 1310 before any action
[VLX] CtrlCenter_Chuck.Z_Setup("Contact height")
[SPT] LIGHT_ALN()
# Start Meas.
# # Always check λ == 1310 before any action
# 1DGC 12 (1I 2O)
# 2DGC
# 12MMI
# 22MMI
# MRM 231 (2I 13O)
# PD
```
---
# Automation Meas.
```python=
# Check Master/Slave Mode
# An example start from the very first biginning of Meas.
if Mode(Slave) == True:
[SPC] Run_script("StopSiPTools")
[SPT] Mode = "Master Mode"
[SPT] Initialized()
else:
pass
# Check Wafer status
if Wafer.exist==False or Wafer.change==True:
[VLX] WAFER_LOADING()
[VLX] WAFER_ALN()
else:
pass
# Check Calibration
# Always check λ == 1310 before any action
if Calibration(need) == True:
[CT4] LIGHT_CAL_MANL()
else:
pass
# Check light status
# Always check λ == 1310 before any action
[VLX] CtrlCenter_Chuck.Z_Setup("Contact height")
[SPT] LIGHT_ALN()
# Change to AUTO Meas.
[CT4] Close()
# Check Master/Slave Mode
if Mode(Master) == True:
[SPT] Mode = "Slave Mode"
[SPT] Initialized()
else:
pass
# Calibration (AUTO)
[1zq] LIGHT_CAL_AUTO()
# AUTO Meas. start
[1zq] CT440_PDL_run.Start()
![VLX] Select_Die()
[7mu] xMeasure2_SiPh.run()
[xM2] xMeasure2_SiPh.Setting()
[xM2] xMeasure2_SiPh.Setting.Modified()
[xM2] xMeasure2_SiPh.Setting("OK wi eck Hardware")
[xM2] xMeasure2_SiPh.DeviceTables()
[xM2] xMeasure2_SiPh.File.Load(".tab")
[xM2] xMeasure2_SiPh.Table.modified()
[xM2] xMeasure2_SiPh.Confirm()
![xM2] xMeasure2_SiPh.Measure()
![xM2] xMeasure2_SiPh.MappingMeasure()
```
---
## FFI Photonics Controller Interface (PCI)
* Set area scan (step: 0.1um)
* Search First Light → Output Side
* Area Scan → Out Nano
* Power Meter Chart (1DGC 2066 loss ≈ -30dB)
## SiPh_tools (Matlab-based)
* **Slave Mode** ↑ Initialized
* **Train** → output **HOM** (X: **250um**, Y: **750um**) → Select target
* Output Probe Z Controls (↑ 50um → **Find 20um**)
* After PCI Out Nano → Output Probe XY Controls → **Set**
---
# Data transfer
* Most data is in **.csv** format
* Defalt directory:
* **./CT440_client/CT440_Meas/fengyuan**
* Folder format:
* **time_device_purpose**
* Ex: 230422_1DGC_test
* Compress the folder into zip files (**.7z, 25MB**)
## File transfer
### **Sender \[1zq]**
**NIMAX** → NI PCIe GPIB**1** → Interactive ctrl
```console=
GPIB1: ibfind gpib1
gpib1: ibwrtf D:\zip\file\directory
(wait for receiver ready & confirm)
(Enter)
```
### **Receiver \[7mu]**
**NIMAX** → NI PCIe GPIB**0** → Interactive ctrl
```console=
GPIB0: ibfind dev1
dev1: ibrdf D:\zip\file\directory
(Enter)
```