Jump to content

Laser Controller

Recommended Posts

I'm finishing up the design of a project for school, and since it is MSP430 based, figured I would share it.


The board is designed to be a controller for a DPSS laser.  The laser takes 5V power, 2 digital inputs (enable and trigger) and provides two analog voltage outputs (diode current and diode temperature).


The controller is designed using the MSP430F5172 and has the following features:


1. CLI control over either RS232 or BT serial port.

2. External interlock to control laser enable line.  Interlock is monitored by MCU and can be bypassed

3. Breakout for front panel control: 7 3V, debounced GPIO pins plus I2C bus.

4. Header for HD44780 20x4 LCD connected to MCU via I2C port expander.

5. Triggering can be performed by an internally generated signal or from an external source.

6.  Expansion port to enable the addition of hardware pulse delay circuitry

7.  External trigger output, with programmable phase delay from main laser trigger

8.  All external connections (RS232, trigger, interlock) on independent (isolated) grounds to protect against ESD and provide ground loop isolation


I chose the F5172 for it's 5V tolerant inputs but I'm hoping to be able to implement a sort of digital PLL using the TimerD perhip and its high resolution mode so that I can read an external trigger signal and output a phase delayed version to the laser.  We use this laser with a high speed holography system and typically trigger the laser with a TTL off of the cameras...but due to line latency need to tweak the timings to get them to line up.  I wasn't sure if I could hit the resolution I needed, so I added the expansion port to make it easy to upgrade the system.


I still need to do a final design check on it and fix some resistor values, but plan on shipping it off to fab soon.





Link to post
Share on other sites

Looks good. What are you using the laser for?


I'm thinking about a controller for my CO2 laser. Nothing too tricky - just monitoring coolant flow, temperature and whether the stepper motors are moving. The idea is to prevent it overheating or sloppy gcode causing the laser to stay on once it's finished. (I've got a nice burn on the back of my hand as right now the laser defaults to "on" if the cable to the PC is disconnected! :? )

Link to post
Share on other sites

It is for a lab laser.  My research group uses digital inline holography to study clouds and turbulence in them.  The process involves shining an expanded, collimated laser beam across a test volume onto a CCD.  The diffraction pattern created by the particles in the volume is a form of hologram and is recorded by the cameras.  We can then take these holograms and numerically refocus it to virtually any position within the original sample volume, which reconstructs the original light field.  By iterating over the entire volume, we can see where particles come into focus and backout 3D position as well as size and shape.  


Since the exposure time of even high speed cameras is too slow to give blur-free results, we use a laser with a ~1ns pulse length and actively trigger it in sync with the frame rate of the camera.  Since there is latency in the trigger line and in the response of the camera, we have to implement some sort of adjustable delay to the trigger line to keep everything in sync.  The laser itself is a stand alone actively q-switched DPSS laser, so outside of just monitoring diode current and temperature to make sure the laser's own internal regulation is doing its job, there isn't much control other than on/off and fire.  The main control is adjusting the triggering rate/dealy, (attempting to) keep it synced to an external reference, and allowing an external interlock system to kill the laser if needed.


Anyway, my department recently won a grant to build a pi m^3 cloud simulation chamber, and one of the features is one of these holographic systems.  I decided since this was going to be a 'community' instrument, it needed a better control system than the 'mess of wires in a box with a 30 year old signal generator' system we have driving the smaller chamber we have in our lab.

Link to post
Share on other sites
  • 1 month later...

So a little update on this project.


Due to the fact I'm trying to finish up my degree this summer and this project is nowhere related to that goal, I passed the torch to someone else who is currently finishing things up.  I should have an unprogrammed prototype in my hands by the end of the week or so and will have a working board with basic firmware by the end of the month.  I'll be sure to post pictures once I get hardware in my hands.

Link to post
Share on other sites
  • 4 weeks later...

Just a quick update.  First prototype is done and programmed with initial firmware.  Serial control works, and the LCD displays stuff, but the encoder and button inputs are still in the works.  We ordered the wrong footprint for a resistor network, which is the missing IC.  The jump wire is just a pull up for prototyping the front panel.  The front panel controls will get their own board, so that jumper will go away.


Unfortunately the solder mask didn't survive the layout updates resulting from switching to the DB25 connector, but the board still looks pretty nice.


I only had time today to power it up and play with the cli, but I'm hooking it up to the laser first thing tomorrow. 


Link to post
Share on other sites

Haha, nope....didn't get it running yet.  I spent a good part of the day squashing some firmware bugs and validating all of the controller outputs before actually connecting to the laser.  When I finally did hook it up, it was rather anti-climactic....it didn't work.  I'm pretty sure it's just being touchy about the warm-up cycle....all of the inputs are within spec, so I'm going to spend the weekend programming that in and will hopefully get it going on Monday.


We did run into a got-cha with the i2c expander.  With the reset line tied to VCC with a resistor, it doesn't seem to be powering up to a valid state, so that jumper wire is tied to a GPIO line so we can reset it in code before setting up the USCI on the micro.

Link to post
Share on other sites

After spending some quality time in the code over the weekend, and writing a proper labview front end, I got the laser up and running.  It appears the issue was not having control over the interlock....it wasn't able to enter the warm up cycle and stabilize with the interlock held high.  So once I could pull it low programmatically and wait for the diode temp to stabilize, it kicked right on.


We still have to populate the headers for the LCD, build the case and polish it up, but it seems the big hurdle is over.



Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...