Home

# Voice Coil Motor (VCM) A Voice Coil Motor is basically an electromagnetic transducer in which a coil placed in a magnetic pole gap experiences a force proportional to the current passing through the coil. Voice Coil Motor can be generally classified as a dc brush less motor if the coil is wound as the starter and the permanent magnet with the attached payload is allowed to move or rotate. For rotary applications, a number of types of limited travel & brush less motors are available on the market, possessing flat torque output over a region of ±20°. By providing the necessary encoding and electronics, these motors are also used as constant speed motors.

Assuming the force generated is independent of position, the governing equation can be written as
L * di/dt + R i = E - φ v         dv/dt = φ i / J           v = dx/dt

where
L = inductance of the motor coil (henry);
i = current intensity through the motor coil (ampere);
R = resistance of the motor coil (ohm);
E = applied voltage to the coil (volt);
φ = transducer constant; for linear motion, its units are either Newton/ampere or volt/meter/second, and for rotary motion, the units are N-m/A or volt/radians/second;
v = velocity of motion (radians/second or meter/second);
J = total inertia of the motor and access mechanism (kg - m2 or kg);
x = response (radians or meter).

The Voice Coil Motor design objective is to move from point A to B in the shortest time possible.

A physical constraint may exist to limit R / φ**2 to a constant +/- a tolerance. H1 & H2 in attached code show how such a constraint may be handled. R and φ will be varied in order to find a minimal seek time, Total_t, while meeting this physical constraint.

A DC brush less motor is to be used whose coilhas an inductance of .015 H in the presence of the permanent magnet. The supply voltage is 24 V, and there is a drop of about 1 V in the electronics before the motor winding. To reduce the thermal gradient, the maximum current should be limited to 0.5 A. Obtain the voltage transition times (τ i), plus the torque sensitivity (φ) of the dc motor and the resistance (R) of the coil to meet the design objectives.

## 1. Theoretical Problem/Solution ... Zero time for change in polarity

``Problem Seektime     [Voice Coil Motor For An Actuator;        Objective = Move from Point A to B in desired time (Tf)]  Allot Tau(3)  R = 50     Emax = 23     L = .015      [Ohms, Volts, Henry]  Phi = .5       J = 5e-4                [Volts * Sec./Rad., Kg * M * M * Ohm]  C = 0     V = 0          X = 0         [Initial Values]  T = 0     Dt = .001      Tf = .072     [Time In Seconds]  Tau(1) = .3*Tf      Tau(2) =.4*Tf      Tau(3) = .1*Tf  Tmech = .12     Tm_tol = .05           [Mechanical Time constant & % tolerance]  Pi = 4*Atan(1.)     Xfinal = Pi / 6     [radians = 30 degrees of travel]  Call ActuatorEndModel Actuator  Find Tau   In Bangbang   By Ajax( Cntl2)    To Match Err_pos, Err_velEndController Cntl2( Ajax)     Damp = .0002     EndModel Bangbang  T = 0          C = 0     V = 0     X = 0     Tp = 0     [ Initial Values]  For I = 1 to 3   Do     Total_t = Tp + Tau( i)     Dt = Tau( i)/100          Dp = 5 * Dt     Tp = Tp + Dp     Initiate Isis   For VCMotor          Equations Cdot/C, Vdot/V, Xdot/X   of T   Step Dt   To Tp     Polarity = -(-1)**I     E = Emax * Polarity     Do While (Tp .le. Total_t) then          Tp = Tp + Dp          Integrate VCMotor   By Isis          Print T, V, Vdot     End Do  Repeat  Err_pos = Xfinal - X          Err_vel = VEndModel VCMotor  Vdot = Phi * C / J     Xdot = V  Cdot = (E - Phi * V - R * C) / LEnd``

## 2. Theoretical Problem/Solution ... Zero time for change in polarity New objective: Minimize Seek Time

``Problem Seektime     [Voice Coil Motor For An Actuator               Objective = Minimize Seek Time]  Allot Tau(3)  R = 50     Emax = 23     L = .015       [Ohms, Volts, Henry]          o          o     (same code as in example 1)          o  Pi = 4*Atan(1.)     Xfinal = Pi / 6     [radians = 30 degrees of travel]  Find Phi, R   In Actuator   By Jupiter( Cntl1)     Holding H1, H2, Hc     To Minimize Total_tEndModel Actuator  H1 = - R * J + Tmech * (1+Tm_tol) * Phi**2     [H1 & H2 must be >= 0]  H2 = R * J - Tmech * (1-Tm_tol) * Phi**2  Find Tau   In Bangbang   By Ajax( Cntl2)   To Match Err_pos, Err_velEndController Cntl1( Hera)     Adjust = 2     EndController Cntl2( Ajax)     Summary = 0     EndModel Bangbang  T = 0          C = 0     V = 0     X = 0     Tp = 0     [ Initial Values]  For I = 1 to 3   Do     Total_t = Tp + Tau( i)     Dt = Tau( i)/100          Dp = 5 * Dt     Tp = Tp + Dp     Initiate Isis   For VCMotor          Equations Cdot/C, Vdot/V, Xdot/X   of T   Step Dt   To Tp     Polarity = -(-1)**I     E = Emax * Polarity     Do While (Tp .le. Total_t) then          Tp = Tp + Dp          Integrate VCMotor   By Isis          Print T, V, Vdot     End Do  Repeat  Terminate VCMotor  Err_pos = Xfinal - X          Err_vel = VEndModel VCMotor  Vdot = Phi * C / J     Xdot = V  Cdot = (E - Phi * V - R * C) / L     Hc = .5 - C     [ Hc must be >= 0]End``

## 3. Practical Problem/Solution ... ArcTan() used to change polarity

``Problem Seektime     [Voice Coil Motor For An Actuator               Objective = Minimize Seek Time with constraint on               rise/fall times; ie. |Edot| < Emax_slope]  Allot Tau(3)          o          o     (same code as in example 1)          o  Pi = 4*Atan(1.)     Xfinal = Pi / 6     [radians = 30 degrees of travel]  Ypeak = .985 * Pi/2     Xmax = Tan( Ypeak)  Trise = 5*Tf/100        Pw50 = Trise     Tends = .6*Trise  Find Phi, R        In Actuator     By Jupiter( Cntl1)     Holding H1, H2, Hc     To Minimize Total_tEnd          o          o     (same code as in example 2)          oModel VCMotor  Vdot = Phi * C / J     Xdot = V  Call Risetime     [ E = constant except during transition times]  Cdot = (E - Phi * V - R * C) / L     Hc = .5 - C     [ Hc must be >= 0]EndModel Risetime  If( I .Eq. 1) then             [ Calculate E during transition time]     If( T .lt. Tends ) then     [ ie. E = f(t) during rise/fall times]          E = (Atan((4*T/Pw50 - 1.)*Xmax) / Ypeak + 1.)/2.     Endif  Else If( I .eq. 2) then     If( T-Xtau(1) .lt. Trise) then             [Switch voltage polarity]          Tt = T - Xtau(1)          E = - Atan((2*Tt/Pw50 - 1.)*Xmax) / Ypeak     Endif  Else If( I .eq. 3) then     If( T-Xtau(1)-Xtau(2) .lt. Trise) then     [Switch voltage polarity]          Tt = T-Xtau(1)-Xtau(2)          E = Atan((2*Tt/Pw50 - 1.)*Xmax) / Ypeak     Else If( Time-T .lt. Tends) then     [Drop voltage to zero]          Tt = T-Time+Tends          E = - (Atan((4*Tt/Pw50 - 1.)*Xmax) / Ypeak-1.)/2     Endif  EndifEnd``

Applied Voltage waveforms to Coil ## Figure 1. Theoretical Problem/Solution ... Zero time for change in polarity Objective: Specific time (Tf) for movement; i.e. Total_t must equal Tf. ## Figure 2. Theoretical Problem/Solution ... Zero time for change in polarity Objective: Minimize Seek Time (Total_t) ## Figure 3. Practical Problem/Solution ... ArcTan( ) used to change polarity Objective: Minimize Seek Time while constraining rise/fall time.

This Voice Coil Motor problem is another increased productivity example do to using Calculus (level) programming.

Ananthanarayanan, K. S., Third-Order Theory and Bang-Bang Control of Voice Coil Actuators, IEEE Trans. on Magnetics, Vol. MAG-18, No. 3, , pp. 888-892.

 Free Zoom Classes Calculus-level Problem-Solving for Engineers & Scientists