← Back
Home › Systems › Energy, industry and public infrastructure

hvdc-control

HVDC control and protection systems delivered with converter stations

Hitachi Energy MACH, Siemens Energy HVDC, GE Vernova HVDC

Open the hvdc-control pagehvdc-control Clock synchronizationdistributed: Estimate a clock's offset from four timestamps, filter out queueing noise, and steer the clock smoothly; NTP gets about a millisecond, PTP with hardware timestamps under a microsecond.›Alarm managementembedded: Turn raw process limits into a few actionable operator alarms with delay, deadband, acknowledge and shelving states, plus flood measurement.›Dnp3 protocolembedded: DNP3 outstation/master protocol: event buffers, unsolicited reporting, time-stamped dataDroop controlembedded: Frequency/voltage droop: proportional power response that lets inverters share load without communicationFault detection isolationrecoveryembedded: Monitor/response tables, fault isolation and safe-mode recovery hierarchies for autonomous systemsFixed-rate control loopembedded: Run a controller at an exact period using absolute deadlines and a fixed dt, so jitter never accumulates and the math stays valid.›Gate drive desat protectionembedded: Detect IGBT/MOSFET short circuit by watching Vce/Vds while on (desaturation), blank briefly, then soft turn-off and latch a faultHot-standby redundancyembedded: A second, always-current controller shadows the primary and takes over within a few cycles of silence; epochs stop the old primary from fighting back.›Industrial network segmentationembedded: Zones and conduits (IEC 62443/Purdue) with firewalls and protocol allow-lists for OTModular multilevel convertercontrolembedded: Submodule capacitor balancing and nearest-level modulation for modular multilevel convertersPWM generationembedded: A timer's counter, period and compare registers draw the pulse train; preload, dead time and DMA make duty changes glitch-free, shoot-through-free and cheap.›Real time fieldbusembedded: Deterministic cyclic fieldbuses (EtherCAT, PROFINET IRT): on-the-fly frames, distributed clocksRedundancy votingembedded: N-modular redundancy and MooN voting (2oo3, TMR) with discrepancy detectionSafety monitor architectureembedded: Independent doer/checker safety monitor that forces a safe state when the main channel misbehavesSynchrophasor estimationembedded: GPS-timed DFT phasor, frequency and ROCOF estimation in PMUsWatchdog timerembedded: A hardware down-counter that resets the chip unless software proves, in time and in a plausible pattern, that it is still healthy.›Deterministic fixed-point mathgame-networking: Bit-identical simulation math across CPUs, compilers and builds: integer fixed-point formats, the float traps (FMA, x87, fast-math, libm), deterministic trig, sqrt and RNG.›Fpga dataflow pipelineshardware-os: Fully pipelined fixed-latency FPGA logic: initiation interval, HLS, BRAM and DSP budgetingField oriented controlrobotics: FOC of BLDC/PMSM motors: Clarke/Park transforms, current PI loops, space-vector PWMPID controllerrobotics: Drive a measured value to a setpoint with three terms on the error: proportional, integral, derivative. The default feedback loop for motors, heaters, drones and gimbals.›IIR and FIR filterssignal-processing: Two ways to shape a sampled signal's spectrum: FIR (finite taps, always stable, exact linear phase) or IIR (feedback, a few coefficients, cheap but phase-distorting).›Phase-locked loop (digital)signal-processing: Feedback loop that locks a local oscillator to the phase and frequency of an input tone; the core of carrier recovery, clock recovery and GNSS tracking.›Hierarchical state machinesystems: Nest states so a substate inherits its parent's reactions and only overrides what differs, with ordered entry and exit actions along the path.›Robust statisticsstatistics: Location and scale estimates (median, MAD, trimmed mean, Huber M-estimator) that stay correct when a minority of the data is garbage.›Debouncing throttlingsystems: Coalescing rapid events: debounce (wait for quiet), throttle (max rate), and cancelling stale in-flight requestsDma transfersembedded: DMA controllers: descriptors, circular buffers, cache coherence for zero-CPU data movementPrimary-backup replicationdistributed: One node orders all writes and ships them to standbys; the acknowledgement rule (none, one, all) sets what a crash loses, and an external arbiter decides who takes over.›Data diode unidirectionaltransferembedded: One-way network transfer with FEC and no back channel between safety and IT zonesDeep packet inspectionnetworking: Classify flows by payload/SNI/protocol signatures for application-aware policyPacket classificationnetworking: Multi-field rule matching (tuple space search, decision trees) and flow cachesEnd to end protection e2eembedded: Per-message counter, ID and CRC over a black channel to detect loss, repetition, corruption, delayMemory protection unitembedded: A handful of base/size regions with permissions, checked on every access by the CPU, give microcontroller tasks isolation and stack-overflow traps without an MMU.›PRNGs (PCG, xoshiro)numerics: Small, fast, statistically strong non-cryptographic generators: PCG32 and xoshiro256**, with seeding, parallel streams and unbiased ranges.›Instruction schedulingcompilers: List scheduling over dependence DAGs with latency models; software pipelining of loopsStatic timing analysishardware-os: Propagate latest/earliest arrival forward and required times backward through a DAG; slack = required - arrival, and the minimum-slack path is the critical one.›+ 1 moreLeasesdistributed: A lock that expires on its own: bounded-time ownership that survives crashes and partitions, given bounded clock drift and fencing tokens on writes.›Write-ahead logstorage: Append each change to a checksummed sequential log and fsync it before touching data pages; the basis of crash durability in nearly every database.›Health checkingsystems: Decide per backend whether to route to it using probes and real-traffic errors, with consecutive-count hysteresis, capped ejection and a panic fallback.›Interval treedata-structures: Index of ranges that answers "which intervals overlap this point or range?" in O(log n + k); static sorted-array form is the compact, cache-friendly choice.›Swiss tabledata-structures: Open-addressing hash table that filters 8-16 slots at once with 1-byte hash tags and SIMD, giving fast lookups at 87.5 % load.›Packet header parsingnetworking: Parse graph state machines for Ethernet, IP, TCP and UDP headers in hardware and softwareTcam ternary matchingnetworking: TCAM ternary match tables: priorities, range expansion, power and capacity trade-offsLRU and CLOCKsystems: LRU evicts the least recently used entry via hash map plus linked list; CLOCK approximates it with a reference bit, so hits take no lock.›d-ary heapdata-structures: Array heap with d children per node (d = 4 typical): half the binary heap's depth, siblings in one cache line, faster priority queues.›Instruction pipelininghardware-os: Pipeline stages, hazards, forwarding and stalls in CPU coresTopological sortgraphs: Order the vertices of a DAG so every edge points forward; the core of build systems, schedulers and dependency resolution, with cycle detection for free.›Critical path analysisgraphs: Longest dependency chain in a DAG of timed spans or build actionsFencing tokensdistributed: A number that grows with every lock grant and is checked by the protected resource, so a paused ex-holder's late write is rejected.›CRC32C checksumshardware-os: The Castagnoli CRC-32 with dedicated instructions on x86 (SSE4.2) and ARMv8. It is the standard fast integrity check for storage blocks, logs and network frames.›fsync, O_DSYNC and O_DIRECThardware-os: What fsync, fdatasync, O_DSYNC, O_DIRECT and F_FULLFSYNC really guarantee on Linux and macOS, and the exact call sequences for crash-safe files.›BFS and DFSgraphs: The two basic graph traversals; BFS gives hop distances and levels, DFS gives discovery/finish order for cycles, components and topological order.›SIMD programminghardware-os: Process 4-16 lanes per instruction with AVX2, AVX-512 or NEON via Rust std::arch, with runtime dispatch and a portable fallback.›Sparse matrices (CSR)numerics: Compressed sparse row stores only nonzeros as row pointers, column indices and values; SpMV streams them once, so it is memory-bandwidth bound.›

How it is built

Architecture overview

An HVDC converter station turns AC into DC (or back) with thyristor or transistor valves, and its control and protection system decides when every valve switches. The system is a hierarchy that runs at very different speeds: an operator and dispatch layer sets a power order over seconds, a station and pole controller turns it into current or DC-voltage references in milliseconds, a converter controller shapes the waveform every control cycle, and valve-level electronics fire and monitor each device in microseconds. Beside the control hierarchy sits an independent protection system that watches for faults and trips the converter faster than any operator or controller could. The one idea that makes the whole work is that control is deterministic and duplicated: every loop runs on a fixed period with a fixed latency, every controller has a hot twin that can take over within a few cycles, and protection is a separate channel that can force a safe state whatever the controller does. The same architecture, with different loops, shows up in motor drives, solar inverters and PLC-based plants.

Parts:

 SCADA / dispatch ──DNP3, IEC 61850──► station control (A) ◄─sync─► station control (B)  hot standby
 (alarms, orders)                          │  power / Vdc refs, modes
          ▲  event log                      ▼
          │                     converter control (A/B) ──fixed-period cycle──► modulation
 time ─ PTP / IRIG ─►                 │   PLL, current loops, balancing             │
                                       ▼                                             ▼
 remote station ◄─ telecom ─►   valve electronics (FPGA, optical) ──► gate drivers ──► valves
                                                                         │ desat, status
 protection (2oo3 vote) ◄── measurements (AC, DC, arm currents) ◄────────┘
        └──── trip / block ─────────────────────────────────────────────► valves, breakers

How the parts fit together

Station and pole control

Station control holds the modes of the plant: stopped, energising, deblocked, power transmission, with defined transitions between them and a rule for every fault event. That is a Hierarchical state machine: a child state (for example "rectifier, power control") inherits the reactions of its parent ("station running"), and entry and exit actions run in a defined order so a transition never leaves a breaker half-closed. Inside a mode, the outer loops regulate transmitted power, DC voltage or AC voltage with PID control on slow references; in a multi-terminal grid one station holds DC voltage while others follow, or all share the load through a voltage-power droop (Droop control, no page yet). The contract downward is a small set of references (active-power or DC-voltage target, reactive-power or AC-voltage target) updated at a rate the converter control can ramp towards without a step.

Converter control

The converter controller is where the power electronics live. It locks to the AC grid with a Phase-locked loop, transforms the measured three-phase quantities into rotating-frame components and regulates them with fast current loops, the same structure as in a motor drive (Field-oriented control, no page yet). The transistor-based voltage-source converters used in modern stations are mostly modular multilevel converters: each arm is a chain of submodules with a capacitor, and the controller must keep the capacitor voltages balanced and suppress the circulating current inside the converter while following the references (Modular multilevel converter control, no page yet; see the original topology by Lesnicar and Marquardt and a circulating-current controller by Tu et al. in Sources). The output is a number of submodules to insert per arm; with many submodules a nearest-level choice is enough, and PWM generation with dead time is used where the converter is a conventional two- or three-level bridge or inside a submodule.

All of this must run as a fixed-period task. A Fixed-rate control loop uses absolute deadlines and a constant dt, so jitter never accumulates into the integrators and filter coefficients stay valid. Measurements pass IIR and FIR filters before the loops use them. Where two redundant controllers or two vendors' tools must produce bit-identical results (for replay, for factory acceptance tests, for hot-standby comparison), Deterministic fixed-point math removes the compiler and CPU differences of floating point.

Valve electronics

Below the controller, a hardware layer runs without an operating system: logic on an FPGA with a fixed latency from input to output (FPGA dataflow pipelines, no page yet), a deterministic link to the controller over optical fibre (Real-time fieldbus, no page yet), and gate drivers that protect the device on their own. A driver watches the voltage across a conducting device and, if it rises like a short circuit, turns the device off softly and latches a fault (Gate-drive desaturation protection, no page yet), because no controller is fast enough to do it. Bulk data such as sampled waveforms moves by DMA transfers (no page yet), so the processor does not copy samples inside the control cycle. Timing closure of the FPGA design is checked with Static timing analysis, which propagates arrival times through the logic graph and reports slack; the graph behind it is a DAG, so Topological sort and Critical path analysis (no page yet) give the same answer a tool computes.

Protection

Protection is a separate system, not a feature of the controller. The pattern is Safety monitor architecture (no page yet): an independent checker with its own sensors and its own power that can force a safe state (block the valves, open breakers) when the main channel misbehaves. Trip decisions are voted: several redundant protection channels evaluate the same fault and a 2-out-of-3 vote (no page yet) trips only if two agree, so one failed sensor neither misses a fault nor trips a healthy plant. A Watchdog timer on each processor forces a defined reaction if software stops, and a Memory protection unit stops a faulty task from corrupting another. Messages between protection and control, and between the two stations, carry a counter, an ID and a CRC so that loss, repetition, corruption and delay are detected on a link nobody trusts (End-to-end protection (E2E), no page yet).

Tripping is only the first step. fault-detection-isolation-recovery (no page yet) is the sequence after it: detect which element misbehaved, isolate it (open the breaker or bypass the faulty converter arm or sub-module) so the rest of the pole keeps running where it safely can, and recover by a defined restart or reduced-power state instead of a full shutdown. Protection hands the fault location to this sequence, station control hands back the allowed operating modes, and recovery steps are never taken by the protection channel itself.

Redundancy

Control hardware is duplicated. The standby runs the same software on the same inputs, so its state follows the active unit's and a changeover costs only a few cycles; that is Hot standby redundancy on top of Primary-backup replication: one controller is the primary and the other mirrors it. The hard part is the same as in a database cluster: never two primaries. A Lease bounds how long a unit may act as primary after it loses contact, and an epoch or fencing token lets the output stage and the valve electronics ignore commands from a unit that was demoted but has not noticed. Health checking with hysteresis decides when a unit is bad, so one late message does not trigger a changeover; the standby's state is re-synchronised from a Write-ahead log of parameter changes after it restarts.

Time and measurement

Sequence-of-events recording, fault location and the coordination of the two stations all need a common time base. Clock synchronization (PTP, or the older IRIG-B signal) distributes it to the controllers, and a servo steers each local clock with the same PID control and Phase-locked loop ideas as the converter loops. Synchrophasor measurements from phasor measurement units (Synchrophasor estimation, no page yet) add a grid-wide, time-stamped view that damping controllers can use. Raw measurements contain spikes from switching noise, so plausibility checks use Robust statistics (median and MAD rather than mean and standard deviation) before a value is accepted.

Operator interface and records

A converter fault produces hundreds of signals within milliseconds. Alarm management turns them into a few actionable alarms with delay, deadband, acknowledge and shelving states, and Debouncing and throttling (no page yet) stops a chattering contact from flooding the operator. The station talks to the control centre over a SCADA protocol with time-stamped events (DNP3 protocol, no page yet). Event and disturbance records are the evidence after a trip, so they are appended to a Write-ahead log with a CRC32C checksum per record and flushed with the sequence from fsync and direct I/O; a torn tail is detected on restart and cut.

Network security

The control network is separated into zones joined by narrow conduits, as in IEC 62443 and the Purdue model (Industrial network segmentation, no page yet). A firewall enforces protocol allow-lists, which is a Packet classification (no page yet) problem; deep inspection recognises the industrial protocol (Deep packet inspection, no page yet). Where data must leave the safety zone but nothing may come back, a Data diode (no page yet) gives one-way transfer with forward error correction.

Data and control flow

One power order:

  1. The dispatcher sends a power setpoint over the SCADA link; the station state machine checks that the mode allows it and applies a ramp.
  2. Station control converts the setpoint to a current or DC-voltage reference and sends it to the converter controller as a time-stamped, E2E-protected message on the control bus.
  3. Each converter cycle: sample the AC and arm measurements, filter them, update the PLL angle, run the current loops, compute the submodule insertion counts and send them to the valve electronics. The cycle period is fixed (order of tens to hundreds of microseconds for the valve-facing loops, much slower for the outer loops).
  4. The valve electronics fire the selected submodules; status and capacitor voltages come back on the same link.
  5. The standby controller receives the same inputs and runs the same steps; the output stage listens to the primary only.

One DC fault:

  1. Sensors see the current or voltage change; local detection at the gate driver may act first by switching off the device.
  2. Protection channels evaluate the fault independently; two out of three agree and issue a block or trip.
  3. The valves are blocked, breakers are opened and a status message goes to the remote station (E2E-protected, so a lost message is itself a fault).
  4. The station state machine moves to a fault state, the event recorder flushes the disturbance record, the alarm system shows one root alarm, and the dispatcher is notified.
  5. Time goes to detection and the valve-level reaction (microseconds to milliseconds), not to the operator: the operator's part starts after the plant is already safe.

Scaling

Control and protection do not scale by adding throughput; they scale by meeting a fixed deadline on more hardware. In the order you hit the limits:

  1. Cycle time. More submodules per arm means more work per cycle. Pull the levers in this order: fixed-point or SIMD in the controller (SIMD programming), move the per-submodule work to the FPGA pipeline, then split the arm into parallel pipelines.
  2. Signal count. Hundreds of measurements and alarms. Filter at the edge, debounce, and send changes rather than full tables.
  3. Redundancy cost. Each added channel is more wiring, more voting and more spare parts; go from 2 to 3 channels only where an unavailable plant costs more than a false trip.
  4. Network size. A multi-terminal system adds stations that share a DC voltage; use droop sharing so no high-bandwidth communication is on the critical path.
  5. Verification. The more software, the more test hours; the only lever is a smaller, simpler protection core with its own proof.

Failure modes

FailureSymptomCauseFix
Split-braintwo controllers both drive the valves, or neitherlease or epoch missing, link between the pair lostlease with timeout, epoch checked at the output stage
Unwanted changeoverrepeated switchovers with no real faultone late heartbeat counted as failureconsecutive-miss hysteresis, separate health from load
Jitter in the control looposcillation, integrator driftvariable dt, task preemptedfixed-rate loop with absolute deadlines, no blocking calls
PLL loses lockconverter trips on weak or distorted gridtoo fast PLL, harmonics, phase jumptuned bandwidth, filtering, grid-strength-aware limits
Capacitor voltage driftsubmodule voltages diverge, arm tripsbalancing algorithm saturated, noisy sensorsort-and-select balancing, robust measurement filter
Common-mode protection failuremiss of a real fault, or trip on a false oneall channels share one sensor, one software imageindependent sensors and code per channel, 2oo3 vote
Alarm floodoperator cannot see the root causeno suppression of consequential alarmsalarm states, root-cause grouping, flood metrics
Log lost after a tripno disturbance recordwrite buffered, power lost before flushWAL with fsync order and per-record CRC
Clock stepevents out of order, protection mis-coordinationtime source switch, no slew limitsteer smoothly, alarm on offset, holdover
Cyber footholdunexpected traffic into the control zoneflat network, open conduitzone and conduit policy, allow-lists, one-way links out

Real implementations

Vendor control systems (ABB/Hitachi Energy, Siemens Energy, GE Vernova) are proprietary; the open projects below show the simulation and the protocol parts of the stack.

namewhat it isrepolicencenotes
Dynawoopen hybrid C++/Modelica time-domain simulation tool for power systems, with HVDC modelsdynawo/dynawoMPL-2.0Electrical/HVDC holds the VSC and P-V/P-Q models; see dynawo.github.io
libIEC61850open-source IEC 61850 library (MMS, GOOSE, sampled values) used for substation messagingmz-automation/libiec61850GPL-3.0the protocol layer between protection and control in substations
openPDCphasor data concentrator that ingests time-stamped synchrophasor streamsGridProtectionAlliance/openPDCMITthe measurement side of wide-area control; C#

Sources

  • M. Lesnicar and R. Marquardt, An innovative modular multilevel converter topology suitable for a wide power range, 2003 IEEE Bologna PowerTech. DOI
  • Q. Tu, Z. Xu and L. Zhang, Circulating current suppressing controller in modular multilevel converter, IECON 2010. DOI
  • Guironnet, Saugier, Petitrenaud et al., Towards an Open-Source Solution using Modelica for Time-Domain Simulation of Power Systems, IEEE PES ISGT Europe 2018. DOI
  • Dynawo documentation: dynawo.github.io; source of the HVDC models in the repository above.
  • libIEC61850: github.com/mz-automation/libiec61850.

Similar systems

Share the most building blocks with this one.