Skip to main content

Unpacking deformable Mirror Mirao52e: first impressions

Mirao52e 

from Imagine Optic is probably one of the best known high-stroke deformable mirrors (DMs), a working horse in adaptive optics. It has 52 actuators, huge stroke (up to +/- 50 microns peak-to-value), and a hefty 15-mm clear aperture of usable mirror surface. All things look good, at a price tag of about 20K euro. After some hesitation and comparing specs/price with Alpao mirrors, I eventually chose Mirao52e for my adaptive optics project.



It is too early to speak of performance, I will do optical tests later. Today I can only share my first impressions.

Pros:
  1. Small form factor: 64x64x17.6 mm, easy to integrate if your space is tight
  2. Very easy installation (Windows 7), basically installation of USB-serial port drivers 

Cons:
  1. Mounting options are weird. There are two M3 tapped holes on each side, 20 mm apart. Does not fit any Thorlabs mount I know - they normally use M4 screws and 25-mm space between. No adapter included :(
  2. Where are LabView drivers which are industry standard for many years? Only a dll file and single Visual C/C++ library. They gotta be kidding me, such bare-bone API for a 20+K research apparatus. A full-scale API collection WaveKit in LabView/Matlab/C++ is offered for extra cost. Not cool.
  3. The cable attached to the mirror is humongous! It is 10 mm thick and stiff as a horsewhip. This is bad, because DM will be installed on a Thorlabs kinematic mount, which is a delicate mechanical piece, and it will likely drift because of residual stiffness of this huge cable. Should I call Imagine Optics engineers and break out in tears?
Update: I did some homework and wrapped the driver file mirao52e.dll in LabView code, so it can (and should!) be used in LabView: https://github.com/nvladimus/mirao-LV-driver
Will I get a paycheck from @ImagineOptic? :-)

Update 21.10.2017. Open and closed-loop control code for this mirror in Python here.

Comments

Popular posts from this blog

3D modeling in a lab

About once a week I am asked by my colleagues which 3D modeling software I am using - usually when I am staring at the new part being 3D printed. I am using  Autodesk Inventor for a few reasons: it is a professional software for engineers and has huge community around it it provides free academic license there are thousands of youtube videos with detailed tutorials by enthusiasts easy to learn at a basic level, but there is always a lot of room for growth In a lab, there are two main workflows where Inventor is necessary: 3D modeling of complex assemblies (like custom-built microscope) and 3D printing. There are many youtube tutorials for beginners , so I here only review some things that Inventor can do, without any specific instructions.  3D modeling of parts and assemblies Before building a new microscope, you can create its virtual model and check dimensions, required adapters, and whether things will fit together. Luckily, Thorlabs has 3D model of nearly all it

How to connect a rotary encoder to Arduino and make your first PCB board

After I discovered the OpenStage project for cheap DIY microscopy stage automation, I decided to add a twist to it - control the stage positions manually with a rotary encoder, in addition to already-implemented serial port (USB). I found a nice RGB illuminated rotary encoder from Sparkfun  - it's shaft works as a button, and it is internally illuminated by built-in 3-color LEDs - a perfect device to switch speeds and manually control the stages. Hooking it up to Arduino seemed easy, and there is a very nice Encoder library to do just that. But when I started to test it, I fell into a deep rabbit hole called 'debouncing'. In short, real-world switches are never perfect and the 'moment' of switching has many messy things happening between the two leads, creating noise in the logic of reading device (Arduino). So, the voltage readout from a real rotary encoder looks like this: Note the high-frequency chirp in yellow line when it falls from high to low. T

Programming NI DAQmx board in Python: easier than you think!

For my DIY microscope I had a task - generate a train of digital pulses which simulate camera trigger, so that other devices (galvo and laser) are synched. I wanted to do it in Python , so that it seamlessly integrates in my data acquisition and analysis Jupyter notebook. After some quick search I found a PyDAQmx library which seemed mature and had good examples to begin with. Installation was smooth: download, unzip, open Anaconda prompt, python setup.py install After only 30 min fiddling, I was able to solve my problem in just a few lines of code: Holy crap, it just works, out of the box. Oscilloscope shows nice digital pulses every 100 ms, each 1 ms long. The code is much shorter and cleaner than would be in C, C#, or LabView. PyDAQmx appears to be a full-power wrapper around native NI DAQmx drivers (yes, they need to be installed), so presumably it can do all that can be done in C or even LabView (this statement needs to be tested). One can use PyDAQmx to control ga