Skip to main content

Power Budgeting

Model power generation, storage, and consumption for orbital compute systems across the full orbital cycle.
Status: Early Access — Request API key

Overview

Power in orbit is fundamentally different from Earth:
  • Solar only — Primary power source is photovoltaic
  • Eclipse periods — No generation during Earth shadow
  • Battery cycling — Must store enough for eclipse
  • Degradation — Solar cells degrade over mission life

Quick Start

from rotastellar import RotaStellar

client = RotaStellar(api_key="rs_...")

power = client.planning.power(
    orbit="LEO-550",
    compute_load_w=500,
    duty_cycle=0.8,
    mission_life_years=5
)

print(f"Solar array: {power.solar_array_m2} m2")
print(f"Battery: {power.battery_kwh} kWh")
print(f"Available during eclipse: {power.eclipse_power_w}W")
print(f"EOL margin: {power.eol_margin_percent}%")

Parameters

orbit
string
required
Orbit specification (e.g., LEO-550, GEO)
compute_load_w
number
required
Peak compute power consumption in watts
duty_cycle
number
default:"1.0"
Fraction of time compute is active (0-1)
mission_life_years
number
default:"5"
Mission duration for degradation calculations
housekeeping_w
number
default:"50"
Non-compute power (thermal, comms, ADCS)
battery_dod
number
default:"0.3"
Maximum battery depth of discharge (0-1)

Response

{
  "solar_array": {
    "area_m2": 3.2,
    "power_bol_w": 960,
    "power_eol_w": 768,
    "degradation_percent_per_year": 2.5
  },
  "battery": {
    "capacity_kwh": 0.85,
    "cycles_per_day": 15.5,
    "eol_capacity_percent": 80
  },
  "power_profile": {
    "sunlit_available_w": 680,
    "eclipse_available_w": 420,
    "average_available_w": 580
  },
  "margins": {
    "bol_margin_percent": 25,
    "eol_margin_percent": 12
  },
  "recommendations": [
    "Consider 10% larger array for operational margin",
    "Battery supports 5-year mission with 80% EOL capacity"
  ],
  "orbit_profile": [
    {"phase": "sunlit", "duration_min": 57, "power_w": 680},
    {"phase": "eclipse", "duration_min": 35, "power_w": 420}
  ]
}

Power Budget Breakdown

Typical LEO Power Budget

SubsystemPower (W)Notes
Compute (peak)500GPU/TPU workloads
Compute (idle)50Standby mode
Thermal30-100Heaters during eclipse
Communications20-50Varies with data rate
ADCS10-20Attitude control
Housekeeping20-30Avionics, sensors

Power Modes

# Model different operating modes
power = client.planning.power(
    orbit="LEO-550",
    modes=[
        {"name": "full_compute", "power_w": 500, "duration_percent": 60},
        {"name": "reduced", "power_w": 200, "duration_percent": 30},
        {"name": "idle", "power_w": 50, "duration_percent": 10}
    ],
    mission_life_years=5
)

Eclipse Operations

During eclipse, power is limited to battery capacity:
power = client.planning.power(
    orbit="LEO-550",
    compute_load_w=500,
    eclipse_strategy="reduced"  # or "full", "suspend"
)

# Check eclipse power availability
if power.eclipse_available_w < 500:
    print(f"Must reduce to {power.eclipse_available_w}W during eclipse")

Eclipse Strategies

StrategyDescriptionUse Case
fullMaintain full powerLarge battery, short eclipse
reducedReduce compute during eclipseBalanced approach
suspendSuspend compute, housekeeping onlyMinimal battery

Degradation Over Mission Life

Solar arrays and batteries degrade over time:
# Compare BOL vs EOL power
power = client.planning.power(
    orbit="LEO-550",
    compute_load_w=500,
    mission_life_years=7
)

print(f"Year 1 available: {power.solar_array.power_bol_w}W")
print(f"Year 7 available: {power.solar_array.power_eol_w}W")
print(f"Degradation: {power.solar_array.degradation_percent_per_year}%/year")

Design Recommendations

Size for end-of-life (EOL) power needs plus 10-20% margin. Account for degradation: ~2.5%/year in LEO due to radiation.
Size for eclipse duration + margin. Limit depth of discharge to 30-40% for long cycle life.
Design for multiple power modes. Ability to reduce compute load extends operational flexibility.

Next Steps