LTC2975 - 入力電流とエネルギーの 正確な測定を特長とする 4チャネルPMBusパワーシステム・マネージャ

特長

  • 4つの電源のシーケンス制御、調整、マージニング、および監視
  • フォルトの管理、遠隔測定値のモニタ、およびフォルト・ログの作成
  • PMBus™準拠のコマンド・セット
  • LTpowerPlay™ GUIでサポート
  • 電源のマージニングまたは調整の精度:目標値の0.25%以内
  • 入力電流をモニタ(±1%)してエネルギーを蓄積
  • チャネルごとの高速OV/UVおよびOCスーパーバイザ
  • 複数のLTC PSMデバイスにまたがるシーケンシングとフォルト管理の連携
  • 内蔵のEEPROMへの自動フォルト・ログ機能
  • ソフトウェア追加不要の自律動作
  • 外部温度スーパーバイザと入力電圧スーパーバイザ
  • 4つの出力電圧、4つの出力電流、4つの外部温度、入力電圧、入力電流、内部ダイ温度の正確なモニタ
  • I2C/SMBusシリアル・インタフェース
  • 3.3Vまたは4.5V~15Vの電源で動作可能
  • LTC2974とピン互換
  • 9mm × 9mmの64ピンQFNパッケージで供給

標準的応用例

LTC2975 Typical Application
LTC2975 Typical Application

概要

LTC®2975は、4チャネルのパワーシステム・マネージャで、シー ケンス制御、調整(サーボ制御)、マージニング、監視、フォル トの管理、遠隔測定の実行、およびフォルト・ログの作成を行 うために使用します。PMBusコマンドは、電源シーケンシング、 高精度のポイントオブロード電圧調整およびマージニングを サポートしています。D/Aコンバータは、独自のソフト接続アル ゴリズムを使用して、電源の障害を最小限に抑えます。監視 機能には、4つの電源出力チャネルの過電流、低電流、電圧、 温度に関するしきい値制限、さらに1つの電源入力チャネル の過電圧および低電圧しきい値制限があります。プログラム 可能なフォルト応答により電源をディスエーブルできますが、 フォルトが検出された後に再試行を任意で選択可能です。電 源をディスエーブルするフォルトが発生すると、フォルト状態と 関連の遠隔測定データをブラック・ボックスEEPROMに保存 する機能を自動的に起動できます。内蔵の16ビットA/Dコン バータは、4つの出力電圧、4つの出力電流、4つの外部温度、 入力電圧、入力電流、およびダイ温度をモニタします。入力電 力、エネルギー、および出力電力も計算されます。プログラム 可能なウォッチドッグ・タイマは、マイクロプロセッサの動作が 膠着状態であるかどうかをモニタし、必要に応じてマイクロプ ロセッサをリセットします。1 線式バスは、リニアテクノロジー の複数のパワーシステム・マネージメント(PSM)デバイスにわ たって電源を同期します。環境設定EEPROMにより、ソフト ウェアを追加せずに自律動作がサポートされます。

パッケージ

CAD Symbols and Footprints: The downloadable Zip file below contains the schematic symbol and PCB footprint compatible with Mentor Graphics PADS® v9.5 or later, and Cadence ORCAD® v16.5 or later.

パッケージの最新情報ならびに図面については、パッケージング情報を参照してください。

製品番号 パッケージ Code 温度 Package Drawing RoHSデータ
LTC2975CUP#PBF 9x9 QFN-64 UP C 05-08-1705 Yes
LTC2975CUP#TRPBF 9x9 QFN-64 UP C 05-08-1705 Yes
LTC2975IUP#PBF 9x9 QFN-64 UP I 05-08-1705 Yes
LTC2975IUP#TRPBF 9x9 QFN-64 UP I 05-08-1705 Yes


LTC2975 Package Drawing

発注情報

各種パッケージと価格

製品番号 パッケージ 温度 価格(1~99個時) 価格(1000個時)* RoHSデータ
LTC2975CUP#PBF 9x9 QFN-64 C $13.93 $9.75 Yes
LTC2975CUP#TRPBF 9x9 QFN-64 C $9.85 Yes
LTC2975IUP#PBF 9x9 QFN-64 I $15.93 $11.15 Yes
LTC2975IUP#TRPBF 9x9 QFN-64 I $11.25 Yes
購入サンプルリクエスト
* 米ドル価格は、米国内における定められた数量に対する工場渡しでの単価です。変更される可能性がありますので、予算目的でのみご使用願います。米国以外の国における価格は、輸送費、税金、手数料、為替レートにより変動する場合があります。注文個数に応じた価格および納期については、リニアテクノロジー正規代理店までお問い合わせください。

評価キット

リニアテクノロジーのデモボードは、認定のお客様に無料で提供されます。デモボードをご希望の場合は、最寄りのセールスオフィスまたは代理店 にお問い合わせください。一部のデモボードは、このWebページ上でクレジットでもご購入いただけます。デモボードは評価目的でのみご使用ください。実際の最終アプリケーションにおける動作検証と信頼性の確認は、お客様の責任において行っていただきますようお願いいたし ます。

製品番号 概要 価格 Documentation
DC1508B-B LTC2974, LTC2975 Socketed Programming Board [requires DC1613] $95.00
DC2022A LTC2975 Demo Board: 4 Power Supply Manager with Input Energy Monitoring [Requires DC1613] $95.00
DC2428A LTC2975 Demo Board Set | LTM4644 Quad 4A Power Supply Management (includes DC2382A + DC2363A) [requires DC1613] $200.00
DC2518A LTC2975 Demo Board: +/- 12V, +/- 48V Power Supply Management [requires DC1613] $95.00
購入

Companion Boards

製品番号 概要 価格 Documentation
DC1613A USB-to-PMBus Controller for Use with LTpowerPlay $50.00
DC2026C Linduino One Isolated USB Demo Board: An Arduino- and QuikEval-Compatible Code Development Platform $75.00
購入
ここをクリック 全デモボードリストがご覧いただけます。

アプリケーション

  • コンピュータおよびネットワーク・サーバ
  • 産業用テスト装置および測定装置
  • 高信頼性システム
  • ビデオおよび医療用画像処理

Product Notifications

MyLinearアカウントにログインして、お気に入りの製品に関するデータシートの更新、新しいドキュメントのリリース、LTspiceモデルの発表などのお知らせをご確認ください。MyLinearアカウントをお持ちでない場合は、「今すぐ登録」 することができます。

パスワードをお忘れですか? こちらを クリック.
ヘルプが必要ですか? 質問事項を英語で mylinear@linear.com

デザインツール

LTpowerPlay

LTpowerPlayは強力な開発環境で、リニアテクノロジーのデジタル・パワー・システム・マネジメント(PSM)製品をサポートし、これまでにない診断機能とデバッグ機能を提供します。

LTpowerPlayをダウンロードするにはここをクリック

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 LTC2975 - DC2022A.ino

/*!
Linear Technology DC2022A Demonstration Board
LTC2975: Power System 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/LTC2975

http://www.linear.com/demo/DC2022A

REVISION HISTORY
$Revision: 4080 $
$Date: 2015-09-24 16:36:34 -0600 (Thu, 24 Sep 2015) $

Copyright (c) 2015, 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 LTC2975
*/

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

#define LTC2975_I2C_ADDRESS 0x30

// Global variables
static uint8_t ltc2975_i2c_address;
static LT_PMBusMath *math = new LT_PMBusMath();
static LT_SMBus *smbus = new LT_SMBusPec();
static LT_PMBus *pmbus = new LT_PMBus(smbus);

//! Initialize Linduino
//! @return void
void setup()
{
  Serial.begin(115200);         //! Initialize the serial port to the PC
  print_title();
  ltc2975_i2c_address = LTC2975_I2C_ADDRESS;
  print_prompt();
}

//! Repeats Linduino loop
//! @return void
void loop()
{
  uint8_t user_command;
  uint8_t res;
  uint8_t model[7];
  uint8_t revision[10];
  uint8_t *addresses = NULL;

  if (Serial.available())                          //! Checks for user input
  {
    user_command = read_int();                     //! Reads the user command
    if (user_command != 'm')
      Serial.println(user_command);

    switch (user_command)                          //! Prints the appropriate submenu
    {
      case 1:
        menu_1_basic_commands();                 // Print single-ended voltage menu
        break;
      case 2:
        pmbus->enablePec(ltc2975_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 3:
        pmbus->disablePec(ltc2975_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusNoPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 4:
        addresses = smbus->probe(0);
        while (*addresses != 0)
        {
          Serial.print(F("ADDR 0x"));
          Serial.println(*addresses++, HEX);
        }
        break;
      case 5 :
        pmbus->startGroupProtocol();
        pmbus->restoreFromNvm(ltc2975_i2c_address);
        pmbus->executeGroupProtocol();
        break;
      default:
        Serial.println(F("Incorrect Option"));
        break;
    }
    print_prompt();
  }

}

// Function Definitions

//! Prints the title block when program first starts.
//! @return void
void print_title()
{
  Serial.print(F("\n*****************************************************************\n"));
  Serial.print(F("* DC2022AC Hello World Demonstration Program                     *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* This program demonstrates how to send and receive data from   *\n"));
  Serial.print(F("* the LTC2022A  demo board.                                      *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* Set the baud rate to 115200 and select the newline terminator.*\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("*****************************************************************\n"));
}

//! Prints main menu.
//! @return void
void print_prompt()
{
  Serial.print(F("\n  1-Basic Commands\n"));
  Serial.print(F("  2-PEC On\n"));
  Serial.print(F("  3-PEC Off\n"));
  Serial.print(F("  4-Bus Probe\n"));
  Serial.print(F("  5-Reset\n"));
  Serial.print(F("\nEnter a command:"));
}

//! Prints a warning if the demo board is not detected.
//! @return void
void print_warning_prompt()
{
  Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}

//! Print all voltages
void print_all_voltages()
{
  float   voltage;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    pmbus->setPage(ltc2975_i2c_address, page);
    voltage = pmbus->readVout(ltc2975_i2c_address, false);
    Serial.print(F("LTC2975 VOUT "));
    Serial.println(voltage, DEC);
  }
}

//! Print all currents
void print_all_currents()
{
  float   current;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    pmbus->setPage(ltc2975_i2c_address, page);
    current = pmbus->readIout(ltc2975_i2c_address, false);
    Serial.print(F("LTC2975 IOUT "));
    Serial.println(current, DEC);
  }
}

//! Print all status bytes and words
//! @return void
void print_all_status()
{
  uint8_t b;
  uint16_t w;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    Serial.print(F("PAGE "));
    Serial.println(page, DEC);
    pmbus->setPage(ltc2975_i2c_address, page);
    b = pmbus->readStatusByte(ltc2975_i2c_address);
    Serial.print(F("LTC2975 STATUS BYTE 0x"));
    Serial.println(b, HEX);
    w = pmbus->readStatusWord(ltc2975_i2c_address);
    Serial.print(F("LTC2975 STATUS WORD 0x"));
    Serial.println(w, HEX);
  }
}

//! Sequence off then on
void sequence_off_on()
{
  pmbus->sequenceOffGlobal();
  delay (2000);
  pmbus->sequenceOnGlobal();
}

//! Margin high
//! @return void
void margin_high()
{
  pmbus->marginHighGlobal();
}

//! Margin low
//! @return void
void margin_low()
{
  pmbus->marginLowGlobal();
}

//! Go to nominal
//! @return void
void margin_off()
{
  pmbus->sequenceOnGlobal();
}

//! Display menu 1
//! @return void
void menu_1_basic_commands()
{
  uint8_t user_command;

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("  1-Read All Voltages\n"));
    Serial.print(F("  2-Read All Currents\n"));
    Serial.print(F("  3-Read All Status\n"));
    Serial.print(F("  4-Sequence Off/On\n"));
    Serial.print(F("  5-Margin High\n"));
    Serial.print(F("  6-Margin Low\n"));
    Serial.print(F("  7-Margin Off\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        print_all_voltages();
        break;
      case 2:
        print_all_currents();
        break;
      case 3:
        print_all_status();
        break;
      case 4:
        sequence_off_on();
        break;
      case 5:
        margin_high();
        break;
      case 6:
        margin_low();
        break;
      case 7:
        margin_off();
        break;
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}




Download LTC2975 - DC2382.ino

/*!
Linear Technology DC1962C Demonstration Board
LTC2975 + LTM4644: 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/LTC2975

http://www.linear.com/demo/DC2382

REVISION HISTORY
$Revision: 4080 $
$Date: 2015-09-24 16:36:34 -0600 (Thu, 24 Sep 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 LTC2975
*/

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

#define LTC2975_I2C_ADDRESS 0x5C

// Global variables
static uint8_t ltc2975_i2c_address;
static LT_PMBusMath *math = new LT_PMBusMath();
static LT_SMBus *smbus = new LT_SMBusPec();
static LT_PMBus *pmbus = new LT_PMBus(smbus);

//! Initialize Linduino
//! @return void
void setup()
{
  Serial.begin(115200);         //! Initialize the serial port to the PC
  print_title();
  ltc2975_i2c_address = LTC2975_I2C_ADDRESS;
  print_prompt();
}

//! Repeats Linduino loop
//! @return void
void loop()
{
  uint8_t user_command;
  uint8_t res;
  uint8_t model[7];
  uint8_t revision[10];
  uint8_t *addresses = NULL;

  if (Serial.available())                          //! Checks for user input
  {
    user_command = read_int();                     //! Reads the user command
    if (user_command != 'm')
      Serial.println(user_command);

    switch (user_command)                          //! Prints the appropriate submenu
    {
      case 1:
        menu_1_basic_commands();                 // Print single-ended voltage menu
        break;
      case 2:
        menu_2_vid_commands();                   // Print VID menu
        break;
      case 3:
        menu_3_vid_commands();                   // Print VID menu
        break;
      case 4:
        pmbus->enablePec(ltc2975_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 5:
        pmbus->disablePec(ltc2975_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusNoPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 6:
        addresses = smbus->probe(0);
        while (*addresses != 0)
        {
          Serial.print(F("ADDR 0x"));
          Serial.println(*addresses++, HEX);
        }
        break;
      case 7 :
        pmbus->startGroupProtocol();
        pmbus->restoreFromNvm(ltc2975_i2c_address);
        pmbus->executeGroupProtocol();
        break;
      default:
        Serial.println(F("Incorrect Option"));
        break;
    }
    print_prompt();
  }

}

// Function Definitions

//! Prints the title block when program first starts.
//! @return void
void print_title()
{
  Serial.print(F("\n*****************************************************************\n"));
  Serial.print(F("* DC2382C Hello World Demonstration Program                     *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* This program demonstrates how to send and receive data from   *\n"));
  Serial.print(F("* the LTC2382  demo board.                                      *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* Set the baud rate to 115200 and select the newline terminator.*\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("*****************************************************************\n"));
}

//! Prints main menu.
//! @return void
void print_prompt()
{
  Serial.print(F("\n  1-Basic Commands\n"));
  Serial.print(F("  2-VID Commands (L16)\n"));
  Serial.print(F("  3-VID Commands (float) \n"));
  Serial.print(F("  4-PEC On\n"));
  Serial.print(F("  5-PEC Off\n"));
  Serial.print(F("  6-Bus Probe\n"));
  Serial.print(F("  7-Reset\n"));
  Serial.print(F("\nEnter a command:"));
}

//! Prints a warning if the demo board is not detected.
//! @return void
void print_warning_prompt()
{
  Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}

//! Print all voltages
//! @return void
void print_all_voltages()
{
  float   voltage;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    pmbus->setPage(ltc2975_i2c_address, page);
    voltage = pmbus->readVout(ltc2975_i2c_address, false);
    Serial.print(F("LTC2975 VOUT "));
    Serial.println(voltage, DEC);
  }
}

//! Print all currents
//! @return void
void print_all_currents()
{
  float   current;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    pmbus->setPage(ltc2975_i2c_address, page);
    current = pmbus->readIout(ltc2975_i2c_address, false);
    Serial.print(F("LTC2975 IOUT "));
    Serial.println(current, DEC);
  }
}

//! Print all status bytes and words
//! @return void
void print_all_status()
{
  uint8_t b;
  uint16_t w;
  uint8_t page;

  for (page = 0; page < 4; page++)
  {
    Serial.print(F("PAGE "));
    Serial.println(page, DEC);
    pmbus->setPage(ltc2975_i2c_address, page);
    b = pmbus->readStatusByte(ltc2975_i2c_address);
    Serial.print(F("LTC2975 STATUS BYTE 0x"));
    Serial.println(b, HEX);
    w = pmbus->readStatusWord(ltc2975_i2c_address);
    Serial.print(F("LTC2975 STATUS WORD 0x"));
    Serial.println(w, HEX);
  }
}

//! Sequence off then on
//! @return void
void sequence_off_on()
{
  pmbus->sequenceOffGlobal();
  delay (2000);
  pmbus->sequenceOnGlobal();
}

//! Margin high
//! @return void
void margin_high()
{
  pmbus->marginHighGlobal();
}

//! Margin low
//! @return void
void margin_low()
{
  pmbus->marginLowGlobal();
}

//! Go to nominal
//! @return void
void margin_off()
{
  pmbus->sequenceOnGlobal();
}

//! Display menu 1
//! @return void
void menu_1_basic_commands()
{
  uint8_t user_command;

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("  1-Read All Voltages\n"));
    Serial.print(F("  2-Read All Currents\n"));
    Serial.print(F("  3-Read All Status\n"));
    Serial.print(F("  4-Sequence Off/On\n"));
    Serial.print(F("  5-Margin High\n"));
    Serial.print(F("  6-Margin Low\n"));
    Serial.print(F("  7-Margin Off\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        print_all_voltages();
        break;
      case 2:
        print_all_currents();
        break;
      case 3:
        print_all_status();
        break;
      case 4:
        sequence_off_on();
        break;
      case 5:
        margin_high();
        break;
      case 6:
        margin_low();
        break;
      case 7:
        margin_off();
        break;
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}

//! Display menu 2
//! @return void
void menu_2_vid_commands()
{
  uint8_t user_command;
  uint16_t vcode;
  float voltage;

  vcode = math->float_to_lin16 (1.0, 0x13);
  smbus->writeByte(ltc2975_i2c_address, 0x00, 0x00);        // Set to page 0
  smbus->writeWord (ltc2975_i2c_address, 0x21, vcode);      // Set starting point

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("  1-VID UP 40 LSB\n"));
    Serial.print(F("  2-VID DN 40 LSB\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        vcode += 40;
        smbus->writeWord (ltc2975_i2c_address, 0x21, vcode);
        Serial.print(F("LTC2975 VOUT Code "));
        Serial.println(vcode, HEX);
        delay (1000);
        voltage = pmbus->readVout(ltc2975_i2c_address, false);
        Serial.print(F("LTC2975 VOUT Telemetry "));
        Serial.println(voltage, DEC);
        break;
      case 2:
        vcode -= 40;
        smbus->writeWord (ltc2975_i2c_address, 0x21, vcode);
        Serial.print(F("LTC2975 VOUT Code "));
        Serial.println(vcode, HEX);
        delay (1000);
        voltage = pmbus->readVout(ltc2975_i2c_address, false);
        Serial.print(F("LTC2975 VOUT Telemetry "));
        Serial.println(voltage, DEC);
        Serial.print(F("\n"));
        break;
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}

//! Display menu 3
//! @return void
void menu_3_vid_commands()
{
  uint8_t user_command;
  float vid_value;
  float voltage;

  vid_value = 1.0;
  pmbus->setPage(ltc2975_i2c_address, 0x00);                // Set to page 0
  pmbus->setVout(ltc2975_i2c_address, vid_value);           // Set starting voltage

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("  1-VID UP 4mV\n"));
    Serial.print(F("  2-VID DN 4mV\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        vid_value += 0.004;
        pmbus->setVout (ltc2975_i2c_address, vid_value);
        Serial.print(F("LTC2975 VOUT "));
        Serial.println(vid_value, DEC);
        delay (1000);
        voltage = pmbus->readVout(ltc2975_i2c_address, false);
        Serial.print(F("LTC2975 VOUT Telemetry "));
        Serial.println(voltage, DEC);
        break;
      case 2:
        vid_value -= 0.004;
        pmbus->setVout (ltc2975_i2c_address, vid_value);
        Serial.print(F("LTC2975 VOUT "));
        Serial.println(vid_value, DEC);
        delay (1000);
        voltage = pmbus->readVout(ltc2975_i2c_address, false);
        Serial.print(F("LTC2975 VOUT Telemetry "));
        Serial.println(voltage, DEC);
        Serial.print(F("\n"));
        break;
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}


Download LTC2975 - Linduino CPP File

#include "LT_PMBusDeviceLTC2975.h"

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

Download LTC2975 - 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_PMBusDeviceLTC2975
*/

#ifndef LT_PMBusDeviceLTC2975_H_
#define LT_PMBusDeviceLTC2975_H_

#include "LT_PMBusDeviceManager.h"

class LT_PMBusDeviceLTC2975 : public LT_PMBusDeviceManager
{
  public:

    static uint32_t cap_;

    LT_PMBusDeviceLTC2975(LT_PMBus *pmbus, uint8_t address) : LT_PMBusDeviceManager(pmbus, address, 8)
    {
    }

    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;
    }

    char *getType(void)
    {
      uint8_t *model = (uint8_t *) calloc(8,1);
      memcpy(model, "LTC2975", 7);
      return (char *) model;
    }

    uint8_t getNumPages(void)
    {
      return 4;
    }

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

      id = pmbus->readMfrSpecialId(address);
      if (  (id & 0xFFF0) == 0x0220)
      {
        device = new LT_PMBusDeviceLTC2975(pmbus, address);
        device->probeSpeed();
        return device;
      }
      else
        return NULL;
    }

};

#endif /* LT_PMBusDeviceLTC2975_H_ */

技術サポート