Helmholtz Coils

A system for producing a small region of space with nearly uniform magnetic field, called Helmholtz Coils, consists of two identical coils of radius R on the same (z) axis as shown here:  

							
The z axis is the symmetry axis, P is the point of interest (we take it to be the origin ({0,0,0})); so the centers of the two coils are at {0,0, -d/2} and {0,0,+d/2}.  [Clearly, we are taking nudges from Helmholtz to derive a useful arrangement for creating a desired B at P.]  We are interested in B at P but realize that for small changes in position about P the field will not change dramatically.

We will explore the behavior of B as a function of z only, striving for uniformity.

(a)  Derive B along the z axis for identical currents I running through the two coils 

If you want B to be ‘additive’ for the two coils, and pointing in the +z direction, what directions should I flow in each coil?

For now we will assume the coils to be single loops (the number of turns for each, N = 1).  Consider a single coil of radius R; let z be the symmetry axis and the center of the coil is at z = 0:

						

(OverVector[dl]) is a vector in the direction of the current, Ι (down on the front side of the coil; up on the back side.  I is coming out of the page at (Subscript[dl, 1]) and into the page at (Subscript[dl, 2])).

Note that (OverVector[dl])1  is at the top and (OverVector[dl])2  is at the bottom; (Subscript[(OverVector[dl]), 2]) is directly opposite from (OverVector[dl])1 and points in the opposite direction. 

Let (OverVector[dB])1 and (OverVector[dB])2 be the differential B fields generated by I  (OverVector[dl])1 and I  (OverVector[dl])2, respectively, at the point at {0, 0, z}.  Let (OverHat[(Subscript[r, 1])]) and (OverHat[(Subscript[r, 2])]) be the unit vectors pointing from the two current elements to the field point ({0, 0, z}).  The distances in both cases is the length r. 

For the given locations and directions of (OverVector[dl])1 and (OverVector[dl])2 (out and into the page) , (OverVector[dB])1 and (OverVector[dB])2 are both in the x-y plane.

From Biot-Savart we know that (OverVector[dB])1 =  (((Subscript[μ, o]) I)/(4 π)) (((Subscript[(OverVector[dl]), 1]) × (Subscript[(OverHat[r]), 1]))/(r^2)) and  (OverVector[dB])2 =  (((Subscript[μ, o]) I)/(4 π)) (((Subscript[(OverVector[dl]), 2]) × (OverHat[(Subscript[r, 2])]))/(r^2)).   


By careful analysis of the two cross products we see that  (OverVector[dB])1 and (OverVector[dB])2 are symmetrically oriented and have the same length.  

When added the vertical components cancel and we see that the sum  (OverVector[dB])1 +  (OverVector[dB])2 in in the ± z direction.  If we then integrate around the current loop, we will end up with a (Subscript[B, total]) that is in the ±z direction.  For the current direction shown in the diagram above, (Subscript[B, total])  is in the +z direction.

To find B for the Helmholtz coils we will add the field from two single coils.  

A quicky derivation of B from the above (N= 1) coil at the position {0, 0, z} is as follows:

One more time:  The field on the axis of the current carrying loop only has z component so that: the dB due to a single I dl:

 (OverVector[(Subscript[dB, z])]) =  (OverVector[dB]) Sin[θ] = (((Subscript[μ, o]) I)/(4 π))  ((dl )/(r^2)) Sin[θ] (OverHat[z])  =  (((Subscript[μ, o]) I)/(4 π))  ((dl )/(r^2)) (R/r) (OverHat[z])  = (((Subscript[μ, o]) I)/(4 π))  ((R )/((((R^2) + (z^2)))^(3/2)))   dl  (OverHat[z])


We find the total flux density at a point on the centerline at a distance z by integrating this expression over the circumference of the loop:

 (OverVector[(Subscript[B, z])]) =  (((Subscript[μ, o]) I)/(4 π))  ((R )/((((R^2) + (z^2)))^(3/2))) ( (∫_(around loop))dl  )   (OverHat[z])     where (∫_(around loop))dl is simply 2 π R
 
  (OverVector[(Subscript[B, z])]) =  (((Subscript[μ, o]) I)/(4 π))  ((R )/((((R^2) + (z^2)))^(3/2))) (  2 π R  )   (OverHat[z]) 
 
 or  (OverVector[(Subscript[B, z])])  = (((Subscript[μ, o]) I)/(2 )) (((R^2) )/((((R^2) + (z^2)))^(3/2))) (OverHat[z])    for the single loop.
 Important:   Note the (z^2) in the radical in the denominator.  This implies that both (a) the magnitude of  (OverVector[(Subscript[B, z])]) is symmetric about z = 0 (the position of the coil) and (b) the direction of  (OverVector[(Subscript[B, z])]) is the same for both signs of z.  For the current direction in the figure above,  (OverVector[(Subscript[B, z])]) points in the + z direction on both sides of the coil.  Here is a plot of (((Subscript[μ, o]) I)/(2 )) (((R^2) )/((((R^2) + (z^2)))^(3/2))) is shown here (with assumed values for the constants).  The SIGN (+) indicates that Bz points in the + z direction for the values of z chosen.  [In fact, for all z.]

ClearAll["`*"]
II = 1; R = 1; μzero = 1;
Bz[z_] =  ((μzero II)/(2 )) (((R^2) )/((((R^2) + (z^2)))^(3/2)));
Plot[Bz[z], {z,-2,2}]

Now positioning the centers of the two coils	at z = ± d/2, consider a field point P on the z axis at the point {0, 0, z} and in between the two coils:

						

we see that the distances from the centers of the two coils are (left) d/2 + z  and  (right) d/2 - z.  Putting these distances into the Bz[z] expression for a single coil and ADDING the two Bz fields we obtain for the total B field at P,   (OverVector[B])[z]:

                       (OverVector[B])[z] = (((Subscript[μ, o]) I (R^2))/2)((1/((((R^2) + ((((d/2)  + z))^2)))^(3/2))) + (1/((((R^2) + ((((d/2)  -  z))^2)))^(3/2))))  (OverHat[z])

For completion, points at z < -d/2 and z > d/2, we can (YOU CAN) show that we get the SAME EXPRESSION  [this is tricky -- you need to consider z in three regions:  at z < -d/2;   -d/2 < z < d/2; and z > d/2.   Again, the SQUARE (e.g., (d/2 - ((z))^2) ) simplifies the results in that expressions like ( z - ((d/2))^2) = (  ((d/2 - z))^2).  In all regions, if I flows in the same direction, (OverVector[B])[z] will result from addition of B’s pointing in the same direction.  

If you wished to get stronger fields at O for a given maximum Current (I), you can use N windings (to keep things neat and clean, BOTH windings would be of equal number (N)).  Then the above equation for (OverVector[B])[z] would simply be multiplied by N.  

Below we stick with N = 1.

(b)  It’s desirable to have  (OverVector[B])[z] be uniform over at least a small range of z around the origin.   We can use a Taylor Series for the above expression for  (OverVector[B])[z] to explore this.  First, Use the Series Function to generate a few terms.  Here is a Quicky Tutorial on Series:

M’s Series function can  be used to form a Taylor series of a function about a given point.  For a one D function f[x]:

Series [f,{x,(Subscript[x, 0]),n}]
generates a power series expansion for f about the point x=(Subscript[x, 0]) to order (((x-(Subscript[x, 0])))^n).  

Normal[Series [f,{x,(Subscript[x, 0]),n}]]
generates a power series expansion for f about the point x=(Subscript[x, 0]) to order (((x-(Subscript[x, 0])))^n) and drops the ((O[x])^n) (which cannot be evaluated).

 Consider xo = 0 and n = 6

ClearAll["`*"]
Series[f[x],{x,0,6}]
Normal[Series[f[x],{x,0,6}]]  (*  this drops the ((O[x])^n) Results in the desired Taylor series out to Order 6 *)

Repeat for Bz[z] (the Single Coil Bz[z]):

Normal[Series[Bz[z],{z,0,6}]]

This simply replaced f with Bz and x -> z.  For sufficiently small z (both + and -), we expect these terms to get smaller and smaller with increasing Order (n) due to the (z^n) factors.

Now apply the above to form the Taylor Series for B[z], the two coil B-Field along the z axis.

B[z_] = (1/2) II (R^2) ((1/((((R^2)+((((d/2)-z))^2)))^(3/2)))+(1/((((R^2)+((((d/2)+z))^2)))^(3/2)))) μzero
Series[B[z],{z,0,6}]
BSeries[z_] = Normal[Series[B[z],{z,0,6}]]  (*  this drops the ((O[x])^n)  *)

Looking carefully at each term in this series we see ((8 II (R^2) μzero)/((((d^2)+4 (R^2)))^(3/2))) is B[0]; that the term z B'[0]is missing as well as the other odd derivative terms: (1/6) (z^3) Derivative[3][Bz][0]and(1/120) (z^5) Derivative[5][Bz][0].  Why?? Because those derivatives (first: B’[z], third: (B^((3)))[z], and fifth: (B^((5)))[z],) are ZERO at z = 0!  NOTE:  this is true for any d.

Take these derivatives separately using M’s D (derivative) function   (and evaluate at z = 0).

Reminder:     D[f,{x,n}]
gives the multiple derivative (∂^n)f/∂(x^n).

(c)  Take these odd derivatives separately using M’s D (derivative) function  and show that at z = 0, they disappear  (seems to hold for all odd n).

D[B[z],{z,1}]/.z -> 0
D[B[z],{z,3}]/.z -> 0
D[B[z],{z,5}]/.z -> 0
D[B[z],{z,7}]/.z -> 0
D[B[z],{z,9}]/.z -> 0
D[B[z],{z,15}]/.z -> 0   (* '15' chosen arbitrarily  *)

Looks like all the odd derivatives evaluated at z -> 0 are equal to zero.  Try other odd n if you wish.

(d)  The second derivative term in the Taylor Series, ((192 II (R^2) ((d^2)-(R^2)) (z^2) μzero)/((((d^2)+4 (R^2)))^(7/2)))  , looks like an easy one to make vanish if we pick a certain d.  Assign d to it’s obvious value to make the second term in the Taylor Series vanish and re-write the series (BSeries[z]):

d = R ;(* obvious choice *)
BSeries[z]
B[0]  (*  This is the full function (for B) expression for the B Field at the origin *)
BSeries[0]  (* As expected, only the first term of the Series survives which is B[0]  *)

Remember, The Series holds for points on the axis, near the origin for the optimized spacing d = R.  This particular spacing allows us to move small distances along z away from the origin without large changes in B.  Experimental use of Helmholtz coils often requires careful analysis of these small changes for given changes in z to determine if precision measurements will allow it.  One designs with the B[0] range desired.

(e) Use Manipulate to vary d and examine the changes in the Plots of B[z] (I assumed II, R, and μzero to be all equal to 1)  Take note of the shapes of the curves near d = R.

Remove["`*"]
B[z_,d_] := (1/2) II (R^2) ((1/((((R^2)+((((d/2)-z))^2)))^(3/2)))+(1/((((R^2)+((((d/2)+z))^2)))^(3/2)))) μzero
II = 1; R = 1; μzero = 1;
B[z,d]
Manipulate[d;Plot[B[z,d], {z,-1.5R, 1.5 R},PlotRange-> {0,1}],{d, 0, 2 R, Appearance -> "Open"}]

At d = 0, it’s just a single coil located at the origin with 2 windings.  

You can see that near d = R (in this case, d = 1), B[z] flattens out to near constant value around the origin.  This is the usual spacing chosen for experiments.  Also, each coil is normally N turns; again, for sanity, N turns for both coils.

Also, it is not unusual to use THREE coils, orthogonally positioned to be able to generate a B in a particular direction in space.

Such an arrangement is also used to create a small region around the origin of nearly ZERO B field.  Careful adjustment and obvious choice of the directions of the B fields generated by the coils, on can cancel the background field (normally, dominated by Bearth + B due to steel structures/objects in the walls and in the lab.  One should be aware that it is not uncommon for the background field to change (e.g., someone next door moves a magnet or a hunk of steel).

from the ASC Scientific Catalog

(f)  Sticking with two coils separated by d = R,  reverse the current in ONE of the coils. Derive a new B[z] and again use Manipulate to vary d and examine the changes in the Plots of B[z] (again, I assumed II, R, and μzero to be all equal to 1)  Take note of the shapes of the curves near d = R.

Remove["`*"]
B[z_,d_] := (1/2) II (R^2) ((1/((((R^2)+((((d/2)-z))^2)))^(3/2)))-(1/((((R^2)+((((d/2)+z))^2)))^(3/2)))) μzero
II = 1; R = 1; μzero = 1;
B[z]
Manipulate[d;Plot[B[z,d], {z,-1.5R, 1.5 R},PlotRange-> {-.5,.5}],{d, 0, 2 R, Appearance -> "Open"}]

Again, at d = 0, it’s just a single coil located at the origin with 2 windings. With the current flowing in opposite directions it yields zero field everywhere.  Interesting but not very useful.

For d >0 we see that we get zero field at the origin (the midpoint between the coils)  and that B changes direction with displacement about the origin.  There may be some use for such a field.   Can’t think of one.