Clock projected onto the wall with cheap laser galvos
The purpose of the Frame Driver is to receive a "frame" of data from the Raspberry Pi and then output it until it receives a new frame. The Frame Driver will guide the laser beam around a path over the course of 1/30th or 1/50th of a second, turning the beam on and off as appropriate, and then do it, over and over again.
There are several steps between receiving a frame from the Pi, and outputting voltages to the Laser Galvos.
I've decided to use a PIC32MX170F256B-50 microcontroller. There were several reasons:
I chose MCP4822 dual 12-bit DAC. It has an internal 2.048 voltage reference and has an SPI interface.
In this post on laserpointerforums.com, the consensus seems to be that an 8-bit DAC is not sufficient, but that a 12-bit DAC is plenty. 12 bits gives 4096 steps, which would be somewhere between 0.2 and 0.4mm per step on my kitchen wall, which seems sufficient, especially given that the laser beam is 1-2mm mm wide. Beyond 12 bits, things start to get quite pricey, and there's little additional advantage in having 0.05mm precision over 0.2mm precision at normal view distances.
For the cheaper DACs, there are two common standards for loading data: I²C and SPI. Generally, SPI is a faster protocol, both in terms of physical link speed and in having a lower protocol overhead. The MCP4822 can transfer data with a 20MHz clock and I am expecting to be able to use at least 5MHz.
Outputting two values from the MCP4822 DAC requires two 16 bit SPI transfers and then setting the LDAC pin low. At 5MHz, this will take (16 * 0.2 * 2 + a bit)μs ~= 8μs, which is fast enough. The DAC requires a "typical" 4.5μs to change its output signal from one level to another, anyway.
To ensure that the internal voltage reference is stable, a very stable power supply is required.
The final component in the Frame Driver is the voltage shifter which takes two single-ended 0-2.048V signals and amplifies them to the +/-10V differential signals (maximum magnitude of any given line is +/- 5V) expected by the Galvo controller boards. It will be composed of 4 op amps, in a single package. I chose the TL084, because cfavreau used it successfully in his Open Laser Show DAC. It's also the same part used on the Galvo driver boards.
Finally here is how I plan to power each of the components:
|Component||What it Needs||How it Will Get it|
|PIC32||3.3V, < 100mA.||Pull from RPi 3.3V pins|
|MPC4822||3.3V, a few mA, low ripple||Dedicated 3.3V regulator running from from RPi 5V pins|
|TL084||+ and - 8V supplies, <20mA||Dedicated regulators running from Galvo +/-15V supply lines.|
In which I wire up the laser galvos in minimal way, validate some concepts and learn some new things.
Here's what I did. At each step I was careful to test to make sure that no smoke came out and that everything behaved as expected.
At that last step, the galvos moved! I had not been expecting them to move, but it seems that their off position is at one end of their range.
At this point, I used Blu-Tack to hold everything down, just to make sure nothing got lost in the tangle of wires. These are the grey blobs you can see in the photos above.
I then stole the cat's spare laser pointer, Blu-Tacked it in place and lo! there was a dot.
I have a dual-channel signal generator. Using a Blue Board #01 I soldered up a couple of connections. Each driver board is fed by three wires: ground, V+ and V-, with V+ and V- carrying a differential signal of up to 10V. I tied each driver board's V- signal to ground, then piped in the signal to V+.
The resulting patterns look different on camera than they do in real life, but are interesting nonetheless. The shapes are correct even if the colors are not.
Here are some things I learned:
I think this is going to work!
I bought the cheapest laser galvo mirror set that I could buy, that also had reasonable shipping. I ended up with this one.
The set comes with the twin galvanometers, mounted on a metal block, two driver boards and a power supply. It cost about 100AUD on eBay (listing). Several of the sets on sale also offer a "show card", which will run laser displays from an SD Card. I wanted to build the display logic myself, so I didn't buy a show card.
The specs from the listing are:
-Input voltage：15V -Peak current: 1A -Rated current：0.5A -Operating temperature：0~50℃ -Rated scanning angle：± 20 ° -Maximum scanning angle: ± 30 ° -Drive plate size:76mm × 48mm × 26mm -Wavelength:380nm-700nm -Analog signal input impedance: 200K ± 1% Ω (differential input) -Analog position input range: ± 5 V. -Scanning speed:20Kpps -Lens reflectivity:> 98% @ 45 ° incidence (coverage wavelength: 380nm-700nm）
Important to note here:
Given the amount of power consumed, I think it's probably a good idea to aim for smaller angles of defletion and slower scan rates.
The supply came with two 3 pin connectors pre-attached to the output screw terminals. I confirmed with the multimeter that FG is connected to the chassis, while N & L are not. The G terminal is not connected to FG or to N (or L!).
Label on the power supply says it supplies 1A at 15V, which nicely matches the peak current draw spec.
There's quite a difference between input power rating (0.5A@100V = 50W) and output rating(1.0A@15V + 0.5A @ 15V = 22.5W). I suppose this means that the supply gets hot.
This is all about what I expected.
As noted above, the galvanometers are firmly aligned in a metal block. Under the block are screw holes which are obviously useful for securing the block.
Hmm... looking at the photo, that mirror seems a little dusty. I'll need to clean them. The galvanometer PCBs each have the galvanometer, the connector, and nothing else:
I'm not entirely sure why the connectors have 6 terminals each, but based on the cables, I'm guessing the galvos give some kind of feedback to the driver board.
These boards are responsible for amplifying a high impedance, 10V differential signal into a low impedance 15V signal.
I've marked the connectors with their apparent function. There's signal input, two power connectors and an 8 pin output connector. The picture at the top of the page shows the cables that run between the 8 pin output connector on the driver board and the 6 pin connector on the galvo. The conductors run in two bundles.
The trimpots along the bottom each have two-letter markings on the underside of the board. I've put these markings in the picture. Based on this Aliexpress listing for a similar product, I'm guessing the meanings are:
All of them appear to be locked with a small amount of glue, except Input Scale. I won't touch any of them.
There is a 2x3 header area with two jumpers on it, next to the input. No idea what that is for.
Similarly, there's a 2 pin connector in between the trim pots that I have no idea about.
I want to replace our kitchen clock with one that glows in the dark. I was inspired by this instructable from DeltaFlo and encouraged by further write ups such as this one from Barton Dring and this one from Vulcaman.
I will begin by addressing uncertainties: