The IOUT_CAL_OFFSET offset value is simply summed with the READ_IOUT data, so it’s pretty straightforward – except the encoding is non-complaint to the PMBus standard. The IOUT_CAL_GAIN is not compliant either – it adjusts the “perceived” RDES value as a delta, not representing the total RDES (sense resistor) value as it should.
The procedure to calibrate them is as follows:
- Record the READ_IOUT versus actual load current
- Determine the slope and offset of the curve from ideal - in Excel, you can use the =slope() and =intercept() functions
- Set IOUT_CAL_OFFSET to the =intercept() value… Flip the sign – it’s summed directly, so IOUT_CAL_OFFSET must be negative to compensate for a positive offset error.
- Divide the nominal RDES value on the board by the =slope() of the READ_IOUT data
- Subtract the result of #4 from the nominal RDES value and send the difference to IOUT_CAL_GAIN, in Ohms
The commands are store-able in one-time programmable memory, so they can be saved by STORE_USER_ALL once they are set and verified correct by re-testing the READ_IOUT versus actual load.