I'm aligning the AOM and maximizing the diffracted beam's power by positioning the AOM and adjusting the beam size by moving the lens.
For single pass, the maximum efficiency I could get is only ~60%, so for double pass, the power will be down to 36%, but for now I'll settle with this number.
I could not find the manual for Crystal technology AOM 3080-194. The closest one is model 3080-197 which is attached below.
I'm not sure what is the difference between the two model, but 3080-197 has 70% diffraction efficiency.
Because of adjusting the lens, the RefCav's beam path also changes, now I have to realign RefCav again.
Another step for AOM alignment is adjusting the mirror that reflects the transmitted beam back to the AOM again.
The distance between the mirror and the center of the AOM should be the same as ROC of the mirror.
After this I should be able to start locking ACav.
I'm aligning double pass AOM. After maximizing the power of the 1st order of the transmitted beam, I place the R=0.3m mirror to reflect the beam back to the AOM.
The mirror is mounted on a translational stage for a fine adjustment.
At the right distance L away from the AOM(L = ROC), the size of the reflected beam at the AOM should be the same as the incoming beam.
Thus, there are 3 things to adjust.
First is the angle of the quarter wave plate that rotates the polarization of the beam after 2 passes by 90 degrees.
Second, the angle of the mirror, and
third, the distance of the mirror. At right position the power of the 1st order beam should be maximized.
I might have to change the position of the PBS that reflected the AOM double passed beam. Currently, the PBS is placed before 2 mirrors that move the
beam to the side of the table to avoid the insulation box. The problem is the double passed beam might clip on the mirror. So now I put the PBS after the steering mirrors, just in front of the AOM, but this limits the space for mode matching. I'll have to check which one will be better. From the attached picture, two PBS's are placed on two possible locations. On the bottom right the, and down at the middle next to the AOM.
The maximum power after AOM double pass is 37%, worse than the expected 50% efficiency, but it should be enough.
The good news is, a new mode matching (RefCav and ACav) is calculated, and all positions for the lenses are clear.
I got all the lenses, and borrow one plcx-24.5-51.5-c-1064 from 58C
The problem about the position of the PBS is solved. It will be at the original place, since the clipped beam is the 0th order of the reflected beam which we do not use.
I'll put the lenses in their places and try to lock RefCav again.
When I try to lock the cavity, it's not very stable yet. The transmitted power fluctuates alot.
I try changing the gains, but still could not stabilize the lock . The transmitted beam power is about 60% during the stable lock (I got it nicely locked for 5- 10 mins.)
After RefCav is locked, I'll try to optimize the transmitted power, by adjusting the lenses' positions before moving on to work on ACav
RefCav is locked , the beam is more stable than yesterday setup. I'll write down the values of the setting for a quick reference.
I'm not sure what universal names for all these channels are. I just explain them in more details for my future reference and next generation archeologists.
Common Gain( for both fast and PC paths): 23.6 dB (fast path controls the PZT which changes the length of the NPRO, PC path controls the phase
shift of the beam)
Fast Gain ( for PC path only): 12.5 dB
Phase shift: 0 + 180 degree. ("+180 degree" means phase flip)
RF Amplifier Adj (power for 35.5 MHz sidebands): 6.28 V.
Thermal control ADj (a voltage calibrator connected to slow channel of the laser controller): -0.010V
Servo gain Adj (over all gain of the demodulated signal): 27.75 dB
Output DC offset (offset voltage that governs the length of the PMC): -3.12 V
Phase shift: 2.87 V + 180 degree
RF Amp Adj (power for 21.5 MHz sidebands): 5.36V.
Now I'm working on ACav path. I made a cable for a photo diode.
I'm not sure if the last PD is a working 35.5 MHz PD, I'll see if it works or not.
Now I'm using two 2-channel monitors to simultaneously see the beams after PMC and RefCav. It will be more convenient if I use a 4 channel monitor, I'll clear some space for it.
Now I'm working on aligning the beam into ACav. I got the reflected light on the PD, and I'll scan the cavity soon.
My plan on connecting the servo:
I'll use a power splitter to split 35.5 MHz signal from "LO to SERVO" channel on the crystal frequency reference card, which is driving the 35.5 MHz EOM, to beat with the PD's signal.
If the power is too low, I might use a Marconi to beat the signal for ACav, with appropriate power level.
I also need to check which power splitters and mixers are suitable for our power output.
The demodulated signal will be filtered by a 50 Ohms low pass filter before sent to "Servo Input" channel of the Universal PDH Servo box (D0901351.)
The box has two knobs that allow us to change gain and LO phase manually.
From the PDH box, the "Piezo Drive Out" will be connected to the VCO's External Modulator channel.
I try to adjust the voltage of the VCO that maximize the 1st order beam from AOM. I use 5 V which is maximum on the medm control screen, but I'm not sure if it's the best or not because,
the power in the 1st order still goes up even though I reach 5V (see the attached plot.) There is an attenuator on the AOM which Frank left for me. I'll check the power that goes into the AOM and check the manual again how much power it can take. If it can take more power, I'll remove the attenuator and see if I can get more efficiency. But I'll do that after aligning ACav.
I'm scanning the laser to align ACav. It's a long day of adjusting 4 knobs and 1 lens (and one periscope for a while.)
I see higher order TEM modes at the back of the cavity, but still cannot see TEM 00 yet.
Thu Jun 10 00:20:39 2010
I saw TEM 00 and trying to minimize the reflected power on the PD.
I just realize that the beam path is very close to the edge of the hole (see attached.) Part of the beam might be clipped.
I'll check that with IR viewer tomorrow.
The value for Voltage Calibrator is 6.17 V.
Thu Jun 10 00:58:56 2010
From yesterday, after getting TEM 00 out of the cavity, I checked the beam if it's clipped on the edge of the hole or not. There is small light on as seen by an IR viewer. Since it seems to be very small, I'll leave it as it is for now.
There was one problem. The beam was almost on the edge of the periscope's top mirror, I decided to change the height and move the periscope , and other optics in the row, side way, since the beam was really close to the edge of the opening ( I set the beam path to the center of the hole before, so it's bit off ( 5mm, 0.2") from the cavity's natural axis), and made sure that the beam is on the center of every mirror. Then, it's 4 knob adjustment which takes me a whole day again .
As of now, I got TEM00, out of the cavity. I still have to adjust the lens' position to minimize the reflected beam. Before doing so, I'll prepare a mixer, a power splitter for locking the cavity.
One thing about the AOM, the beam after double pass is quite elliptic. I'm not sure how to correct it, and whether it's going to be a problem or not. I'll find something to read about this.
Fri Jun 11 01:00:17 2010
Since the VCO has been borrowed, I decide to work on RefCav path again. To optimize the RefCav alignment, PMC will be locked to the laser while the laser frequency is modulated by a function generator. This is where a problem comes in. The PMC servo cannot catch up with the laser. Even though I lower the modulating frequency and amplitude to 4 Hz, 1 Vpp ,which roughly corresponds to ~1MHz shift in laser frequency, the PMC servo cannot stay stable for longer than a minute. so I measure the transfer function of the PMC servo, and it does not look right, see figure1. The real magnitude which goes to the PZT has higher value, since the signal comes out of the out mon channel passes through a voltage divider.
I also measured TFs of FSS servo, both Fast and PC paths look ok. I measure TF by using swept sine measurement , the source is split by a T connector, one goes to chA of SRS785, another one goes to TF1 test (where demodulated signal goes.) The output is taken from out mon (for PMC servo), fast mon (for FSS' fast path), PC mon (for FSS's PC path), and connected to chB of SRS785.
I made sure that I switch to the right path in the medm control screen when I measure the TFs
The weird TF result from PMC seems to be the result of the insufficient voltage input. When I increased the swept sine voltage from 2mV to 500 mV, the result of the TF becomes as expected. See fig 1.
Before the signal is fed back to PMC, there is a PMC notch box. It is a low pass filter. It's TF looks fine (fig.2.)
However, when the TF of the servo and the notch is measured together, they look shaky.
I just read Frank's comment. I'll check the schematic of the PMC servo again.
From the bode plot, something is not quite right. I'll debug the PMC servo. My plan is
1) Measure the TF from FP1 test to FP4 (output mon), change gain setting and see if the TF change as expected.
*note the real TF is 20log (Vpzt/ Vin) but Vpzt ~ 50 Vmon. Vmon is connected to Vpzt with divider circuit. To get the real TF, 20log(Vpzt/Vin), the magnitude from out TF between FP1 and out mon will be added by 20log50 = 34 dB.
2) Compare it with the calculated TF from PMC schematic
We try optimizing the PMC transmission in P wave. The maximum we can get for now is ~82%.
The 21.5 EOM is prealigned. We will do fine adjustment again when insulating cables are made.
EOM alignment means to align the polarization of the beam to match the applied electric field in the EOM. This will minimize the amplitude modulating effect.
There are 3 degrees of freedom, 2 for EOM positions, another one is the polarization of the beam.
The 35.5 EOM is also pre aligned, the signal is very small, probably because of its broadband type. I use 4395A spectrum analyzer to see the peak at 35.5 MHz, but it's really hard to tell if I minimize it or not.
I see the thermal effect on EOM crystal clearly when I adjust the EOM. After I minimize the Amplitude Modulation (AM) and left the EOM for awhile, the misalignment gradually increase.
Frank suggests that the calibration of the error signal should be done, so that we can approximate how well the temperature must be controlled to reach our noise budget. I'll think about that measurement.
As I finished my elog, the peak at 35.5 just went up. Case in point.
All SMA cables for locking RefCav are made and wired up in their places.
We decide to turn the power up to 50mW before it enters PMC. With ~80% efficiency, we get 40 mW out.
I adjusted RF power and phase shift for PMC and saved it in the init file so that next time we reboot the crate, the values will be set.
Next: I'll lock the RefCav and optimize the alignment.
I adjust the mode matching lenses and align the beam so that the transmitted power is ~97% of the input power. Actually I scan the beam and look at the reflected power. The reflected beam has power ~3%. The knobs on one of the periscope mirror acting weird. There's still thread (~ 4 or 5 turns, I guess) left but it seems to be very sensitive to my hand pressure when I rotate the knob, making fine adjustment rather hard .
Phase shift is adjusted by looking at the error signal. The laser is scan while the error signal from the fss servo mixer out is monitored. Feedback signals from the servo to EOM and laser must be removed.
RF power for RefCav is tuned. I assume that all sidebands' power will be reflected, and only power in the carrier will be transmitted, and to maximize the error signal's slope, we need Pcarrier/ Psideband ~ 2 [Black] .
So I measure the power of the incoming beam and adjust the RF power so that the transmitted beam's power is 1/2 of the input power. Another 1/2 of the input power will be the power of 2 sidebands that reflect back.
I use a photo diode to see the transmitted power and adjust the gain. The goal is to maximize the gain and have a stable transmitted power. However, the power still oscillates even when I decrease the gain, more than that and it loses lock. So I can only minimum the osicllation (You can see the beam spot pulsating on the monitor.)
All values are saved in the "startup.cmd" file.
The new driver for AOM is working, the maximum power is ~1.3w. There's a switch for int/ext signal.
We use internal signal to drive the AOM for alignment purpose.
The mode matching for ACav is on hold. Because the1st order beam coming out of the AOM looks very elliptic.
I'm not sure if it's the result of the large beam size in the AOM or the alignment problem.
the beam might clip on the edge of AOM, the beamsize is quite large, the data sheet give 80% 1st order efficiency for 1100 um diameter spot [AOM] and I adjusted the beam size to maximize the power before. I'll try decrease the beam size and see if this reduce the elliptical shape of the beam. Once the beam size on the AOM is determined, the rest of the mode matching can be calculated.
This morning, the PMC couldn't be locked to the laser. The FSS servo was disabled during that time.
When the gain/ RF power were adjusted, PMC was locked to the laser, but the coupling efficiency dropped from 80% to 40%.
I try adjusting the mirror, but it's not the alignment problem because I couldn't increase the efficiency.
So after the noise budget party with Jan and Frank, I check if the EOM works looking at the error signal from mixer out. The laser frequency is scan at +/- 10V @ 100 Hz.
I'm not sure what is the corresponding freq span, but it must be less than 43 MHz(21.5 MHz x 2) because
three peaks of the signal could not be seen with +/- 10V span, so I use a voltage calibrator to slowly adjust the temperature and see the rest of the signals.
Nevertheless, the signals are there, so I try to lock the PMC again, and now the efficiency back to almost 80% again ( I have to re align again because of the earlier adjustment. The mixer out channel is monitored when I set the PMC gain to make sure there will be no oscillation.
I'm not sure what happen, loosen connectors, mode hopping in the laser, etc. I'll see if I can track this down , otherwise we could not have a stable locking system.
1) DC ext channel on PMC servo: 32.82 MHz/ V
2) Fast channel on the laser controller: 3.07 MHz/V ( Our Fn generator can provide +/- 20V -> 60 MHz span, this won't let us see all three peaks of the error signal from RefCav which has 35.5x2 = 71 MHz span)
3) Temperature actuator on the laser control: 220 MHz/V. (1FSR= 714 MHz, 2x cavity length = 0.42m)
This measurement is done by scanning the laser frequency (1 and 3)or cavity length (2) and see the error signal.
The two sidebands are 43 MHz apart , divided that by the corresponding Voltage difference of the sidebands to get the calibration. For Temperature actuator we see use the PMC's FSR instead of the sidebands for better accuracy.
We had a problem with power coupling efficiency to the PMC. Sometime it changes from 80% to 40% or less.
When the temperature of the NPRO is varied by a voltage calibrator @ slow actuator input of the laser controller,
at certain T(V), the coupling efficiency drops from 80% to 40% or less. This might be mode hopping. However, the transmitted beam power still oscillates ,
and one can see the beam spot pulsating on the screen. I thought it might be mode hopping too, but after changing T, the fluctuation of the power has not gone, there is some suppression though. So it might be the servo. I'll check the TF of the servo and compare it with the schematic, D980352-B-1.
I was going to check the TF on each stage of PMC's servo.
Unfortunately, I couldn't find the floppy disc drive, so I slide the sliders (gain, RF power) around. When I add more RF power (from 1V to 7V) to 21.5 MHz EOM, the oscilaltion subsides*.
(*5 mins later I came back to turn down the RF power to 1 V again, and the beam was perfectly locked for a few minutes before fluctuated again)
It's not a long term solution, but I note this for further debugging.
One thing about the gain, I see the TF of the whole PMC servo, when I increase the common gain from 0 to ~8 dB, the magnitude of the TF gets higher. If I increase more gain to ~ 10dB or something, the magnitude goes down . So there might be sth wrong about the opamp that controls the gain.
the reason why you had this flickering problem was that you had too much power on the RFPD in reflection of the PMC. You already saturated it.
I also reduced the RF power as the error signals were not signals anymore, just spikes.
my new settings are:
RF power : 3.0
Phase : 2.5
PMC Gain: 14dB
reduced laser power to 40mW. Transmitted power is 32mW .You have to exchange the output coupler mirror in front of the RFPD in order to increase the power. I think 32mW is enough, it's something like 13mW per cavity.
Ok, I'll find another output coupler mirror and replace the current one, and make sure that it will not saturate the RFPD.
summary of this entry
RefCav was not locked becase of the RFPD's input power. I haven't checked yet if it's the power supply or the cable. Now RefCav is locked.
I was trying to lock RefCav again, but it didn't work.
So, I checked the error signal from mixer out, saw nothing.
It turned out that RF out from the PD has low voltage output, ~10mV.
I unplugged the cable and switch to another PD's cable along with its power supply, the DC increased to ~300 mV, a good sign.
Still, no error signal from Mixer Out Channel, nothing at all.
The control loop is not closed. Now 35.5 MHz LO is connected to the EOM, and to the servo card, LO input channel. The RF signal goes to the PD input.
We should be able to see the error signal from this setup.
**********The loop in the medm screen must be enabled in order to see the error signal******.
EOM -----------------BS--------------------- [ RefCav ]
-------- X -------------
---> Error signal
I mix the signals from PD and LO by a Mixer [Minicurcuit ZFM 3 S+] and see something. It's a peak crossing zero at center instead of three peaks like the error signals.
So I'm not sure what I'm seeing, but it seems that Mixer Out channel from the spare FSS servo might not working. I switched back to the first card, and now I see the error signals.
I set the RF to 6.1 V which corresponds to 97 mV of the error signal's P-P height.
Phase adj: is 4.5122 V,
phase flip: 0
Gain: [not set yet]
All these values are saved in startup
To summary, RefCav was not locked becase of the power cable which I haven't checked yet if it's the power supply or the cable. Now it's locked.
I'll set the gain tomorrow and see where I can connect the slow actuator for the laser driver. Right now I can't find where the servo for slow actuator would be.
Before, when we tried to lock the cavity, it seemed that the gain was too high, and the power output
from RefCav(C3:PSL-FSS_RCTRANSPD) fluctuated when both PC and Fast feedback were connected, and the data was measured when only Fast feedback was on.
So I try to change RF power to reduce the modulation index (hence, the gain.)
The value before was 6.5V, This time I tried 5.5 and 5.8 V.
At each RF power setting, I lock the cavity with
1) Fast feedback alone, and
2) both Fast and PC feedback
and measure the transmitted beam's RIN. The gain for each setup was readjust (see the values for each setup below)
so that the transmitted beam power was most stable as seen on an oscilloscope, then the data was taken.
The results are plotted below. It turns out that
when the PC feedback is connect, RIN becomes noisier. I don't no where
it comes from. It might be that the setting still has too high gain, or RFAM from broadband EOM due to misalignment,
or broken opamp in FSS PC path.
I'm still not sure why there are jumps at 100 Hz and 1k Hz. The sr785 is set at 4 different spans
which are, 0-100Hz, 0-1kHz,0-10kHz, and 0- 100kHz. Each span contains 800 FFT lines. The auto range is on.
The setting are [this will be updated soon]
Fast feedback: on
PC feedback: off
3 RF 5.8
4 RF 5.8
I use COMSOL to simulate the temperature distribution inside the mirror.
The mirrors are separate into 3 regions for different meshing quality see attached figures.
This model assume 0.95 emissivity on the surface, and 310 K at the surface between the mirror and the spacer.
The temperature between 10 mW and 10mW + RIN*10mW is plotted and fitted with polynomial function of order 9.
*the unit of y axis on fig3 is Kelvin
The Temperature difference will be applied to the coating surface and calculated the upper limit for photo thermal noise.
The function is
T = p1*z.^9 + p2*z.^8 + p3*z.^7 + p4*z.^6 +
p5*z.^5 + p6*z.^4 + p7*z.^3 +
p8*z.^2 + p9*z + p10;
p1 = -5.335e-10 ; %(-5.806e-10, -4.864e-10)
p2 = 1.602e-08 ;% (1.474e-08, 1.731e-08)
p3 = -2.041e-07 ;% (-2.188e-07, -1.894e-07)
p4 = 1.438e-06 ;% (1.347e-06, 1.528e-06)
p5 = -6.144e-06 ;%(-6.47e-06, -5.818e-06)
p6 = 1.645e-05 ;%(1.576e-05, 1.715e-05)
p7 = -2.773e-05 ;%(-2.858e-05, -2.687e-05)
p8 = 2.912e-05 ;%(2.857e-05, 2.967e-05)
p9 = -1.893e-05 ;%(-1.908e-05, -1.877e-05)
p10 = 7.548e-06 ;% (7.534e-06, 7.562e-06)
The current 1064nm, 100 mW laser in our setup, NPRO lightwave 126 is broken. We are looking for a new one to replace it.
The laser stopped working when I tried to lock the cavity and saw that RCTRANSPD fluctuated a bit even after I adjust the gain setup.
So I turned the HEPA filter above the table off to see if the signal would be more stable, it was not. When I turned it back on
the laser was off. I don't think the laser and the HEPA filter are associated, but that's what happened.
The power output, as indicated on the laser driver is 8 mW. When I turned the laser off for 5 mins and turned it on.
The temperature of the crystal started from ~40 C and there was power out, then, in ~10 seconds, the temperature went up to 94 C, and the power dropped to 8 mW again.
The voltage supply for TEC went up to 4V which is the maximum V for cooling.
I switched to the 10W laser driver, the same symptom happened again, so the problem might be the head, not the driver.
Frank opened up the laser to find any burnt mark, but found nothing and put it back, and now the laser is working.
We don't know for sure yet, what's wrong with the laser. But I'll use this opportunity to work on modification of PMC servo.
After troubleshooting some supply power problems (apparently the top and bottom half of the breadboard power strips aren't connected???), I took some measurements on the following circuit that Andrew suggested, which had the desired properties in simulation. However, AD743's were not really available, so I used LT1012's instead, but it shouldn't make a difference for these measurements.
The output of the AD620 stage (see elog 1749) was as expected (with a .5Vp, .1Hz input, a 5Vp output), and this was used as the input to the buffer circuit:
The output of the buffer circuit was just 0V, so I took some intermediate measurements. The following is at the positive input to the first amplifier (aka after the 100k resistor):
And at the output of the first stage (aka Vout_1st):
From a hand-calculation, the noninverting input should be about 0.85Vin at 0.1Hz, so there's definitely something wrong there.
I tried just connecting Vin straight to a voltage follower, and that actually pulled down Vin:
I'd expect the input resistance to the op amp to be almost infinite, but here it almost looks like it's loading down the input signal, except for the fact that the shape is weird (kind of like clipping).
So, I'm not really sure what's going on. I'll try digging through the datasheet, testing the circuit in isolation (drive it straight from the function generator), and running a simulation that includes the first half of the circuit to see if that provides any insight.
Edit: Fixed hand calculation (used f instead of w earlier), but the gist is the same.
So after testing out the LT1012 op amp in many simple configurations and not having any of them work (and the measurements were the same whether they were powered or not), I decided to dig around for another op amp chip, which did work, so I think all 4 of LT1012 chips that I got from the 40m stock are just faulty (not sure what that means for the rest of the chips there).
After swapping out chips, the circuit worked functionally. Just from playing around with the function generator and oscilloscope, it looks like the gain is 0.5 around 20Hz (should be dropping off faster), but I'll try to get an actual frequency response measurement next time.
Also, the legs on the capacitors are really short and I'm not sure they're all actually making contact, so I'll probably extend them with some wire to be sure, but that might also be part of it.
Here is the data that was taken last week on the driver circuit.
At first there was a LF356 chip instead of the AD743, and it gave the following response:
Which looked reasonable, but it made sense to take noise measurements using 2 AD743s so I swapped it out, but then the response was this:
For some reason, the cutoff frequency moved to close to 100Hz. The noise measurement was:
I also tried replacing the 10uF capacitors with 22uF capacitors to try to move the cutoff frequency back down, and got the following response:
So that worked, but then the noise measurement went up by a lot:
I'm not sure what the noise requirements are, but it looks like using 10uF caps gives a pretty high cutoff frequency, but using 22uF caps increases the noise.
I also put in the BUF634 chip but when I powered it, I smelled something burning, so I'm going to test out that chip in isolation before trying to integrate it with the rest of the circuit.
Edit (11/17/2016): Attached Matlab workspace with relevant data, plotting script, and Andrew's freqStich script (used to combine noise measurements).
%s2-3 old chip tf
%s12-s17 10uF noise
%s18-19 10uF tf
%s20-21 22uF tf
%s23-27 22uF noise
freq_array_1 = [s12_f s13_f s14_f s15_f s16_f s17_f];
data_array_1 = [s12_m s13_m s14_m s15_m s16_m s17_m];
%% This is a module for stiching spans of overlapping PSDs of different frequency bin size from SR785
% Assuming a logerithmic scale of frequency, it is desirable to
% stich the smaller frequecy ranges to the bottom of the larger ones
% wilst truncating out bins in the larger span.
%Feed in frequency matrix f(n,m) with correesponding floating point
% [freqStitch,dataStitch] = freqStitch(freqPoints,dataPoints)
The burning last time came from the load resistor, which wasn't rated for high power. I made a test load from resistive tape that Andrew found and a heatsink, and this worked with the BUF634 output. A picture:
The LP buffer filter is adding a DC offset of -0.5V. This happens in the first stage even if the two op amp chips are swapped, and it also happens when you just ground the input signal. This is what the output looks like:
Strangely, I know this wasn't happening the first time I built and tested the circuit using the 10uF capacitors (see elog 1768), and now it seems to be there no matter what capacitors I use.
I tried correcting for this offset in two ways.
1. First I tried to add an inverting input (from a voltage divider on the power rail) to cancel out the offset, adjusting the gain appropriately, but this added an insane amount of noise to the signal. I tried this on both the first and second stage.
2. I then tried the method outlined in the following document: http://www.ti.com/lit/an/sloa097/sloa097.pdf, but this made no difference at all.
I also realized that I had been using the wrong input resistors (1k instead of 100k) before, which is why the cutoff frequency was so high before. I put in the 100k resistors, and with the 10uF capacitors, it gives a response that kind of makes sense (cutoff around 4Hz), except the ridiculously low gain which may be due to the DC offset (which unfortunately persists).
I am thinking about other ways to cancel out the DC offset. I think adding a third stage would be even worse than attempt 1. It's possible to just correct for this offset in software (especially since this offset would probably be different amongst the different circuits), but I don't know if this would be good practice?
I finished up taking frequency response and noise data on the circuit on the breadboard, swapped out the AD743s with OP27s and took data on that as well. The data is included later with the data from the protoboard circuit for comparison.
I built the circuit on the protoboard, and it looks like this:
Here are the frequency response measurements. Andrew took the first one (in blue), and I think I'm somehow misconfiguring the spectrum analyzer, because I took the other two and it looks like I'm measuring the right thing based on the shape, but the magnitude is all shifted down by ~55dB. I know from using the oscilloscope/function generator (see below) that the gain of the circuit is about as expected (definitely not -35dBV). The red blip is from when I accidently pulled out the gain resistor on the AD620. The other thing to note is that there's a lump around 60Hz on the protoboard.
Output shown on oscilloscope with 0.1Vpp input:
I forgot to save the phase measurements of the breadboard circuits, so this is of the protoboard circuit, but they all pretty much looked like this:
Here are noise measurements comparing the breadboard circuit and protoboard circuit (and also the AD743 vs OP27 circuit when applicable). First, at the output of the AD620:
At the output of the LP filter stage (it looks like this stage on the protoboard has the largest increase in noise):
At the output of the buffer stage:
And here's looking at all three points on the protoboard circuit:
Circuit schematic for reference:
I guess if all seems okay, I will just move on the building 2 more channels.
Attached: Matlab workspace with all data, relevant scripts for plotting
So I had a look at your circuit to see what was going on. I found that there was a strange offset at the instrument op amp (AD620) stage AND on your two LP filter buffering op amps.
So with the AD620, it has a dedicated 'ref' pin (pin 5). This sets the offset of the op amps output and can be used to reference the amplified output to whatever voltage you like (to within the range of the voltage rails). When I looked it was connected to ground, so that seemed right. I moved the AD620 to the larger breadboard to make things easier (I moved whatever you had set up with the AD829 one row along, sorry if you needed that). Once moved it worked fine, when I terminated the input (or shorted + and - of the op amp) it gave zero offset voltage. I'm not sure what changed, but it could have been a loose connection somewhere. So that stage seems good now. If you want some offset adjustability, this is the place to add it.
The two AD743 buffers for the active LP filter where introducing an offset of their own. You had all the unused pins connected to ground. This seems sensible most of the time. However, the AD743s have two pins that are dedicated to null function. These are supposed to be tied to the negative rail by an adjustable voltage bridge. If you ground them, they might do strange things as they both have zero voltage instead of some difference between zero and the negative rail. For more info just search for null in the datasheet. I removed the links to ground and the offset went away. If you really want to fine tune the offset you can make a voltage divider there but a potentiometer is highly not recommended for this stuff, it will make noise and pain down the track and not be stable. I think leaving the pins 1 and 5 open should be fine.
I didn't look at the noise, but the transfer function loops fine to me. Its giving about the right corner frequency (0.15 Hz) the 1/f^2 slope and above 320 Hz the attenutation is -100 dB. Looks good. Maybe stick the buffer in there, take some more transfer functions and have a look at the noise, probing at each stage of the current driver circuit (i.e. after the AD620, after the LP filter and after the buffer) with the input shorted with 50Ω.
We need to make a decision in choosing a LP filter stage op amp that isn't the AD743. The frustration is that manufactures don't just quote a common set of frequencies or sets of parameters that you can plot with. Zach Korth has obsessed a lot on this subject and made a really interesting post on the subject in PSL:1752 (see lower half of post). If you read nothing else, this week, read that. Also here is an almost helpful parameter search: http://www.analog.com/en/parametricsearch/11089#/p5056=JFET . The best metric should be 0.1 to 1 Hz rms noise as that should be indicative of LF performance. However, as you see in Zach's post, the slope of the noise and corner frequency of roll up differs between types and designs of op amps. The opacity of specifications in these components is frustrating. It is almost as if they are obfuscating so they can sell less good components to people who don't know what they are doing.
The function that Zach mentions in PSL:1752 is somewhere on the 40m SVN. I think you'll find it if you poke around in SVN:/trunk/zach/tools/ .
The LP buffer filter is adding a DC offset of -0.5V. This happens in the first stage even if the two op amp chips are swapped, and it also happens when you just ground the input signal. This is what the output looks like:
Strangely, I know this wasn't happening the first time I built and tested the circuit using the 10uF capacitors (see elog 1768), and now it seems to be there no matter what capacitors I use.
%2 TF (AD743)
%3-8 noise after buffer (AD743)
%9-12 noise after LP stage (AD743)
%13-16 noise after AD620
%17 TF (OP27)
%18-21 noise after buffer (OP27)
%22-25 noise after LP stage (OP27)
%26 TF on protoboard
%28-31 noise on board after buffer
I finished soldering together the other two channels for temperature control. This is what the board looks like now:
I began troubleshooting the new channels. The second channel (top right) is tentatively working up until the buffer stage, but showed some strange behaviors. When it is working up to the buffer stage, adding the buffer stage drive the output of each stage (and all of the corresponding inputs) to about +12V. When the buffer stage is removed, everything remains at +12V, but this is sometimes fixable by toggling the power, and consistently fixable by just pulling out the OP27 chips and putting them back in. As far as I can tell, everything is powered correctly, and nothing is shorting or disconnected where it shouldn't be.
For the third channel (bottom right), only the AD620 stage is working. Adding the next stage causes both the outputs and the inputs to go to +12V as well. The connections here also seem correct as far as I can tell. I'm thinking it's possibly related to the problems in the 2nd channel, maybe there's some buildup of charge, or other hysteresis, somewhere, that is messing things up. The observed behavior of this third channel is consistent enough that it may just be a connection error somewhere. The inconsistent behavior of the second channel, though, suggests that it probably has to do with something transient.
Will continue troubleshooting when I get back.
Andrew switched out the bypass capacitors to ceramic ones over break. Now all of the channels are functional, so I guess that was the problem (I don't know what the physical problem would have been before, though).
Here are some measurements of the frequency response.
Here's the noise. I don't know why it has the "edges", I'm pretty sure I made the measurements the same way as I was doing before and used the same stiching script... I might repeat these measurements later, but it's at least an idea.
Channel 1 has much higher noise. Possibly because there are power lines that cross over the area, whereas for 2 and 3 the power lines are routed from the side? Could be another reason though...
Data and scripts attached.
%another plotting script
%sorry the numbering is all out of order
%1-2 mag and phase channel 2
%3 - phase channel 3
%4 - phase channel 1
%5 - mag channel 1
%6 - mag channel 3
%7-10 noise channel 3
%11-14 noise channel 2
%15-18 noise channel 1
We did some more hardware integration for the temperature control loop yesterday. We first added a new input channel and a new output channel in the “IOCTEST_BIO_generic.db” file to correspond with one temperature measurement and one control output. We hooked up the driver circuit and confirmed that we could control the output signal from the computer GUI. We also hooked up the RTD sensor and corresponding measurement circuit and confirmed that we could get measurements that made sense. Pictures of the hardware are shown below:
Driver circuit board:
Sensor and measurement circuit:
I then made a couple of software updates to accommodate temperature control:
1. I edited the following GUI to have to appropriate indicators and controls. I left out the control channels that do not have corresponding hardware channels yet to avoid possible confusion. All (? at least most) of the soft channels are mapped.
2. I made a copy of the “IOCTEST_BIO_generic.db” file, “IOCTEST_BIO_generic_20170109_edit.db” and added in all of the soft channels. I also renamed the hardware output channel to follow a more specific naming convention (HEATERN, and later HEATERS and HEATERV (if that’s okay), as opposed to just HEATER1, 2, 3). Once the channels are more finalized, they’ll be put into a separate post for reference.
I also routed the inputs and outputs of the driver circuit to the connectors on the front. A separate post will be made with the pin assignments for reference.
The pin assignments for the heater driver circuit board are as follows:
So the loop itself is functional now (in terms of all the hardware and software interfacing), but the metal block didn't actually heat up even at around the maximum voltage output. However, the output value of the PID loop changes as expected with the setpoint/error, as well as when I touched the temperature sensor to heat it by hand.
Here's a picture of the setup when testing the loop. We also tried it with a smaller (aluminum?) slab instead of the heatsink, but that also didn't heat up. It's pretty messy and very much a "before" making pretty packaging picture.
(Oh, also the measurement signal looks pretty noisy in this picture but it gets a lot better if you stick in one of the LP filter boxes)
So I'm not sure how much to chronicle software changes when they're works in progress, so I'll just list everything until someone tells me to shut up:
-Pulled out all temperature control related channels into a separate database file "TempCtrl.db"
-Modified the iocBoot file to include "TempCtrl.db"
-Made a configuration file "TempCtrlConfig.ini" in the scripts folder with parameters for the PID script
I started playing around with simulating an attempt to automate PID tuning using the Ziegler Nichols method (using this as a reference: https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method). I'm attaching the code I have been using.
The gist of what I'm trying to simulate:
-Increase Kp by some increment
-Get step response data from closed-loop system
-Fourier transform step response data to see if there are stable oscillations (currently done by comparing to some reference magnitude that I am guesstimating/trying to determine heuristically although once I do that, it might be able to be related to the Kp of the current iteration)
-If there are stable oscillations, log the oscillation period and then calculate PID values
There's an envelope around 0Hz because of the DC component, and I'm trying to figure out a way to remove it. What I've come up with so far is heuristically determining how wide it is and then just chopping that section off, but if the oscillation frequency is within that envelope (especially since temperature control is really low frequency) then that kind of ruins the whole point. Also I'm relying on heuristically determining a few things that would be specific to each loop, which I'm not super happy about, but even the more optimized (and complicated) approach to PID tuning I found relied on heuristically determining a few things about the system to set up the tuning algorithm. After Googling this for a while, I don't know if/don't think it's even feasible to totally get around tweaking heuristically determined parameters for tuning each system.
Anyway, I'm going to keep poking at this. If anyone sees this and has suggestions, that would be super appreciated.
Edit 2/5/2017: Whelp, realized I should probably be LombScargling? To be continued...
import numpy, time
from control.matlab import *
import matplotlib.pyplot as plt
num_steps = numpy.ceil(total_time/timestep)
timestamps = linspace(0,total_time,num=num_steps)
The temperature sensor reading is being railed to the negative power voltage whenever a new input command is entered:
The first ramp is at the output of the instrumentation amplifier AD620, the second ramp is at the output of the low-pass filter Andrew put in recently. Also, I looked at the signal going into the AD620 and it did not exhibit this drop, so the problem comes from the AD620 circuit. I tracked the current being drawn on the display of the power supply, and never saw it go above 250mA, but I'm thinking if it's a current problem (overdrawing), it could be happening fast enough to not register on the power supply.
I plan on using a resistor and the oscilloscope to track the power current more closely while I change the input command to see if it is the problem.
Note: if the leads on the temperature sensing circuit are flipped such that the signal is negative, the signal rails to the positive supply voltage whenever an input command is entered.
So I put together a little test circuit to test out a NPN BJT buffer circuit with a TIP122 transistor and an OP27 op amp. Power voltages are ~ +-14V, just used the positive rail as V+ for the transistor.
(diagram from https://www.allaboutcircuits.com/technical-articles/how-to-buffer-an-op-amp-output-for-higher-current-part-1/)
I verified that the op amp functioned alone in a buffer configuration.
Putting the BJT in the loop added a (negative) offset, though:
WIth a 51ohm load, inputs of 1.5Vpp and 2Vpp respectively:
WIth a 910 ohm load, with inputs of 1.5Vpp and 2Vpp respectively:
I realized afterwards that this circuit theoretically shouldn't be able to go below ground. I'm surprised that the output is basically offset so that the entire output signal is below ground. I guess I will test it again with the input signal being entirely positive, but I'm not sure if this is even related.
Side note: also made measurements of the metal slab (including the tape that is currently around it) to do some calculations later:
34.5mm by 61.5mm (basically flat in the third dimension, plus it's crinkly from tape so hard to measure consistently)
Tried separating the power to the sensor circuit board from the driver circuit board (so the only connection they share is ground). Seemed to work at first:
(The messiness in the first half is before I ground connected other set of power supplies to earth ground).
But I tried to insulate it (by wrapping the padded aluminum around it), and then the voltage drop started to show up again (and remained after I took the padding off):
I used to oscilloscope to monitor the power voltage signal while entering commands, and none of them dipped or showed any disturbances.
Andrew suggested that the sallen-key filter on the sensor board could be causing the drop, so I disconnected the filter, but it didn't help. However, as I was using the oscilloscope to probe the driving signal (and sensor signal) at different points, I found that having the oscilloscope parallel to the heater (at the leads) caused the voltage drop to stop (tentatively, only two pulses to go off of):
(Also, noticed loading effects when probing along the signal line)
I thought it might be possible that the metal slab might be adding some stray capacitance or otherwise causing interference between the driving and signal lines, since, other than ground, it's the only place where the two circuits are really close to each other, and that the impedance of the oscilloscope changed the "impedance" of the slab. So I thought I would try to use a 1Mohm resistor in place of the oscilloscope, but when I was trying to attach a 1Mohm resistor, one of the leads to the heater fell off :
I'm not sure how the best way to go about fixing this would be. I think maybe just clamping the leads to the heater for now, since soldering this well would be really hard...
Measured the acromag noise (input and output).
For the input noise, a function generator was set up to input a sin signal of 0.1Vpp at 0.1Hz and connected to an input channel. The time series was recorded for 4 hours (sampled at around 10Hz, but not exactly due to differences in how long each loop took to run), and then the Lomb-Scargle algorithm (Fourier transform with uneven sampling) was applied to obtain a frequency spectrum. The result was then run through Andrew's rms.m script (attached). Both are plotted below:
For the output noise, a script was written to continuously write a 0.1Vpp at 0.1Hz sin signal to an output channel that was connected to the signal analyzer, which was used to take the following data.
I moved the circuits to the electronics lab to test it there, and I recreated the situation that was occuring in the lab. I found that when the current limit knob on the power supply was turned down, I consistently got the same response as I was getting in the lab, where the sensor reading would dip when the control voltage turned on, and then rise back up when the control voltage shut off, but the power supply did not display that it was current limited. I then turned the current limit knob all the way up and didn't get this dipping problem (I tried this for >10 toggles). So I think the problems from before are just a result of not having enough current, so I will try to set it up again with the power supply from the electronics lab and see what happens. Some oscilloscope (of the temperature sensor signal) pictures below:
Current limited, toggle control voltage on:
Current limited, toggle control voltage off:
Current not limited, toggle control voltage on (the little bump I think actually corresponds to a rise in temperature from the heater being on):
Current not limited, toggle control voltage off (note decay in temperature reading ~5s in from left edge):
Andrew and I did some stuff in the lab today:
-Taped up the cavity and added some insulation.
-Got the Python version of the PID script running on the acromag computer (including installing the prerequisite libraries epics and cdsutils). The script is attached.
-There were some bursts of noise in the error signal that was messing with the PID loop. Andrew fixed this by increasing the "fast gain" knob on the control box.
-Tuned the PID gains to get the desired response. The gains ended up being Kp = 0, Ki = 0.0021, and Kd = .0014. It seemed like the Kd was acting like how you would expect Kp to, which didn't really make sense to me, but we got a pretty good response from these gains.
Edit: Reattaching script, there was a change in it made on the acromag computer that wasn't reflected in the version I uploaded earlier.
from ezca import Ezca
#A python translation of the RCAV_thermalPID.pl/SLOW_PID.pl script
#translated from perl script