国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

用于電源系統(tǒng)管理的 Linduino

發(fā)布時(shí)間:2016-6-6 10:35    發(fā)布者:designapp
關(guān)鍵詞: 電源系統(tǒng)管理 , Linduino
引言

大多數(shù)電源系統(tǒng)管理設(shè)計(jì)都遵循一種“設(shè)定后便不需再過(guò)問(wèn)”的模型。電源系統(tǒng)管理 (PSM) 器件的設(shè)置和調(diào)試?yán)?LTpowerPlay? 是簡(jiǎn)單易行的,而且當(dāng)與一個(gè)批量編程解決方案組合時(shí)則無(wú)需固件。不過(guò),許多大型系統(tǒng)需要一個(gè)電路板管理控制器 (BMC),因而提出了這樣的問(wèn)題:“固件能夠?yàn)?PSM 做什么呢?”

PSM 固件的基礎(chǔ)是 PMBus;PMBus 的基礎(chǔ)是 SMBus;而 SMBus 的基礎(chǔ)則是 I2C。構(gòu)建一個(gè)利用 PSM 固件增加價(jià)值的 BMC 需要對(duì)每種協(xié)議有一定程度的了解,或者一個(gè)預(yù)先存在的軟件庫(kù)以使編程人員擺脫細(xì)節(jié)的束縛。

Linduino? 庫(kù)負(fù)責(zé)處理每個(gè)協(xié)議層,并提供一個(gè)應(yīng)用程序接口 (API),從而使得 PSM 固件的編寫(xiě)十分容易。Linduino PSM 并不是 BMC 的一種替代品,而是一組可兼容典型 BMC 固件的軟件庫(kù)和示例。

另外,Linduino 還可作為一款學(xué)習(xí)工具與 LTC 演示電路一起使用。許多 BMC 設(shè)計(jì)已經(jīng)具有一個(gè) SMBus API,所有這些需要的是快速學(xué)習(xí) PMBus 的工作原理。工程師們把 Linduino 代碼片段復(fù)制 / 粘貼到現(xiàn)有的應(yīng)用程序中并加以使用的現(xiàn)象是相當(dāng)常見(jiàn)的。不過(guò)也可以實(shí)施 Linduino 層之一,然后重用整個(gè)軟件庫(kù),包括:

● 器件和電源軌發(fā)現(xiàn)
● 命令 API
● 故障記錄解碼
● 系統(tǒng)內(nèi)編程

本應(yīng)用指南將陳述 Linduino 庫(kù)、電源系統(tǒng)管理編程、具演示電路的 Linduino PSM 的設(shè)置和使用、以及 PSM 調(diào)試方法。如需了解有關(guān)協(xié)議和一般編程問(wèn)題的詳細(xì)信息,請(qǐng)查閱“應(yīng)用指南 135” (Applicaton Note 135 - Implementing Robust PMBus System Software for the LTC3880) 以及針對(duì) I2C / SMBus / PMBus 的業(yè)界標(biāo)準(zhǔn)。

LINDUINO PSM 硬件

Linduino PSM 硬件包括一個(gè) Linduino (DC2026) 和一個(gè)屏蔽 (DC2294),以把 Linduino 的 I2C 引腳連接到一塊演示板或產(chǎn)品板的 PMBus / SMBus / I2CBus。

為獲得最佳的學(xué)習(xí)效果,可從一個(gè) DC2026 (Linduino)、DC2294 (屏蔽)、DC1962 (Power Stick) 和一個(gè) Total Phase Beagle (I2C 嗅探器) 著手。這能提供控制器 (LTC388X) 和管理器 (LTC297X) 的編程、調(diào)試和學(xué)習(xí)。

圖 1 (評(píng)估硬件) 示出了全部連接在一起的建議評(píng)估硬件。如欲使用該硬件,則利用兩根 USB 電纜把 Linduino 和 Beagle 連接至一臺(tái)計(jì)算機(jī)。假如您沒(méi)有用 USB 電纜連接 Beagle,那么就把 Beagle 帶狀電纜從 DC2294 斷接,以避免干擾往來(lái)于它和 DC1962 之間的 PMBus 通信。


圖1:評(píng)估硬件

如果連接至一個(gè)系統(tǒng)板,則 DC2086 可在大多數(shù)情況下工作。


圖2:系統(tǒng)硬件

DC2086 將接受一個(gè)從 DC2294 引出的連接,并支持 12 針帶狀電纜、14 針帶狀電纜和 4 針電纜。另外,DC2086 還支持一個(gè)外部電源輸入,該輸入用于功率需求量高于 Linduino 所能提供之水平的系統(tǒng)板。

LINDUINO PSM SKETCH

在了解 PMBus 庫(kù)的工作原理之前,快速瀏覽 DC1962 Sketch 將會(huì)弄清 Linduino PSM 的一般使用模型。此外,它還將演示編寫(xiě)代碼程序有多么簡(jiǎn)單易行,即使對(duì)于非編程人員也不例外。

為進(jìn)一步跟上,需要進(jìn)行兩項(xiàng)下載:Arduino 工具和 Linduino Sketchbook。Arduino 工具可從 www.arduino.cc 網(wǎng)站下載,而 Linduino Sketchbook 則可通過(guò) www.linear.com.cn/linduino 下載。

Arduino 工具可在多種平臺(tái)上的運(yùn)行。本應(yīng)用指南的構(gòu)建和行文采用的是在 64 位 Ubuntu 14 TLS 上運(yùn)行的 Arduino 1.6.4。
我們開(kāi)始吧:

第一步:配置

當(dāng)首次運(yùn)行 Arduino 軟件時(shí),它將使用一個(gè)默認(rèn)的 Sketchbook,而不是從 LTC 網(wǎng)站下載的 Linduino Sketchbook。
如欲變更 Linduino Sketchbook,則使用菜單欄上的 File | Preferences 選擇,如圖 3 (查找 Preferences 對(duì)話(huà)框) 所示。


圖3:查找 Preferences對(duì)話(huà)框

圖 4 (Preferences 對(duì)話(huà)框) 表明:Sketchbook Location 位于對(duì)話(huà)框的頂部。使用 Browse 按鈕,導(dǎo)航至從 www.linear.com.cn/linduino 下載的 LTSketchbook。另外,在編譯期間檢查 ON Display 行號(hào)和 Show 詳細(xì)輸出也是有幫助的。后一個(gè)設(shè)置在命令行上滾動(dòng)編譯消息,它們?cè)谶@里更容易看到。


圖4:Preferences 對(duì)話(huà)框

在設(shè)定路徑之后,必須關(guān)閉所有的 Arduino 窗口,而且必須重啟 Arduino 軟件。當(dāng)重啟 Arduino 時(shí),它重新掃描 Sketchbook 目錄并逐步建立 Arduino 菜單。如果未重啟 Arduino 軟件,則該菜單將不反映 LTSketchbook,而是指向前一個(gè) Sketchbook。
第二步:加載您的第一個(gè) Sketch:

通過(guò)仿效圖 5 (加載 hello_world) 來(lái)加載 hello_world Sketch。


圖5:加載 hello_world

在加載了 Sketch 之后,彈出一個(gè)具有該 Sketch 的窗口,如圖 6 (Sketch 窗口) 所示。


圖6:Sketch 窗口

第三步:編譯和運(yùn)行

如圖 7 (Arduino 工具欄) 所示,通過(guò)撳按工具欄上的鉤形符號(hào)來(lái)編譯 Sketch。


圖7:Arduino 工具欄

指向右的箭頭將編譯 Sketch 并把經(jīng)過(guò)編譯的 Sketch 裝入 Linduino 硬件。屏幕放大鏡顯示 Sketch 的輸出。把箭頭看作發(fā)送代碼至顯示控制臺(tái),或編譯代碼并把代碼發(fā)送至 Linduino 硬件,這樣顯示控制臺(tái)就具有一些需要對(duì)話(huà)的東西。

注:Arduino 板類(lèi)型應(yīng)設(shè)定為 Arduino Uno,而且應(yīng)選擇端口。見(jiàn)工具菜單 (Tools Menu)。

在加載了 Sketch 之后,撳按位于工具欄右邊的屏幕放大鏡以打開(kāi)控制臺(tái)窗口。把行尾結(jié)束符號(hào)設(shè)定為 Carriage return,并將波特率設(shè)定為 115200,以與圖 8 (Arduino 命令窗口) 相匹配。


圖8:Arduino 命令窗口

如需與 Sketch 互動(dòng),則把光標(biāo)置于頂部 (Send 按鈕的左邊) 的方框中,從菜單鍵入一個(gè)數(shù)字,然后撳按 Send 鈕或 。Sketch 接著將執(zhí)行命令并隨后重新顯示菜單。

第四步:考察菜單項(xiàng)

圖 9 (Sketch 菜單) 示出了當(dāng)撳按 1 以變更基本命令 (Basic Commands) 窗口、之后撳按 1 以讀取所有電壓 (Read All Voltages) 時(shí)會(huì)發(fā)生什么。DC1962 之所有電源軌的 VOUT 測(cè)量值被讀出并打印。


圖9:Sketch 菜單

在通過(guò)撳按位于左上角的 X 將控制臺(tái)關(guān)閉之前,Sketch 一直處于運(yùn)行狀態(tài)。如果重新打開(kāi)控制臺(tái),則其將重啟 Sketch。
現(xiàn)在您可以考察其他的菜單選項(xiàng),假如您熟悉 Beagle,則可排布一些走線并檢查總線事務(wù)。

第五步:代碼的修改

Sketch 具有兩個(gè)入口點(diǎn)。有一個(gè)setup() 函數(shù) (其被調(diào)用一次),和一個(gè) loop() 函數(shù) (其在一個(gè)循環(huán)中被永久地調(diào)用)。這些是 Arduino 編碼環(huán)境的組成部分。如果您是一位有經(jīng)驗(yàn)的 C 語(yǔ)言編程人員,則很有可能感到疑惑:main() 在哪里? Arduino 庫(kù)具有一個(gè)調(diào)用 setup() 的預(yù)定義 main() 和一個(gè)無(wú)限循環(huán)調(diào)用 loop()。

菜單被編碼為 Sketch 內(nèi)部的幫助函數(shù),而且 loop() 調(diào)用主菜單。每個(gè)菜單利用一個(gè)情況語(yǔ)句提供支持,這里每種情況處理一個(gè)菜單號(hào)。

好了,有關(guān)編程人員的內(nèi)容說(shuō)的足夠了。修改應(yīng)用程序就是簡(jiǎn)單地使用提供的 API 來(lái)變更 Sketch 中的情況語(yǔ)句。Sketch 中發(fā)出 PMBus 命令的函數(shù) (API) 來(lái)自一個(gè)單獨(dú)的庫(kù),并且具有聽(tīng)起來(lái)像您希望代碼程序執(zhí)行之任務(wù)的簡(jiǎn)單名稱(chēng)。例如:

voltage = pmbus->readVout (0x30, false);

意味著:使用 pmbus API,在地址 0x30 讀取輸出電壓 (無(wú)輪詢(xún)),并將它轉(zhuǎn)換成一個(gè)可變名稱(chēng)電壓。

現(xiàn)在您應(yīng)該做出少許變更了。例如,增添一個(gè)菜單項(xiàng)以讀取和打印輸出功率。如果您還沒(méi)有準(zhǔn)備好,就繼續(xù)閱讀以了解有關(guān)編寫(xiě)代碼程序的更多內(nèi)容。假如您已準(zhǔn)備就緒,那么這里是一個(gè)提示:

float readPout (uint8_t address, bool polling);

在 LTC3880 上試用它 (在 Power Stick 上的地址 0x30)。為證明它是有用的,可把電阻或一個(gè)電流負(fù)載添加至 Power Stick 上的通道 0,并驗(yàn)證其與 Sketch 打印的內(nèi)容相匹配。

LINDUINO PSM PMBus 庫(kù)

PMBus 庫(kù)存在于LTSketchbook/libraries/LT_PMBUS 目錄中的 LTSketchbook 樹(shù)之中。該軟件庫(kù)是分層的:從 TWI (兩線式接口) 開(kāi)始,然后是 I2C、SMBus,最后是 PMBus。有一個(gè)用于在 L11/L16 (PMBus 格式) 和浮點(diǎn)之間來(lái)回轉(zhuǎn)換數(shù)值的數(shù)字轉(zhuǎn)換 API。最后,具有群組命令協(xié)議 (Group Command Protocol) 輔助、器件和電源軌發(fā)現(xiàn)、故障記錄解碼、乃至系統(tǒng)內(nèi)編程功能。
每層是一個(gè)簡(jiǎn)單的 C++ 類(lèi),類(lèi)似于 Arduino 把一個(gè)類(lèi)別用于串行 (Serial) 和其他 I/O 函數(shù)的方式。如果您的最終環(huán)境是 C 語(yǔ)言,請(qǐng)不要擔(dān)心。簡(jiǎn)單的意思就是您可以使用 C++ 類(lèi) (沒(méi)有大量的內(nèi)存開(kāi)銷(xiāo)),或者也可以去除類(lèi)包裝并非常容易地將其用作純 C 語(yǔ)言。C++ 包裝器就是簡(jiǎn)化了應(yīng)用程序代碼并使其對(duì)于非編程人員而言更加容易。


圖10:LT_PMBus 類(lèi)示意圖

對(duì)于那些僅必須了解內(nèi)部結(jié)構(gòu)的編程人員來(lái)說(shuō),SMBus 位于一個(gè)層次體系中,這樣一來(lái)應(yīng)用代碼就與接通和關(guān)斷 PEC 無(wú)關(guān),并可幫助移植。LT_I2C.h、LT_SMBus.h 和 LT_PMBus.h 形成了 API 的層。如欲移植 Linduino PSM 庫(kù),則可選擇任何 API 之一并在您的平臺(tái)上實(shí)施 (使用您自己的軟件庫(kù))。最常用的端口重新實(shí)施 LT_SMBusBase 類(lèi),然后 PMBus 類(lèi)正常工作,數(shù)學(xué)轉(zhuǎn)換正常運(yùn)行,而且所有其他的函數(shù)和示例正常運(yùn)作。

使用 PMBus 庫(kù)

這個(gè)庫(kù)的使用可以無(wú)需了解所有這些類(lèi)成員;僅僅需要幾個(gè)導(dǎo)入和靜態(tài)變量,Sketch 就做好了動(dòng)作準(zhǔn)備。

一般來(lái)說(shuō) PMBus 庫(kù)是利用 Sketch 菜單添加的,如圖 11 (包括庫(kù) [Include Library]) 中所示。但是最重要包括的則示于圖 12 (基礎(chǔ)包括 [Base Includes])。


圖11:包括庫(kù) (Include Library)


圖12:基礎(chǔ)包括 (Base Includes)

一個(gè) Sketch 具有至少兩個(gè)靜態(tài)變量,一個(gè)用于系統(tǒng)管理總線 (smbus),另一個(gè)用于電源管理總線 (pmbus),如圖 13 (靜態(tài)變量) 所示。Smbus 變量是 Pec 或 NoPec 版本。干凈層 (clean layers) 的一個(gè)優(yōu)良的特點(diǎn)是編程人員可根據(jù)其項(xiàng)目的需要把應(yīng)用代碼編寫(xiě)為 SMBus 或 PMBus 代碼。利用 PMBus API 來(lái)編寫(xiě)應(yīng)用隱藏了命令代碼和數(shù)據(jù)格式化的細(xì)節(jié),而利用 SMBus API 編寫(xiě)應(yīng)用則可實(shí)現(xiàn)對(duì)所有可能命令代碼的訪問(wèn)以及對(duì)原始值的直接訪問(wèn)。


圖13:靜態(tài)變量

一旦兩個(gè)變量進(jìn)行了初始化,則可通過(guò) smbus-> 使用整個(gè) SMBus API,以及通過(guò) pmbus-> 使用整個(gè) PMBus API。可以在同一個(gè)應(yīng)用中兼用這兩種 API。

LT_PMBusMath

LT_PMBusMath 類(lèi)是一種高度優(yōu)化的數(shù)字轉(zhuǎn)換庫(kù),用于在 L11/L16 和浮點(diǎn)之間進(jìn)行數(shù)值的來(lái)回轉(zhuǎn)換。浮點(diǎn)對(duì)于 PMBus 代碼是不需要的,而且有些終端用戶(hù)應(yīng)用是僅利用整數(shù)編寫(xiě)的,特別是在提前知道了電壓和電流值、或者依靠一個(gè)非常小微控制器進(jìn)行浮點(diǎn)轉(zhuǎn)換過(guò)于緩慢的情況下。倘若固件不需要進(jìn)行此類(lèi)轉(zhuǎn)換,則它們?nèi)匀豢杀荒硞(gè)離線應(yīng)用所使用,以產(chǎn)生用于該應(yīng)用的整數(shù)。然而,當(dāng)函數(shù)采用浮點(diǎn)時(shí)編寫(xiě)代碼就容易得多了。

LT_I2C 庫(kù)

LT_I2C 庫(kù)不同于 LT_PMBus 庫(kù)中存在的 I2C 類(lèi)。LT_PMBus 中的版本除了支持大塊操作之外還針對(duì) PMBus 進(jìn)行了字節(jié)次序優(yōu)化。另外,LT_PMBus 庫(kù)中的 I2C 類(lèi)還基于 Wire 庫(kù),而且至其他 Arduino 板的可移植性更高。例如,它可在 Arduino Mega 2560 上工作。

所有的非 PSM Sketch 均采用 LT_I2C 庫(kù)。最好不要把 LT_I2C 庫(kù)用于 PSM/PMBus 器件,而且沒(méi)有必要這樣做。

編寫(xiě)一個(gè)簡(jiǎn)單的 Sketch

最佳的學(xué)習(xí)方法是從頭編寫(xiě)代碼,本節(jié)所涉及的內(nèi)容即在于此。如果您自己執(zhí)行這些步驟 (一次一個(gè)) 并在逐步執(zhí)行的過(guò)程中驗(yàn)證結(jié)果,那么下面的示例將是最有幫助的。

該 Sketch 示例采用一個(gè) DC1962 和在第一節(jié)中提到的另一個(gè)硬件。此示例接受 5 個(gè)簡(jiǎn)單的命令:

1.打印電壓
2.裕度調(diào)節(jié)
3.接通 / 關(guān)斷
4.總線探測(cè)
5.復(fù)位

第一步:創(chuàng)建一個(gè)空白的 Sketch

如圖 14 (新的 Sketch) 所示,通過(guò)選擇 File|New 以創(chuàng)建一個(gè)新的 Sketch。然后,您將看到一個(gè)如圖 15 (空的 Sketch) 所示的空 Sketch。


圖14:新的 Sketch (New Sketch)

使用 File|Save As… 菜單,并為新的 Sketch 選擇一條路徑。要確保文件夾名稱(chēng)和 Sketch 名稱(chēng)匹配,如圖 16 (Save As....) 所示。該路徑必須在 LTSketchbook 的下方 (File|Preferences 對(duì)話(huà)框中的相同路徑) 以便其在 Sketchbook 菜單中顯現(xiàn)出來(lái)。


圖15:空的 Sketch (Empty Sketch)


圖16:Save As … (另存為 …)

第二步:添加包括

使用 Sketch|Include|Include Library 菜單,選擇下面的庫(kù) (一次一個(gè)庫(kù)):

● UserInterface
● Linduino
● LT_PMBUS

圖 17 (Includes) 示出了怎樣選擇 LT_PMBUS 庫(kù)。所有的庫(kù)都在同一個(gè) Include Library 菜單中。


圖17:包括 (Includes)

在文件的頭一行上添加該包含語(yǔ)句:

#include

現(xiàn)在,添加用于地址和 SMBus/PMBus 對(duì)象的靜態(tài)變量。增添設(shè)置 (Setup) 代碼以預(yù)置變量和串行總線對(duì)象。利用 File|Save 保存該代碼。最后,撳按工具欄上的檢查按鈕以編譯代碼。

您的代碼應(yīng)看似圖 18 (初始化代碼) 的樣子。


圖18:初始化代碼

第三步:設(shè)置菜單

一個(gè)菜單需要打印選擇,以及對(duì)用戶(hù)選擇的響應(yīng)。

添加一個(gè) print_prompt() 函數(shù)以打印一個(gè)提示,并從設(shè)置函數(shù)調(diào)用它以在 Sketch 運(yùn)行時(shí)打印菜單提示。代碼應(yīng)看起來(lái)像圖 19 (Prompt)。

保存和編譯以確保代碼沒(méi)有錯(cuò)誤。


圖19:Prompt

第四步:添加菜單響應(yīng)

當(dāng)一個(gè)菜單選項(xiàng)被鍵入控制臺(tái)時(shí),代碼程序必須讀取它并做出響應(yīng)。

環(huán)路函數(shù)將處理用戶(hù)輸入。首先,它必須檢查串行總線是可用的。然后,它必須把輸入作為一個(gè)整數(shù)讀取并將之傳遞至一個(gè)開(kāi)關(guān)語(yǔ)句。在開(kāi)關(guān)語(yǔ)句的內(nèi)部,它必須執(zhí)行某些函數(shù)并隨后調(diào)用提示函數(shù)。用于每個(gè)命令的代碼將在開(kāi)關(guān)語(yǔ)句每種情況的內(nèi)部編寫(xiě),而提示函數(shù)將在之后調(diào)用。您的代碼框架應(yīng)看上去與圖 20 (用戶(hù)輸入) 相似。

對(duì)它進(jìn)行保存和編譯以確保其沒(méi)有錯(cuò)誤。

第五步:讀取電壓

現(xiàn)在是編寫(xiě)可做些有用工作的實(shí)際 PMBus 代碼的時(shí)候了。

圖 21 (讀取電壓) 示出了負(fù)責(zé)讀取所有電壓的代碼。代碼在情況 1 的內(nèi)部示出。兩個(gè)變量保持電壓和頁(yè)面:一個(gè)用于電壓的 float,和一個(gè)用于頁(yè)面的 unit8_t,顯示在第 57~58 行。打印使用標(biāo)準(zhǔn)的 Arduino Serial.print… 函數(shù)。字符串周?chē)?F() 把它們放入閃存中,這樣它們就不會(huì)使用寶貴的 RAM。對(duì)于每個(gè)器件,一個(gè) for loop 通過(guò)調(diào)用 pmbus->setPage(…) 的頁(yè)面進(jìn)行檢索,隨后利用 pmbus->readVout(…) 以讀取電壓。接著,代碼以十進(jìn)制打印電壓 (采用 DEC 類(lèi)型)。

您可以找到自己在 PMBus.h 文件中的 LT_PMBus 庫(kù)或 Doxigen 文檔里使用的所有 API 函數(shù)聲明。


圖20:用戶(hù)輸入


圖21:讀取電壓

第六步:裕度調(diào)節(jié)和接通/關(guān)斷

裕度調(diào)節(jié)代碼比電壓代碼簡(jiǎn)單,因?yàn)椴僮魇侨值,這意味著所有的器件能夠響應(yīng)一個(gè)命令,而且不需要頁(yè)面寄存器。此外,沒(méi)有任何東西要打印。

圖 22 (裕度調(diào)節(jié)和接通/關(guān)斷) 示出了代碼。情況 4 是 No Margin 菜單選擇。采用 sequenceOnGlobal() 來(lái)結(jié)束裕度調(diào)節(jié)也許看起來(lái)很奇怪。在內(nèi)部結(jié)構(gòu)中用于這些操作的 PMMBus 命令是 OPERATION (0x01) 命令。


圖22:裕度調(diào)節(jié)和接通/關(guān)斷

取自 LTC3880 產(chǎn)品手冊(cè)的圖 23 (OPERATION 命令) 表明:沒(méi)有用于停止裕度調(diào)節(jié)的專(zhuān)用命令。裕度調(diào)節(jié)利用數(shù)值 0x80 (它意味著接通) 來(lái)關(guān)斷。這就是采用 pmbus->sequenceOnGlobal() 來(lái)關(guān)斷裕度調(diào)節(jié)操作的原因。

表4:當(dāng) On-Off_Config_Use_PMBus 使能 Operation_Control 時(shí)的 OPERATION 命令細(xì)節(jié)寄存器 OPERATION 數(shù)據(jù)內(nèi)容


圖23:OPERATION 命令

第七步:總線探測(cè)和復(fù)位

探測(cè)總線是 SMBus API 的一部分,畢竟并非所有的器件均為 PMBus。圖 24 (探測(cè)和復(fù)位) 示出:探測(cè)是對(duì) smbus->probe(0) 的調(diào)用。0 是它用以實(shí)施探測(cè)的命令,其為 PAGE (0x00) 命令。探測(cè)將測(cè)試所有的有效地址并回送一個(gè)所發(fā)現(xiàn)之器件的清單。它將找到所有能夠確定收到一個(gè)讀命令 0x00 的器件。

復(fù)位命令不太明顯。LTC388X 和 LTC297X 系列的復(fù)位方法不同。LTC388X 器件支持一個(gè) MFR_RESET (0xFD) 命令,但是 LTC297X 器件則不支持。例如,在 LTC2977 上 0xFD 命令為 MFR_TEMPERATURE_MIN,而不是 MFR_RESET。使一個(gè)管理器復(fù)位的正確方法是從非易失性存儲(chǔ)器 (NVM) 恢復(fù) RAM,因?yàn)樵谠撟儞Q之后器件復(fù)位。

然而,如欲使所有的器件同時(shí)復(fù)位,則使用群組命令協(xié)議。這把所有的操作編組為單個(gè)事務(wù),在這里所有的命令均由 PSM 器件在 STOP 執(zhí)行。

圖 24 (探測(cè)和復(fù)位) 中的 case 8 示出了怎樣設(shè)置一個(gè)群組協(xié)議事務(wù)。該事務(wù)受pmbus->startGroupprotocol() 和 pmbus->executeGroupProtocol() 調(diào)用的束縛。


圖24:探測(cè)和復(fù)位

第八步:測(cè)試

這是編譯和運(yùn)行應(yīng)用程序并確信其工作狀況一切正常的好時(shí)機(jī)。

假如應(yīng)用程序運(yùn)行,但并不打印合理的數(shù)據(jù),那么您或許犯了某種錯(cuò)誤。您可以使用下面的調(diào)試方法對(duì)其進(jìn)行調(diào)試;蛘,如果您沒(méi)有耐心,則可只進(jìn)行復(fù)查:

● 地址
● 頁(yè)面
● 中斷語(yǔ)句

調(diào)試

有幾種調(diào)試一個(gè) Linduino PSM 應(yīng)用程序、或在這方面的任何固件應(yīng)用程序的方法:

● 打印
● Spy 工具
● 調(diào)試器

本應(yīng)用指南將不追求第三種選項(xiàng)。對(duì)于簡(jiǎn)單的 Sketch 它通常不是必需的。如果您希望了解有關(guān)調(diào)試器的更多信息,則轉(zhuǎn)至 Arduino 網(wǎng)站論壇,看看其他人使用的是什么工具。

您已經(jīng)看見(jiàn)了在上面的實(shí)例中使用的打印。您可通過(guò)添加更多的打印語(yǔ)句以進(jìn)行調(diào)試。不過(guò),應(yīng)始終把字符串放在 F() 宏指令的內(nèi)部,這樣 RAM 就不會(huì)被耗盡。當(dāng)打印文本和數(shù)字時(shí)將其分成兩個(gè)調(diào)用,于是文本部分便在閃存中了。

PSM 庫(kù)采用這種方法。誤差 (比如:NACK 和 PEC 誤差) 在命令窗口中打印。因此,增添調(diào)試打印通常被限制在應(yīng)用程序代碼。

您已經(jīng)看見(jiàn)了采用 DEC 的打印。您也可以使用 HEX 和其他格式。查閱 Arduino 文檔以獲得有關(guān)格式化的更多幫助。

用于 PMBus 的最好調(diào)試器是 Spy 工具。Spy 工具之所以很好,原因是您能看見(jiàn)總線上的通信量,而且在需要幫助的時(shí)候您可以把一個(gè)跟蹤記錄與您的代碼一起發(fā)送給 LTC 應(yīng)用技術(shù)工程師。

本應(yīng)用指南將重點(diǎn)關(guān)注由與 Total Phase Beagle 對(duì)話(huà)的 Total Phase Data Center 應(yīng)用程序產(chǎn)生的數(shù)據(jù)。在 Total Phase 的網(wǎng)站上提供了幫助您安裝 Data Center Application 的信息 (www.totalphase.com)。

啟動(dòng)開(kāi)發(fā)工作最簡(jiǎn)單的方法是使用您剛剛創(chuàng)建的 Sketch 來(lái)跟蹤總線。將采用菜單選擇 3 (讀取電壓)。

圖 25 (Beagle跟蹤) 示出了數(shù)據(jù)。讓我們直接投入并對(duì)某些事務(wù)進(jìn)行解密,并采用索引以記錄我們所在的位置。

在 Index #1 (I1) 和 index #6 (I6),有兩項(xiàng)寫(xiě)字節(jié)事務(wù)。在 SMBus 中,這是寫(xiě)字節(jié)協(xié)議 (Write Byte Protocol)。地址為 0x30,這是 LTC3880,如在代碼中可以看到的那樣。第一個(gè)字節(jié)是命令,其為 0x00,它是頁(yè)面 (PAGE) 命令。


圖25: Beagle 跟蹤

LTC3880 產(chǎn)品手冊(cè)中的表 2 示出了 PAGE 命令。這張表是對(duì) Beagle 數(shù)據(jù)進(jìn)行解碼的快速方法。請(qǐng)注意 Type 列顯示的是 R/W Byte。這意味著寄存器是讀 / 寫(xiě)字節(jié)協(xié)議,因此兩個(gè)方向均得到支持。


圖26:PAGE 命令

回過(guò)頭去看一下 I1 和 I6,第二個(gè)字節(jié)是一個(gè) 0x00 和 0x01。代碼將把 PAGE 寄存器設(shè)定為 0 和 1。重新提及圖 21 (讀取電壓) 中的第 63 行,這是設(shè)定頁(yè)面的地方。我們應(yīng)查看在緊接此之后的 I2 至 I5 上處于讀取之中的電壓。

我們看到:

寫(xiě) 0x8B,讀 0x9A 0x0D
寫(xiě) 0x20,讀 0x14
0x8B 是一個(gè) READ_VOUT 命令。產(chǎn)品手冊(cè)中的表 2 顯示它是一個(gè) R 字協(xié)議,而且采用的是 L16 格式。
0x20 是一個(gè) VOUT_MODE 命令。產(chǎn)品手冊(cè)中的表 2 顯示它是一個(gè) R 字節(jié)命令。
導(dǎo)致這些發(fā)生的 Linduino 調(diào)用示于圖 21 (讀取電壓) 中的第 64 行。

為什么單個(gè)函數(shù)調(diào)用發(fā)布了兩項(xiàng)事務(wù)? 為弄清原因,我們必須了解 API 背后的代碼,示于圖 27 (讀取 VOUT 代碼)。


圖27:讀取 VOUT 代碼

該代碼示出了一個(gè)后隨 smbus_.readByte(address, VOUT_MODE) 的 smbus_.readWord(address, READ_VOUT),而且 5 個(gè)位從模式抽取并被置入變量 exp。數(shù)學(xué)轉(zhuǎn)換然后采用指數(shù) exp 實(shí)現(xiàn)從 L16 至浮點(diǎn)的轉(zhuǎn)換。

大致說(shuō)來(lái),用于讀取電壓的代碼是負(fù)責(zé)讀取用于把 L16 轉(zhuǎn)換為浮點(diǎn)之指數(shù)的通用代碼。LTC388X 和 LTC297X 器件采用了一個(gè)不同的指數(shù)。這就是存在兩項(xiàng)事務(wù)的原因。

注:代碼可利用指數(shù)的某種先驗(yàn)知識(shí)來(lái)編寫(xiě),而且它的運(yùn)行速度快一點(diǎn)。不過(guò),通用代碼將具有較少的漏洞,且對(duì)于應(yīng)用程序編寫(xiě)者更加容易。當(dāng)編寫(xiě)自己的代碼時(shí)這是您必須做出的權(quán)衡。

在結(jié)束之前,讓我們看一個(gè)更加有趣的事務(wù):復(fù)位。

看一下圖 28 (復(fù)位跟蹤),并需注意到有三個(gè)寫(xiě)事務(wù)。在 S/P 列中,有兩個(gè) S 和一個(gè) SP。這意味著 I1 是一個(gè)啟動(dòng) (Start),I2 是一個(gè)重復(fù)啟動(dòng) (Repeated Start),I3 是一個(gè)重復(fù)啟動(dòng) (Repeated Start),之后是一個(gè)停止 (Stop)。此外,它們各自的地址是不同的:0x30、0x32 和 0x33。


圖28:復(fù)位跟蹤 (Reset Trace)

這是群組命令協(xié)議。所有的命令都將在 I3 的末端 (STOP) 處理。這與圖 24 (探測(cè)和復(fù)位) 中所示代碼的第 110~114 行相關(guān)聯(lián)。
如果您在自己的 Beagle 軌跡解碼上花些時(shí)間,就將對(duì) PSM 器件的 PMBus 命令獲得更加完整的了解。另一方面,假如您的目標(biāo)是使代碼正常運(yùn)行,那么 PSM 庫(kù)非常愿意為您完成繁重的任務(wù)。

采用 LTpowerPlay 的高級(jí)調(diào)試

回到引言部分,那里說(shuō)大多數(shù)系統(tǒng)是“設(shè)定后便不需再過(guò)問(wèn)”的,而且有些系統(tǒng)具有一個(gè) BMC。事實(shí)是那些具有一個(gè) BMC 的系統(tǒng)把“設(shè)定后便不需再過(guò)問(wèn)”與固件組合在一起。為什么讓一個(gè) BMC 承擔(dān)了全部的設(shè)置責(zé)任呢? 這是因?yàn)榘涯撤N基本設(shè)置寫(xiě)入 PSM 器件、然后僅將 BMC 固件用于添加的價(jià)值功能要容易得多。另外,這還造就了更加可靠的系統(tǒng),因?yàn)榇蠖鄶?shù)固件負(fù)責(zé)讀取遙測(cè)數(shù)據(jù)、裕度、并實(shí)施輕微的電壓變更,不需要讓它控制排序或始終是靜態(tài)的 PWM 頻率等關(guān)鍵功能。

由于 LTpowerPlay 是一款用于設(shè)計(jì)、調(diào)試和調(diào)通 PSM 系統(tǒng)的通用型工具,因此調(diào)試固件必須與物理時(shí)鐘和數(shù)據(jù)線上的另一個(gè) PMBus 主控器進(jìn)行競(jìng)爭(zhēng)。

在進(jìn)入兩個(gè)主控器的實(shí)際意義之前,最好是仔細(xì)研究一下當(dāng)一根 PMBus 具有兩個(gè)主控器時(shí)會(huì)發(fā)生什么。PMBus 基于 SMBus,這包括多主控。

時(shí)鐘和數(shù)據(jù)線是開(kāi)路漏極。這意味著任何器件 (主控器或受控器) 都能夠下拉一根線的電平,但不能上拉其電平。有這樣一條規(guī)則:當(dāng)一個(gè)主控器未下拉數(shù)據(jù)線電平、并檢測(cè)到數(shù)據(jù)線為低電平時(shí),則其認(rèn)為有另一個(gè)主控器在把數(shù)據(jù)線拉至低電平,于是中止其自身的事務(wù),從而允許另一個(gè)主控器繼續(xù)完成其事務(wù)。

該方法有時(shí)被稱(chēng)為“位優(yōu)勢(shì)仲裁”(bit dominance arbitration),這是一種指明“在數(shù)據(jù)中將一個(gè)零置為有效的主控器總是獲勝”的奇特說(shuō)法。

Linduino 和 LTpowerPlay (DC1613) 多主控器,而且您也許認(rèn)為一切都很完美了。不過(guò),還有一項(xiàng)更為關(guān)鍵的考慮因素。
PMBus 定義了一個(gè) PAGE 命令 (0x00),它像一個(gè)進(jìn)入數(shù)據(jù)的地址。頁(yè)面像是通道一樣。例如,一個(gè) LTC2977 能夠管理 8 個(gè)電源:它擁有 8 個(gè)通道,各由 PAGE 寄存器 / 命令進(jìn)行尋址。

實(shí)際上這意味著:為讀取某種數(shù)值 (如電壓),它需要兩項(xiàng)事務(wù):一項(xiàng)用于 PAGE,一項(xiàng)用于 READ_VOUT。如果兩個(gè)主控器同時(shí)試圖從同一個(gè)受控器讀取遙測(cè)數(shù)據(jù),而且倘若一個(gè)主控器在另一個(gè)主控器的頁(yè)面命令和遙測(cè)命令之間插入了一個(gè)頁(yè)面命令,則它將讀取錯(cuò)誤的頁(yè)面。

當(dāng) LTpowerPlay 啟動(dòng)并運(yùn)行時(shí),它所做的首要之事是讀取遙測(cè)數(shù)據(jù),這將保持其狀態(tài)顯示為最新,于是您就能查看輸出的曲線圖、故障和其他重要信息。猜猜固件通常做什么? 它讀取遙測(cè)數(shù)據(jù)!

更加糟糕的是,假設(shè)固件在啟動(dòng)的時(shí)候執(zhí)行一項(xiàng) VID (電壓識(shí)別) 功能。假使固件由于 LTpowerPlay 修改了 PAGE 寄存器而把一個(gè)電壓值寫(xiě)至錯(cuò)誤的頁(yè)面,將會(huì)怎么樣呢? 系統(tǒng)有可能發(fā)生故障關(guān)斷,甚至更糟地造成某些東西受損。(幸運(yùn)的是,VOUT_MAX 寄存器通常可防止系統(tǒng)損壞)

PAGE 命令的基本問(wèn)題是 PMBus 規(guī)格中固有的。它并不是 LTC 電源系統(tǒng)管理器件所特有的,而且必須對(duì)其進(jìn)行處置。
有兩種允許 LTpowerPlay 與固件共存并避免發(fā)生 PAGE 問(wèn)題的基本方法。第一種方法就是簡(jiǎn)單地不讓兩個(gè)主控器同時(shí)談話(huà)。第二種方法是在一個(gè)或另一個(gè)主控器上使用 PAGE PLUS 協(xié)議和其他的技巧。

我們避開(kāi) PAGE PLUS,因?yàn)樗皇浅S玫。PAGE PLUS 提供了一種原子事務(wù),其在一項(xiàng)事務(wù)中包括 PAGE 和 COMMAND。由于并非所有的器件都支持它,所以它通常僅在特殊場(chǎng)合中使用,因此本應(yīng)用指南將不把重點(diǎn)放在 PAGE PLUS 和其他訣竅上。如果您沒(méi)有解決此問(wèn)題的其他方法,則可閱讀 LTC PSM 產(chǎn)品手冊(cè),或致電當(dāng)?shù)氐膽?yīng)用技術(shù)工程師以尋求幫助。

更常見(jiàn)的是防止 LTpowerPlay 和固件同時(shí)與受控器對(duì)話(huà)。LTpowerPlay 具有一種非常簡(jiǎn)單控制其運(yùn)行的方法。圖 29 (LTpowerPlay 啟動(dòng) / 停止) 示出了遙測(cè)曲線圖,它在其工具欄上具有一個(gè)紅色方形按鈕。


圖29:LTpowerPlay 啟動(dòng) / 停止

當(dāng)按下此按鈕時(shí),它會(huì)停止總線上的所有遙測(cè)和所有的 LTpowerPlay 動(dòng)作。然后,它變?yōu)橐粋(gè)綠色箭頭,如圖 30 (停止的 LTpowerPlay) 所示。


圖30:停止的 LTpowerPlay

不幸的是,固件并非總是具有一種用于實(shí)現(xiàn)總線靜噪的內(nèi)置機(jī)制。LTC 簡(jiǎn)單地建議利用一種內(nèi)置靜噪機(jī)制、或者通過(guò)提供一個(gè)硬件總線開(kāi)關(guān) / 多工器 (MUX) 或跳線來(lái)設(shè)計(jì)新型固件。

一旦有了一種使總線主控器、LTpowerPlay 或固件靜噪的方法,那么調(diào)試只是一件根據(jù)需要在工具之間進(jìn)行交替的簡(jiǎn)單事。
總之,有兩種選擇:

1.一次只允許一個(gè)主控器在總線上進(jìn)行對(duì)話(huà)
2.在 LTC 應(yīng)用技術(shù)工程師的幫助之下粗略地了解 PAGE PLUS 及其他先進(jìn)方法的細(xì)節(jié)

對(duì)于一款新設(shè)計(jì)而言,選項(xiàng) 1 始終是最佳的選擇。

概要

利用 Linduino PSM Sketchbook、一塊 Linduino 開(kāi)發(fā)板和任選的 DC2294 屏蔽,可使針對(duì) PSM 器件的程序代碼編寫(xiě)變得簡(jiǎn)單。軟件庫(kù)具有一個(gè)用于 SMBus 和 PMBus 的簡(jiǎn)單 API。LTpowerPlay 仍可用于調(diào)試,而且可附接一個(gè) Total Phase Beagle 或其他的 Spy Tool 以觀察總線上的通信量。

不管您是希望移植代碼還是僅僅希望了解 PMBus 的工作原理,Linduino 都是啟動(dòng)開(kāi)發(fā)工作的一種絕佳的方法。一旦您加快了學(xué)習(xí)曲線,并了解了 PSM 編程的基礎(chǔ)知識(shí),就能提升自己的工作進(jìn)度并充滿(mǎn)信心地使用其他工具。

現(xiàn)在完成了本應(yīng)用指南的閱讀,您或許希望察看與 LTSketchbook 配套提供的其他 Sketch。試用一些更高級(jí)的 Sketch,比如:故障記錄解碼 (Fault Log Decoding) 或系統(tǒng)內(nèi) / 運(yùn)行中更新 (In System/Flight Update)。
本文地址:http://m.qingdxww.cn/thread-166744-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • PIC32CK SG單片機(jī)——輕松滿(mǎn)足新型網(wǎng)絡(luò)安全要求
  • PIC32CM LS00 Curiosity Pro評(píng)估工具包
  • dsPIC® DSC集成電機(jī)驅(qū)動(dòng)器:非常適合在緊湊空間內(nèi)進(jìn)行實(shí)時(shí)控制
  • dsPIC® DSC:攻克各種觸摸傳感挑戰(zhàn)的電容式觸摸解決方案
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲国产日韩综合在线播放| 天天射天天爱天天干| 爽妇综合网| 四虎伊人| 视频一区二区不卡| 色偷偷亚洲女性天堂| 青青青在线网站视频在线| 一级高清毛片免费a级高清毛片| 香蕉伊大在线中字色中文| 日韩乱码在线观看| 欧美另美人妖| 亚洲成人自拍| 日韩特级| 香港三级日本三级三级韩级2| 日韩精品在线播放| 青青操在线免费观看| 人人射人人草| 日韩中文字幕一在线| 亚洲国产成人精品91久久久| 天天色国产| 青草视频网站在线观看| 欧美黄区| 亚洲欧美日韩在线精品一区二区| 亚洲精品第一综合99久久| 四虎国产成人永久精品免费| 青青草久久| 香蕉欧美成人精品a∨在线观看| 亚洲一区二区三区免费看| 亚洲一区二区三区久久精品| 四虎影视久久久免费| 人人做人人插| 网红主播自拍偷拍的激情视频| 青草视频在线观看免费| 亚洲成人91| 色蜜桃网| 日韩免费在线视频观看| 欧美日韩一区二区三区麻豆| 亚洲一二区视频| 欧洲亚洲一区| 欧美久久天天综合香蕉伊 | 特级毛片aaaaaa蜜桃|