LTC3886 - 60V Dual Output Step-Down Controller with Digital Power System Management

Features

    • PMBus/I2C Compliant Serial Interface
      – Telemetry Read-Back Includes VIN, IIN, VOUT, IOUT,
      Temperature and Faults
      – Programmable Voltage, Current Limit, Digital Soft-Start/Stop, Sequencing, Margining, OV/UV/OC, Frequency, and Control Loop Compensation
    • Output Error Less Than ±0.5% Over Temperature
    • Integrated 16-Bit ADC and 12-Bit DAC
    • Integrated High Side Current Sense Amplifier
    • Internal EEPROM with ECC and Fault Logging
    • Integrated N-Channel MOSFET Gate Drivers

Power Conversion

    • Wide VIN Range: 4.5V to 60V
    • VOUT0, VOUT1 Range: 0.5V to 13.8V
    • Analog Current Mode Control
    • Accurate PolyPhase® Current Sharing for Up to 6 Phases (100kHz to 750kHz)
    • Available in a 52-Lead (7mm × 8mm) QFN Package

Typical Application

LTC3886 Typical Application
LTC3886 Typical Application

Description

The LTC®3886 is a dual PolyPhase DC/DC synchronous step-down switching regulator controller with I2C-based PMBus compliant serial interface. This controller employs a constant-frequency, current-mode architecture, with high voltage input and output capability along with programmable loop compensation. The LTC3886 is supported by the LTpowerPlay™ software development tool with graphical user interface (GUI).

The EXTVCC pin supports voltages up to 14V allowing for optimized circuit efficiency and die temperature, and for the controller output to supply the chip power. Switching frequency, output voltage, and device address can be programmed both by digital interface as well as external configuration resistors. Parameters can be set via the digital interface or stored in EEPROM. Both outputs have an independent power good indicator and FAULT function.

The LTC3886 can be configured for discontinuous (pulseskipping) mode or continuous inductor current mode.

Packaging

CAD Symbols and Footprints: The downloadable Zip file below contains the schematic symbol and PCB footprints.

For complete and up to date package information and drawings, please refer to our packaging page

Part Number Package Code Temp Package
Drawing
RoHS
LTC3886EUKG#PBF 7x8 QFN-52 UKG E 05-08-1947 Yes
LTC3886EUKG#TRPBF 7x8 QFN-52 UKG E 05-08-1947 Yes
LTC3886IUKG#PBF 7x8 QFN-52 UKG I 05-08-1947 Yes
LTC3886IUKG#TRPBF 7x8 QFN-52 UKG I 05-08-1947 Yes


LTC3886 Package Drawing

Order Info

  • Part numbers ending in PBF are lead free. Solder plated terminal finish (SnPb) versions are non-standard and special terms and conditions and pricing applies if available. Please contact LTC marketing for information.
  • Part numbers containing TR or TRM are shipped in tape and reel or 500 unit mini tape and reel, respectively
  • Please refer to our general ordering information or the product datasheet for more details

Package Variations and Pricing

Part Number Package Temp Price
(1-99)
Price
(1k)*
RoHS
LTC3886EUKG#PBF 7x8 QFN-52 E $9.07 $6.35 Yes
LTC3886EUKG#TRPBF 7x8 QFN-52 E $6.41 Yes
LTC3886IUKG#PBF 7x8 QFN-52 I $9.91 $6.94 Yes
LTC3886IUKG#TRPBF 7x8 QFN-52 I $7.00 Yes
Buy NowRequest Samples
* The USA list pricing shown is for BUDGETARY USE ONLY, shown in United States dollars (FOB USA per unit for the stated volume), and is subject to change. International prices may differ due to local duties, taxes, fees and exchange rates. For volume-specific price or delivery quotes, please contact your local Linear Technology sales office or authorized distributor.

Demo Boards

Linear Technology offers many demo boards free of charge to qualified customers. Contact your local sales office or distributor to inquire about a demo board. Certain demo boards are also available for sale via credit card on this website. Demo boards are for evaluation purposes only. It remains the customer’s responsibility to verify proper and reliable operation in the actual end application.

Part Number Description Price Documentation
DC2155A-A LTC3886UKG Demo Board (RSENSE) Dual Phase Dual Output PMBus Buck 18V≤VIN≤54V, VOUT0/VOUT1=5V to 12V at 12A per channel, 150kHz $250.00
DC2155A-B LTC3886UKG/LTC3870UFD Demo Board (RSENSE) | 4 Phase Single Output PMBus Buck 18V≤VIN ≤54V, VOUT=12V at 48A, 150kHz Contact Factory
DC2277A LTC3886 UKG Package Clamshell Programming Demo Board $200.00
Buy Now

Companion Boards

Part Number Description Price Documentation
DC1613A USB-to-PMBus Controller for Use with LTpowerPlay $50.00
Buy Now
Click here to view our complete list of demo boards

Applications

  • Telecom, Datacom, and Storage Systems
  • Industrial and Point of Load Applications

Product Notifications

Please login to your MyLinear account for notifications of datasheet updates, new document releases and LTspice model announcements for your favorite products. If you do not have a MyLinear account you may Sign Up Now.

Forgot your password? Click here.
Need help? Email mylinear@linear.com with questions and comments.

Design Tools

LTspice

LTspice® software is a powerful, fast and free simulation tool, schematic capture and waveform viewer with enhancements and models for improving the simulation of switching regulators. Click here to download LTspice

To launch a ready to run LTspice demonstration circuit for this part:

To explore other ready to run LTspice demonstration circuits, please visit our Demo Circuits Collection.

Models for the following parts are available in LTspice:
LTC3886

LTpowerCAD

The LTpowerCAD design tool is a complete power supply design tool program that can significantly ease the tasks of power supply design. It guides users to a solution, selects power stage components, provides detailed power efficiency, shows quick loop bode plot stability and load transient analysis, and can export a final design to LTspice for simulation. Click here to download LTpowerCAD

Design tools for the following parts are available in LTpowerCAD:
LTC3886
LTC3886 Parallel
LTC3886+LTC3870 Parallel

Linduino

Linduino is an Arduino compatible platform for developing and distributing firmware libraries and code for SPI and I²C-compatible integrated circuits. The Linduino One board interfaces to more than 300 QuikEval demonstration cards, supporting a variety of product types including analog-to-digital converters (ADCs)digital-to-analog converters (DACs)power monitors, and more. Firmware libraries for individual devices are written in C and designed to be portable to a wide variety of processors and microcontrollers. Each library has a demonstration program that can be uploaded to the Linduino One platform to allow the circuit and software to be quickly and easily verified.

Click here for more information on Linduino

Code

Linduino is Linear Technology's Arduino compatible system for developing and distributing firmware libraries and example code for Linear Technology’s integrated circuits. The code below can be downloaded or copied and pasted into your project. Please visit the Linduino Home Page for demo board, manual and setup information.

This part is Code Supported: There is example code available for this part. The code below may rely on other drivers available in the full library.

Download LTC3886 - Linduino CPP File

#include "LT_PMBusDeviceLTC3886.h"

uint32_t LT_PMBusDeviceLTC3886::cap_ =  HAS_VOUT
                                        | HAS_VIN
                                        | HAS_IOUT
                                        | HAS_IIN
                                        | HAS_POUT
                                        | HAS_PIN
                                        | HAS_TEMP
                                        | HAS_DC
                                        | HAS_STATUS_WORD
                                        | HAS_STATUS_EXT
                                        ;

Download LTC3886 - Linduino DC2155A.ino File

/*!
Linear Technology DC2155A Demonstartion Board
LTC3886: Power Management Solution for Application Processors

@verbatim

NOTES
  Setup:
   Set the terminal baud rate to 115200 and select the newline terminator.

@endverbatim

http://www.linear.com/product/LTC3886

http://www.linear.com/product/LTC3886#demoboards

REVISION HISTORY
$Revision: 6067 $
$Date: 2016-11-17 10:00:15 -0800 (Thu, 17 Nov 2016) $

Copyright (c) 2014, Linear Technology Corp.(LTC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.

The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community.  Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/

/*! @file
    @ingroup LTC3886
*/


#include <Arduino.h>
#include <stdint.h>
#include "UserInterface.h"
#include "Linduino.h"
#include <LT_I2CBus.h>
#include <LT_PMBus.h>
#include <LT_PMBusMath.h>
#include <LT_SMBus.h>
#include <LT_SMBusBase.h>
#include <LT_SMBusGroup.h>
#include <LT_SMBusNoPec.h>
#include <LT_SMBusPec.h>
#include <LT_Wire.h>

#define LTC3886_I2C_ADDRESS 0x4F
#define MFR_PWM_COMP 0xD3          // PMBus command for setting the compensation network gm and Rth
#define PAGE 0x00                  // PMBus command for selecting output
#define CH_0 0x00
#define CH_1 0x01

#define ITH_MAX 62
#define GM_MAX 5.73


// Global variables
static uint8_t ltc3886_i2c_address;
static LT_SMBusNoPec *smbus = new LT_SMBusNoPec();

static uint8_t channel;            // current output channel
static uint8_t ith;                // current ith hex value
static uint8_t gm;                 // current gm hex value
static uint8_t comp_config;        // data byte for setting gm and Rth
static float ith_dec;              // decimal representaiton of ith
static float gm_dec;               // decimal represnetaiton of gm

// Arrays of ith and gm values make it easy to transfer between decimal and hex
static float ith_vals[] = {0, .25, .5, .75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 7, 8, 9, 11, 13, 15, 17, 20, 24, 28, 32, 38, 46, 54, 62};
static float gm_vals[] = {1, 1.68, 2.35, 3.02, 3.69, 4.36, 5.04, 5.73};
static uint8_t ith_vals_hex[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
static uint8_t gm_vals_hex[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};


//! Initialize Linduino
void setup()
{
  Serial.begin(115200);            //! Initialize the serial port to the PC
  print_title();
  ltc3886_i2c_address = LTC3886_I2C_ADDRESS;
  channel = CH_0;                  // Initialize to CH0
  print_comp_config();
  print_prompt();
}

//! Repeats Linduino loop
void loop()
{
  uint8_t user_select;             // The user's choice of the three menu options
  float user_value;                // data value user inputs, either for gm or Rth
  if (Serial.available())
  {
    user_select = read_int();
    switch (user_select)
    {
      case 1:                      // Change gm
        Serial.print(F("\nEnter desired gm (1-5.73), this will be rounded to nearest legal value:\n"));
        user_value = read_float();

        gm_dec = gm_nearest_legal_value(user_value);    // Snap given decimal gm value to nearest actual gm decimal value
        gm = gm_decimal2hex(gm_dec);                    // Convert decimal gm to hex

        comp_config = (gm << 5) | ith;                  // Update comp_config with new gm value. Must bitshift gm left by 5. See page 74 of 3886 datasheet for details.
        smbus->writeByte(ltc3886_i2c_address, MFR_PWM_COMP, comp_config);

        print_comp_config();
        print_prompt();
        break;
      case 2:                      // Change ith
        Serial.print(F("\nEnter desired ith (0-62), this will be rounded to nearest legal value:\n"));
        user_value = read_float();

        ith_dec = ith_nearest_legal_value(user_value);  // Snap given decimal ith value to nearest actual ith decimal value
        ith = ith_decimal2hex(ith_dec);                 // Convert decimal ith to hex

        comp_config = (gm << 5) | ith;                  // Update comp_config with new ith value. Must bitshift gm left by 5. See page 74 of 3886 datasheet for details.
        smbus->writeByte(ltc3886_i2c_address, MFR_PWM_COMP, comp_config);

        print_comp_config();
        print_prompt();
        break;
      case 3:                      // Toggle Channel
        if (channel == 0)
        {
          smbus->writeByte(ltc3886_i2c_address, PAGE, CH_1);
          channel = CH_1;
        }
        else
        {
          smbus->writeByte(ltc3886_i2c_address, PAGE, CH_0);
          channel = CH_0;
        }

        Serial.println();
        print_comp_config();
        print_prompt();
        break;
    }
  }
}


// Function Definitions

//! Prints the title block when program first starts.
//! @return void
void print_title()
{
  Serial.print(F("\n*****************************************************************\n"));
  Serial.print(F("* LTC3886 Adjustable Compensation Program                       *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* This is an example program for adjusting LTC3886 compensation.*\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("*****************************************************************\n"));
}

//! Prints main menu.
//! @return void
void print_prompt()
{
  Serial.print(F("\n  1-Adjust gm\n"));
  Serial.print(F("  2-Adjust ith\n"));
  Serial.print(F("  3-Switch Channel"));
}

//! Prints current compensation configuration and saves ith, gm, and configuration hex values.
//! @return void
void print_comp_config()
{
  comp_config = smbus->readByte(ltc3886_i2c_address, MFR_PWM_COMP);

  ith = 0x1F & comp_config;                 // Extract ith via bit-wise AND with 5 LSD
  gm = (0xE0 & comp_config) >> 5;           // Extract ith via bit-wise AND with 3 MSD. Bit shift right by 5.
  ith_dec = ith_hex2decimal(ith);           // Update ith hex value
  gm_dec = gm_hex2decimal(gm);              // Update gm hex value

  Serial.print(F("\nCH"));
  Serial.print(channel, DEC);
  Serial.print(F(" "));
  Serial.print(F("Configuration, (gm, ith): ("));
  Serial.print(gm_dec);
  Serial.print(F(", "));
  Serial.print(ith_dec);
  Serial.print(F(")"));
}


//! Rounds decimal input ith to nearest legal decimal value.
//! @return double
float ith_nearest_legal_value(float ith)
{
  for (int i=0; i<(sizeof(ith_vals)/4)-1; i++)
  {
    float cutoff = ith_vals[i] + (ith_vals[i+1] - ith_vals[i])/2;
    if (ith < cutoff)
    {
      return ith_vals[i];
    }
  }
  return ITH_MAX;
}

//! Rounds decimal input gm to nearest legal decimal value.
//! @return double
float gm_nearest_legal_value(float gm)
{
  for (int i=0; i<(sizeof(gm_vals)/4)-1; i++)
  {
    float cutoff = gm_vals[i] + (gm_vals[i+1] - gm_vals[i])/2;
    if (gm < cutoff)
    {
      return gm_vals[i];
    }
  }
  return GM_MAX;
}

//! Converts ith demo circuit hex value to its decimal equivalent.
//! @return double
float ith_hex2decimal(uint8_t ith)
{
  for (int i=0; i<sizeof(ith_vals_hex); i++)
  {
    if (ith_vals_hex[i]==ith)
    {
      return ith_vals[i];
    }
  }
}

//! Converts gm demo circuit hex value to its decimal equivalent.
//! @return double
float gm_hex2decimal(uint8_t gm)
{
  for (int i=0; i<sizeof(gm_vals_hex); i++)
  {
    if (gm_vals_hex[i]==gm)
    {
      return gm_vals[i];
    }
  }
}

//! Converts ith decimal value to the demo circuit hex equivalent.
//! @return uint8_t
uint8_t ith_decimal2hex(float ith)
{
  for (int i=0; i<sizeof(ith_vals); i++)
  {
    if (abs(ith_vals[i]-ith) < .1)                         // Epsilon of .1 selected to prevent equality check of floating numbers
    {
      return ith_vals_hex[i];
    }
  }
}

//! Converts gm decimal value to the demo circuit hex equivalent.
//! @return uint8_t
uint8_t gm_decimal2hex(float gm)
{
  for (int i=0; i<sizeof(gm_vals); i++)
  {
    if (abs(gm_vals[i]-gm) < .1)                           // Epsilon of .1 selected to prevent equality check of floating numbers
    {
      return gm_vals_hex[i];
    }
  }
}

Download LTC3886 - Linduino Header File

/*!
LTC PSM Device

@verbatim

Representation of a device and its capabilities.

@endverbatim

REVISION HISTORY
$Revision: 3845 $
$Date: 2015-08-24 14:11:21 -0600 (Mon, 24 Aug 2015) $

Copyright (c) 2014, Linear Technology Corp.(LTC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.

The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community.  Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/

/*! @file
    @ingroup LT_PMBusDevice
    Library Header File for LT_PMBusDeviceLTC3886
*/

#ifndef LT_PMBusDeviceLTC3886_H_
#define LT_PMBusDeviceLTC3886_H_

#include "LT_PMBusDeviceController.h"

class LT_PMBusDeviceLTC3886 : public LT_PMBusDeviceController
{
  public:

    static uint32_t cap_;

    LT_PMBusDeviceLTC3886(LT_PMBus *pmbus, uint8_t address) : LT_PMBusDeviceController(pmbus, address, 2)
    {
    }

    uint32_t getCapabilities (
    )
    {
      return cap_;
    }

    //! Is/are these capability(s) supported?
    //! @return true if yes
    bool hasCapability(
      uint32_t capability          //!< List of capabilities
    )
    {
      return (cap_ & capability) == capability;
    }

    static LT_PMBusDevice *detect(LT_PMBus *pmbus, uint8_t address)
    {
      uint16_t id;
      LT_PMBusDeviceLTC3886 *device;

      id = pmbus->readMfrSpecialId(address);
      if ((id & 0xFFF0) == 0x4600)
      {
        if (pmbus->getRailAddress(address) != address)
        {
          device = new LT_PMBusDeviceLTC3886(pmbus, address);
          device->probeSpeed();
          return device;
        }
        else
          return NULL;
      }
      else
        return NULL;
    }

    uint8_t getNumPages(void)
    {
      return 2;
    }


};

#endif /* LT_PMBusDeviceLTC3886_H_ */

Technical Support