Practical Coilgun Design

FEMM - Projectile Length

What length of projectile works best? Now let's use FEMM to compare the forces on projectiles of various lengths. The Lua scripting feature can analyze lots of possibilities.

This web page takes the example from previous pages and tests various projectiles. All my FEMM files are provided again to help you start comparing other variations.

FEMM Model for Projectiles

Animated projectile illustrates a variety of lengths The accepted rule-of-thumb is that the projectile should be the same length as the coil. Why? Let's find out.

We'll arbitrarily choose a solid iron cylinder of 2.25mm radius. In our previous web page we discovered the shape of the projectile doesn't matter, so this should be as good a projectile as any other and easy to model.

Let's use Lua scripting again, and this time we'll try a range of projectile lengths.

Assigning block numbers in FEMM makes the scripting possible. We have three block numbers in the projectile, so we can independently move the top, midpoint and bottom end of the projectile. We assign another number 4 to the coil, so we can select it for the force integration. The script uses the block numbers in selectgroup(n) statements.

Some trial runs found a steep curve at shorter lengths, so I want to examine projectiles from 1 - 40mm in length in 2mm steps.


Our model is fairly simplistic and, except for eddy currents, not too much different from the real world:

  • frequency is d.c. (no eddy currents)
  • velocity is zero (every point is simulated at steady-state with no motion)
  • projectile is M-19 steel (nonlinear BH curve)
  • steady coil current (not a capacitive-discharge system)
  • no losses due to friction (don't we wish!)

Pre-processor Lua Program

outfile = "projectile_length_results.txt"

-- I tried to make the data easy to import into Excel.
-- The format uses tabs (\t) to separate the output columns.
-- By default this is Excel's column separator.
-- I ended up reformatting the summaries anyway into a square table.

radius = 2.25
incr_length = 2
num_trials = 20

handle = openfile(outfile, "a")
write(handle, "\nSolving solid cylindrical projectile of various lengths \n")
write(handle, "Projectile: \n")
write(handle, "      radius is ", radius, "mm \n")
write(handle, "      length varies: 1,",  1+incr_length, ", ", 1+2*incr_length, ", ... \n")
max_length = 1 + num_trials*incr_length
write(handle, "      up to maximum length of ", max_length, "mm\n")
write(handle, "Coil: \n")
write(handle, "      20mm long \n")
write(handle, "      3mm inside radius \n")
write(handle, "      6mm outside radius \n")
write(handle, "Note: \n")
write(handle, "      In Excel click on Data... Get External Data... Import text file...\n")
write(handle, "      then choose this text file (", outfile, ")\n")
write(handle, "      and click Finish. \n")
write(handle, "      This data is tab delimited which is its default import format.\n") 

-- Save the model as "temp.fem" so it cannot affect our carefully
-- prepared starting model. This prevents losing your work if you
-- get a runaway solution that you have to kill in Task Manager.

-- Set edit mode in preparation for moving a group of points.

r2 = radius * radius
pi = 3.1415926535

-- Amount to increase projectile length
for i=0,num_trials-1 do
   -- Announce the new projectile's size
   handle = openfile(outfile, "a")
   write(handle, "\n")
   write(handle, "Projectile length\t", (1 + i*incr_length), "\tmm\n")
   write(handle, "Volume\t",(pi * r2 * (1 + i*incr_length)), "\tmm3\n")
   write(handle, "\n")

   -- Measure the force at 40 positions for each projectile.
   for n=1,40 do

      -- Pass current position into post-processor
      handle = openfile("tempfile","w")
      pos = n-41
      write(handle, pos)


      -- Move the projectile further into coil
      -- Projectile is composed of three groups and
      -- order of movement is important to avoid overlap
      move_translate(0, 1)
      move_translate(0, 1)
      move_translate(0, 1)

   -- Move projectile back to starting point.
   -- The centerpoint moves back to same spot, and the top
   -- and bottom ends are moved out by half the increment size.
   move_translate(0, -40 - incr_length/2)
   move_translate(0, -40)
   move_translate(0, -40 + incr_length/2)
messagebox("All done.")


Post-processor Lua Program

outfile = "projectile_length_results.txt"

-- read projectile's position at its centerpoint
handle = openfile("tempfile", "r")
position = read(handle, "*n")

-- Group 4 is the solenoid coil
-- Obtain force on coil, and we assume the 
-- force on projectile is equal but opposite in sign
force = blockintegral(12) * (-1)

handle = openfile(outfile,"a")
write(handle, position, "\t", force, "\n")



Graph of work per unit volume You can see the detailed Excel spreadsheet here. You can get the raw results file here as it was written by FEMM. For each projectile, it computes the force on the projectile at many positions and sums the result. This is a numerical solution to integrating force as it acts over a distance, yielding "work".

To make a meaningful comparison of different projectiles, the spreadsheet normalizes "work" by the projectile's unit volume. This gives a yardstick of relative efficiency.

The spreadsheet shows a graph of "work per unit volume" for various projectiles.

The peak efficiency is at 15mm, or 75% of the coil length.

Notice that very short projectiles (below 5mm or less than 25% of the coil length) are not efficient. The efficiency peaks over a broad range, but falls off with very long projectiles (above 30mm or more than 50% longer than the coil).

These results confirm the rule-of-thumb that projectiles should be about the same length as the coil. Actually, the projectile should be about 25% shorter than the coil length, but the peak is very flat. The exact length is not critical.

For example, you can see that a BB pellet would be very poor. At 2mm in length, it could get less than half of the available energy per unit volume than a longer projectile.

By the way, you may have a different conclusion if you have a different goal than mine. My personal goal is to maximize energy conversion efficiency. But the total energy stored continued to increase with longer projectiles. So if you don't care about efficiency, and your goal is to deliver a "punch" to a target, then you should use a 40mm or longer projectile! Look in the Excel spreadsheet at the "Total work" field and you'll see that kinetic energy continues to increase with longer projectiles. Of course this requires much larger capacitors because the efficiency is lower, but it can be done with a single coil.

  < Previous Page 4 of 8 Next >