雖然許多工程師使用加密狗和工具通過(guò)PMBus配置電源系統(tǒng)管理設(shè)備,但越來(lái)越多的設(shè)計(jì)正在添加電路板管理控制器,或?qū)⑵銹MBus連接到現(xiàn)有的微控制器或應(yīng)用處理器。在LTC中,加密狗/工具選項(xiàng)由DC1613和LTpowerPlay組成,Linduino支持用于電力系統(tǒng)管理的固件開發(fā),又名“Linduino PSM”。
Linduino平臺(tái)是一個(gè)獨(dú)立的Arduino兼容板(DC2026),適用于不同設(shè)備的代碼庫(kù)和草圖。直到最近,人們的注意力還是在我身上。2C 和 SPI。現(xiàn)在支持PMBus器件,包括DC2294擴(kuò)展板,它允許工程師將Linduino連接到PSM演示板,并連接到全相位小獵犬以監(jiān)視總線。
Linduino PSM的目標(biāo)與Linduino的目標(biāo)相同,即提供工作示例代碼,以便工程師可以學(xué)習(xí),原型和借用自己的設(shè)計(jì)工作代碼。
圖1.DC2294 屏蔽 DC2026 林杜伊諾
Linduino PSM PMBus Stack
Linduino PSM提供的PMBus庫(kù)的分層方式很像網(wǎng)絡(luò)API。層允許替換和替換。例如,驅(qū)動(dòng)程序?qū)涌梢葬槍?duì)工程師的最終解決方案進(jìn)行返工,以便其頂部的層無(wú)需修改即可重復(fù)使用。
圖2.PMBus 庫(kù)堆棧
TWI 和電線層
底部是雙線接口,它是Arduino TWI和LT_Wire庫(kù)的修改副本。修改很小,但解決了塊命令的問(wèn)題。
SMBus 1.3 規(guī)范定義了兩個(gè)塊命令:塊寫入和塊讀取。
圖3.塊寫入
圖4.阻止讀取
允許字節(jié)計(jì)數(shù)的范圍為 0 到 255 字節(jié)。TWI和Wire的Arduino版本只允許32字節(jié)。為了支持 255 字節(jié)事務(wù),必須解決三個(gè)問(wèn)題:
小緩沖
內(nèi)存使用情況
應(yīng)用程序接口
緩沖區(qū)最多可容納 255 個(gè)字節(jié)(原始緩沖區(qū)為 32 個(gè)),但大緩沖區(qū)將使用處理器內(nèi)存的 1/8,即使從未使用塊調(diào)用也是如此。修改后的庫(kù)將緩沖區(qū)從應(yīng)用程序傳遞到 API。如果應(yīng)用程序分配內(nèi)存,則只需在需要時(shí)使用內(nèi)存,并且可以在不使用時(shí)釋放內(nèi)存。修改后的 API 可以傳遞大于 255 的值以傳輸超過(guò) 255 個(gè)字節(jié),因?yàn)?count 參數(shù)已從字節(jié)更改為單詞。
LTC_I2控制層
The LTC_I2CBus 層提供 I2C 事務(wù)接口。最初的林杜伊諾圖書館附帶了另一個(gè) I2名為 LT_I 的 C 庫(kù)2C. 但是,它針對(duì)不同的字節(jié)順序以及DAC、ADC等進(jìn)行了優(yōu)化。通過(guò)提供 I2專門用于PMBus的C層,可以維護(hù)新層,而無(wú)需更新舊草圖或擔(dān)心破壞其他非PSM草圖。
LTC_SMBus圖層
LTC_SMBus層為 SMBus 提供標(biāo)準(zhǔn)事務(wù),這是 PMBus 的基礎(chǔ)。例如:
發(fā)送字節(jié)
寫/讀字節(jié)
寫/讀字
寫/讀塊
此層可用于與任何 SMBus 設(shè)備通信,或使用 PMBus 命令代碼與 PMBus 設(shè)備通信。
LTC_PMBus層
LTC_PMBus層提供基于 PMBus 命令集的高級(jí)事務(wù)。這允許工程師使用高級(jí)功能進(jìn)行編程,例如:
設(shè)置頁(yè)面
讀取當(dāng)前
讀取電壓
順序向上/向下
使用更高層的命令使代碼更具可讀性,工程師不必在規(guī)范中查找命令。某些命令是聚合的,例如“設(shè)置第 N 頁(yè)的電壓”或“設(shè)置電壓并保持邊距相同百分比”。
如果缺少命令,通常的做法是先使用LTC_SMBus層對(duì)其進(jìn)行編碼,然后將代碼遷移到LTC_PMBus層。
LTC_PMBusMath
PMBus使用的數(shù)據(jù)格式(L11 / L16),這些格式不是IEEE 754浮點(diǎn)標(biāo)準(zhǔn)等行業(yè)標(biāo)準(zhǔn),但工程師更喜歡IEEE標(biāo)準(zhǔn),因?yàn)镃 / C++使用此標(biāo)準(zhǔn)。Linduino PSM 庫(kù)包括與 IEEE 浮點(diǎn)和 PMBus 格式之間的轉(zhuǎn)換例程。LTC_PMBus層接受并返回 IEEE 浮點(diǎn)數(shù),并使用LTC_PMBusMath例程管理層內(nèi)的轉(zhuǎn)換。但是,可以將數(shù)學(xué)例程與LTC_SMBus層一起使用。
注意:PMBus 1.3 定義了 IEEE 754 格式,但在業(yè)界根據(jù)此標(biāo)準(zhǔn)實(shí)現(xiàn)設(shè)備之前,數(shù)學(xué)庫(kù)中的轉(zhuǎn)換例程將是必需的。也總會(huì)有舊設(shè)備需要支持。
林杜伊諾素描
Linduino/Arduino Sketches只不過(guò)是小應(yīng)用程序。對(duì)于 PSM,這些是演示設(shè)備功能的簡(jiǎn)單文本菜單應(yīng)用程序,例如:
讀取遙測(cè)數(shù)據(jù)
讀取狀態(tài)
排序上/下
探測(cè)總線
轉(zhuǎn)儲(chǔ)故障日志
圖5.命令界面
它們背后的代碼使用LT_PMBus層,因此代碼易于閱讀。下面的代碼只是在頁(yè)面上循環(huán),讀取電壓,并以十進(jìn)制格式打印。讀出中的值以浮點(diǎn)數(shù)形式返回,即 IEEE 754 值;與數(shù)學(xué)庫(kù)的轉(zhuǎn)換發(fā)生在讀取 V 中外功能。
無(wú)效 print_all_voltages()
{
浮動(dòng)電壓;
uint8_t頁(yè);
for (page = 0;page < 2;page++)
{
pmbus->setPage(ltc3880_i2c_address, page);
電壓 = pmbus->readVout(ltc3880_i2c_address, false);
電壓 = pmbus->readVout(ltc3880_i2c_address, false);
Serial.println(電壓,DEC);
}
}
PEC 在幕后處理。在主菜單上,可以打開和關(guān)閉PEC。由于命令是 pmbus-> 編寫的,因此可以更改指針。
圖6.主菜單
案例2:
pmbus->enablePec(ltc3880_i2c_address);
pmbus->enablePec(ltc2974_i2c_address);
pmbus->enablePec(ltc2977_i2c_address);
刪除SMBus;
刪除 PMBus;
smbus = new LT_SMBusPec();
pmbus = new LT_PMBus(smbus);
破;
情況3:
pmbus->禁用Pec(ltc3880_i2c_address);
pmbus->disablePec(ltc2974_i2c_address);
pmbus->disablePec(ltc2977_i2c_address);
刪除SMBus;
刪除 PMBus;
SMBs = 新LT_SMBusNoPec();
pmbus = new LT_PMBus(smbus);
破;
嗯,差不多。設(shè)備還必須處于正確的模式?;静呗允牵?/p>
更改設(shè)備模式
刪除 smbus 和 pmbus 對(duì)象
使用正確的模式重新實(shí)例化對(duì)象
使用 smbus-> 和 pmbus-> 指針的代碼不必更改。
其他庫(kù)(非 Linduino)傳遞一個(gè)值來(lái)控制 PEC 或配置全局變量。Linduino方法使用C++類。但是,代碼保持非常簡(jiǎn)單,因此如果禁止工程師使用C++,它可以非??焖俚剞D(zhuǎn)換為純 C。大多數(shù)嵌入式系統(tǒng)都支持 C 和 C++ 編譯器,但如果一個(gè)大型系統(tǒng)是純 C,工程師可能不想為C++名稱重整或使用 C++ 編譯器編譯 C 的效果而煩惱。
成型
原型設(shè)計(jì)只是將草圖復(fù)制到具有新名稱的文件并進(jìn)行修改的問(wèn)題。原型完成后,工程師必須決定如何將代碼遷移到最終應(yīng)用程序。
如果不涉及遺留代碼,最簡(jiǎn)單的情況是重寫LTC_I2CBus 或LTC_SMBus圖層并重用其上方的圖層。如果有很多遺留代碼,最好復(fù)制原型設(shè)計(jì)并重新編碼。最主要的是工程師可以在更簡(jiǎn)單的環(huán)境中進(jìn)行原型設(shè)計(jì)。
硬件也可以重復(fù)使用。當(dāng)然,可以將Atmega328放入設(shè)計(jì)中并直接使用Linduino PSM代碼?;蛘邔?duì)TWI / LTC_I進(jìn)行一些調(diào)整2CBus工程師可以使用更大的Arduino平臺(tái)之一。LTC將這些移植到伽利略作為實(shí)驗(yàn),花了不到一天的時(shí)間。
對(duì)于從屬硬件,Linduino可以連接到任何PSM演示板。但是,大多數(shù)產(chǎn)品設(shè)計(jì)都有用于DC1613加密狗的連接器,因此Linduino可以使用DC2294擴(kuò)展板直接連接到終端設(shè)計(jì)。這是在將資源投入到新產(chǎn)品之前對(duì)完整設(shè)計(jì)進(jìn)行原型設(shè)計(jì)的好方法??梢詾?a target="_blank">操作系統(tǒng)開發(fā)算法,以確定需要多少計(jì)算能力和內(nèi)存空間,并證明它將提供投資回報(bào)。
工具制造
Linduino是構(gòu)建專業(yè)最終用途工具的良好平臺(tái)。通過(guò)將Linduino,DC2294和現(xiàn)成的擴(kuò)展板相結(jié)合,可以創(chuàng)建獨(dú)立的工具。例如,下面的工具是一個(gè)編程工具,用于配置手持插座中設(shè)備的非易失性存儲(chǔ)器。向上/向下按鈕選擇文件,選擇按鈕對(duì)設(shè)備進(jìn)行編程。
圖7.示例工具
教育用途
Linduino PSM的最后一個(gè)常見用途是學(xué)習(xí)。如果不熟悉SMBus/PMBus標(biāo)準(zhǔn),一個(gè)好的學(xué)習(xí)方法是連接全相位小獵犬,在DC1962上運(yùn)行一些草圖,并使用全相位數(shù)據(jù)中心軟件觀察總線。請(qǐng)注意,還有另一種選擇,其中LTpowerPlay可以與Beagle一起使用。LTpowerPlay的優(yōu)點(diǎn)是寄存器語(yǔ)法內(nèi)置于工具中,因此GUI中的任何值都可以顯示為SMBus/PMBus事務(wù)。
總結(jié)
Linduino PSM是用于PMBus代碼開發(fā)的原型設(shè)計(jì),工具構(gòu)建和學(xué)習(xí)環(huán)境。Linduino與DC2294結(jié)合使用,可連接到任何PSM演示板或產(chǎn)品。有一個(gè)完整的工作SMBus / PMBus庫(kù)以及數(shù)學(xué)轉(zhuǎn)換,與Arduino編碼環(huán)境兼容。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151423 -
電源
+關(guān)注
關(guān)注
184文章
17718瀏覽量
250170 -
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229842
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論