Gas station without pumps

2012 September 15

Characterizing tactile transducer again

Filed under: Circuits course — gasstationwithoutpumps @ 22:13
Tags: , , , , , , ,

I mounted the Audio TT25-16 PUCK tactile transducer in the middle of a piece of ½” plywood about 9″ in diameter and made a small amplifier out of an op amp and a 2N3904 NPN transistor (I have half a dozen of them, some of which I got over 25 years ago—it seems to be one of those parts that has remained in production forever).  The extra transistor is to get a bit more drive current (rated at 200mA) than the op amp can provide (rated at 23mA).

Here is the model I had before (in the post Characterizing tactile transducer) for the Puck unmounted and sitting on a thin piece of foam rubber on my benchtop:

Model of Puck mini bass shaker using 3 inductors and 3 resistors for the voice coil. Parameters were fit using gnuplot.

The fit using 3 inductors and 3 resistors for the voice coil is quite good, though there is still a little error around 160 Hz. The mechanical resonance is quite strong at around Fs=24.05Hz.

Here is the circuit setup I used for doing the characterization this time.  The amplifier made the shaking large enough that I could feel it if I held the plywood, particularly near the resonance peak:

The amplifier has a DC-blocking capacitor and a couple of resistors to keep the input centered. The op amp is set up to provide unity gain into the load which consists of a 10Ω resistor in series with the Puck transducer.

The time constant for the RC circuit to keep the op amp centered is rather large—it took 20–30 seconds after power-up for the output to stop clipping. The input was about 2.5V peak-to-peak, as was the output. Note that at the highest frequencies measured, the slew rate limitations of the op amp make the output more of a triangle wave than a square wave, which may mean that the impedance is not really representative of the transducer at those frequencies.

The 10Ω resistor in series with the Puck servers two purposes: it limits the maximum current through the 2N3904 transistor and it gives me an easy measurement of the current through the Puck as the voltage across the resistor. By measuring the RMS voltage across the resistor and the Puck at the same frequency, I can easily compute the magnitude of the impedance at that frequency.

The fitted model for the Puck transducer mounted on a plywood board. Note that the mechanical resonance is at a higher frequency (Fs around 31.26Hz) and is more damped than the previous characterization of the unmounted Puck.

UPDATE 2012 Sept 16: I was bothered by the change of frequency for the resonance, because I could not figure out a physical explanation.  The resonance depends on the mass and springiness of the voice coil, which are not changed by mounting the case of the transducer on a piece of plywood.  I then realized that there were two changes here: the mounting of the Puck and introduction of the amplifier.  The amplifier produces a wider-range signal and introduces a DC offset.  If the spring in the transducer is non-linear, then both the DC offset and the larger movement could change the effective spring constant.  I tried checking with an unmounted transducer, and it also shows the higher resonant frequency, so the change comes from the amplifier (and probably the DC offset), not from the mounting.

Here is the gnuplot script for the fitting (see Characterizing tactile transducer for an example of the plotting script).  The fitting was a bit fragile, and I had to play around with the order in which the variables were fit to keep it from going off into ridiculous regions for the parameters.

set xrange[*:*]
set yrange [*:*]

j=sqrt(-1.0)
zpar(z1,z2) = z1*z2/(z1+z2)
zc(c,f) = 1/(j*2*pi*f*c)
zl(L,f) = j*2*pi*f*L

z_known(f)=zpar(24000, zc(4.7e-6,f))
ohmic(f) = 10.0

lr(L1,R1,f) = abs(zl(L1,f)+R1)
lrlr(L1,R1,L2,R2,f) = abs(zpar(zl(L1,f),zl(L2,f)+R2)+R1)

lrlrc(L1,R1,Ls,Rs,Cs,f) = abs(zl(L1,f)+R1+zpar(Rs,zpar(zl(Ls,f),zc(Cs,f))))
lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,f) = abs(zpar(zl(L1,f),zl(L2,f)+R2)+R1+zpar(Rs,zpar(zl(Ls,f),zc(Cs,f))))
lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,f) = abs(zpar(zl(L1,f),R2+zpar(zl(L2,f),R3+zl(L3,f)))+R1+zpar(Rs,zpar(zl(Ls,f),zc(Cs,f))))

R1=19
L1=0.001

fit log(abs(ohmic(x)/lr(L1,R1,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1
fit log(abs(ohmic(x)/lr(L1,R1,x))) 'amplified-10-table' using 1:(log($2/$3)) via R1
fit log(abs(ohmic(x)/lr(L1,R1,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,R1
R1_lr=abs(R1)
L1_lr=abs(L1)

R1=15
L1=0.0015
Rs=5.5
Ls=0.005
Cs=0.005

fit log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1
L1=abs(L1)
fit [10:200] log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs
Ls=abs(Ls)
Cs=abs(Cs)
fit [10:200] log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs,Rs, R1
Ls=abs(Ls)
Cs=abs(Cs)
fit log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1
L1=abs(L1)
fit [10:200] log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs,Rs
Ls=abs(Ls)
Cs=abs(Cs)
fit log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,R1
L1=abs(L1)
fit [10:200] log(abs(ohmic(x)/lrlrc(L1,R1,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs,Rs
Ls=abs(Ls)
Cs=abs(Cs)

R1_lrlrc=abs(R1)
L1_lrlrc=abs(L1)
Rs_lrlrc=abs(Rs)
Ls_lrlrc=abs(Ls)
Cs_lrlrc=abs(Cs)

R2=180
L2=0.0015

fit log(abs(ohmic(x)/lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L2,R2
L2=abs(L2)
fit [10:200] log(abs(ohmic(x)/lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs
Ls=abs(Ls)
Cs=abs(Cs)
fit [10:200] log(abs(ohmic(x)/lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via R1,Rs
fit log(abs(ohmic(x)/lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,R1,L2,R2
fit log(abs(ohmic(x)/lr2lrc(L1,R1,L2,R2,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,R1,L2,R2,Ls,Cs,Rs

R1_lr2lrc=abs(R1)
L1_lr2lrc=abs(L1)
R2_lr2lrc=abs(R2)
L2_lr2lrc=abs(L2)
Rs_lr2lrc=abs(Rs)
Ls_lr2lrc=abs(Ls)
Cs_lr2lrc=abs(Cs)

R3=300
L3=0.0005

fit [10:200] log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs
Ls=abs(Ls)
Cs=abs(Cs)
fit [10:200] log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs,Rs,R1
Ls=abs(Ls)
Cs=abs(Cs)
fit log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,R1
L1=abs(L1)
fit log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L2,R2
fit log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L3,R3
fit log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via Ls,Cs,Rs,R1
Ls=abs(Ls)
Cs=abs(Cs)
fit log(abs(ohmic(x)/lr3lrc(L1,R1,L2,R2,L3,R3,Ls,Rs,Cs,x))) 'amplified-10-table' using 1:(log($2/$3)) via L1,L2,R1,R2,L3,R3,Ls,Rs,Cs

and the raw data

# connection of Dayton Audio TT25-16 PUCK tactile transducer
#    mounted on 1/2" plywood circle
#    in series with 10.0 ohm resistor
#  driven by AC-coupled function generator amplified with op amp and
#    2N3904 transistor.
# measured with Fluke 8060A
# 2012 sept 15

# frequency mv across 10    mv across Puck
13.61    412    634
143.28    393.6    637.9
1450.5    251.5    810.5
13541    77.13    972.5
128740    13.3    698.0
141110    11.1    642.5
15215    70.95    962.7
1644.5    243.7    805.7
162.27    381.7    627.9
15.41    397.5    615.2
23.84    383.7    638.5
238.7    376.8    651.4
2345    211.2    867.4
23450    55.47    979.5
38800    41.7    975.5
3901    162.97    916.2
5199    139.9    958.3
51550    36.19    984.6
538.4    344.5    722.0
53.64    403.1    634.9
42.65    390.2    647.6
428.0    356.2    701.3
41350    40.6    984.7
30880    47.8    990.0
3096    186.17    904.6
317.0    370.1    676.5
31.68    341.5    691.6
30.04    343.4    691.2
27.20    372.5    663.9
32.41    344.5    688.1
33.71    355.0    677.2
35.14    367.4    664.4
102.99    394.7    630.8
1039.3    280.02    784.0
9849    93.62    963.7
4178    156.53    920.6
7317    111.95    952.9
766.1    300.0    756.2
76.15    396.3    625.5
72310    28.7    930.1
32.32    341.0    682.6
108450    17.4    793.6
19.33    397.1    629.7

4 Comments »

  1. I updated this post, adding a conjecture about what caused the change in frequency for the mechanical resonance. I’m seeing much less of a resonance peak electronically in the other copy of the Puck transducer, so I’m a little confused about what is going on. Perhaps the damping varies a lot from copy to copy (cheap parts)?

    I wonder if I should have the students characterize the particular shaker table that they are using. I’m also wondering whether I can use an accelerometer to characterize the low-frequency response of the shaker table, including the mechanical parts outside the transducer.

    Comment by gasstationwithoutpumps — 2012 September 16 @ 11:15 | Reply

  2. […] RMS, which is about 8dB more gain than I got from the op-amp-and-transistor amplifier I used in Characterizing tactile transducer again.  I get a strong resonance from the amplifier around 64.5kHz and a mechanical resonance from the […]

    Pingback by New amplifier and shaker table « Gas station without pumps — 2012 September 29 @ 14:39 | Reply

  3. […] Characterizing tactile transducer again […]

    Pingback by Rethinking the pressure sensor lab « Gas station without pumps — 2012 October 23 @ 17:27 | Reply

  4. […] loudspeakers and electrodes (see Better measurement of conductivity of saline solution or Characterizing tactile transducer again), making a number of measurements of RMS voltage across the device and across a series resistor at […]

    Pingback by Negative resistance oscillator « Gas station without pumps — 2013 January 7 @ 06:50 | Reply


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: