And now, for something entirely different. A 5" x 72" Filament Winder build.

The Rocketry Forum

Help Support The Rocketry Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.


Now with 8% more aluminum
Apr 1, 2011
Reaction score
Hi TRF. I'm back for a minute. Lately I've been focused more on the actual building of rockets rather then the hypothesizing of rocket building, so checking TRF's been more or less on the backburner. Scrolling through and seeing the 40 dozen threads of either bickering, politics, or poorly researched questions, I feel a little better about that decision. I'm sorry to say I'm a little less of a "fan" then I was a year or two ago. If you're thinking this makes me seem like a pretentios a**hole, I can't say I disagree with you. At least I'm up front about it.

However cynical I am, I still believe in "open source" building and I definately believe in documenting.
I've learned a lot from other people breaking stuff on here, so while TRF isn't what it used to be to me, I still have a need to document what I'm doing some way or another. Maybe once I get the money, time and ego I'll have a website, but until then this will have to do. Still sound pretentious? Yeah, I think so too.

Okay, I'm done pontificating, and I'm sure you don't care anyways. I think I'll put this in smaller font to make it seem less important.

I'm making a filament winder. Yay. It's about time I got around to it too. Given the amount of composites I do, the scope of some future projects and my compulsive need to always be making something, I'm surprized I didn't get around to it sooner.

As far as CNC machines go, filament winders are about as simple as it gets. I think they're technically only 2 axis machines (depending on the winder), but only really have one axis that doesn't move continuously. Perfect start to making CNC machines.
As far as my design goes: I'm essentially just ripping off the X-winder (with an improvement or two)

The bullet points:
  • 5" x 72" tube capacity
  • 1515 Aluminum Rail Construction
  • Spindle powered by NEMA 34 stepper
  • Carriage powered by NEMA 23 stepper
  • Both Steppers Driven by Arduino + GRBL shield
  • Custom program to generate G code

Now, the CAD file I've been working on isn't completely done, but it's good enough for me to start working (and spending lots of money on extrusions).
I still need to find out exactly how I'm going to do the delivery arm and the resin rollers.

Another big design consideration is how I'd do linear motion. If you've never looked into it, you'd never imagine how much linear bearings or linear guides would cost. If I had infinite money to spend on this I'd buy some HSK linear rails and go all out with this machine's precision. Unfortunately my tag line thing up there ^^^ is true. I'm going with roller wheels that will slide onto the track's T slots. This isn't a machine that will be under extremely high forces, so $600 guides are a little overkill. That being said, I didn't even want to spend the $100 for the roller wheels from, so I made my own. All it takes is about 4 hours, a metal lathe and some scrap 2011-T4 aluminum.

Here's what I'm going for:

Because I wanted to keep the bearing housings precisely aligned, I opted to use soft jaws on the lathe (jaws that are cut in place), just for concentricity and repeatability's sake.
Here's a blank wheel slug inside of the soft jaws.

I did an operation (like a face, bore, or shoulder turning) with a DRO set to 0,0 at the finished spec on one side, then flipped it and repeated. That ensured all rollers came out to within about .0005 with eachother with no measureable concentricity issues between the bearing housings.

All 4 finished and inspected.

I then press fit 3/8 ball bearings into each side. I tried it out with a low precision 3/8-16 hex head screw, and they seem to work pretty well. The real test is when the shoulder screws get here.

That's all for now. Like I said in the title, this'll be a different build thread. Much fewer openrocket screenshots at least. Oh and I should probably mention that this is a joint project with mr. solarover. Running a metal lathe, I can do. Arduinos and electronics, not so much.
Watching intently. Be aware of the current limit on the GRBL shield. I believe you are already close to the current limits with the NEMA 23. I guess you aren't looking for high rpm's though, so you'll probably be fine with the 32. I would love to build one of these, but I'd never be able to write the software to generate the Gcode.

Also, glad you are back, and particularly with this thread. Looking forward to the build playing out. As far as being a "poor college kid" you could probably augment the available funds by winding a few custom tubes when you are done. Big CF tubes are not cheap as I am sure you are aware.

Good luck.
Last edited:
I understand your feelings about TRF.

That said, that is a great looking project. Watching intently.
Yep TRF, lol.

This is awesome! I was thinking of making one too for composite cases next summer. I think Clay has access to one somewhere in Utah.

Please do a thread on this! Thanks man!
Hey Alex !

If it wasnt for TRF we may not have met.. so we both can cherish that.

Anh how..interesting project , thanks for sharing .

Well, This'll get started slowly. Im about to leave the country for a few weeks with not ONE milling machine in sight. As far as physically building this thing goes, it wont be happening. At least for a few weeks.

Good opprotunity to work on the software side of things.

Like I mentioned earlier, I hope to get this machine to run off of a GRBL shield and an Arduino. The GRBL shield was designed to be used to control hobby CNC routers / mills / plasma cutters. I'm not making a CNC mill at the moment (but ask me again in two years), so it'll take a little modification to run. Since the GRBL shield is designed to run CNC machines, you don't need to write any C+ programs for the arduino (or whatever it takes). Instead the GRBL sheild accepts G/M code. G/M code is a somewhat universal language between CNC machines, and it's not incredibly complicated. G code is a series of letters and numbers that tell the machine where to go and how to get there. A normal string of G code for a mill or router might look something like:

G00 X0. Y0. Z2. (G00 means rapid movement. In this case to the coordanates 0,0,2)
G01 Z0. F20 (G01 means linear motion to Z0 at a feed rate (F) of 20 inches per minute)
G01 X2. Y-.5 (use that same feedrate to move linearly to X2 and Y-.5)
G02 X2.5 Y0. R.5 (G02 means a clockwize arc that will end at X 2.5, Y0. and have a radius of .5in)
G00 Z2. (Rapid move up to Z of 2.)

If you want to learn about how to work with CNC machines, I very highly reccomend first learning how to hand program machines before going straight to CAM. It'll help a lot down the road.

Since the filament winder is a one axis machine, the G code for this should actually be incredibly easy to write. The spindle will rotate at a constant speed while the carriage will move left and right at a very precise speed and distance.
What the carriage essentially needs to do is:

Begin by pausing at the tube start point to wrap the filament around the mandrel once or twice.
Move to the tube's end point at a specific feed rate. Combined with the rotation of the mandrel, we should be able to control the wind angle with the feed rate
Pause for a certain time interval. This is so the fiber will be placed at the correct position so it will not overlap during the return pass.
Return to the 0 point.
Pause for the same time interval

This will be repeated until the number of passes in a layer has been completed. It can then do another layer at another wind angle or repeat that layer again or whatever you want it to do.

For this process, the G/M code might look something like this
O1002 (program number)
G00 G28 G20 (rapid to home position)
M00 (stop program to place fiber)
G01 X0 F20 (move carriage to start position)
M03 S20 (rotate spindle clockwise at 20RPM)
G04 S2000 (dwell for 2000 milliseconds)
G01 X20 F40 (move to 20in at a feed rate of 40in/sec)
G04 S2000 (pause for correct fiber placement)
G01 X0 F40 (move to 0in at a feed of 40 in/sec)
G04 S2000 (pause for the same time increment)
*repeat these 4 lines until the number of moves in completed
*repeat that until the number of wraps is completed
M05 (spindle stop)
M00 (stop program to cut fillament)
G00 G28 (rapid to home position)
M03 (end of program)

All the numbers I entered are all just arbetrary numbers. If I were to actually hand write a program, I'd have to do a bit of math to find the exact carriage speed and pause interval.
This is all pretty simple G code, but the last thing I want to do is a bunch of trig and hand programming whenever I wrap a different size, length, or angle.
I'd like to have a program where the user inputs the following values...

  • Spindle Speed (RPM)
  • Mandrel Size (in inches)
  • Fiber width (in inches)
  • Fiber thickness (in inches)
  • Wind Angle (in degrees)
  • Number or wraps

...And then just spit out the finished G code along with the estimated wind time, tube thickness and aprox. amount of epoxy needed.

I'm essentially writing a CAM program. Plenty of these already exist for CNC milling and turning operations. If you've used any 3D printing program or any CNC machining program, you've used a CAM program that essentially takes your solid part, figures out where the tool needs to go and just spits out the G code for that operation.
Mine wont have the bells and whistles that every other one has, but conceptually it'll be the same.

Looks like it's time for me to learn how to program. I have virtually no computer programming experience, so I'm guessing this'll be a pretty steep learning curve for me. Anyone have suggestions on what a good language to learn to write this program? I've been reccomended to learn Python, and I've watched a tutorial or two about it, but I'm still open for suggestions. I'll have about a month with a lot of free time that I can't spend in a shop, so I think I'll try and get this whole thing figured out then.

Wow, long post.

I absolutely recommend python. I've been using it in a professional setting (computer engineer by trade) for >15 years and continue to be impressed with the expressiveness, ease of use, and overall productivity gained. It is particularly well suited to the use case you describe.

Feel free to PM me questions as you get started I'll help where I can, and good luck!
Will your winder be able to handle non cylindrical shapes like nose or tail cones?
I absolutely recommend python. I've been using it in a professional setting (computer engineer by trade) for >15 years and continue to be impressed with the expressiveness, ease of use, and overall productivity gained. It is particularly well suited to the use case you describe.

Feel free to PM me questions as you get started I'll help where I can, and good luck!
Any tips for where to get started?
Will your winder be able to handle non cylindrical shapes like nose or tail cones?
I've thought about this for a bit, and I'm not sure. To maintain the same fiber angle I'd need to slow down the carriage movement as the diameter decreases.

While I'm on that topic, I might as well mention the math that's involved in this.
The math really isn't super difficult. If you took high school algebra, you should be able to logic you way through it.

Like I said, the wind angle is a relationship between the rotational speed of the mandrel and the linear speed of the carriage. That should just be (Tan^-1(pi*D*RPM/F)). Since the operator inputs the RPM and angle and the program will run the Feed rate, solving for that is (pi*D*RPM)/(Tan(angle). That'll give the feed rate of the carriage in in/min. Perfect.
If the diameter is decreasing (like on a nosecone or a boat tail), the feed rate will also have to decrease to maintain that angle.

I'm not really sure how to do that in G code. I guess it could be broken down into a number of different "steps" that could approximate the decrease in feed rate, but I'm not sure how accurate that would be. I'd imagine I'd have to make each step very fine in order to get a consistant result.
The G code with steps for a conical NC with a consitant fiber angle might look something like
G01 X.1 F20
X.2 F19
X.3 F18
X.4 F17
and so on...

Who knows if that'll work. Another option would be to increase spindle speed as the carriage progressed. Not sure I want to play with that though.

Besides calculating feed rate the other big thing is going to be the pause in between passes to make sure each pass lays the fiber correctly on one another.
What I want to do is wrap each pass 180 degrees from the previous one, +- the fiber width. That way if you look at the tube dead on, the beginning of each pass will "jump around" on the tube. I think that's how most fillament winders do it. If someone knows different, please correct me.

What I need to know first is how many passes it will take to complete a layer of carbon fiber. Since the fibers are being layed at an angle on the tube, the width of the fiber won't be directly what determines the number of passes. It'll be what I'm just going to call the "axial" width of the fiber (Wa) because if you are looking at the tube along it's axis, thats how wide the fibers would appear.

That formula's just basic trig. Wa=W/Cos(angle).

From that, I can find how many wraps it'll take to complete a full pass (im just gonna call that N). That's just N= Wa/(pi*dia). That number will have to be rounded up ( because there's no such thing as "half a pass").

From the N number I can figure out how long the carriage will have to pause in order to lay the next fiber perfectly.
This was a little more tricky then I imagined. If you have an even N number, the dwell time (P) will alternate between two different formulas:

P=30/RPM for passes 1,3,5,7.... (odd pass numbers)
P=(30/RPM)-(60/RPM*N) for passes 2,4,6,8.... (even pass numbers)

For tubes that need an odd number of passes, the dwell time is just:
That should be the same for all passes.

Here's all my work drawn out for this math.
There's an example between a tube with an odd number of passes and one with an even number. The even one needs to lay a fiber 180 degrees opposite between every other staggered layer in order to lay the fibers right.
Hope you can read my handwriting.

I would love to get your insights on this project. Currently, I am in the middle of a design/build for a filament winding machine for continuous basalt fiber roving. Since I also love rockets I am using the R&D time to build out some new rockets with the material and tools.

If you are willing to talk sometime I would like to hear about your experiences on this build. Both good or bad would be helpful.

Update. I have the winder built and rough calibration finished. I just got a few new rolls of basalt roving to work with. The rolls I could grab had a relatively low filament count (1900), That means I will have to do many turns to wind the tube.

More turns means more time and that puts me in a race with the epoxy. I can easily solve the issue by using the thermal set epoxy, but then I need the resin to hit 160c before it kicks. I don't think my PVC mandrel will handle that very well. So that leaves me with tweaking my regular mixes. I could stick a cooler on the resin bath to slow it down, but that makes wetting it harder. Adding a dilutant would also slow it down at the cost of strength. We are starting to get deep into the alchemy zone.

My guess is I will have a few failures before I get this right.

I will try to take some pics as I go.
Awesome, please keep us posted on your successes and lessons learned!
Hey Doug, Any updates on this project, I am wanting to build/buy a machine for a few project I have in mind but don't want the spend $6000 on an X-Winder, also for software to generate the g-code I found CadWind but I don't know how much it cost yet