MP4247 Output Voltage

In the MP4247 datasheet the VOUT_COMMAND is used to set the output voltage.

The maximum output voltage is specified as 21.47V (21470mV).

When setting the “output voltage” you are actually setting the internal reference voltage which is then multiplied by the feedback ratio to determine the output voltage.

Since the feedback ratio is 10 and the maximum voltage is 21470mV the internal reference voltage should be set to:

Internal reference voltage = 21470mV / 10 = 2147mV

The 11-bit DAC when set to 0 actually sets the reference voltage to 0.1V (100mV).

Therefore this value should be subtracted from the voltage we want to set before converting it to a binary value.

So the new offset internal reference voltage is:

Offset internal reference voltage = 2147mV - 100mV = 2047mV

Converting this value to binary we get:

DAC value = 0b0000_0111_1111_1111

Therefore as shown in “Figure 8: PMBus Message Format” of the datasheet to set this value, I should first send the low byte followed by the high byte.

So send the MP4247 address, then send the VOUT_COMMAND code, then send 0b1111_1111, then send 0b0000_0111.

However I then noticed “Figure 9: Reading VOUT” which confused me as this indicates there is another 8-bits for VOUT_MODE which is not mentioned anywhere else in the datasheet.

So do I need to worry about this 8-bits for VOUT_MODE?

Is this a mistake in the datasheet?

Thanks!

Hello Matt,

You don’t need to worry about the 8-bits of VOUT_MODE when writing to VOUT_COMMAND. This only applies to reading as shown:

The calculations you made regarding the DAC value to write looks correct assuming that there is a direct setting of the internal reference voltage.

Hope this helped.

Best,
Krishan

1 Like

Hi Krishan,

Thanks that makes sense!

Is it expected that the read voltage could be different than the voltage set by the write command?

For example if Vout is currently 5V, then I use a write command to set Vout to 20V then immediately use a read command, should I expect to see the voltage transition, so for example I may read back 18V if a read is made before Vout has reached 20V?

In other words is the read purely reading the data back that has been previously written to a register using the write command or is it actively reading the voltage from the Vout pin and then storing this in a register to be read?

Good question Matt,

The READ_VOUT gives the actual measured output voltage, not just a copy of the last value written.

With that being said, you would definitely see an intermediate value like 18V if you did as you described where you’d have Vout = 5V, switch to Vout = 20V via a write command, and then immediately prompt a read command. The voltage of course would vary depending on the loop speed and read timing of course.

READ_VOUT and VOUT_COMMAND can vary in the following situations:

  • During transitions (as you initially mentioned).
  • If current/power limits are hit.
  • If some fault condition activates.
  • If regulation is compromised by load or any other causes.
  • If converter is being turned off or soft starting.

You should always expect READ_VOUT to reflect reality, not just to echo a command, however this can always be verified with a multimeter to the output when comparing this read value. Hope this provided some insight.

Best,
Krishan

1 Like

In case anyone comes across this post:

Upon receiving my hardware and actually testing it, I found out that my original calculations were actually wrong.

To set the output voltage Vout you simply need to use the equation (from the datasheet):

VOUT = V x 2^-10

Where you send V with the VOUT_COMMAND to set the output voltage.

Re-arranging you get:

V = VOUT / 2^-10

Which is the same as (where VOUT is in volts):

V = VOUT * 1024

Take for example 5V we get:

V = 5 * 1024 = 5120

So to get 5V at the output you would send 5120 with the VOUT_COMMAND.

If however you don’t want to set the output to a round number, for example if you wanted to set the output to 5.5V instead and you don’t want to use floating point maths you can do the following (where VOUT is now in millivolts):

V = (VOUT * 1024) / 1000

So for 5.5V you would get:

V = (5500 * 1024) / 1000 = 5632

This post has now been locked so I can only add more context by modifying this comment.

I just tested reading using the VOUT_COMMAND and it actually seems like the value read back is just a copy of the value put into a register when writing using the VOUT_COMMAND, and NOT actually a reflection of the actual value on the output.

To test this I used a programmable load, and increased the load on the supply this caused a slight change in the voltage measured on the output (measured using a multimeter), however reading the value back using the VOUT_COMMAND it always came back with exactly the same value I had written using the VOUT_COMMAND.

1 Like