3'' Nano Squall (10mm EDF, Single Phase Sensorless Motor) - Page 15 - RC Groups
 Jan 10, 2013, 09:07 PM Life begins at transition Is that turning about 60 degrees?!? Holy torque! How are you making them? The guys seem to have issues printing at the moment, and I could never get an airfoil shape out of SWs... You don't have access to a CNC router do you??
Jan 11, 2013, 02:57 AM
Micro Jet Pilot
Hey Odysis,

I am writing a Visual C# code that generates the shape based on mathematical equations. The slope is just one of many parameters that can be altered anytime. The goal is to write a program that generates arbitrary props/fans based on parameters like slope, diameter, width, airfoil, twist... Also, I want to test different variants to find the sweet spot of a micro fan. The perfect blade shape I believe you get when you roll the airfoil onto a cylinder surface and control the slope as a function of radius.

What about the shapeways issues?? The 10mm fans I got were great. In fact, an airfoil needs to be adapted to have a certain thickness at the trailing edge, otherwise you will always get issues. What problems did you have?

Chris

using System;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}
protected override void OnPaint(PaintEventArgs paintEvnt)
{
double[] yt = new double[35] { 0.0000000f, 0.0007400f, 0.0020500f, 0.0040100f, 0.0072501f, 0.0101101f, 0.0159602f, 0.0218602f, 0.0276603f, 0.0333003f, 0.0386704f, 0.0437004f, 0.0482705f, 0.0523105f, 0.0557406f, 0.0585106f, 0.0605606f, 0.0618406f, 0.0623106f, 0.0619406f, 0.0606906f, 0.0585006f, 0.0552506f, 0.0509405f, 0.0456905f, 0.0397704f, 0.0336203f, 0.0275703f, 0.0218302f, 0.0165302f, 0.0116701f, 0.0071601f, 0.0033300f, 0.0009300f, 0.0001700f };
double[] xt = new double[35] { 0.0000000f, 0.0000900f, 0.0007100f, 0.0022600f, 0.0060001f, 0.0105801f, 0.0232502f, 0.0406604f, 0.0627206f, 0.0892309f, 0.1198912f, 0.1543615f, 0.1923019f, 0.2333023f, 0.2769428f, 0.3227532f, 0.3702637f, 0.4189842f, 0.4683847f, 0.5179552f, 0.5671857f, 0.6155261f, 0.6625966f, 0.7080970f, 0.7517775f, 0.7934279f, 0.8326283f, 0.8688086f, 0.9013990f, 0.9298793f, 0.9537596f, 0.9728698f, 0.9873199f, 0.9966900f, 1.0000000f };
double[] yb = new double[33] { 0.0000000f, -.0007200f, -.0019000f, -.0036000f, -.0062501f, -.0083701f, -.0126101f, -.0165302f, -.0200702f, -.0232402f, -.0259903f, -.0282703f, -.0300003f, -.0310903f, -.0313703f, -.0306303f, -.0287603f, -.0257803f, -.0218802f, -.0175402f, -.0131101f, -.0088901f, -.0051001f, -.0019100f, 0.0005700f, 0.0022600f, 0.0031800f, 0.0033800f, 0.0030200f, 0.0022800f, 0.0013600f, 0.0005300f, 0.0001700f };
double[] xb = new double[33] { 0.0000000f, 0.0002500f, 0.0011500f, 0.0031300f, 0.0076201f, 0.0126801f, 0.0268403f, 0.0459705f, 0.0699307f, 0.0984610f, 0.1312113f, 0.1677617f, 0.2076921f, 0.2505225f, 0.2957530f, 0.3430134f, 0.3920439f, 0.4425844f, 0.4944449f, 0.5472355f, 0.6002760f, 0.6528665f, 0.7042770f, 0.7537276f, 0.8004881f, 0.8437984f, 0.8829688f, 0.9173292f, 0.9462994f, 0.9694097f, 0.9862698f, 0.9965400f, 1.0000000f };

double[,] x = new double[100, 100];
double[,] y = new double[100, 100];
double[,] z = new double[100, 100];
double ox = -0.33333333;
double oy = 0;
double a = -.3;
double r;
int nt = 35;
int nb = 33;
int n, j, i;
int x0 = 600;
int y0 = 300;
string sx1, sy1, sz1, sx2, sy2, sz2, sx3, sy3, sz3, sx4, sy4, sz4, snx, sny, snz;
double b, nx, ny, nz, ax, bx,ay,by,az,bz;
n = nt + nb - 1;

//urrippe
a = 0;
for (i = nt - 1; i >= 0; i = i - 1)
{
x[0, nt - i - 1] = (xt[i] * Math.Cos(a) + yt[i] * Math.Sin(a)) + ox;
y[0, nt - i - 1] = (-xt[i] * Math.Sin(a) + yt[i] * Math.Cos(a)) + oy;
z[0, nt - i - 1] = 0;
}

for (i = 0; i < nb; i = i + 1)
{
x[0, nt + i - 1] = (xb[i] * Math.Cos(a) + yb[i] * Math.Sin(a)) + ox;
y[0, nt + i - 1] = (-xb[i] * Math.Sin(a) + yb[i] * Math.Cos(a)) + oy;
z[0, nt + i - 1] = 0;
}

for (j = 1; j <= 90; j = j + 1)
{
a = .8 / ((double)j / 90 + 1);
r = .4 * ((double)j / 90 + 1);
for (i = 0; i < n; i = i + 1)
{
x[j, i] = (x[0, i] * Math.Cos(a) + y[0, i] * Math.Sin(a)) + ox;
y[j, i] = (-x[0, i] * Math.Sin(a) + y[0, i] * Math.Cos(a)) + oy;
b = x[j, i] / r;
z[j, i] = Math.Cos(b) * r;// / (double)j;
x[j, i] = Math.Sin(b) * r;// / (double)j;
}
}
//
label1.Text = yt[0].ToString();
// Get the graphics object
Graphics gfx = paintEvnt.Graphics;
// Create a new pen that we shall use for drawing the line
Pen myPen = new Pen(Color.DarkBlue);
// Loop and create a new line 10 pixels below the last one
for (i = 00; i <= 900; i = i + 1)
{
gfx.DrawLine(myPen, 0, i, 1600, i);
}
Pen myPen2 = new Pen(Color.White);
CultureInfo USCulture = new CultureInfo("en-US");
try
{
writeFile.WriteLine("");
for (j = 1; j <= 89; j++)
{
for (i = 1; i < n; i++)
{
gfx.DrawLine(myPen2, (int)(x[j, i] * 1000f + x0), (int)(-y[j, i] * 1000f + y0 + z[j, i]), (int)(x[j, i - 1] * 1000f + x0), (int)(-y[j, i - 1] * 1000f + y0 + z[j, i - 1]));
gfx.DrawLine(myPen2, (int)(x[j + 1, i] * 1000f + x0), (int)(-y[j + 1, i] * 1000f + y0 + z[j + 1, i]), (int)(x[j + 1, i - 1] * 1000f + x0), (int)(-y[j + 1, i - 1] * 1000f + y0 + z[j + 1, i]));
gfx.DrawLine(myPen2, (int)(x[j, i] * 1000f + x0), (int)(-y[j, i] * 1000f + y0 + z[j, i]), (int)(x[j + 1, i] * 1000f + x0), (int)(-y[j + 1, i] * 1000f + y0 + z[j + 1, i]));

sx1 = x[j, i - 1].ToString("#.00000000", USCulture);
sy1 = y[j, i - 1].ToString("#.00000000", USCulture);
sz1 = z[j, i - 1].ToString("#.00000000", USCulture);
sx2 = x[j + 1, i - 1].ToString("#.00000000", USCulture);
sy2 = y[j + 1, i - 1].ToString("#.00000000", USCulture);
sz2 = z[j + 1, i - 1].ToString("#.00000000", USCulture);

sx3 = x[j, i].ToString("#.00000000", USCulture);
sy3 = y[j, i].ToString("#.00000000", USCulture);
sz3 = z[j, i].ToString("#.00000000", USCulture);
sx4 = x[j + 1, i].ToString("#.00000000", USCulture);
sy4 = y[j + 1, i].ToString("#.00000000", USCulture);
sz4 = z[j + 1, i].ToString("#.00000000", USCulture);

bx = x[j + 1, i - 1] - x[j, i - 1];
by = y[j + 1, i - 1] - y[j, i - 1];
bz = z[j + 1, i - 1] - z[j, i - 1];
ax = x[j, i] - x[j, i - 1];
ay = y[j, i] - y[j, i - 1];
az = z[j, i] - z[j, i - 1];
nx = ay * bz - az * by;
ny = az * bx - ax * bz;
nz = ax * by - ay * bx;
snx = nx.ToString("#.00000000", USCulture);
sny = ny.ToString("#.00000000", USCulture);
snz = nz.ToString("#.00000000", USCulture);

//nx=y[j, i - 1]*z[]-z[j, i - 1]*y[];
writeFile.WriteLine("facet normal " + snx + " " + sny + " " + snz);
writeFile.WriteLine("outer loop");
writeFile.WriteLine("vertex " + sx2 + " " + sy2 + " " + sz2);
writeFile.WriteLine("vertex " + sx1 + " " + sy1 + " " + sz1);
writeFile.WriteLine("vertex " + sx3 + " " + sy3 + " " + sz3);
writeFile.WriteLine("endloop");
writeFile.WriteLine("endfacet");

writeFile.WriteLine("facet normal " + snx + " " + sny + " " + snz);
//writeFile.WriteLine("facet normal 0.0 0.0 0.0");
writeFile.WriteLine("outer loop");
writeFile.WriteLine("vertex " + sx2 + " " + sy2 + " " + sz2);
writeFile.WriteLine("vertex " + sx4 + " " + sy4 + " " + sz4);
writeFile.WriteLine("vertex " + sx3 + " " + sy3 + " " + sz3);
writeFile.WriteLine("endloop");
writeFile.WriteLine("endfacet");
}
}
writeFile.WriteLine("");
writeFile.WriteLine("endsolid");

writeFile.Flush();
writeFile.Close();
writeFile = null;
}
catch (IOException ex)
{
MessageBox.Show(ex.ToString());
}

}

private void button1_Click(object sender, EventArgs e)
{
try
{
string line = null;
while (true)
{
if (line != null)
{
MessageBox.Show(line);
}
}
}
catch (IOException ex)
{
MessageBox.Show(ex.ToString());
}
}

private void button2_Click(object sender, EventArgs e)
{

}
}
}

### Images

Last edited by Chris T; Jan 11, 2013 at 01:22 PM.
Jan 11, 2013, 03:22 AM
Life begins at transition
The ideal is when the pressure rise is equal along the span. If you want, I can point you at some fan design textbooks.

This is the spreadsheet I made up. It's not commented at all, but the two important angles for the rotor are β2-β1 (that's the camber of the blade at a given point) and θ is the angle it's mounted at.

It doesn't quite work out to be a segment of a cylinder, but this way takes way more math

SW can't do below 0.7mm reliably. That meant even for my 30mm fans, the whole airfoil had to be printed as a square. It could be filed into roughly the right shape, but not printed ready-to-go. BIM and Nitro have apparently gotten a couple of dodgy prints of late using thin walls like that. Mine were never dodgy, but I also didn't push the limits like I know Dave would be doing!

I'm amazed at the effort you're going to though! 'lectrical eng in the ESC, aero eng in the fan, structural in the plane... One man band! Rock on!

### Files

Jan 11, 2013, 03:27 PM
Micro Jet Pilot
hey yes I am interested in the theory There are several ways of balancing the pressure: cord, pitch, camber. What's the best way and what's the camber variation all about? Can't the camber just be in the airfoil?

Thanks

Chris

### Images

 Jan 11, 2013, 06:21 PM Registered User You guys should be working for NASA
Jan 11, 2013, 08:17 PM
Life begins at transition
Quote:
 Originally Posted by Chris T hey yes I am interested in the theory There are several ways of balancing the pressure: cord, pitch, camber. What's the best way and what's the camber variation all about? Can't the camber just be in the airfoil? Thanks Chris
Yup, there's a few ways, and they all interact with each other, and when you improve one, another gets worse! Ah, aerodynamics...

Changing chord affects solidity. The line that deals with that is the first of the yellow (user input required) lines. Fig 9.12 shows the recommended solidity for a given intake speed, based on wind tunnel tests and a whole bunch of math.

Camber is given by theta. Pretty straight forward that one. It's based on the pressure rise you want, and chord at the span-wise station, and an assumed deviation (from the Kutta condition). I used 10 degrees, hence thera is always b2-b1 + 10.

Pitch Φ comes from the amount of pressure you want, the rotational speed and the inlet airspeed (plus a few other things like AoA). It goes hand-in-hand with the others to ensure each blade section is doing what's it's meant to.

A big thing with all of this - have a look in the top left corner, there's a lot in yellow. Without knowing what speed you're designing for, everything's a guess. You can therefore design a fan that works really well on the bench, but poorly in the air, or vice-versa. That's where the HDT/HST thing comes from, not purely the number of blades.

Using the cylinder sections, you won't get free-vortex flow - that means the pressure isn't constant along the span. I've only got one example to hand, and it comes out around 80% as efficient as a fully designed fan. But much, much easier to design and build!
 Jan 12, 2013, 02:41 AM Micro Jet Pilot Hey Odysis, thanks for all that information. I will have to think about it some more. ABout the cylinder sections: I think you got me wrong. Have a close look to the pics. I didn't meen using a cylinder section as the blade as done in the plywood fan tutorial. Of coarse that is an easy way of handcrafting a blade. But I have all degrees of freedom here and the math for the geometry isn't so bad (in contrast to the math of the aerodynamics). I meant, I roll the root airfoil around the hub (cylinder) and the tip airfoil around the shroud cylinder and all intermediate airfoil crossections alike. First order, pitch should be proportional to 1/r, so this gives these surfaces bent in all directions, not cylinder sections at all Chris
 Jan 12, 2013, 03:27 AM Life begins at transition Ah yes, gotchya! That sounds fair. As you can see, there's a rather large amount of math, and a healthy dose of "TLAR" in fan design. I gave up once I couldn't print them to the accuracy the math was working out to be. No use in trying to make a 5% more efficient blade when I can't print anything but a square block! Stu and Winmodels' threads are great if you're really interested in this. Likewise, any design that uses free vortex flow will be a good start. Still astounding that you're making every component on this jet from scratch... You crazy!
Jan 13, 2013, 08:56 AM
Micro Jet Pilot
almost there...

### Images

Last edited by Chris T; Jan 13, 2013 at 01:36 PM.
 Jan 13, 2013, 05:54 PM Team30 Micro EDF Nice stuff Chris!
 Jan 14, 2013, 11:30 AM Micro Jet Pilot Hey, I looked around a bit and found that high resolution STL is technically no problem. Don't know about the price, but probably worth investigating alternatives to shapeways: http://www.plunkettassociates.co.uk/...ithography.asp Chris
 Jan 14, 2013, 05:48 PM Team30 Micro EDF Now you're talking Chris! Nice find. Strength of ABS plastic and micro detail. Where do we go to from here?
 Jan 14, 2013, 06:03 PM Life begins at transition Wow, awesome! Good find Print it, cast a mould, then cast parts in chopped carbon/resin. No layups, wicked strength!
 Jan 17, 2013, 03:15 AM Micro Jet Pilot Waiting for a price quote from Plunkett... I want a green fan
 Jan 17, 2013, 03:26 AM Team30 Micro EDF I'm really keen to see their results Chris. This will improve the quality of our rotors and cases(stator vanes). Let's hope you don't have to get a bank loan out to pay for it.