Without further adieu...The math is pretty easy with a calculator if you don't have perl
available to you. If you are stuck on Windows, check with
www.activestate.com. If you are on linux or other Unix, perl
should already be there. There's a version in BASIC from Wayne
at the bottom.
Here's how it runs:
Usage: ./mech_res.pl Zmax Fs Qms
./mech_res.pl 100 32 10.4
! mechanical reactance (32 Hz, Qms: 10.4)
C5: 9 0 517.4uF
L5: 9 0 47.8mH
R5: 9 0 104.0
And here's all the code and comments:
#!/usr/bin/perl -w
# Copyright (c) 2003 Chris E. Richmond All rights reserved
# This program is free software; you can readily redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 1, or
# at your option) any later version. You can receive a copy of this
# license by writing Free Software Foundation, Inc., 675 Mass Ave.,
# Cambridge, MA 02139, USA
#===============================================================================================
# Create mechanical parameters for Spice model for woofers.
# Input: Zmax and Fs, output equivilant L, C, and R, where their
# values are defined thusly:
#
# About making a virtual circuit that models mechanical resonance, the idea is to find
# parallel L,C and R that acts as the mechanical resonator does. R will be set by Zmax,
# so that one is easy. Then, the values of C and L will be the same at resonance, and
# since Q is the ratio of reactive impedance to resistive impedance, you will find a the
# value of inductor and capacitor with reactances equal to Zmax / Qms at Fr. Wayne Parham
#
# C5
# ----||-------------
# | R5 |
# --------\/\/\/------------
# | |
# ----((((((((-------
# L5
#===============================================================================================
if ( @ARGV != 3 ) {
die "\n Usage: $0 Zmax Fs Qms\n\n";
}
$Zmax = $ARGV[0];
$Fs = $ARGV[1];
$Qms = $ARGV[2];
$Pi = 3.141; # constant
$Q_ratio = $Zmax/$Qms;
$L = ($Q_ratio / (2 * $Pi * $Fs)) * 1000;
$C = 1000000 * ( 1 / ( 2 * $Pi * $Q_ratio * $Fs ));
#! mechanical reactance (40Hz, Q=6.56)
# C5 9 0 400uF
# L5 9 0 40mH
# R5 9 0 65.6
print "\n! mechanical reactance ($Fs Hz, Qms: $Qms)\n";
printf( " C5: %6.1fuF\n",9,0,$C);
printf( " L5: %6.1fmH\n",9,0,$L);
printf( " R5: %6.1f\n",9,0,($Qms*10));
print "\n\n";
__END__
And here's one in BASIC:
==============================================================
10 input "Zmax"; R
20 input "Fs"; F
30 input "Qms"; Q
40 Pi = 3.1415926535
50 Z = R/Q
60 L = (Z / (2 * Pi * F)) * 1000
70 C = (1 / (2 * Pi * Z * F)) * 1000000
80 print "Reactance = " reactance
90 print "Capacitor is " C " uF."
100 print "Inductor is " L " mH."
110 print "Resistor is " R " ohms."
==============================================================