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