Phone: 214-493-5351
Email: cameronjblocker@gmail.com
Education: BS Electrical Engineering, BYU, August 2015
Forwarding Address:
1823 Pointe Crossing St, #301
Ann Arbor, MI, 48105
Research Assistant, ElectroHolography Group
Monitor Engineer
Independent Monitor Enthusiast
Today I tried to two different ESC (electronic speed controller) motor drivers to control the speed of the polygon directly – bypassing the onboard driver. These motor drivers are meant for hobby airplane applications. The first one which had a two amp max was able to spin the polygon mirror. It required a push to get the motor going, but then the driver could take over. I controlled the hobby drivers with a PWM output of an Arduino. The Arduino is able to put a PWM output between 0-255 but the motor wouldn't start spinning till a value of 136, at which TP_photo was only outputting at 160Hz. 396Hz@152, 415Hz@153, 432Hz@154, 449Hz@155. At a value of 176, it would sometimes randomly stop working, while only going at 670Hz. If the speed was advanced slowly enough, a peak speed of 1.1kHz would be achieved at a value 215. Needless to say, this driver is not fast enough for our application.
I tried to use the bigger hobby driver next, which had a max output of 30A, but it wouldn't run the motor for more than a few seconds before turning itself off.
Also started the new firmware for the new scanner shield. See this commit on Github
Back from my Study abroad in Europe. I'm continuing my work with the sync board. We are hoping to maybe combine the Arduino galvo shield and the sync board together and as part of that, I was looking into if the Arduino could perform the frequency dividing function. After programming an Arduino, I probed the results and compared them to the TTL counter chips we currently use on the sync board.
The two perform very similarly when looking at the output frequency, but when we zoom in to look at the latency between the rise of the h-sync pulse and the rise of the divided output, we see that the TTL logic only has about a 22ns delay while the software has a 750ns delay. Since the Arduino is running at 16MHz, one instruction takes 62.5ns and the delay, therefore, corresponds to a delay of 12 instructions. In reality, it bounces around between 10-14 instructions ranging from ~600ns delay to ~900ns delay.The Arduino can process about 160 instructions between each h-sync rise, which means this added counting duty adds 7.5% utilization to the load on the Arduino. This delay corresponds to an approximate shift in pixels by .3% of a hololine, as opposed to a .0088% shift due to the TTL's delay. This comes from the fact that the GPU pushes out new pixel values at 400MHz equating to 2.5ns per pixel value. To help put this into perspective, a h-sync pulse experiences a delay of about 5ns/meter of coaxial cable. It's hard for me to say whether the software delay is significant. there is about 300 pixels worth of data coming in during that time, but are the pixels themselves delayed significantly by the filters, mixers and amps they must go through? And in the past, this delay would still have existed between the divided h-sync and the rise of the galvo controller output, so by bringing the division into software we've brought the polygon mirror and galvo control signals into closer alignment. The phase delay could possibly be further compensated in a future PLL design.
Software control also gives arbitrary control of duty cycle. Above is 25% duty cycle, compared to 50% in previous picture.
I got the polygon mirror to spin with its speed controlled digitally instead of just starving its VCC line, which we have traditionally done with a power transistor. What I've got working isn't as elegant as I would like it to be either; I just drive the enable pin with a PWM signal. This is convenient because the enable signal is already broken out to the white wire. I didn't have the photodetector housing on me when I ran this test, so I can't say for sure that the speed increases linearly with PWM drive, but the intensity of the sound of the whooshing mirror seemed to grow logarithmically which would seem to imply a linear growth in speed. I'll collect actual data soon. This was my setup, I use a transistor to switch the 5V PWM signal to a 24V PWM signal for the polygon mirror.
The chip in the above picture is not in use, it was from a different attempt I had to control the polygon mirror. The polygon is a standard three-phase brushless motor. It doesn't need 24V to run, it's just the chip on the board that needs that because it was made to be used in laser scanners where 24V is common. The board above is a three half-h bridge motor driver that I tried to previously control with an Arduino. It worked somewhat, but the chip doesn't have an individual high impedance state for each drive signal making it hard to do brushless motor control. The required connections are also a little more involved then the solution above as you would need to solder wires to the three phases of the motor as I did below. Ideally, you'd want wires from the six hall effect sensors as well.
So I thought it would be interesting to compare and contrast the performance of our $20 DAC with a cheap hand built RDAC. It was more for fun then thinking it would be practical but I was surprised by how well the RDAC performed. I made a little RDAC board that fit into the socket of the more expensive DAC on the Arduino shield. My RDAC is only 6 bits long instead of 8 like the more expensive DAC because we are only currently counting up to 52 (< 2^6 = 64). Another nice thing is that the RDAC does not require the 12V power supply. With a 6bit DAC we actually get about twice as much swing on a 5V rail then we do with an 8bit DAC on a 12V rail when they are both counting to 52. Here is a picture of how the two compare at 33Hz (slightly faster than what the monitor framerate runs at).
The yellow is the $20 8bit AD558 DAC, the blue is my homemade 6bit RDAC. The yellow has been enlarged 2x relative to the blue so that they are of comparable size. Surprisingly the RDAC performs just as well if not better then the AD558 which seems to have some spurious spikes half way and at its peaks. At higher frequencies, like 1khz, these spurious spikes get worse, but the RDAC starts rounding it sharp corners due to its limited frequency response. These frequencies are, of course, much faster than we would ever need our framerate to run at anyways.

IT LIVES! It has come back from the dead! I have successfully installed a new chip onto one of the polygon mirror PCBs and it works. I'd installed it a couple of days ago but it wasn't working at first until I noticed one of the resistors had been knocked off in the soldering process. One I transplanted one of those resistors from another board on, it turned on and spun like a regular polygon mirror. Earlier this week (Tuesday) I also got the 15V galvo setup working and we were able to test the new super thin galvo mirror. See Drew's page for more information.
I've been working more with the polygon mirror's native PCB and found some other interesting points. One is that pin 2 (labeled ZEROX in the datasheet) is actually the output of the hall effect detector that provides feedback from the motor to the brushless motor driver so it can now how fast it's going. So using this pin (broken out to a test point on the board, but otherwise unused) we can provide feedback to our PLL without having to use the photodiode. Scanners probably don't use this pin to do that cause they need the laser for scanning anyway and the photodiode provides accurate end of line phase information that we don't necessarily care about (though a good phase calibration could help the image always appear in the same spot when we turn on the monitor). I compared the photodiode output to the driving wave (which is in phase with the ZEROX output) of the brushless motor to see how the frequencies compared:
It seems that the frequency of the hall effect sensor output would be 2/3 that of the photodiode. We could get the PLL to lock on frequency then if we added an additional divide by 3 on the Hsync line and an additional divide by 2 on the motor feedback line (or of course, by using a single frac-N divider).
I also attempted to control the speed of the polygon mirror by applying a control voltage to a pin. The pin I targeted was the charge pump filter (which looks a lot like a PLL loop filter and makes me wonder if we could hook our PFD right up to it to make our “system PLL”). It sat pretty constantly at 13.4ish volts. If I applied less than 13 on this pin the whole system would go down, but if I brought it down to say 13.1 volts, it only decreased the speed (while drawing no effective current from my drive signal). I'd like to try hooking up a PFD/PLL to this pin as it would be better at making subtle changes in voltage than my adjustable power supply with limited resolution.
Full speed (24V Vcc) polygon mirror's motor driving signal (upper) and ZEROX output (lower)
Polygon mirror running at a lower speed while still connected to 24V by driving the charge pump pin
In my efforts to map the pins of the IC to test points in the circuit, I have basically reverse-engineered this basic circuit board. It's only a single sided board with a little over a dozen components. It is a brushless motor driver circuit with some capacitors and resistors to set up its configuration mode. What was more surprising was how we are driving it.The red and pink wires that we modulate through the power transistor are the Vcc pin of the chip and a READY output signal through a resistor respectively. The black wire is ground and the white wire is an active low chip enable. So here we have a “digitally controllable” brushless motor driver that we are controlling by starving it of power to slow it down. I think there is very likely a more elegant solution that wouldn't require the sync board to have a big power transistor.
I have been working on fixing some of the broken polygon mirrors. The one IC on the board (The HC13535, whose datasheet can be found here. Is the likely candidate for what's broken as all of the input signals effectively go straight to it and we broke it when we plugged the polygon mirrors in through a row reversing power cable that likely would have put GND at Vcc and Vcc at GND. I tested the broken mirrors to make sure they were broken before I proceeded to desolder them. One of the chips smoked during testing and with a loud crack shot a piece of the packaging at me. Another one of the chips would sometimes work so I set it aside for further testing. I used a copper desoldering braid to remove the chip on one, but alas, some of the pads seem to have been damaged in the desoldering process. I think I will map out which test points connect to which pins so if some of the pins don't connect properly in to the net during resoldering I will be able to figure it out and correct it.
Today I cut up the mirror into three pieces. I used my Dremel and went through a total of about 25 cutting discs in about an hour of cutting the mirror. Scott and I covered the mirror in Elmer's glue yesterday to prep the surface and protect it from getting damaged. I also calculated from my measurements the equation for the parabola.
y=.0424x^2 - 0.8586 cm
Which puts its focus at about 5cm from the lower lip.
Today I was able to test my Arduino interrupt code on the monitor. It was still missing some v-syncs, so I altered it to realize if it missed a v-sync and reset itself.
I am putting together the electronics for Scott and the new monitor based on the new architecture. I have tested the Arduino Sheild and assembled all of the boards. I glued a mirror onto the galvo. I still need to get a transistor to connect into the sync board before I can test it.
The new monitor is back from anodizing. It's a C3PO gold/brass. We're starting to populate it. Still waiting for the 18 channel devices from Dr. Smalley. Still working on the optics set up for GHz display.
Well, I haven't written in my log for a while now. The monitor is underway. We got the aluminum chassis cut and we folded it up and drilled the holes we needed and now it's off at Industrial Plating get anodized. I've made a bunch of custom parts on my 3d printer to hold the mirrors, AOM, laser, and galvo. Oh and we're getting it anodized blue, so hopefully that looks good. I got my Arduino shield made several months ago and it looks great. It seems to be working correctly though it has not been used in an actual simulation yet. Drew redid the DVI card again to reduce cross talk, it looks great. Today I started soldering the components onto that board, so maybe next week we'll be able to tell if its working and actually reducing cross talk. My monitor won't need it, though. it has a special set up to run the high bandwidth 1GHz AOM. Dr. Smalley also mentioned to me that I could start learning CUDA if I was interested. Its a programming language for running parallel process on a Nvidia GPU. Our current set up doesn't use it because its old but the guys at MIT are starting to use it on the newer stuff. I probably won't have time this semester to learn another language, since I'm taking 21 credit hours and all and already learning two new programming languages in my classes, but I might try over the summer when I'm on my internship with Intel (and Nvidia is close by). Other news, Dr. Smalley is part of Immerse now so there will be some new undergrads starting over the summer. Unfortunately not many people are staying around to train them. A new guy named Zach has been coming 2 to 3 times a week to shadow me. He hasn't taken any engineering classes yet but he excited about the research and it looks like he'll be hired on as part of immerse.
No meeting today, Drew showed me how to write the EDID data onto the EEPROM on the DVI cards using the I2C lines from an Arduino. He also reviewed my latest revision of the Arduino Mega Sheild. I'm making a few improvements then it will be done. He wants me to make a copy at the shop before I send it off to be made.
Today I worked on the Arduino Mega Sheild. A week ago we decided during our meeting that we'd like to revise the circuit to have independent control of gain and biasing, and to add over voltage protection fo r the galvo. So for the past week, I worked out a good design and remade the Eagle files for it. Its done now and just needs to be reviewed and sent off. Drew has also been showing me recently how to test the DVI boards with the spectrum analyzer.
Revised the Arduino Shield to include and inverting output as well. Had the monitor meeting.
today I made some changes to the Arduino DAC Sheild in EAGLE per Drew's request. We got the cut chassis from the water jet cutter yesterday and Ben is upset about the tolerances and the fact that they neglected to put in the fold lines we requested. He wrote them an email informing them of this displeasure.
Today I worked on making some parts in eagle to clean up the Arduino DAC Shield I made. I also made the butterfly logo into a part in eagle so it can be easily copied. My laptop was running low on batteries so I finished up today by soldering the SMD components on the red and blue lines of the DVI card.
Today I went to the PML and ordered the aluminum we'd need for the monitor chassis. Once there done cutting it to the size we need next week, we'll take it to the water jet cutter to be cut. I designed a potentiometer foot print on eagle as well.
Went in today and soldered the SMD components on the green line of the DVI card
Today I worked on making footprints in eagle so I can start on redesigning the carrier board for the monitor. Drew talked to me about what he had in mind for the design and some of the parts he wanted to use. We had our monitor meeting and afterward Drew showed me how to solder the parts for the DVI card so I can start to populate some of those. Soldered on the Hela10 with the solder gun. I'll have to do the rest later.
Looked at a lot of files in the Google drive and downloaded some eagle libraries and designs. Looked at some Dr. Smalley's publications. Went and saw the E-beam in the McDonald building with Steven.
Listened in on the modulator meeting with Dr. Shultz. Went into the clean room with Steven and he showed me some stuff we do in there.
Finished up the PCB for the Arduino Mega Shield and had the monitor meeting. Dr. Smalley had me buy a power splitter and two amplifiers with high-frequency bandwidth. We discussed how we could use this larger bandwidth to improve the resolution of the screen in different ways and we talked about using a multiplexing color laser.
Today I did the online training for the clean room that I was supposed to do before but forgot. Now I'm all clean room certified.
Today I was trained in the clean room from 1-4. Learned safety procedure for use of the clean room and how to use photolithography equipment.