Other Parts Discussed in Thread: UCD3138A
器件型号: UCD3138A
UCD3138A 团队、
您能否解释一下 I2C 地址是如何基于 R-ADDSET 定义的? 数据表的图 7-13 中提到了这个问题、但我没有看到数据表或用户指南中还有任何详细信息。
谢谢、
Darren
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 Darren:
UCD3138A 器件的 AD00 和 AD01 引脚上连接了一个内部电流源。
要激活这些电流源、需要配置 PMBCL3 寄存器中的以下位
![]()
该电流源可用于在连接到 AD00 和/或 AD01 的外部电阻器两端生成电压。
ADC12 可用于测量应用固件中 AD00 和/或 AD01 引脚上的这些电压。
根据测量的电压、可由应用固件为器件分配 PMBus 地址。
实际上、 应用固件可以 根据 AD00 和/或 AD01 上的电阻器值为器件分配 PMBus 地址
请注意、所有 UCD3138x 器件系列(即 0xB)共用 ROM 模式下的 PMBus 地址。
此致
Sagar
尊敬的 Darren:
一旦激活内部电流源、地址值就会映射到连接到 AD0 引脚的电阻器上的电压。
根据 AD00 引脚上连接的电阻器分配从器件地址的代码逻辑如下所示:
/*激活连接到引脚 AD00 的电流源*/
PMBusRegs.PMBC3.bit.IBIAS_A_EN = 1;//启用地址电流源
/*与其他中断一起初始化 ADC 中断*/
/*配置 ADC */
void INIT_ADC (void)
{
AdcRegs.ADCCTRL.BIT.MAX_CONV = 6;//根据要启动的转换数选择 MAX_CONV
AdcRegs.ADCCTRL.bit.single_sweep = 1;
AdcRegs.ADCSEQSEL0.bit.SEQ0 = 0;// ADC 通道 0 置于序列 0
AdcRegs.ADCCTRL.bit.ADC_EN = 1;//ADC 启用
AdcRegs.ADCCTRL.bit.SW_START = 1;//触发新的测量序列
}
/*读取 ADC 结果并将其存储在变量*/中
void READ_ADC (void)
{
如果 (AdcRegs.ADCSTAT.bit.ADC_INT = 1)//如果 ADC 测量已完成
{
ADC_ADDRESS = AdcRegs.ADCRESULT0.bit.result;//将转换结果存储在变量中
}
}
/ *在 PMBUS_topology.c 文件中定义函数“get_pPMBUS_ADDRESS"。“。 此函数将根据 AD00 引脚上连接的电阻器上的电压来重试 PMBUS_ADDRESS
用户可以根据连接到 AD00 引脚的电阻值设置和修改 IF 条件中的“ADC_ADDRESS"范围“范围。
“PMBUS_ADDRESS"也“也可以修改为用户喜欢的任何 7 位值。 以下值只是一个示例*/
int32 get_PMBUS_ADDRESS (void)
{
int32 PMBUS_ADDRESS;
IF ((ADC_ADDRESS > 1210)&&(ADC_ADDRESS < 1450))
{
PMBUS_ADDRESS = 0x5B;
}
否则 if ((ADC_ADDRESS > 1470)&&(ADC_ADDRESS < 1786))
{
PMBUS_ADDRESS = 0x6A;
}
否则 if ((ADC_ADDRESS > 1804)&&(ADC_ADDRESS < 2163))
{
PMBUS_ADDRESS = 0x6B;
}
暴露
{
PMBUS_ADDRESS = 0x50;
}
返回 PMBUS_ADDRESS;
}
/*在“init_PMBus"函“函数中将“PMBUS_ADDRESS"作为“作为参数传递。 在“init_PMBus"函“函数中、初始化 PMBus、包括 PMCTRL2 寄存器中的地址分配。 */
init_PMBus (get_PMBUS_ADDRESS ());//address assingment