Strona 1 z 1

Kształt krzywej ciągu a wysokość

: sobota, 16 sie 2014, 18:46
autor: kbosak
Zapuściłem symulację przy założeniach:
przy braku oporów powietrza
mając jakiś określony ciąg silnika
mając ustalony % udział masy silnika w całkowitej masie rakiety (50%, 75%, 90%)
stały czas pracy silnika

mamy do wyboru tak ksztaltować impuls aby:
narastał liniowo od zera do 100% (ImpulseShaping 0)
był stały (ImpulseShaping 1)
lub opadał liniowo ze 100% do 0% (ImpulseShaping 2)
oraz przypadki pośrednie.

Oczywiste jest że uzyskana prędkość końcowa z silnika o danym impulsie całkowitym przy każdym starcie jest taka sama,
ale uzyskana wysokość na koniec jego pracy jest inna. Wiemy że Epotencjalna=m*g*h, Ekinetyczna=m*v*v/2, zaś całkowita to E=Ep+Ek. Obiekt uzyska największą energię gdy z początku będzie przyśpieszany bardziej (co oczywiście oznacza szybszy wydatek paliwa i spadek masy samego silnika, co też wzięto pod uwagę).
Wykres finalny jak poniżej: Stosując moc spadającą liniowo od 100% do zera, w stosunku do silnika o stałym ciągu, można wygrać 45% więcej wysokości. W przypadku oporów powietrza zysk będzie nieco mniejszy, albowiem prędkość na szczycie będzie mniejsza dla rakiet które miały większą prędkość na początku lotu (albowiem opory wzrastają z kwadratem prędkości).
można zgadnąć że do wygrania jest ok 35% wysokości tą metodą.

Obrazek
Swoją drogą ciekawe jaki kształt krzywej ciągu (inny niż liniowy) jest optymalny.

Re: Kształt krzywej ciągu a wysokość

: sobota, 16 sie 2014, 20:53
autor: wrx
Kierując się zdrowym rozsądkiem (z drobną domieszką matematyki Obrazek ), pewnie coś w ten deseń: na począdku ciąg 100%, puźniej prez 90% czasu ciąg na poziomię 50%. Jeżeli można, prosiłbym o sprawdzenie tej teori ( niedysponuję odpowiednim programem Obrazek ).

Re: Kształt krzywej ciągu a wysokość

: niedziela, 17 sie 2014, 11:08
autor: kbosak
Analiza teoretyczna daje taki oto wynik:
mając silnik którego ciągiem możemy dowolnie sterować, przy braku oporów powietrza,
opłaca się z maksymalnym przyśpieszeniem osiągnąć 'prędkość przelotową' a następnie pozwolić jej maleć w wyniku działania grawitacji (lub ewentualnie zaledwie ten spadek prędkości równoważyć, muszę to rozważyć).
Chodzi o to że impuls całkowity N*s jest tak naprawdę całką po sile którą może przykładać silnik w kierunku ruchu rakiety.
Całka z tej siły daje maksymalną osiągalną prędkość. Kształtując tę siłę w ten sposób że maksymalna osiągalna prędkość jest osiągnięta w nieskończenie krótkiem czasie, maksymalizujemy całkę z prędkości po czasie, czyli przebytą drogę.
W obecności oporów powietrza osiągamy wynik taki sam, tylko że ciąg silnika po momencie przyśpieszenia musi mieć np. 1% mocy startowej aby równoważyć opór powietrza. Wychodzi na to że jeślibyśmy potrafili robić jednakowo lekie i wytrzymałe rakiety i tak samo wydajne silniki dla małych jak i dużych przyśpieszeń, należaloby użyć czegoś w stylu połączenia działa orbitalnego w styklu Projektu HARP http://en.wikipedia.org/wiki/Project_HARP z pociskiem Base Bleed http://en.wikipedia.org/wiki/Base_bleed. W praktyce ograniczeniem jest wytrzymałość obiektów transportowanych, dyszy, rakiety. Natomiast powyższe obliczenia pozostają poprawne dla typowych charakterystyk ciągu silnika jakie osiągamy w rakietach amatorskich.
Obliczenia dla zadanych parametrów za chwilę.

Re: Kształt krzywej ciągu a wysokość

: niedziela, 17 sie 2014, 12:26
autor: wrx
Może zamiast "armatki" HARP od razu coś takiego: http://pl.wikipedia.org/wiki/Electromagnetic_Railgun Obrazek.

Re: Kształt krzywej ciągu a wysokość

: niedziela, 17 sie 2014, 12:58
autor: kbosak
OK trochę realnych danych
//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%

//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s

Stosując ciąg 2x nominalny przez 10% czasu a potem normalny, zyskujemy 9% wysokości względem sytuacji ze stałym ciągiem
natomiast mając ciąg spadający liniowo, dostajemy +46% zysku.



double ThrustFunction_100_50(double x)
{
assert(x>=0);
assert(x<=1);
if(x<=0.1)
{
return 1.0;
}
return 0.5;
}

double ThrustFunction_Constant(double x)
{
assert(x>=0);
assert(x<=1);
return 1.0;
}


//double (*const ThrustFunction)(double)=ThrustFunction_Constant; //2843 reference
double (*const ThrustFunction)(double)=ThrustFunction_100_50; //3095 +9%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearFall;//4148 +46%
//double (*const ThrustFunction)(double)=ThrustFunction_LinearRise;//1849 -35%
NormalizeThrustFunction(ThrustFunction);

//Rocket motor impulse shaping vs altitude
const double MotorMass=0.75;//kg
const double RocketMass=1;//kg
const double g=9.81;//m/s2
const double IgnitionTime=4;//s
const double TotalImpulse=1000;//N*s

const double ThrustFunctionScale=TotalImpulse/IgnitionTime*TrustFunctionNormalizationFactor;
const double FuselageMass=RocketMass-MotorMass;

double MotorMassPercentageUsed=0;//0...1
const int nsteps=100;
const double dt=1.0/(double)nsteps;//normalized timestep
const double dtreal=dt*IgnitionTime;//real time step
double velocity=0;//m/s
double altitude=0;//m
for(int i=1; i<=nsteps; i++)
{
const double normalized_time=(double)i/(double)nsteps;
assert(normalized_time>=0);
assert(normalized_time<=1);
const double real_time=normalized_time*IgnitionTime;
assert(real_time>=0);
assert(real_time<=IgnitionTime);
const double tf=ThrustFunction(normalized_time);
assert(tf>=0);
MotorMassPercentageUsed+=dt*TrustFunctionNormalizationFactor*tf;
assert(MotorMassPercentageUsed>=0);
assert(MotorMassPercentageUsed<=1.02);
if(MotorMassPercentageUsed>1)
{
MotorMassPercentageUsed=1;
}
const double ActualMotorMass=MotorMass*(1-MotorMassPercentageUsed);
const double ActualRocketMass=FuselageMass+ActualMotorMass;
const double ActualThrust=ThrustFunctionScale*tf;

double acceleration=-g;//m/s2
if(ActualRocketMass>1e-6)
{
acceleration+=ActualThrust/ActualRocketMass;
}
velocity+=dtreal*acceleration;
altitude+=dtreal*velocity;

printf("%lf %lf %lf %lf %lf\n", real_time, ActualThrust, ActualRocketMass, velocity, altitude);

Niespodziewanka:
o ile zgodnie z założeniami przy braku oporów powietrza, z grawitacją lub bez niej, opłaca się skupić ciąg w dowolnie krótkim czasie, sytuacja jest zupełnie inna w obecności oporów powietrza. Dla ilustracji użyłem trochę zawyżonych oporów powietrza, symulacja zawsze zbiega się do czegoś takiego:

https://imagizer.imageshack.us/v2/685x3 ... HoPBNZ.png

Oznacza to, że w obecności grawitacji i powietrza, dla uzyskania maksymalnego pułapu, należy skupić większość ciągu na początku, potem jest ten moment gdy nie warto silnikiem walczyć z oporami zależnymi of v^2, ale gdy prędkość nieco spadnie należy silnika używać i to tylko na tyle aby zrównoważyć do pewnego stopnia opór powietrza. Wykres optymalnej krzywej ciągu... przypomina wykres ciągu kilku znanych silników rakietowych, przez przypadek zapewne.

Re: Kształt krzywej ciągu a wysokość

: niedziela, 17 sie 2014, 14:42
autor: filipberet
Witam
kbosak pisze:Analiza teoretyczna daje taki oto wynik:
mając silnik którego ciągiem możemy dowolnie sterować, przy braku oporów powietrza,
opłaca się z maksymalnym przyśpieszeniem osiągnąć 'prędkość przelotową' a następnie pozwolić jej maleć w wyniku działania grawitacji (lub ewentualnie zaledwie ten spadek prędkości równoważyć, muszę to rozważyć).
Chodzi o to że impuls całkowity N*s jest tak naprawdę całką po sile którą może przykładać silnik w kierunku ruchu rakiety.
Całka z tej siły daje maksymalną osiągalną prędkość. Kształtując tę siłę w ten sposób że maksymalna osiągalna prędkość jest osiągnięta w nieskończenie krótkiem czasie, maksymalizujemy całkę z prędkości po czasie, czyli przebytą drogę.
W obecności oporów powietrza osiągamy wynik taki sam, tylko że ciąg silnika po momencie przyśpieszenia musi mieć np. 1% mocy startowej aby równoważyć opór powietrza. Wychodzi na to że jeślibyśmy potrafili robić jednakowo lekie i wytrzymałe rakiety i tak samo wydajne silniki dla małych jak i dużych przyśpieszeń, należaloby użyć czegoś w stylu połączenia działa orbitalnego w styklu Projektu HARP http://en.wikipedia.org/wiki/Project_HARP z pociskiem Base Bleed http://en.wikipedia.org/wiki/Base_bleed. W praktyce ograniczeniem jest wytrzymałość obiektów transportowanych, dyszy, rakiety. Natomiast powyższe obliczenia pozostają poprawne dla typowych charakterystyk ciągu silnika jakie osiągamy w rakietach amatorskich.
Obliczenia dla zadanych parametrów za chwilę.
Działo orbitalne + pocisk = mega przeciążenie na starcie liczone w setkach (może nawet tysiącach) G - elektronika tego nie przetrwa.

Od dawna szukam najbardziej optymalnego i ekonomicznego sposobu wynoszenia rakiet na orbitę. Najrozsądniejszy na jaki do tej pory wpadłem wydaje się być ten:

1. Pneumatyczna wyrzutnia startowa 2. pocisk startowy z napędem strumieniowym wynoszący rakietę 3. start rakiety "z pokładu" pocisku startowego 4. rakieta z silnikiem marszowym

Pozdrawiam

Re: Kształt krzywej ciągu a wysokość

: środa, 20 sie 2014, 23:58
autor: Adam
wrx pisze:pewnie coś w ten deseń: na począdku ciąg 100%, puźniej prez 90% czasu ciąg na poziomię 50%.
Czy to nie byłby wykres idealnego ciągu:
http://pl.wikipedia.org/wiki/Brachistochrona
Pozdrawiam!

Re: Kształt krzywej ciągu a wysokość

: piątek, 22 sie 2014, 17:07
autor: kbosak
Brachistochrona? Przecież to by wymagało ujemnego ciągu... Jak na razie teoria pokazuje że najbardziej opłaca się maksymalnie krótki pik ciągu i lekkie dymienie po to tylko by zaliczyć czas lotu silnikowego przy braku oporu i maksymalnie krótki pik z następującym 'małym garbem' w przypadku obecności oporów. Wyliczę to wkrótce dla prawdziwych danych rakiety i zobaczymy ponownie jak wielki jets optymalny 'garbik ciągu'.