User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
mission:tech:odyssey:pdu [2012/10/05 17:49] – [Software] chronomission:tech:odyssey:pdu [2013/06/30 10:56] – [Repository] chrono
Line 1: Line 1:
 +~~NOCACHE~~
  
 +====== 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 =====
 +
 +[{{:mission:tech:odyssey:pdu-overview.png?645}}]
 +
 +~~CL~~
 +
 +  * Input: 7-18V
 +  * Output:
 +    * 12V/5A > 95% Efficiency
 +    * 5V/5A >= 91% Efficiency
 +    * 3.3V/5A >= 93% Efficiency
 +  * Overcurrent Protection
 +  * In-Vehicle Protection
 +  * Monitoring:
 +    * Voltage (Input/12V/5V/3.3V)
 +    * Current (Input)
 +    * Temperature
 +  * Costs to operate: 0.5W
 +  * Operational Temperature: -25°C to +75°C
 +===== Main Power Busses =====
 +
 +==== 12V ====
 +
 +
 +==== 5V ====
 +
 +
 +==== 3.3V ====
 +
 +
 +===== Interface =====
 +
 +==== Sensors ====
 +
 +  * Allegro ACS715LLCTR-30A-T Hall effect-based linear current sensor
 +  * Power Supply, 12V, 5V & 3.3V Voltage Monitoring
 +  * DS18S20 Temperature sensor
 +
 +==== 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. 
 +
 +  * Kernel iNotifier watching changes in /var/state/apollo/odyssey/pdu/*
 +  * Wake on Change Interrupt routine:
 +    * Read changed value
 +    * Validate value
 +    * Check dependencies
 +    * Execute command on PDU
 +    * Go to sleep again
 +  * Periodically collecting and updating bus voltages, temperature and power consumption
 +
 +
 +==== 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.
 +
 +{{:mission:tech:odyssey:pdu_protocol.png?208|}}
 +{{:mission:tech:odyssey:pdu_protocol1.png?208|}}
 +{{:mission:tech:odyssey:pdu_protocol2.png?208|}}
 +===== Operational Readiness Test (ORT) =====
 +
 +==== ORT Specs ====
 +
 +** Required tests to pass ORT **
 +
 +  * Uptime > 30 days without any erratic behaviour
 +  * Toggle PSU's in a 3 second interval for 96 hours without any erratic behaviour
 +  * Accurate results of temp/voltage/current sensors over time
 +  * Stable RS-232 signal quality 
 +  * Low host-system impact of PDU daemon
 +
 +** 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 ====
 +
 +{{:mission:tech:odyssey:pdu_readiness_test3-640p.webm|}}
 +===== Repository =====
 +
 +Grab the latest code and all related files:
 +
 +<WRAP round download>
 +**Anonymous GIT Access**\\
 +//git clone [[git://apollo.open-resource.org/pdu]]//
 +</WRAP>
 +
 +
 +<WRAP round tip>
 +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.
 +</WRAP>