------------------------------------------ -- Analysis of a Woofer Motor -- -- -- -- David Meeker -- -- dmeeker@ieee.org -- -- -- -- 15 May2009 -- -- -- ------------------------------------------ -- Introduction -- -- The purpose of this script is to automate the analysis of a woofer motor. -- The notebook produces the static performance curves that designers often -- desire during the development of a new transducer: the actuator's "BL" -- (the amount of force produced on the voice coil per amp of coil current); -- the coil's self-inductance, and a plot of the magnetic field in which the -- coil is immersed. -- -- Because there are so many possible variations in speaker motor geometry, -- the notebook does not create the speaker geometry within the notebook. Rather, -- it reads an existing geometry info FEMM and analyses it at a number of different -- coil locations. It is assumed that the speaker motor has been drawn with all -- elements in the coil belonging to group number 1, so that the voice coil can -- be easily selected and moved by the notebook. It is also assumed that the .fem -- file describing the motor is located in the same directory as the notebook -- (although the user could manually change the path to the .fem file). -------------------------------------- -- Design - Specific Parameters -------------------------------------- -- Model Name ModelName = 'Woofer.fem'; -- Maximum excursion + /- from the centered position: Xlim = 5; -- Movement increments used during the analysis dX = 1; -------------------------------------- -- Analysis Routines -------------------------------------- -- Analyze BL and incremental inductance at 1 mm steps between - Xlim and + Xlim open(ModelName); mi_saveas('temp.fem'); mi_selectgroup(1); mi_movetranslate(0, -Xlim); mi_clearselected(); showconsole(); clearconsole(); print('---------------------------------------------') print(' Speaker Motor Analysis Script'); print(''); print(' David Meeker'); print(' dmeeker@ieee.org'); print(' 15May2009'); print('---------------------------------------------'); print(''); print('Disp(mm)','BL(N/A)','Inductance(uH)'); for k=-Xlim,Xlim,dX do mi_modifycircprop('icoil',1,1); mi_analyze(1); mi_loadsolution(); mo_groupselectblock(1); fz = mo_blockintegral(12); parm1,R,fl1 = mo_getcircuitproperties('icoil'); mo_close(); mi_modifycircprop('icoil', 1, 0); mi_analyze(1); mi_loadsolution(); parm1,parm2,fl0 = mo_getcircuitproperties('icoil'); L = (fl1 - fl0)*10^6; print(k, fz, L); mi_selectgroup(1); mi_movetranslate(0, 1); end mi_close(); remove('temp.fem'); remove('temp.ans'); print(''); print('DC coil resistance = ',R);