Automatic Routine Speeds Power-Supply Calibration

March 1, 2005
A software-driven calibration routine for a power-supply controller IC eliminates the time consuming and costly problems of manual calibration and results in more reliable, more accurate performance in the field.

For the PDF version of this article, click here.

Designers of ac-dc power supplies often employ trimming potentiometers to calibrate out differential and common-mode errors introduced by tolerances in components, such as the current-sense resistor, resistor-divider networks and op-amps. The potentiometers need to be trimmed manually by an operator at production to remove offsets and gain inaccuracies.

This expensive, time-consuming process still can leave inaccuracies at the end of the trimming procedure. Problems also may occur in the field when mechanical stress can cause the value of the trimming pots to change. To alleviate these difficulties, IC vendors have developed new power-supply controller ICs that perform this trim and calibration by programming the power supply over the SMBus.

One such device is the ADM1041, a secondary-side power-supply controller and power management IC. The ADM1041 provides voltage control, current sharing and housekeeping functions for a single-voltage output in N+1 redundant server power supplies. The controller can be programmed via an SMBus serial port to trim timing and voltage parameters, as well as to select various functions. Device settings can be stored in the chip's internal EEPROM (Fig. 1).

A software routine and interface hardware developed by Analog Devices automates the procedure for calibrating power supplies designed using the ADM1041. The interface hardware includes an analog-digital converter (ADC) for measuring power-supply parameters and a switch that applies the load as necessary during calibration. The specific ADC used here is Analog Devices' AD7992, a 12-bit, high-speed successive-approximation converter. Also, note that the software routine and the hardware interface boards referenced in this article are available from Analog Devices. In addition, an application describing how to build the calibration setup will also be available from the company. (To obtain or request these materials, go to

This automated setup ensures calibration and trimming that are more accurate, more reliable and more repeatable than manual procedures, while also being faster and less expensive. In addition, the power supply can be completely setup for its system monitoring functions such as overcurrent protection (OCP) and fault monitoring. Fig. 2 shows the block diagram of the calibration setup.

Common-mode Trim

A common-mode trim is necessary when high-side current sensing with a sense resistor is employed and when the IC measuring the current cannot withstand the common-mode input voltage of the measurement point. It is required to ensure that the share-bus voltage is a function of the load current, but that it remains independent of variations in load voltage.

Current-sense trimming is critical to power-supply accuracy because it may be necessary to trim errors as large as 40 mV on a 10-mV signal. The correct trimming sequence also is critical, so the common-mode trim needs to be performed first to eliminate errors for the differential trim required later for the share bus.

High-side current sensing requires a resistor-divider network to normalize the voltage at the current-sense amplifier inputs of the ADM1041. The trim removes errors in the external resistor divider network and in the internal current-sense amplifiers. Fig. 3 shows an ideal resistor divider network with a common division of 6 and a differential gain of 100.

Consider the effect if one of the resistors in Fig. 3 was off by 1% of the nominal value, due to tolerance. In the example, this corresponds to greater than 100% error at the share-bus output, as shown in Fig. 4. The reason for such a large error on the output is that the differential signal is amplified by a factor of 100. Thus, any error present also will be amplified by this factor.

Inaccuracies in all four resistors can magnify the problem. Errors sometimes produce a negative output, which can result in a loss of functionality in the following circuitry. The ADM1041 allows the polarity of the slope trim to be changed to deal with this issue. The input amplifiers can also have inaccuracies associated with them.

To trim these input amplifiers, the ADM1041 allows the common-mode offset and slope to be varied individually, with separate registers for each trim. It also allows the power-supply load voltage to be varied by programming another register. Varying the load voltage using the ADM1041 registers allows the user to simulate the maximum common-mode swing that can appear in the power supply during normal operation.

The common-mode trim procedure is as follows: The power-supply output is enabled. No load current is applied during the common-mode trim. Some offset is introduced temporarily. This will be removed at the end of the calibration. The software changes the output voltage by programming the ADM1041 to simulate a common-mode change.

The maximum and minimum output voltages are recorded by the ADC and fed back to the software. From this data, the software can determine what polarity the slope should have. The common-mode slope register is then programmed by a known amount (i.e., 100 least-significant bits [LSBs]). The maximum and minimum voltages are again recorded. From these measurements, the software can calculate the correct amount of slope needed to remove the common-mode error, as shown in Fig. 5.

The register-programming steps to null the response of the share voltage to common-mode voltage changes are:

  1. Turn on power-supply output, with no load current.

  2. Program Reg 15h to some offset, say C0h. This moves VSHARE away from ground.

  3. Program Reg 19h so that VOUT = VMAX. Read VSHARE voltage. Result = A.

  4. Program Reg 19h so that VOUT = VMIN. Read VSHARE voltage. Result = B.

  5. If A > B, then program Reg 16h polarity one way.

  6. X = A-B.

  7. Increase Reg 14h by 100 bits (Program Reg 14h = 64h) to introduce offset temporarily.

  8. Program Reg 19h so that VOUT = VMAX. Read VSHARE voltage. Result = C.

  9. Program Reg 19h so that VOUT = VMIN. Read VSHARE voltage. Result = D.

  10. Y = C-D.

  11. X should be greater than Y. If not, then the Reg 16h polarity set was incorrect.

  12. Increasing Reg 14h by 100 steps reduced the error from (A to B) to (C to D).

  13. Calculate how much change is induced by one bit change in Reg 14h. Result = 1STEP.

  14. #_OF_STEPS = (A-B)/1STEP.

  15. Program Reg 14h to #_OF_STEPS

  16. Common mode is now calibrated. Program Reg 15h to 00h. This removes the offset introduced earlier.

  17. To verify the common mode is calibrated:

  18. Program Reg 19h so that VOUT = VMAX. Read VSHARE voltage. Result = E.

  19. Program Reg 19h so that VOUT = VMIN. Read VSHARE voltage. Result = F.

  20. E-F should be = 0.

Load-voltage Trim

A differential load-voltage trim is performed to set the load voltage to the correct value. Again, a resistor divider network connected to the voltage sense input can cause inaccuracies, as can the input amplifier itself. The ADM1041 allows the load voltage to be calibrated and stored in its EEPROM memory.

In a 12-V system, the controller IC can achieve output-voltage resolution of 12 mV (0.1%). Generally, this is well within typical requirements of 240 mV (2%). Trimming the load voltage accurately results in much more balanced current-sharing systems. This will improve reliability of the product in terms of current sharing and thermal balancing. Using this trim, it also is possible to deliberately introduce an offset in the output voltage to compensate for resistive drop in the output-cabling harness.

To begin the load-voltage trim, the software first programs zero attenuation of the load voltage. Through the ADC, it measures the load voltage. The software then programs some attenuation (say 50 LSBs) into the ADM1041. By using 50 LSBs instead of one LSB, more accurate results can be achieved as an average value is measured. It again measures the new load voltage with the ADC.

From these two measurements, the software can calculate exactly how much attenuation is generated from one LSB. Therefore, it can calculate how much attenuation is needed to get to the desired load voltage. This value is programmed to the ADM1041. The correct load voltage then will be present at the power-supply output.

The register programming steps required to perform the load-voltage trim are:

  1. Turn on power-supply output, with half load current.

  2. Program Reg 19h to 00h. Read VOUT voltage. Result = A.

  3. Program Reg 19h to 32h. Increase Reg 19h by 50 steps. Read VOUT voltage. Result = B.

  4. (Result A — Result B) is the amount of load-voltage change in 100 steps.

  5. ONE_STEP = (Result A — Result B) / 100. This is the amount of load-voltage change in 1 step.

  6. The equation for the number of steps to program Reg 19h so the correct output voltage is achieved is: NUM_STEPS = (Result A — VDESIRED)/ONE_STEP.

  7. Program Reg 19h to NUM_STEPS.

  8. The output voltage should now be set to the correct value.

Differential Trim (Share-bus Trim)

The differential trim is performed so the share-bus voltage is accurate for a given load current. The inaccuracies introduced by the current-sense-resistor tolerance can be trimmed out to produce an accurate share-bus voltage. The common-mode errors have already been removed by the common-mode trim performed earlier.

Share-bus specifications vary from design to design. The ability to calibrate the share bus through registers in the EEPROM means that the same circuit can be used for different share-bus specifications, with the register contents being the only thing to change. A share bus having a range greater than 5 V and using an external op-amp also may be trimmed using this method.

As was the case for the common-mode trim, a separate register allows the share-bus offset and slope to be trimmed independently. It is necessary to apply and remove the load during this calibration. A switch (such as the ADG715), which can be controlled over the SMBus, can be used to apply/remove the load as needed.

When the user initiates a calibration routine for the differential-mode trim, the software queries the user to input certain data before the process begins. It asks for the no-load and full-load share-bus voltage specifications. The power-supply output is turned on, with no load applied.

The first step is to set the no-load share-bus voltage. A register is dedicated to this on the ADM1041's EEPROM. Thus, the software uses the ADC to measure the share-bus voltage change when the share-bus offset register is changed by one LSB. From these measurements, the software calculates how many LSBs are needed to move the no-load share-bus voltage to the desired value. It then programs the share-bus offset register with this value.

The next step is to calibrate the full-load share-bus voltage. At this point, the software talks to the switch, which connects the full load to the power supply. The share-bus voltage is measured by the ADC and reported back to the software. The ADM1041's share-slope register is increased by a set number of (i.e., 20) LSBs. Once again, the share-bus voltage is measured by the ADC and reported back to the software. From these two measurements, the software calculates how many LSBs are needed to move the full-load share-bus voltage to the desired value. It programs the share-bus slope register by this amount (Fig. 6).

Often, it is necessary to perform a further trim at this point. The slope introduced will slightly affect the offset value. Therefore, the no-load share-bus voltage may have changed. The software can compensate for this by reprogramming the offset to the desired value and readjusting the slope again. The share bus can be trimmed to many other specifications. Many power-supply specifications are for a minimum load (i.e., 10%) rather than no-load. The same switch configuration can be used to implement this trim, with the user connecting the minimum load instead of no-load.

The specific register programming steps are:

  1. Turn on power-supply output, with no load current.

  2. Program Reg 05h to 00h. Read VSHARE voltage. Result = A.

  3. Increase Reg 05h to 01h. Read VSHARE voltage. Result = B.

  4. ONE_STEP = (Result A — Result B).

  5. NUM_STEPS = (VSHRO_MIN - Result A) / ONE_STEP.

  6. Program Reg 05h to NUM_STEPS.

  7. Apply full-load current. Read VSHARE. Result = C.

  8. Increase Reg 06h by 20 steps. Read VSHARE. Result = D.

  9. ONE_STEP = (Result C- Result D) / 20

  10. NUM_STEPS = (VSHARE_MAX — Result C) / ONE_STEP.

  11. Program Reg 06h to NUM_STEPS. VSHARE should now equal VSHARE_MAX

  12. Check if no-load VSHARE voltage is correct. Adjust if necessary.

  13. Differential Trim complete.

The specification values for overvoltage protection (OVP), overcurrent protection (OCP) and undervoltage protection (UVP) also can be trimmed and programmed at this time by the calibration software. The software uses the ability to trim the output voltage up and down to set the OVP and UVP trip points. Again, these all are independently set by their own designated registers.

Once calibration is complete, the software can write the trimmed contents to the on-board EEPROM. Furthermore, it can lock these registers so that their contents cannot be altered in the field or by end users. The power supply is now completely calibrated and trimmed and will use these values at each power-up event in the future.


The author would like to thank Evaldo Miranda, Anton Bakker, Brian Erisman, Richard Redl and Scott Wayne at ADI for their inputs, and Sara Saedinia (UC Berkeley) who implemented much of the hardware and software.


To join the conversation, and become an exclusive member of Electronic Design, create an account today!