FC Coding isOne step from 1st Principles to Solution! 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 Actuator
End
Model Actuator
Find Tau In Bangbang By Ajax( Cntl2) To Match Err_pos, Err_vel
End
Controller Cntl2( Ajax) Damp = .0002 End
Model 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 = V
End
Model VCMotor
Vdot = Phi * C / J Xdot = V
Cdot = (E - Phi * V - R * C) / L
End

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_t

End
Model 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_vel
End
Controller Cntl1( Hera) Adjust = 2 End
Controller Cntl2( Ajax) Summary = 0 End
Model 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 = V
End
Model 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_t

End
o
o (same code as in example 2)
o
Model 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]
End
Model 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
Endif
End

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. Calculus (level) Problem-Solving for Engineers & Scientists Author's Amazon Account