This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UCD3138HSFBEVM-029: Strange Output Voltage Measurements in Fusion Digital Power Studio

Part Number: UCD3138HSFBEVM-029


I am using the stock firmware ( for the UCD3138HSFBEVM-029 and attempting to understand exactly what is happening.

When the device is initially booted, Vout in the GUI is 0 V. Then, I switch on the device and the GUI reads ~128 V (0xFFFF). If I read the the actual PCB using a DMM, the voltages are what I would expect. For example, if I set

#define VOUT_0 (5120)

in pmbus_topology.h, then I will see 10V on the physical output. Additionally, I will see ~1V going into the ADC at node AD03 (per the datasheet which calls out the scaling as being ~0.101 Vout).

The above image has several areas to note. The first area is after the initial startup. Vout is at 0V. Next, S1 is switched on, enabling the output. After a short time, S1 is turned off, disabling the output. There are several areas of this that I don't understand. Why is Vout different before and after flipping the switch (0V vs 12.3V)? Why is Vout ~128V instead of 10V? Why does the output voltage swing so greatly after disabling the output?

I was looking through documentation for PMBus and noticed that there is a command for VOUT_SCALE_LOOP. It seems like this is just an ADC scaling issue, but I'm unable to edit this value. The PMBus spec says 29h would edit this value. Using the SMBus tool, I tried writing to 29h and it acknowledged the command, however nothing happens. Additionally, when checking the commands that show up in the GUI under the CMDS_DCDC_NONPAGED [MFR 21] parameter, 29h does not show up. So I'm unsure as to how I should be adjusting the scale. Again, my firmware and board are stock with no modifications other than Vout.

Software: Code Compose Studio Version: and Fusion Digital Power Studio 3.0.36

Thank you

  • I can duplicate the issue.  It seems that somehow a shift value is incorrect in the code.  We have a little shift and add IIR filter in our code, and somehow the shift is way too high.  Looking at the code, it is an 11, and needs to be a 3.  This makes the time constant on the filter huge, and seems to cause overflow.  That's probably whe the signal goes up and down, and takes a long time to decay after the power supply is turned off.  And the 12 volts is a limit cycle minimum.  

    If you change an 11 to a 3 in this line in system_defines.h, it seems to fix the issue:

    #define AVERAGE_Vout_SHIFT (3)

    I haven't checked for side effects, except by looking at the code, and I don't see any.  But no guarantees.  

  • Hi Mr. Bower

    Thank you for getting back to me.

    I made the modifications to the code which you recommended. While this has partially solved the issue, it doesn't appear to have completely fixed it. After turning off the output, it decays back down to 0 with no abnormalities. However, the value that it actually goes too is still too high. It is now going to ~67V, instead of the 8.5V that I have it programmed to. Perhaps I'm misunderstanding how this is supposed to function?

  • I seem to have made an off by about 10 error.  Actually I think I'm off by 8.  If we divide 67 by 8, we get 8.375, which is close.  So if you go to the pmbus_topology.c file, and add the stuff in red to pmbus_read_vout, you should get the right results.


    // pmbus_read_vout()
    inline Uint8 pmbus_read_vout(void)
    Uint16 vout_adc12_value;
    struct qnote vout_adc_scaler = {VOUT_ADC_TO_LITERAL_SCALER, VOUT_ADC_TO_LITERAL_SHIFT - 16};
    vout_adc12_value = qnote_int16_multiply_fit(vout_adc_scaler, adc_average.Vout  >> AVERAGE_Vout_SHIFT, MAX_VALUE_FIT_16_BITS);
    return 0;

    Along with at least very close to the right answer, this also gives you the ability to adjust the time constant of our little filter independently of the scaling on Vout.  

  • I have now implemented both of the changes that you recommended in this thread. My problem is now resolved. The GUI now displays 8.352 V for Vout, which is within a reasonable margin of error. It decays down to 0.0 V after a short time

    Thank you