Table of Contents

Power Distribution Unit (PDU)

The PDU is designed to efficiently convert electrical energy for three main power bus lines: 12V, 5V and 3.3V. This was done to overcome the problem of having to deal with inefficient power-converters found in many industry produced off-the-shelf components, used in the various application cases all over Apollo-NG's infrastructure.

The idea is to have modular, bus-controlled, point-of-load conversion modules for remote systems and to use the PDU's highly-efficient (>90%) buck/boost converters to supply the MCU, Storage-Devices, Audio, Communications- and Navigation-Equipment and all other hardware in close vicinity of the System-Module-Rack (SMR).

All devices are fed directly from the PDU, bypassing the on-board converters, thereby increasing the overall efficiency.

Specs

[]

Main Power Busses

12V

5V

3.3V

Interface

Sensors

Controller

AVR ATmega88

Software

The protocol and software were developed with a strong focus on security/reliability, very low system requirements and enough room for future options and modifications. The software package in the git repo consists of two parts.

ATmega88 Firmware (and sources)

Developed and tested with GCC

PDUD - PDU Daemon (Python)

In order to keep the system impact on the SKU at a minimum, a polling system was out of the question. Luckily the Linux kernel supports inotify, as does python, which made the development of an inotify-event driven system very easy.

Protocol

Command Frames

The following tables show the protocol structure with example data:

Command-Request Frame

8 byte frame length

Byte 0 1 2 3 4 5 6 7
Def. Frame Begin (FB) Bus Device Adress (BDA) CMD P1 P2 P3 CHK Frame End (FE)
DATA 0xFB 0x10 0xCA 0xFF 0x00 0x00 0xB4 0xFE

Command-Response Frame

4 byte frame length

Byte 0 1 2 3
Def. Bus Device Adress (BDA) R1 R2 CHK
DATA 0x10 0xFF 0x00 0x79

Data Frames

Data-Request Frame

8 byte frame length

Byte 0 1 2 3 4 5 6 7
Def. Frame Begin (FB) Bus Device Adress (BDA) CMD P1 P2 P3 CHK Frame End (FE)
DATA 0xFB 0x10 0xDA 0x00 0x00 0x00 0xA7 0xFE

Data-Response Frame

13 byte frame length

Byte 0 1 2 3 4 5 6 7 8 9 10 11 12
Def. BDA Loops PDU_I PDU_U PSU_U PS5_U PS3_U CHK
DATA 0x10 0x59 0xC3 0x56 0xA2 0x97 0x23 0x42 0x08 0x15 0xE1 0xFA 0xCC

On the wire

These DSO screenshots show the protocol on the wire: The left and middle image show different command-request (green) and command-response (yellow) frames, the right image shows a data-request (green) and data-response (yellow) frame. The latency for command execution is virtually non-existant (0.4ms), data-requests take a little more time to collect (2.5ms), this is due to the 13 byte framelength - it takes the ATmega a bit more time to calculate the checksum of the larger frame.

Operational Readiness Test (ORT)

ORT Specs

Required tests to pass ORT

Results

All tests passed without a glitch, the system works as designed, com signals are solid and the system impact of the PDU Daemon on the host is almost non-existent, due to its use of kernel inotifiers (see the video for a time lapsed summary).

Video

Repository

Grab the latest code and all related files:

Anonymous GIT Access
git clone git://apollo.open-resource.org/pdu

If you want to add files or commit changes, send your work to the ops-team or apply for git RW access by sending your pub-key to the ops-team.