Spacecraft Systems: Power, Thermal, ADCS & Communications

What makes a satellite work. Learn the space environment (vacuum, radiation, thermal extremes, debris), spacecraft subsystems — structure, electrical power (solar arrays, batteries, eclipse), thermal control, attitude determination and control (sensors, reaction wheels, magnetorquers), propulsion, command & data handling, and communications (link budgets) — plus CubeSats, re-entry and the space-mission lifecycle, with Python for power and link budgets.

A spacecraft is a payload (camera, transponder, instrument) carried by a 'bus' that keeps it powered, pointed, at the right temperature and in contact with the ground — for 5–15 years without repair.

Every subsystem is sized by budgets: mass, power, Δv, pointing, data, link margin, and cost. Systems engineering balances them; a CubeSat and a flagship observatory follow the same logic.

An analogy

A satellite is like a remote mountain research station: it needs its own power plant (solar + batteries), heating and cooling, a way to stay facing the right direction, a radio to phone home, and a computer that can look after itself when nobody is listening.

The space environment

Vacuum (outgassing, cold welding, no convection cooling), temperature extremes (sunlit surfaces +120 °C, shadowed −150 °C), radiation (Van Allen belts, solar particle events — degrades solar cells and upsets electronics), atomic oxygen in LEO, micrometeoroids and debris, and launch loads (vibration, acoustics, shock) — all must be survived.

Subsystems

A spacecraft bus contains:

Attitude control

Pointing requirements range from degrees (simple CubeSats) to milli-arcseconds (space telescopes). Reaction wheels store angular momentum to rotate the spacecraft; external torques (gravity gradient, drag, solar pressure) accumulate momentum that is 'dumped' with magnetorquers or thrusters. Attitude is estimated by fusing star trackers and gyros, typically with a Kalman filter.

CubeSats, re-entry and the mission lifecycle

CubeSats (1U = 10 cm cube, ~1.3 kg) use commercial components to fly missions cheaply and quickly. Re-entry vehicles use blunt shapes to form a detached shock and ablative or reusable thermal protection (PICA, tiles), with peak heating ∝ √(ρ/r_nose)·V³. Missions progress through phases (NASA Pre-A to F / ESA 0–F): concept, requirements, PDR, CDR, integration and test (vibration, thermal-vacuum, EMC), launch, operations and disposal (25-year rule, now 5 years in some regimes).

Formulas

Worked example: Free-space path loss

Given: f = 8.2 GHz, d = 2000 km

Find: FSPL.

Answer: 176.7 dB

Worked example: Battery size

Given: 400 W for 35 min, DoD 25%, η 0.9

Find: Capacity.

Answer: ≈ 1037 Wh

Worked example: Radiator equilibrium

Given: 200 W dissipated, ε = 0.85, T = 290 K, no sunlight

Find: Radiator area.

Answer: ≈ 0.59 m²

Power budget for a LEO spacecraft

import math
# LEO spacecraft power budget: solar array + battery through eclipse
P_load = 400.0                     # W average
T_orbit, T_ecl = 95.0, 35.0        # minutes
eta_path_day, eta_path_ecl = 0.85, 0.65
P_sa = P_load * (T_ecl / eta_path_ecl + (T_orbit - T_ecl) / eta_path_day) / (T_orbit - T_ecl)
flux, eff, deg_life, cos_inc = 1361.0, 0.30, 0.85, math.cos(math.radians(15))
area = P_sa / (flux * eff * deg_life * cos_inc * 0.9)   # 0.9 packing factor
E_ecl = P_load * T_ecl / 60
DoD = 0.25
print(f"array must produce {P_sa:.0f} W in sunlight -> area {area:.2f} m2")
print(f"eclipse energy {E_ecl:.0f} Wh -> battery {E_ecl/DoD/0.9:.0f} Wh at 25% DoD")
# array must produce 830 W in sunlight -> area 2.75 m2
# eclipse energy 233 Wh -> battery 1037 Wh at 25% DoD

The array must power the spacecraft and recharge the battery during the ~60 sunlit minutes, so it is sized at about twice the average load. LEO batteries cycle ~5500 times a year, so depth of discharge is kept low (20–30%) for long life.

Downlink budget

import math
# Satellite downlink budget (X-band, LEO)
f, d = 8.2e9, 2000e3                  # Hz, slant range m
Pt_dBW = 10 * math.log10(5.0)         # 5 W
Gt, Gr = 6.0, 39.0                    # dBi
losses = 3.0                          # pointing, atmosphere, cables, dB
lam = 3e8 / f
FSPL = 20 * math.log10(4 * math.pi * d / lam)
Ts = 150.0
k_dB = -228.6
Rb = 50e6
Pr = Pt_dBW + Gt + Gr - FSPL - losses
EbN0 = Pr - k_dB - 10 * math.log10(Ts) - 10 * math.log10(Rb)
print(f"FSPL = {FSPL:.1f} dB, received power {Pr:.1f} dBW")
print(f"Eb/N0 = {EbN0:.1f} dB -> margin over 4.5 dB required: {EbN0-4.5:.1f} dB")
# Fix: 5.4 m ground dish (Gr = 45 dBi) instead of 2.7 m (39 dBi)
EbN0_big = EbN0 + (45.0 - Gr)
print(f"with a 45 dBi ground antenna: Eb/N0 = {EbN0_big:.1f} dB, margin {EbN0_big-4.5:.1f} dB")
# FSPL = 176.7 dB, received power -127.7 dBW
# Eb/N0 = 2.1 dB -> margin over 4.5 dB required: -2.4 dB
# with a 45 dBi ground antenna: Eb/N0 = 8.1 dB, margin 3.6 dB

The first design fails by 2.4 dB. Doubling the ground antenna diameter adds 6 dB (gain ∝ D²) and gives a healthy 3.6 dB margin; alternatives are more transmit power, a directional spacecraft antenna, or a lower data rate. Engineers typically want ≥ 3 dB margin.

Common mistakes

Applications

Key takeaways

Going further