dokus wrote:
I've got a prop design program that determines diameter, pitch, and
blade chord from inputs of airfoil, RPM, tip speed, altitude,
horsepower, number of blades, and blade planform, rectangular, tapered
or elliptical. I would like to make this available to those interested
at no charge if means of uploading and downloading are available.
I wrote it a number of years ago and have not adapted it to windows, it
runs under DOS. I can also supply the source code.
Ed Dokus
Hi Paul. I thought I had responde3d to all but I don't find your file
in my out box. Here's a copy in case I forgot.
Ed Dokus
---------------------------------------------------------------
Hi To all. Please read the READ.ME file, it gives the basis for the program.
Others on the list have offered to enhance the program for ease of use and
the Macintosh. There are no graphics or drawings provided. A user will need
to obtain a drawing of the airfoil selected. For what it's worth, I have used
the data provided by Rutan for the Variviggen and the program grinds out prop
designs in close agreement to what he recommends for the o-320, and o-360
engines at 7500ft.,2700RPM, 75% power, 4415 prop airfoil.
Have a blast! To those of you who offered to enhance the program,
please follow through for the good of those who may not find it sufficiently
friendly in it's present form.
Good luck to all. Ed Dokus
---------------------------------------------------------------
This disk contains both the source code and the compiled basic program
to design an aircraft propeller based upon aircraft and engine performance
data. The program is an extended version of the technique outlined in my
presentation to members of EAA Chapter 106 in October 1990. The extensions
allow the user to vary the angle of attack (alpha), which affects the blade
chord, and the tip velocity, which affects the prop diameter. Several blade
planforms are also provided for variety. In addition, an effort is made to
allow for degradation due to tip-loss. The approach is substantially the same
as one used by John Roncz in a presentation he made at an Oshkosh forum some
years back, and material garnered from a variety of aerodynamic textbooks
in which the defining equations were:
Lift L = 1/2(rho)(b)(Cl)(Vro)^2(l)(chord)
Thrust T = Lcos(Phi0) - Dsin(Phi0)
Drag D = 1/2(rho)(b)(Cd)(Vro)^2(l)(chord)
Torque Q = [Lsin(Phi0) + Dcos(Phi0)](Omega)
Alpha a = angle of attack
Theta 0 = angle of induced velocity
Phi = Tan^-1[(V/Omega)(r)]
rho = air density
r = radius
V = forward speed
b = Number of blades
Beta B = a + 0 + Phi (PITCH ANGLE)
Pitch = Tan^-1(Beta)
The program has been distributed world-wide and has not been subjected to
any harsh criticism to date. It has also been used as part of a lab course at
Bucknell university. However; no guarantees are offered or implied. The
design procedure is based upon sound engineering fundamentals and is offered
to the fraternity in the spirit of comradeship. I would be pleased to
receive any helpful suggestions, results achieved, or errors uncovered,
whether they be typographical or a result of faulty reasoning on my part.
In any event, good luck to all.
Edwin A. Dokus
EAA 51432
5-14-99
10 '
20 CLS
30 KEY OFF: LOCATE 10, 11
40 PRINT " PROPELLER DESIGN "
50 LOCATE 11, 10
60 PRINT " PROGRAM "
70 PRINT " "
80 LOCATE 13, 10
90 PRINT " BY "
100 LOCATE 14, 10
110 PRINT " EDWIN A. DOKUS "
120 LOCATE 15, 10
130 PRINT " EAA 51432 "
140 LOCATE 18, 10
150 PRINT "IS YOUR PRINTER ON?"
160 PRINT
170 ON ERROR GOTO 200
180 LPRINT CHR$(27); "E": LPRINT CHR$(27); "G"' REM DARK
PRINT;DOUBLESTRIKE
190 LPRINT CHR$(27); "N"; CHR$(5)' REM SKIP 5 LINES AT
PERFORATIONS
200 IF ERL = 180 THEN 210 ELSE 220
210 BEEP: PRINT "PRINTER IS OFF!!!": GOTO 230
220 LOCATE 18, 10: PRINT " "
230 DIM T(50), D(50), VR(50), CHORD(50), VR0(50), L(50), Q(50), PHI(50),
PHI0(50)
240 DIM THETA(50), K(50), R(50), BETA(50), TH(50), TRQ(50), LFT(50),
DRG(50), DT(50)
250 DIM XDAT(50), YDAT(50), TL(50)
260 TODD = 0: TEVEN = 0: DODD = 0: DEVEN = 0: QODD = 0: QEVEN = 0
270 T = 0: I = 0 'TRIAL COUNTER
280 PI = 3.1416
290 INPUT "ALLOW FOR TIP LOSS Y/N "; TL$
300 IF TL$ = "Y" OR TL$ = "y" THEN 310 ELSE 320
310 TL$ = "YES": PRINT "YES": GOTO 330
320 TL$ = "NO": PRINT "NO"
330 INPUT "ENTER NO. OF BLADES."; BLADES: PRINT
332 PRINT "7500 Ft. IS APPROPRIATE FOR 75% POWER.": PRINT
340 INPUT "ENTER ALTITUDE,CRUISE,Ft."; ALT: 'ALTITUDE,
Ft
350 RHO = .00238 - 6.6E-08 * ALT 'AIR DENSITY, SLUGS/CUBIC
Ft
360 CLS : PRINT : PRINT : PRINT
370 PRINT " 1) 1408", "2) 1410", "3) 1412", "4) 2408", "5) 2410"
380 PRINT ' AIR
390 PRINT "6) 2412", "7) 2415", "8) 2418", "9) 2421", "10) 2424"'
FOILS
400 PRINT
410 PRINT "11) 4412", "12) 4415", "13) 4418", "14) 4421", "15) 4424"
420 PRINT : PRINT "NACA 4415 is similar to CLARK Y": PRINT
430 INPUT "SELECT AIRFOIL TO BE USED."; S
440 ON S GOSUB 460, 470, 480, 490, 500, 510, 520, 530, 540, 550, 560,
570, 580, 590, 600
450 GOTO 610
460 AIRFOIL$ = "1408": CL0 = .1: CL8 = 1: CDCL0 = 8.999999E-03: CDMIN =
.0088: CD8 = .023: RETURN
470 AIRFOIL$ = "1410": CL0 = .1: CL8 = .9: CDCL0 = .0094: CDMIN = .0093:
CD8 = .0175: RETURN
480 AIRFOIL$ = "1412": CL0 = .15: CL8 = .975: CDCL0 = .0098: CDMIN =
.00975: CD8 = .018: RETURN
490 AIRFOIL$ = "2408": CL0 = .2: CL8 = 1.05: CDCL0 = .00899: CDMIN =
.00899: CD8 = .024: RETURN
500 AIRFOIL$ = "2410": CL0 = .2: CL8 = 1!: CDCL0 = .01: CDMIN = .0095:
CD8 = .019: RETURN
510 AIRFOIL$ = "2412": CL0 = .25: CL8 = 1!: CDCL0 = .01: CDMIN = .0098:
CD8 = .0175: RETURN
520 AIRFOIL$ = "2415": CL0 = .2: CL8 = .95: CDCL0 = .0104: CDMIN =
.0102: CD8 = .0165: RETURN
530 AIRFOIL$ = "2418": CL0 = .25: CL8 = .9: CDCL0 = .0106: CDMIN =
.0105: CD8 = .0165: RETURN
540 AIRFOIL$ = "2421": CL0 = .152: CL8 = .8: CDCL0 = .0125: CDMIN =
.012: CD8 = .0206: RETURN
550 AIRFOIL$ = "2424": CL0 = .15: CL8 = .8: CDCL0 = .013: CDMIN = .0128:
CD8 = .024: RETURN
560 AIRFOIL$ = "4412": CL0 = .4: CL8 = 1.15: CDCL0 = .0115: CDMIN = .01:
CD8 = .017: RETURN
570 AIRFOIL$ = "4415": CL0 = .4: CL8 = 1.1: CDCL0 = .0115: CDMIN =
.0106: CD8 = .0155: RETURN
580 AIRFOIL$ = "4418": CL0 = .35: CL8 = 1.03: CDCL0 = .012: CDMIN =
.0115: CD8 = .017: RETURN
590 AIRFOIL$ = "4421": CL0 = .3: CL8 = .95: CDCL0 = .0125: CDMIN = .012:
CD8 = .022: RETURN
600 AIRFOIL$ = "4424": CL0 = .27: CL8 = .8: CDCL0 = .0133: CDMIN =
.0132: CD8 = .023: RETURN
610 M = (CL8 - CL0) / 8
620 INPUT "ENTER ALPHA DESIRED,(-1 TO +8)DEG. 0, TYPICAL"; ALPHA
630 CL = CL0 + M * ALPHA 'COEFFICIENT OF LIFT
640 TOP = LOG(ABS((CD8 - CDMIN) / (CDCL0 - CDMIN)))
650 BOT = LOG(ABS((CL8 - CL0) / CL0))
660 N1 = TOP / BOT
670 A1 = (CD8 - CDMIN) / (ABS(CL8 - CL0)) ^ N1
680 CD = CDMIN + A1 * (ABS(CL - CL0)) ^ N1 'COEFFICIENT OF DRAG
690 ALPHA = ALPHA * PI / 180 'ANGLE OF ATTACK
RADIANS
700 IF K$ = "Y" OR K$ = "y" THEN 910
710 INPUT "ENTER AIRCRAFT TYPE."; AC$
712 PRINT "USE 75% OF ENGINE HP RATING": PRINT
720 INPUT "ENTER HP, CRUISE"; HP: PRINT 'ENGINE
HORSEPOWER, HP
722 PRINT "USE MAX. RATED RPM, 2700 FOR LYCOMING.": PRINT
730 INPUT "ENTER RPM, CRUISE"; RPM: PRINT 'PROP ROTATIONAL
SPEED, RPM
732 PRINT "USE MAX SPEED AT 7500 FT AND MAX RPM": PRINT
740 INPUT "ENTER AIRSPEED,CRUISE,MPH."; V: PRINT
'AIRSPEED, MPH
750 INPUT "ENTER MAX TIP SPEED,Ft/SEC (800,TYPICAL)"; TS'PROP TIP SPEED,
Ft/SEC
760 PRINT : CLS : LOCATE 10, 15: PRINT "SELECT PLANFORM": PRINT : PRINT
770 PRINT " 1) RECTANGULAR CHORD"
780 PRINT " 2) TAPERED CHORD"
790 PRINT " 3) ELLIPTICAL CHORD"
800 PRINT
810 PRINT "ENTER PROP PLANFORM DESIRED."; : T1 = 0
820 INPUT PLNFRM: ON PLNFRM GOSUB 850, 870, 890
830 DIAM = TS / (PI * RPM) * 60: R = DIAM / 2: DELTAR = R / 50'PROP
DIAM., Ft
840 GOTO 910
850 PL$ = " RECTANGULAR"' REM CHORD IS CONSTANT
860 RETURN
870 PL$ = " TAPERED CHORD": INPUT "ENTER TIP/HUB CHORD RATIO"; T1: 'REM
LINEAR TAPER
880 RETURN
890 PL$ = " ELLIPTICAL"' REM ELLIPTIC TAPER TO ZERO.
900 RETURN
910 CHORD = .5 'FIRST GUESS
Ft
920 CLS
930 TODD = 0: TEVEN = 0: DODD = 0: DEVEN = 0: QODD = 0: QEVEN = 0
940 FOR I = 0 TO 50
950 IF PLNFRM = 1 THEN 980
960 IF PLNFRM = 2 THEN 990
970 IF PLNFRM = 3 THEN 1000
980 CHORD(I) = CHORD: GOTO 1010
990 CHORD(I) = CHORD * (T1 + (1 - T1) * (1 - R(I) / R)): GOTO 1010
1000 CHORD(I) = CHORD * SQR(1 - (I / 50) ^ 2): GOTO 1010
1010 NEXT I
1020 OMEGA = 2 * PI * RPM / 60
1030 IF TL$ = "YES" THEN 1050 ELSE 1040
1040 TL = 0: GOTO 1060
1050 TL = BLADES * CL * CHORD(38) / R
1060 FOR I = 1 TO 50
1070 TL(I) = TL * R(I) / R
1080 NEXT I
1090 T = T + 1: LOCATE 10, 25: PRINT "COMPUTATION IN PROGRESS!"
1100 LOCATE 12, 25: PRINT "NO. OF TRIALS ="; T
1110 FOR I = 1 TO 50
1120 R(I) = I * DELTAR
1130 VR(I) = SQR((1.466 * V) ^ 2 + (OMEGA * R(I)) ^ 2)
1140 PHI(I) = ATN(1.466 * V / (OMEGA * R(I)))
1150 K(I) = BLADES * CHORD(I) * CL / 8 / PI / R(I)
1160 THETA(I) = ATN((K(I)) / SIN(PHI(I)))
1170 PHI0(I) = PHI(I) + THETA(I)
1180 BETA(I) = PHI0(I) + ALPHA
1190 VR0(I) = VR(I) * COS(THETA(I))
1200 L(I) = 1 / 2 * RHO * BLADES * CL * (VR0(I)) ^ 2 * CHORD(I) * (1 -
TL(I))' dL/dr
1210 D(I) = 1 / 2 * RHO * BLADES * CD * (VR0(I)) ^ 2 *
CHORD(I)' dD/dr
1220 Q(I) = (D(I) * COS(PHI0(I)) + L(I) * SIN(PHI0(I))) * R(I)'
dQ/dR
1230 T(I) = L(I) * COS(PHI0(I)) - D(I) * SIN(PHI0(I))' dT/dR
1240 NEXT I
1250 FOR I = 1 TO 49 STEP 2 ' BEGIN SIMPSON'S RULE
1260 QODD = QODD + Q(I)
1270 NEXT I
1280 FOR I = 2 TO 48 STEP 2
1290 QEVEN = QEVEN + Q(I)
1300 NEXT I
1310 TORQUE = (Q(1) + 4 * QODD + 2 * QEVEN + Q(50)) * DELTAR / 3
1320 POWER = OMEGA * TORQUE
1330 POWERIN = HP * 550
1340 F = POWER / POWERIN
1350 IF F < .99 THEN CHORD = CHORD / F: GOTO 930
1360 IF F > 1.01 THEN CHORD = CHORD / F: GOTO 930
1370 FOR I = 1 TO 49 STEP 2
1380 TODD = TODD + T(I)
1390 NEXT I
1400 FOR I = 2 TO 48 STEP 2
1410 TEVEN = TEVEN + T(I)
1420 NEXT I
1430 THRUST = (T(1) + 4 * TODD + 2 * TEVEN + T(50)) * DELTAR / 3' END
SIMPSON'S RULE
1440 N = 1.466 * V * THRUST / POWERIN
1450 FOR I = 1 TO 50: TH(I) = T(I) * DELTAR: TRQ(I) = Q(I) * DELTAR:
LFT(I) = L(I) * DELTAR
1460 DRG(I) = D(I) * DELTAR: DT(I) = T(I) * DELTAR
1470 NEXT I
1480 CLS
1490 PRINT " AIRCRAFT TYPE----"; AC$: PRINT
1500 PRINT "CRUISE AIRSPEED----- "; V; "MPH."
1510 PRINT "CRUISE ALTITUDE----- "; ALT; "FEET."
1520 PRINT "CRUISE POWER-------- "; HP; "HP."
1530 PRINT "CRUISE RPM---------- "; RPM; "RPM."
1540 PRINT
1550 IF TL$ = "YES" THEN 1570 ELSE 1560
1560 TL$ = "NO"
1570 PRINT "TIP LOSS INCLUDED? "; TL$: PRINT
1580 PRINT "No. OF BLADES------- "; BLADES
1590 PRINT "PLANFORM------------ "; PL$
1600 IF T1 THEN PRINT "TIP/HUB CHORD RATIO- "; T1
1610 PRINT "PROP AIRFOIL USED--- "; AIRFOIL$
1620 PRINT "ALPHA--------------- "; ALPHA * 180 / PI; "DEG."
1630 PITCH = 2 * PI * R(38) * TAN(BETA(38)) * 12'INCHES
1640 PRINT "PITCH--------------- "; PITCH; "INCHES."
1642 PRINT "PITCH is referenced to blade bottom"
1650 PRINT "DIAM.--------------- "; DIAM * 12; "INCHES."
1660 PRINT "HUB CHORD----------- "; CHORD * 12; "INCHES."
1670 PRINT "3/4 RADIUS CHORD---- "; 12 * CHORD(38); "INCHES."
1680 PRINT "THRUST-------------- "; THRUST; "Lbs."
1690 PRINT "EFFICIENCY---------- "; N * 100; "%."
1700 INPUT "DO YOU WANT A PRINT-OUT?"; PR$
1710 IF PR$ = "Y" OR PR$ = "y" THEN GOTO 1830
1720 INPUT "DO YOU WANT A LIST OF PARAMETERS VS RADIUS Y/N "; D$
1722 PRINT SPACE$(70)
1730 IF D$ = "Y" OR D$ = "y" THEN GOSUB 2170 ELSE 1750
1740 GOTO 2070
1750 INPUT "DO YOU WANT TO TRY ANOTHER PLANFORM? Y/N"; PLN$
1752 PRINT SPACE$(70)
1760 IF PLN$ = "Y" OR PLN$ = "y" THEN T = 0: GOTO 760
1770 INPUT " DO YOU WANT TO TRY ANOTHER AIRFOIL? Y/N"; K$
1772 PRINT SPACE$(70)
1780 IF K$ = "Y" OR K$ = "y" THEN GOTO 360
1790 INPUT "DO YOU WANT A NEW RUN? (Y/N)"; R$
1792 PRINT SPACE$(70)
1800 IF R$ = "Y" THEN RUN 230
1810 IF R$ = "y" THEN RUN 230
1820 CLS : LOCATE 10, 20: PRINT "PROGRAM TERMINATED, RETURNED TO DOS.":
END
1830 ON ERROR GOTO 2040
1840 LPRINT " AIRCRAFT TYPE----"; AC$: PRINT
1850 LPRINT "CRUISE AIRSPEED----- "; V; "MPH."
1860 LPRINT "CRUISE ALTITUDE----- "; ALT; "FEET."
1870 LPRINT "CRUISE POWER-------- "; HP; "HP."
1880 LPRINT "CRUISE RPM---------- "; RPM; "RPM."
1890 LPRINT
1900 LPRINT "TIP LOSS INCLUDED? "; TL$: LPRINT
1910 LPRINT "No. OF BLADES------- "; BLADES
1920 LPRINT "PROP AIRFOIL USED--- "; AIRFOIL$
1930 LPRINT "PLANFORM------------ "; PL$
1940 IF T1 > 0 THEN LPRINT "TIP/HUB CHORD RATIO- "; T1
1950 LPRINT "ALPHA--------------- "; ALPHA * 180 / PI; "DEG."
1960 LPRINT "PITCH--------------- "; PITCH; "INCHES."
1962 LPRINT "Pitch is referenced to blade bottom"
1970 LPRINT "DIAM.--------------- "; DIAM * 12; "INCHES."
1980 LPRINT "HUB CHORD----------- "; CHORD * 12; "INCHES."
1990 LPRINT "3/4 RADIUS CHORD---- "; 12 * CHORD(38); "INCHES."
2000 LPRINT "THRUST-------------- "; THRUST; "Lbs."
2010 LPRINT "EFFICIENCY---------- "; N * 100; "%."
2020 LPRINT : LPRINT
2030 GOTO 1720
2040 IF ERL = 1840 THEN 2050 ELSE 2030
2050 BEEP: PRINT " PRINTER IS OFF!!": GOTO 1490
2060 'GOTO 1570
2070 'LISTING ROUTINE
2080 CLS
2090 R$ = "RADIUS": V$ = "|": N$ = "###.##"
2100 PRINT TAB(5); R$; TAB(20); TLE$; TAB(40); V$; TAB(45); R$; TAB(61);
TLE$
2110 PRINT TAB(5); HT$; TAB(20); LVT$; TAB(40); V$; TAB(45); HT$;
TAB(61); LVT$
2120 FOR J = 1 TO 80: PRINT "-"; : NEXT J
2130 FOR I = 11 TO 30
2140 PRINT TAB(5); : PRINT USING N$; XDAT(I); : PRINT TAB(20); : PRINT
USING N$; YDAT(I); : PRINT TAB(40); V$; : PRINT TAB(45); : PRINT USING
N$; XDAT(I + 20); : PRINT TAB(61); : PRINT USING N$; YDAT(I + 20)
2150 NEXT I
2160 GOTO 1720
2170 CLS : LOCATE 6, 17: PRINT "SELECT PARAMETER DESIRED."
2180 LOCATE 8, 17: PRINT " [1] LIFT
-------------------------------------"
2190 LOCATE 9, 17: PRINT " [2] DRAG |"
2200 LOCATE 10, 17: PRINT " [3] THRUST |"
2210 LOCATE 11, 17: PRINT " [4] TORQUE DISTRIBUTION"
2220 LOCATE 12, 17: PRINT " [5] THETA PER"
2230 LOCATE 13, 17: PRINT " [6] BETA ELEMENT "
2240 LOCATE 14, 17: PRINT " [7] PHI OF "
2250 LOCATE 15, 17: PRINT " [8] PHI0 RADIUS "
2260 LOCATE 16, 17: PRINT " [9] Vr | "
2270 LOCATE 17, 17: PRINT " [10] Vr0 | "
2280 LOCATE 18, 17: PRINT " [11] CHORD | "
2290 LOCATE 19, 17: PRINT " [12] PITCH
-------------------------------------"
2300 FOR I = 1 TO 50: XDAT(I) = R(I) * 12: NEXT I: HT$ = "INCHES"
2310 INPUT S: ON S GOSUB 2340, 2350, 2360, 2370, 2380, 2390, 2400, 2410,
2420, 2430, 2440, 2450
2320 RETURN
2330 RETURN
2340 TLE$ = "LIFT-": LVT$ = "POUNDS": FOR I = 1 TO 50: YDAT(I) = LFT(I):
NEXT I: RETURN
2350 TLE$ = "DRAG-": LVT$ = "POUNDS": FOR I = 1 TO 50: YDAT(I) = DRG(I):
NEXT I: RETURN
2360 TLE$ = "THRUST-": LVT$ = "POUNDS": FOR I = 1 TO 50: YDAT(I) =
DT(I): NEXT I: RETURN
2370 TLE$ = "TORQUE-": LVT$ = "FOOT-POUNDS": FOR I = 1 TO 50: YDAT(I) =
TRQ(I): NEXT I: RETURN
2380 TLE$ = "THETA-": LVT$ = "DEGREES": FOR I = 1 TO 50: YDAT(I) =
THETA(I) * 180 / PI: NEXT I: RETURN
2390 TLE$ = "BETA-": LVT$ = "DEGREES": FOR I = 1 TO 50: YDAT(I) =
BETA(I) * 180 / PI: NEXT I: RETURN
2400 TLE$ = "PHI-": LVT$ = "DEGREES": FOR I = 1 TO 50: YDAT(I) = PHI(I)
* 180 / PI: NEXT I: RETURN
2410 TLE$ = "PHI0-": LVT$ = "DEGREES": FOR I = 1 TO 50: YDAT(I) =
PHI0(I) * 180 / PI: NEXT I: RETURN
2420 TLE$ = "Vr-": LVT$ = "FEET PER SEC.": FOR I = 1 TO 50: YDAT(I) =
VR(I): NEXT I: RETURN
2430 TLE$ = "Vr0-": LVT$ = "FEET PER SEC.": FOR I = 1 TO 50: YDAT(I) =
VR0(I): NEXT I: RETURN
2440 TLE$ = "CHORD-": LVT$ = "INCHES": FOR I = 1 TO 50: YDAT(I) =
CHORD(I) * 12: NEXT I: RETURN
2450 TLE$ = "PITCH-": LVT$ = "INCHES": FOR I = 1 TO 50: YDAT(I) = 2 * PI
* R(I) * TAN(BETA(I)) * 12: NEXT I: RETURN
2460 '
2470 '
The Aircraft Rotary Engine Newsletter. Powered by Linux.
http://home.earthlink.net/~rotaryeng/ http://www.linux.org