After talking about my servo sub project in another thread (
http://www.diyaudio.com/forums/subw...-gain-servo-controlled-woofer-controller.html ) I decided to start my own. Mostly because I don’t want to clutter his thread with my project, but also so I can present my system and my results in one place. Hopefully this will make it easier for you to give me feedback on what I have done, what I have done wrong and what I can do to improve the system. Please don’t hesitate to be critical. I don’t know much about feedback systems and while it seems I have had some success with the things I have done so far I am sure there are things I should change.
This project started 5 years ago(!) following an article I read in audioXpress 6/06 by Art and Jac Brown. It was put on the shelf until recently when I was inspired by David’s DSP servo efforts in the thread above. Later I have also acquired an article written by Bill Waslo in audioXpress 12/06. He manages to explain how to build and test a servo sub without going into difficult math. The latter suits me particularly well
🙂
System setup:
Woofer: PEERLESS XXLS 12” (830845) in a 135 liter (4.77ft³) sealed box.
Accelerometer: ACH-01-03. Calibrated to 9.6mV/g @ 1kHz
Amplifier: DC coupled LM3886 with +-29V rails
Sound card: M-Audio Audiophile
Pre-filter: MiniDSP 2x8
Servo circuit: My own. See schematic.
Measurement tools:
Oscilloscope: Picoscope 3224 (12-bit)
Multimeter: Fluke87
Measurement mic: My own with Linkwitz mod. (calibrated)
Software: REW V5,01 Beta 17
Modelling software:
Speaker: Unibox 408
Electronics: Proteus
Figure 1. The servo circuit with a graph simulating the response from the accelerometer input to the amplifier output.
Figure 2. The accelerometer mounting. It is glued with 2-component epoxy under the dust cap. Note the 4gram counterweight on the opposite side.

Figure 3. The accelerometer cable comes out between the voice coil wires
The servo circuit.
This is mainly built following Brown’s suggestions.
Input buffer (U1)
A 7400Hz LP filter takes away some of the high frequency noise from the “MiniDSP 2x8” I use as pre-filter and EQ. U1 also serves as input gain adjustment and DC-offset adjustment. The MAX427 has low drift and noise and is unity gain stable.
Accelerometer input (U2)
R6 is needed for negative bias of the accelerometer. C2 and R7 form a 2.1Hz HP filter and prevent the slow DC changes that occur in the accelerometer from entering the servo. R9 and R8 give a gain of 9.4. The accelerometers sensitivity of 9.6mV/g will then be amplified to 90,24mV/g. The op-amp’s rail voltage is +-15V and the OPA637 can swing to about +-13V. Maximum g-force before clipping is then 13V/(90.24mV/g)= 144g. The OPA637 is probably overkill but it was in by box and it’s nice to be on the safe side
Summing amp (U3:A)
The accelerometer signal and the music signal is summed at the positive input of this op-amp. Note that the accelerometer is mounted so that an outwards (positive) motion of the woofer gives a negative signal here. This op-amp also serves as loop gain adjustment with R5 and LOOPGAIN1. I can have up to 32dB gain here. It is now at 29dB.
LP filter and output amp (U3:B)
R10 and C3 form a 4.3Hz LP filter. It attenuates high frequencies and helps shape the phase response so that the accelerometer feedback is inverted (180deg) at the target frequency. I wanted the target frequency to be in the lower part of the woofer frequency band because it is there we have most distortion. In my case this is now at 39Hz. This is a critical area of the servo circuit and this filter has to be shaped to suit the particular woofer/box. I have tried a couple of things here but this is what is working best for now. Both articles I have linked to earlier have more information about this. This op-amp also has a loop gain adjustment with R11 and LOOPGAIN2 of up to 25.8dB. With mine set to 18.5dB (pot at 2k) the system starts to oscillate at 2560Hz and increases fast in intensity at 2480Hz. At 17dB (pot at 1.63k)the system is just stable and I measured all-time best of 0.95% THD at 20Hz with 18.5V RMS on the speaker terminals. The last potmeter (AMP_SHUTDOWN) serves as a quick way of turning off and on the output amplifier when doing adjustments or if things goes “tits-up”
😀.
The output amplifier.
After struggling with low frequency oscillations (1-3Hz) with a standard Rotel amplifier I decided to get rid of the extra 90 degree phase shift that occurs in all standard amplifiers that have a DC blocking capacitor on the input. I also wanted an amplifier without too much power that could rip my woofer apart during testing. I have therefore built a DC coupled LM3886 chip amp with adjustable rail voltages from +-16V to +-29V I can use during testing. Without the extra phase shift I got rid of the low frequency oscillations and its capable of 19V RMS output
The accelerometer
This is glued with two component epoxy just on top of the voice as showed on the picture. The weight is about 4 grams and a 4 gram Norwegian coin is glued on the opposite side as a counter weight to avoid wrong balance in the cone.
G-force and SPL calculations:
With 100W power at 100Hz the X-Max is estimated to be 1.9mm in my box. The SPL @ 1 m is then 107dB from a 12” woofer. ( SPL = 20*LOG( (1.18/0.00002) * (0.0466m^2*0.0019m/1.41) * (2*3.1416*100Hz^2) ) = 107dB ) The g-force is then 76g ( g = 4*PI^2*100Hz^2*0.0019m/9.81 =76g ) and the “weight” of the accelerometer at that force will be: 4gram * 76g = 304 grams. This would create a bending force that could make the voice coil crash into the magnet.
Testing
First thing to test is open loop response to see what I had to work with. I used REW for this and set it up to sweep from 2Hz to 5kHz in 20 seconds. I made sure that the soundcard and filters included in the signal path was corrected for gain and phase errors with a calibration file. REW has a procedure for this. Here is the results of a loopback with correction active.
Figure 4. Measured loopback response with -5dB FS output in REW. Output is from the servo circuit’s input amp with gain set to 0dB. The gain and phase error in the soundcard and servo input amp is corrected with a calibration file so we have 0 gain and -2,9 deg. phase from 2Hz to 20kHz. The black dotted line show the gain correction, and we can see that the 7400Hz input filter has been corrected for. I don’t know why REW insists on correct the phase to -2.9 and not 0 but it is not critical. REW is also calibrated so that -5dB FS output signal is 0dB in the charts. -5dB FS on my soundcard is 989mV RMS. Now that the levels are calibrated and verified I can measure the open loop response.
Step 1.
First I measure the response of only the subwoofer. To get the true phase response of only the woofer I must have a DC coupled amplifier and must omit the HP filter in the accelerometer input and feed the accelerometer directly into the soundcard. Note that this can be somewhat risky because the output of the accelerometer can have a small negative bias and the electrolytic capacitor on the soundcard will have wrong bias. I have addressed this by using a -6V regulator to feed the negative bias of the accelerometer and the output signal from the accelerometer is 0V

Figure 5. This is the gain and phase response of the woofer with feedback directly from accelerometer. This plot does not contain any other gain or phase elements other than the DC coupled LM3886, the woofer/box itself and the raw inverted accelerometer output. Top graph is phase. Sweep 12s @ -21 dB FS. I ran this at different levels with the same result. The actual g-force can be calculated by knowing that 0dB on the chart is the same as -5dB FS which is 989mV. From the plot we see that 30Hz is at -31dB. The RMS voltage is then 10^(-31/20)= 28mV. My sensor is calibrated to 9,6mV/g and the RMS g-force is then 31,6/9,6= 2,9g
From this test I was surprised to see that the phase will never cross the forbidden 0 degrees or 360 degrees. In theory it should be possible with infinite loop gain??
Step 2.
Now I want to see how only the HP filter of the accelerometer op-amp affects the loop response. The input to the soundcard is now connected to the output of the accelerometer amplifier. The output from the soundcard is still connected directly to the amplifier (trough the input buffer U1).

Figure 6. The blue plot show how the accelerometer filter affects the phase at low frequencies. REW does not let me measure down to DC, but to predict the phase close to DC I have the following theory: We must assume that the woofer itself will approach 180 degree phase shift at DC (remember the accelerometer is inverted) and then the accelerometer capacitor gives us another 90 degrees more phase offset and end up on -90 degrees.

Figure 7. This is the SPL from the test. Green is with accelerometer amp. The green graph is actually 20dB higher because of the accelerometer amp, but I have offset it to better see the difference in output.
Step 3.
Now it’s time to connect the rest of the servo circuit and see what kind of margins we have. The signal that was driving the amplifier directly earlier is now fed into the summing amplifier (U3:A) through resistor R3. (Just as it will be in normal operation). The input to the soundcard is as in step 2 fed by the accelerometer amplifier (U1). The accelerometer is NOT connected to the summing amp.
Figure 8. This is the total open loop response. Gain increased until just below oscillation. Sweep done at -40dB FS. That is 35dB lower than the reference level so I have offset the curve +35dB in REW afterwards to easier interpret the plot. The loop gain is +35dB @ 21Hz. From 30 to 50Hz it is +38,5dB and at 100Hz it is +33dB
We can see that the forbidden phase of 360 degrees where the system will oscillate happens when the gain is at 0 which makes sense because the system is now adjusted up to the verge of oscillation. From the plot we can see that this happens at 3640Hz. I don’t know why the (measured) oscillation in my case occurs at 2470Hz and not 3640Hz but it I guess some strange things happen in this area.
But keeping loop gain this high is of course pushing the limits and I adjusted it down 8,5dB.
Figure 9. Loop gain adjusted down 8,5 dB.
All testing was done with this loop gain setting. I will post the results in another post