基于GUI软件配置UCD3138数字电源PMBUS命令
3) 将图3 右侧红色图内的数据复制到UCD3138的软件中,覆盖原来的CMD_DCDC_NONPAGED 变量。
2.2 GUI 中增加新的信息栏
将上述新生成的软件编译后烧录到UCD3138中,此时通过Fusion Digital Designer 与UCD3138建立连接后,会发现,GUI 中新增了一条信息输入栏,见图
4中的红色框。
该信息栏的名称为“IOUT_OC_FAULT_LIMIT”,代码为0x46,上述为固定信息,是由GUI 软件自身设定,用户无法修改。后面的“Value/Edit”值则用来输入用户设定的过流保护点。
![勾选相应PMBUS 命令并复制输数据](http://m.amcfsurvey.com/editerupload/fetch/20131009/175040_2_0.jpg)
图 4:GUI 出现新增信息输入栏
2.3 UCD3138 软件中的数据处理
截止到上节,用户可以在GUI 中新增一条信息栏并输入数据,然后通过对应的PMBUS 命令,将该数据传输到UCD3138 中。但为了使UCD3138 接收该数据并调整相应的模拟比较器阈值,还需要修改UCD3138 的软件。
(1)、定义变量和结构体
如下代码,定义了新的结构体变量PMBUS_DCDC_CONFIG,包含成员iout_oc_fault_limit 和reserved。随后定义了该结构体类型的外部变量pmbus_dcdc_config 和pmbus_dcdc_config_translated,分别用于接收和保存GUI 传输到UCD3138 的数据和格式转换后的数据。
typedef struct
{
Uint16 iout_oc_fault_limit;
Uint16 reserved;
}PMBUS_DCDC_CONFIG; //must be even number of int16
EXTERN PMBUS_DCDC_CONFIG pmbus_dcdc_config[1];
EXTERN PMBUS_DCDC_CONFIG pmbus_dcdc_config_translated[1];
(2)、创建新的PMBUS 读与写函数
由于从GUI 传输过来的数据的首个字节是对应的PMBUS 命令的代码, 如0x46, 并会存放在pmbus_buffer[0]中。因此,可以在函数 pmbus_write_message()中创建新的case 语句,并返回一个新创建的函数pmbus_write_iout_oc_fault_limit(),该新函数用来处理接收到的数据。这样就实现了一旦 UCD3138 接收到新的数据后,且该数据是用户重新编辑的“输出过流保护点”信息,则就会调用pmbus_write_iout_oc_fault_limit()函数进行处理。
switch (pmbus_buffer[0])
{
case 0x46:
return pmbus_write_iout_oc_fault_limit();
}
同时, 也需要在函数pmbus_read_message() 中创建新的case 语句, 并返回一个新创建的函数pmbus_read_iout_oc_fault_limit(),用来返回接收到的信息到GUI 中,以确保信息传输正确。这种读取后再返回验证的操作是PMBUS 协议的规定。
switch (pmbus_buffer[0])
{
case 0x46:
return pmbus_read_iout_oc_fault_limit();
}
(3)、数据处理函数的设计
◎ 接收数据处理函数pmbus_write_iout_oc_fault_limit()
该函数用来接收来自GUI 的数据,并将该数据的格式由Linear Data Format 转换为浮点型数据,最后强制转换为整数型赋给模拟比较器。关键代码分析如下:
上文提到,来自GUI 的数据的首字节是对应的PMBUS 命令代码。随后的两个字节便是Linear Data 格式的数据。将该数据保存在pmbus_dcdc_config 结构体的iout_oc_fault_limit 成员中,如下代码所示。
Pmbus_dcdc_config[0].iout_oc_fault_limit = pmbus_buffer[1] + (pmbus_buffer[2] 8);
下面代码是调用格式转换函数linear11_to_float(),将上面接收到的数据转换为浮点型数据。
local_variable = linear11_to_float(pmbus_dcdc_config[0].iout_oc_fault_limit);
由于转换后的浮点型数据与最终需要赋给模拟比较器阈值的数据存在一定的比例,需要一个转换系数(scaler)。缩放后存放在pmbus_dcdc_config_tanslated 结构体的iout_oc_fault_limit 成员中。
pmbus_dcdc_config_translated[0].iout_oc_fault_limit = (int)(local_variable*2.54);
最终该值赋给模拟比较器的阈值,用来做快速保护。
FaultMuxRegs.ACOMPCTRL0.bit.ACOMP_B_THRESH=pmbus_dcdc_config_translated[0].iout_oc_fault_limit;
◎ 返回数据处理函数pmbus_read_iout_oc_fault_limit
该函数用来返回UCD3138 软件接收的数据到GUI 中,以使GUI 将写入和读取的数据做比较(比较判断等操作在GUI 软件中完成) , 保证数据正确。该函数调用pmbus_read_two_byte_handler() 将保存在Pmbus_dcdc_config[0].iout_oc_fault_limit 的数据返回到GUI。关键代码如下:
pmbus_read_two_byte_handler(pmbus_dcdc_config[0].iout_oc_fault_limit);
评论