PID rudder control for a nuclear submarine
A closed-loop rudder control system modelled in MATLAB Simulink and tuned by hand for three manoeuvres, with smooth, stealthy turns and zero steady-state error as the goal.
Key numbers
The model
I built the rudder drive as a chain of real hardware in Simulink: a ±20 V supply limit, a motor (gain 10, time constant 2 s), a 100:1 gearbox (time constant 3 s), an integrator converting rudder rate into angle, the ±45° mechanical limit, and a 1-second delay on the angle sensor. A PID controller closes the loop.
Tuning for the mission
For a submarine, a quiet and smooth response matters more than raw speed. Overshoot wastes energy, makes noise and wears out a mechanism that can't be serviced at depth.
- Input 1, a 40° step: five trials took it from a 5° steady-state error to zero overshoot and zero error (P=2, I=0.001, D=7).
- Input 2, a ramp to −45°: raised derivative gain to D=10 to soften the change, protecting the rudder mechanism.
- Input 3, a −35° to 10° step: balanced P and D (P=3, I=0.05, D=10) for a fast response with minimal overshoot.
Beyond the lab
The wider module also covered industrial control: open- and closed-loop motor speed control with P and PI controllers, and PLC ladder-logic programming in Zelio Soft for automated sequences.
Looking back
What went well
Tuning methodically, changing one gain at a time and recording the effect, which led to responses with zero overshoot and no steady-state error. Framing each goal around what the submarine actually needs, such as stealth and protecting the rudder mechanism, kept the tuning purposeful.
Even better if
I'd start from a structured method such as Ziegler–Nichols or MATLAB's PID Tuner rather than pure trial and error. I'd also add disturbances like ocean currents and sensor noise to test how robust the controller really is.