Laser and AOM control classes for MATLAB. Currently supports:
- SpectraPhysics MaiTai (all models)
- Coherent Chameleon.
- MPDS AOM from AA Opto-Electronic
- The AOM control is linked to laser wavelength and automatically adjusts AOM frequency and RF power as wavelength alters.
- Laser GUI can be started from the View menu in ScanImage. (see below)
- Laser GUI updating is suspended during ScanImage acquisition to avoid pausing display.
NOTE: The package currently assumes just one AOM is connected to ScanImage and that the beam it is controlling is the first beam (only relevant if you have multi-beam setup).
- Add the
code
directory to your MATLAB path. - In MATLAB run
laserControl.settings.readSettings
then go to the settings file in the path reported to screen and fill in the missing settings. Note that if you plan to control an AOM but are not controlling the laser from the same PC, you should select thedummyLaser
option and set the COM port to any integer.
Note that to run all the following examples, the manufacturer's control software must first be closed.
Basic low-level control without a GUI:
>> MT = laserControl.maitai('COM1'); %substitute your COM port and laser
>> MT.turnOn
>> MT.openShutter
Starting a GUI based on above class
hGUI = laserControl.gui.laser_view(MT);
The GUI polls the laser regularly. This will cause brief pauses to the ScanImage live display (does not affect stored data) during acquisition. To avoid this instead do:
>> hGUI = laserControl.gui.laser_view_si_hooked(MT);
That loads a sub-class of laser_view
that is aware of ScanImage.
To also control an AOM in tandem with the laser do:
>> hLaser = laserControl.maitai('COM1');
>> hLaser.hAOM = laserControl.MPDSaom('COM3'); %substitute your COM port
>> hLaser.hAOM.linkToLaser(hLaser);
>> hGUI = laserControl.gui.laser_view_si_hooked(hLaser);
The above is automated by the startup script startLaserControl
.
For this to work you will need a settings file.
First run laserControl.settings.readSettings
and edit the settings file in the path displayed on your command line.
Then you run startLaserControl
.
If ScanImage is already started then the laser GUI can be started from the View menu in ScanImage.
Otherwise the GUI appears automatically.
To start the AOM GUI alone run startAOMControl
.
For that to work you will need to edit the settings file created in the SETTINGS directory the first time you run the above command. Simply fill in the laser name and the COM port index to which the laser is connected.
You will need to tweak the RF power by wavelength:
- Start ScanImage. Run
startLaserControl
. - The GUI can be started from the View menu in ScanImage (go to View > Laser control)
- Ensure External voltage control is checked and external blanking is unchecked (or that you have enabled the AOM with an external TTL line).
- Press "Enter tweak"
- Set the laser wavelength to a desired value. Wait for the laser to reach wavelength.
- Edit the RF power box until power in first order beam is max.
- Repeat for other values.
- Press "Show Fig" to see the curve (currently this button needs to be pressed each time to manually update the plot).
- Once happy hit "Leave tweak" then "Save settings".
Optionally, if needed, you can alter the RF frequency associated with each wavelength. To do this:
- Press "Tune laser to reference wavelength".
- Alter the frequency in the box
- Press "Update ref frequency"
- Press "Save settings"
>> LC = startLaserControl
LC =
struct with fields:
hLaser: [1×1 laserControl.maitai]
hGUI: [1×1 laserControl.gui.laser_view]
%% Upon tuning laser in GUI the AOM changes frequency and power
Tuning to 920 nm: AOM at 100.61 MHz & power at 520
To set the reference freq tune laser to 890 (or whatever is in LC.hAOM.referenceWavelength
).
To do this you have these commands:
>> LC.hLaser.hAOM.readFrequency
ans =
104
%and to set it:
>> LC.hLaser.hAOM.setFrequency(111.11);
% and we can nudge:
>> LC.hLaser.hAOM.nudgeFreqUp
111.111 MHz
% etc
>> LC.hLaser.hAOM.nudgeFreqDown
111.113 MHz
% etc
Then we find the correct frequency for the reference wavelength and set it in the object like this:
>> LC.hAOM.referenceFrequency=111.11;
Setting RF power of AOM is the same:
>> LC.hAOM.readPower_dB
ans =
11.6000
>> LC.hAOM.setPower_dB(15)
ans =
logical
1
>> LC.hAOM.readPower_dB
ans =
15
>> LC.hAOM.nudgePowerUp
P=618(15.0dBm)
>> LC.hAOM.setPower_raw(666)
ans =
logical
1
>> LC.hAOM.readPower_dB
ans =
16.6000
>> LC.hAOM.powerTable
ans =
890 500
920 520
- v0.0.00 - Basic MaiTai control at command line.
- v0.2.00 - Add Chameleon, settings file, GUI and GUI starter, boilerplate AOM control in
dev
branch, improve wavelength polling. - v0.5.00 -
dev
branch MPDS AOM code now interacts with AOM correctly in all major ways. - v0.5.50 - MPDS AOM: Power and frequency nudge up/down works. Raw power setting (the register value) works.
- v0.6.50 - MPDS AOM: Is now linked to laser and changes frequency and power automatically.
- v0.7.00 - startLaserControl now starts the laser and AOM.
- v0.9.00 - More fine-grained options for setting AOM modes. Tested with laser.
- v0.9.50 - Settings load and save from disk.
- v0.10.50 - Insert current RF power into table, produce reasonable interpolated value if necessary, plot to show RF power (can be converted into something fancier fairly easily).
- v0.11.00 - Add sub-class laser GUI that will be attached to ScanImage
- v0.13.00 - Tie up loose ends and start work on full GUI for AOM.
- v0.14.00 - AOM GUI reads from model. Saves and loads settings.
- v0.15.00 - AOM GUI sets values in model.
- v0.16.00 - AOM GUI is talking to ScanImage via SI-hookable Laser GUI.
- v0.16.50 - Link to ScanImage for laser control is working. Test in simulated mode.
- v0.17.50 - Working with real ScanImage.
- v0.18.00 - Tested and fixed bugs. All works as expected.
- v0.19.00 - Start script for AOM GUI on its own.