Problem-Solving Example #6
Description of a Voice Coil Motor
A VCM 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. VCM can be generally classified as a dc brushless 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 & brushless 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 VCM 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 brushless motor is to be used whose coil has 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 (Tuai), 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 constrainting rise/fall time.