支持用于电力系统管理的固件开发的Linduino PSM

描述

虽然许多工程师使用加密狗和工具通过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编码环境兼容。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分