Power Expander analysis

I had the necessity to take a look in more detail at the functionality of the VEX power expander today and though others may find the results interesting. The power expander, as I’m sure everyone knows, allows up to four external RC servos or motors to be powered from an additional battery rather than the main system battery. Inside the power expander a microchip PIC microcontroller provides all system functionality. The PIC not only gives status feedback by means of a tri-color LED (actually red and green leds that show yellow when they are both on), but also monitors the external input voltage, the voltage after the polyfuse and also the power coming from the cortex. The PIC is able to enable and disable power from the external battery to the motors so as to follow system power from the cortex.

External voltage detection has two thresholds, once the voltage drops below these levels the status led is set until the system is reset by power cycling.

Green LED, external voltage above 6V
Yellow LED, external voltage between 6V and 5.3V
Red LED, external voltage below 5.3V

The PIC is powered from a 5V linear regulator, an external voltage of 5.3V is probably right at the threshold for creating a stable 5V for the PIC.

Input PWM signals are routed directly to the output, all grounds are tied together.

The polyfuse is an HR16-400, replacements are available from Digikey and other part suppliers for about 50c but I have no idea as to the legality of replacing any internal components.

Here is a simplified block diagram (none of the passive components are shown).


I make no claims for this information to be 100% accurate, the diagram is drawn from my own observations so use at your own risk.

1 Like

I put together a schematic for the power expander if anyone is interested. The usual disclaimers apply.

power_expander_schematic.pdf (50.4 KB)

1 Like

It would be good to post this data to the wiki as well as here.

I’m bumping this thread only because I wanted to comment on something posted in the EasyC tech support thread.

Two models would make a lot of sense, I have an “old model” which was what the analysis in this thread was based on, I did suspect there was a “new model” and have had one on backorder for several weeks :frowning:

Anyway, for my old model this was the conversion factor needed to go from analog input in the range 0-4096 to mV (ROBOTC code but the idea is the same for EasyC)

battery2Level = (int)((float)SensorValue BATERY_2_PORT ] * 5.46);

This is essentially the same number as on the wiki, the difference being that the wiki shows how to go from a 10 bit value to volts rather than milli volts.

There’s a little more technical detail behind this in this post as well.


1 Like