欢迎您 登录 |  注册 | 找回密码

产品
产品资讯

技术
设计与应用

工业应用
汽车电子
电源
更多参考设计

总评分:简直是完美

9.8

760人评分    2404关注    3637715次浏览

我的评分

  

专题名称:德州仪器社区
官方网址:进入官方网站

返回本专题首页

基于GUI 软件配置UCD3138 数字电源 PMBUS 命令

作者:TI德州仪器   2013-07-16   来源:   评论:1条    浏览:153557

摘 要87cc45【中国自动化网社区】0aaa83【http://sns.ca800.com】eee0
f5【中国自动化网社区】ff94ab【http://sns.ca800.com】6faaff2
可与数字电源UCD3138 配套使用的Fusion Digital Power Designer 软件拥有Graphical User Interface (GUI) 界面,用户可在其上编辑数据并通过对应的PMBUS 命令与UCD3138 的软件交互。在GUI 界面中,用户可以灵活的增加GUI 软件支持的PMBUS 命令,亦可以删除,因此大幅提高了GUI 的灵活性。本文通过两个实例,详细分析了如何增加和删除GUI 软件可以支持的PMBUS 命令。f5【中国自动化网社区】ff94ab【http://sns.ca800.com】6faaff2
0327821【中国自动化网社区】3304e0【http://sns.ca800.com】d0
1 数字电源GUI 软件及其配置功能0327821【中国自动化网社区】3304e0【http://sns.ca800.com】d0
0327821【中国自动化网社区】3304e0【http://sns.ca800.com】d0
数字电源GUI 软件运行于用户计算机,可以借助PMBUS 总线与UCD3138 数字电源通信,完成配置、设计和监控等功能。用户可以灵活的在界面中添加PMBUS 命令支持的信息,亦可以在其中删除。a81【中国自动化网社区】71b6da【http://sns.ca800.com】b1
a81【中国自动化网社区】71b6da【http://sns.ca800.com】b1
1.1 数字电源GUI 软件a81【中国自动化网社区】71b6da【http://sns.ca800.com】b1
a81【中国自动化网社区】71b6da【http://sns.ca800.com】b1
图1 所示的是与UCD3138 数字电源芯片配套使用,可用来对基于UCD3138 数字电源进行配置,设计及监控的GUI 软件:Fusion Digital Power。该软件安装并运行于用户的计算机上,通过PMBUS 总线与UCD3138 的软件进行交互。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 1:数字电源GUI 软件59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
该软件主要包含以下功能:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
1)配置:通过PMBUS 命令对数字电源的参数进行配置,如输入电压的欠压保护点(对应的PMBUS 命令为VIN_ON 和VIN_OFF),输出电流的过流保护(对应的PMBUS 命令为IOUT_OC_FAULT_LIMIT)。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2)设计:主要是对数字电源的环路参数进行设计和模拟。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
3)监控:可以实时监控输入电压,输入电流和温度等诸多信息。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
4)状态:可以显示电源板输入和输出等状态,告知用户当前是否存在故障。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
1.2 GUI 软件的配置功能59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图1 所示的是GUI 的配置界面,其显示的每一条信息都对应一条PMBUS 命令,可以在用户计算机与UCD3138 之间传递。例如制造商的位置信息( MFR_LOCATION ) , 对应的便是PMBUS 命令MFR_LOCATION (0x9C),借助PMBUS 总线GUI 软件可以将UCD3138 中存贮的信息读取并显示出来。用户也可以自行重新编辑该信息,新信息会传递到UCD3138 芯片中并进行存储。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
在实际应用中,不同的用户会关注不同的参数信息。为提高灵活性,GUI 软件支持用户添加和删除PMBUS 命令支持的参数信息。下面将详细介绍如何在GUI 中进行相关操作。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2 增加输出过流保护点信息59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
输出过流保护点对应的PMBUS 命令为IOUT_OC_FAULT_LIMIT,可以用来配置系统的输出过流保护点。本节详细介绍如何在GUI 中添加信息栏来接收用户的输入,同时修改UCD3138 的软件来对用户的输入信息进行处理并最终调整相应模拟比较器的阈值电压。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2.1 解除对PMBUS 命令的屏蔽59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
在UCD3138 软件中,定义了CMD_DCDC_NONPAGED 变量,保存了每一个PMBUS 命令的状态:用0和1 表征屏蔽还是未屏蔽, 如下代码所示。而“ 输出过流保护点” 对应的PMBUS 命令是IOUT_OC_FAULT_LIMIT (0x46),需要首先在UCD3138 的软件中去掉对该命令的屏蔽。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
#define CMD_DCDC_NONPAGED 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x02, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0xFE, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x40, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x3D, 0x00, 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
0x00, 0x14 59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
}59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Fusion Digital Designer 提供了Bitmask tool,用来快速生成新的CMD_DCDC_NONPAGED 变量。具体操作如下。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
如图2,在菜单“Tools”中点击Isolated GUI Bitmask Generator Tool;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 2:运行Isolated GUI Bitmask Generator59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2) 如图3,在随后打开的界面中,勾选“PMBUS_CMD_IOUT_OC_FAULT_LIMIT”,即使能命令IOUT_OC_FAULT_LIMIT。此时界面右侧的数据会有变化,该PMBUS 对应的位由0 变为了1。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 3:勾选相应PMBUS 命令并复制输数据59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
3) 将图3 右侧红色图内的数据复制到UCD3138 的软件中,覆盖原来的CMD_DCDC_NONPAGED 变量。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2.2 GUI 中增加新的信息栏59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
将上述新生成的软件编译后烧录到UCD3138 中,此时通过Fusion Digital Designer 与UCD3138 建立连接后,会发现,GUI 中新增了一条信息输入栏,见图59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
4 中的红色框59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
该信息栏的名称为“IOUT_OC_FAULT_LIMIT”,代码为0x46,上述为固定信息,是由GUI 软件自身设定,用户无法修改。后面的“Value/Edit”值则用来输入用户设定的过流保护点。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 4:GUI 出现新增信息输入栏59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2.3 UCD3138 软件中的数据处理59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
截止到上节,用户可以在GUI 中新增一条信息栏并输入数据,然后通过对应的PMBUS 命令,将该数据传输到UCD3138 中。但为了使UCD3138 接收该数据并调整相应的模拟比较器阈值,还需要修改UCD3138 的软件。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
1、定义变量和结构体59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
如下代码,定义了新的结构体变量PMBUS_DCDC_CONFIG,包含成员iout_oc_fault_limit 和reserved。随后定义了该结构体类型的外部变量pmbus_dcdc_config 和pmbus_dcdc_config_translated,分别用于接收和保存GUI 传输到UCD3138 的数据和格式转换后的数据。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
typedef struct59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint16 iout_oc_fault_limit;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint16 reserved;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
}PMBUS_DCDC_CONFIG; //must be even number of int1659【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
EXTERN PMBUS_DCDC_CONFIG     pmbus_dcdc_config[1];59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
EXTERN PMBUS_DCDC_CONFIG     pmbus_dcdc_config_translated[1];59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2、创建新的PMBUS 读与写函数59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
由于从GUI 传输过来的数据的首个字节是对应的PMBUS 命令的代码, 如0x46, 并会存放在pmbus_buffer[0]中。因此,可以在函数 pmbus_write_message()中创建新的case 语句,并返回一个新创建的函数pmbus_write_iout_oc_fault_limit(),该新函数用来处理接收到的数据。这样就实现了一旦UCD3138 接收到新的数据后,且该数据是用户重新编辑的“输出过流保护点”信息,则就会调用pmbus_write_iout_oc_fault_limit()函数进行处理。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
switch (pmbus_buffer[0])59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
case 0x46:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
return pmbus_write_iout_oc_fault_limit();59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
}59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
同时, 也需要在函数pmbus_read_message() 中创建新的case 语句, 并返回一个新创建的函数pmbus_read_iout_oc_fault_limit(),用来返回接收到的信息到GUI 中,以确保信息传输正确。这种读取后再返回验证的操作是PMBUS 协议的规定。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
switch (pmbus_buffer[0])59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
case 0x46:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
return pmbus_read_iout_oc_fault_limit();59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
}59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
3、数据处理函数的设计59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ 接收数据处理函数pmbus_write_iout_oc_fault_limit()59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
该函数用来接收来自GUI 的数据,并将该数据的格式由Linear Data Format 转换为浮点型数据,最后强制转换为整数型赋给模拟比较器。关键代码分析如下:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
上文提到,来自GUI 的数据的首字节是对应的PMBUS 命令代码。随后的两个字节便是Linear Data 格式的数据。将该数据保存在pmbus_dcdc_config 结构体的iout_oc_fault_limit 成员中,如下代码所示。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Pmbus_dcdc_config[0].iout_oc_fault_limit = pmbus_buffer[1] + (pmbus_buffer[2] << 8);59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
下面代码是调用格式转换函数linear11_to_float(),将上面接收到的数据转换为浮点型数据。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
local_variable = linear11_to_float(pmbus_dcdc_config[0].iout_oc_fault_limit);59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
由于转换后的浮点型数据与最终需要赋给模拟比较器阈值的数据存在一定的比例,需要一个转换系数(scaler)。缩放后存放在pmbus_dcdc_config_tanslated 结构体的iout_oc_fault_limit 成员中。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
pmbus_dcdc_config_translated[0].iout_oc_fault_limit = (int)(local_variable*2.54);59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
最终该值赋给模拟比较器的阈值,用来做快速保护。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_THRESH=pmbus_dcdc_config_translated[0].iout_oc_fault_limit;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ 返回数据处理函数pmbus_read_iout_oc_fault_limit59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
该函数用来返回UCD3138 软件接收的数据到GUI 中,以使GUI 将写入和读取的数据做比较(比较判断等操作在GUI 软件中完成) , 保证数据正确。该函数调用pmbus_read_two_byte_handler() 将保存在Pmbus_dcdc_config[0].iout_oc_fault_limit 的数据返回到GUI。关键代码如下:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
pmbus_read_two_byte_handler(pmbus_dcdc_config[0].iout_oc_fault_limit);59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
而在pmbus_read_two_byte_handler()函数中的关键代码为:59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
pmbus_buffer[1] = value >> 8;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
pmbus_buffer[0] = value & 0xff;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
pmbus_buffer 字节中的数据会最终上传到GUI 软件中。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
4、数据转换函数的设计59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ Linear Data Format 数据格式59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
上文提到,来自GUI 的数据遵循PMBUS 协议,其格式为Linear Data Format。如图5,其低11 位为“尾数”,以补码形式保存;高5 位为“指数”,亦是以补码形式保存。该数据与实际数据的关系为:X=Y× 2N 。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
a.jpg59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 5:PMBUS 协议中的Linear Data Format59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ ARM 编译器中的浮点型数据59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
如图6,为ARM 编译器中对单精度浮点型数据的存储格式。其最高位为符号位,接下的8 位为指数,后面的23 位为尾数。在编译器中定义的浮点数据,将以该格式存储在硬件存储空间。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 6:ARM 编译器中的浮点型数据格式59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ 定义结构体和联合体59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
如下, 定义了结构体FLOAT_ELEMENTS , 用以保存上文提到的浮点型数据。还定义了联合体FLOAT_OPEN,成员包括浮点型数据“all”和结构体类型数据“bit”,用以保存转换完毕的浮点型数据。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
struct FLOAT_ELEMENTS {59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint32 SIGN:1;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint32 EXPONENT:8;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint32 MANTISSA:23;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
};59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
union FLOAT_OPEN {59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
float                     all;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
struct FLOAT_ELEMENTS     bit;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
Uint32                    word;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
};59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
◎ 转换函数linear11_to_float()59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
该函数完成将来自GUI 的Linear Data Format 格式的数据转换为浮点型数据,并作为返回值返回。包含的关键代码如下。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
定义变量,包括整型“mantissa”和“exponent”及结构体变量“final”。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
int16 mantissa, exponent;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
union FLOAT_OPEN final;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
下面代码完成对输入参数的分析,并扩展到16 位。如果输入参数的尾数是负值,前5 位补1;如果是正值,前5 位补0。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
if(linear11 & 0x0400)// if mantissa is negative59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{ mantissa = linear11 | 0xfc00; //put it in there at minimum mantissa }59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
else59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{ mantissa = linear11 & 0x07FF; }59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
下面代码首先是将mantissa 左移16 位(16+16=32),以使其数据长度符合单精度浮点型数据的长度,然后exponent 减去16,保证了原始数据的大小没有变化。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
final.all = ((int32)mantissa) << 16; //set it up for minimum exponent.59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
exponent = (linear11 >> 11) - 16; //get exponent to match shifted value59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
下面代码首先判断单精度浮点型的指数是否为负。如果是负,则改写其为零,原因是对应的“输出过流保护点”不会出现负值;如果是正,则将指数信息放置在单精度浮点型数据的指数位置。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
if((final.bit.EXPONENT + exponent) < 0)//if it’s so low it will wrap59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{ final.bit.EXPONENT = 0; }59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
else59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
{ final.bit.EXPONENT = final.bit.EXPONENT + exponent; }59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
上述操作完毕后,final.all 中就保存了转换后的浮点型数据,因此可以作为返回值返回。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
return final.all;59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2.4 操作流程图59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
上述所有操作的流程图见图7。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 7:UCD3138 接收信息流程图59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
3 删除GUI 信息栏59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
用户亦可以自行删除GUI 中多余的信息栏,操作过程主要包括对应PMBUS 命令的屏蔽,UCD3138 软件对应接收处理函数的删除等。如图8,以删除红色框内的信息栏为例。查看其对应的PMBUS 命令代码是0xFA,故首先在CMD_DCDC_NONPAGED 变量中屏蔽对应的位,可以使用Bit Mask Tool。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
图 8:删除GUI 中的信息栏59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
此时重新编译软件并下载到UCD3138 后,GUI 中将不再会出现该信息栏,见图4。但UCD3138 软件中依然保留有对该PMBUS 命令的接收、转换和处理等函数,亦需要删除,在此不再赘述。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
4 小结59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
通过上文两个实例的分析可知,用户在GUI 软件中可以灵活的添加或删除PMBUS 命令对应的信息栏,提高了GUI 的灵活性。该操作主要包括PMBUS 命令的使能或屏蔽及UCD3138 软件添加或删除相应处理函数等两大部分。59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
5 参考文献59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
59【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
1. UCD3138 datasheet, Texas Instruments Inc., 201159【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
2. PMBus_Specification_Part_I_Rev_1, 200759【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
3. PMBus_Specification_Part_II_Rev_1, 201059【中国自动化网社区】12cfc3【http://sns.ca800.com】56ef24
4. ARM Optimizing C/C++ Compiler, v4.9, User’s Guide, Texas Instruments, 2011

评论

内容加载中,请稍候...
内  容:

中国自动化网 版权所有  © 2010 - 2016     经营许可证编号: 粤ICP备09051729