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.

[参考译文] INA239:电源复位后的分流器值不准确

Guru**** 2382480 points
Other Parts Discussed in Thread: INA239, TI-SCB
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/1208012/ina239-inaccurate-shunt-values-after-power-reset

器件型号:INA239
主题中讨论的其他器件: TI-SCB

您好!

我注意到 IN239存在一种奇怪、在电源复位后、分流器值读数不正确或短路。 在280us 转换时间和128个平均值的单次或连续模式下都会发生这种情况。 然后、我可以通过重新配置为50us 最小值和没有取平均值、然后在280US-128avgs 条件下重新刷新我的代码、使其再次正常运行。 有什么建议吗?  

读取 CONFIG 寄存器值:

配置:0x0010

ADC_CONFIG:0x06C4

SHUNT_CALIBE:0x0FD7

DIAG_ALERT:0xE001

我尝试过的操作:

1) 1)在写入配置值之前软件电源复位 INA。

2) 2)在写入我的参数之前向 ADC_CONFIG 寄存器写入零。

3) 3)首先写入50us、不进行平均值计算、然后写入280-128。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Isaac:

    感谢您使用 TI 论坛。  INA239没有内部存储器、因此在电源复位后这些值将出错。 器件上电后、您将需要等待器件打开、然后可以重写配置值。 如果您希望器件在不使用时处于低功耗状态、请考虑将其置于关断模式、而不是将其关闭。 根据上面发送的值、当 ADC_CONFIG = 0x06C4时、器件将处于关断模式、这也可能是问题的一部分。 这也显示在您显示为0xE001的 DIAG_ALERT 寄存器值中、转换就绪标志未亮起、因此寄存器中的数据尚不可用。 可能是在开始转换后过早读取数据。  

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Mitch、感谢您的快速响应。 首先回答第二部分、当未要求器件进行测量时、我正在使用关断模式。 因此、我上面放置的配置是在空闲期间进行的。 DIAG_ALERT 还在 ALERT 引脚上设置为低电平有效、因此我会轮询该引脚、直到在进行测量之前由 INA239设置为低电平。 我不是在两次测量之间完全关闭 INA 电源、但如果 MCU 断电、INA 也会断电。 关于第一部分、在每次电源复位时、MCU 会重新配置 INA239、我甚至可以使用 INA 读回寄存器配置。 它们似乎是合适的值。 当我在启动时配置 INA239的转换时间为50us、并且不进行平均值计算时、它提供了合理但有噪声的值。 但每当我在电源复位后启动时将其设置为280us 128avg 时、就会获得之前发布的值。

    	do{
    		__NOP();
    		pin_state = HAL_GPIO_ReadPin(adc_handler->alrt_port, adc_handler->alrt_pin);
    		__NOP();
    	}while(pin_state);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    关于这一声明:

    我不是在两次测量之间完全关闭 INA,但如果 MCU 断电,INA 也会断电。

    能否看到、在重新开启 INA 之前、在给它通电之前、是否仍然出现错误? 可能是在重新开启 INA 之前仅对其部分断电、这就是其行为异常的原因。 是否可以独立于 MCU 为 INA 供电? 这样一来、INA 就不会在 MCU 断电时失去电源。

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不太明白完全断电意味着什么、您是指等待电容充电放电吗? MCU 和 INA 由 USB 端口供电、我没有内置方法来断开定制板上的其中一个或另一个。 它是否类似于通过 INA 上的 RESET 位进行电源复位?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Isaac、

    当您说您没有"完全关闭"给 INA"供电时、我想这意味着 VS 没有一直下降到0、那么可能是1.5V 到2V? 因此、当我建议一直将其断电时、我指的是降低到0V。  

    电源复位后、如果在配置设置之前向 INA 发送 RESET 位、您是否仍能看到错误?

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的道歉。 是的、我完全断电;但是、断开 USB 约0.9V 后有一个小电容充电。 我已尝试在插回电源之前等待电荷消耗、但这不能解决问题。 如果在配置芯片之前向 INA 发送复位位、也会出现同样的错误。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    好的,有趣的…  我将看到我是否可以重现错误...  这仅在从 280µs μ s 转换时间和128个平均值的电源复位时发生吗? (即、是否尝试过其他设置)。 此外、当您在不进行下电上电的情况下对器件执行复位时、是否会发生这种情况?

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    我们无法重现您看到的问题。 除了我的上述问题外、您是在多个器件上看到的、还是只在一个器件上看到的?

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试了另一个板、得到了相同的结果。 当我启动板时、 我在配置为280us 和128 avgs 并请求转换后得到短路和随机数。 从数据快照可以看到"反转配置技巧"的时间线。 如果我随后将转换改回50us、不进行平均值计算、则返回到所需配置。它会提供相当精确的值。 从原理图上可以看到、我在阅读之前打开 MOSFET、据我所知、瞬态不会导致这个问题。 总线电压保持准确。

    从读回配置:

    配置地址:0x0010

    ADC_CONFIG:0x06C4

    分流:> 0

    DIAG_ALERT:0xe001

    当我请求转换时、我将 ADC_CONFIG 值设置为单分流器转换。

    void read_shunt_voltage(INA239_handler *adc_handler){
    	GPIO_PinState pin_state;
    	/*COMMAND FOR SINGLE SNAP SHOT*/
    	HAL_GPIO_WritePin(adc_handler->pulse_port, adc_handler->pulse_pin, GPIO_PIN_SET); 	// Turn on the GaN FET
    	adc_handler->mode = SINGLE_SHUNT_VOLTAGE_MODE;
    	uint16_t adc_config_vals = (adc_handler->mode << MODE_BITS) |
    							   (adc_handler->us_bus_vol << VBUSCT_BITS) |
    							   (adc_handler->us_shunt_vol << VSHCT_BITS) |
    							   (adc_handler->us_temp_meas << VTCT_BITS) |
    							   (adc_handler->averaging << AVG_BITS);
    
    	// Serialize tx buffer for write of the adc cmd
    	spi_tx_buffer[0] = __WRITE(ADC_CONFIG_ADDR);
    	spi_tx_buffer[1] = adc_config_vals >> 8;
    	spi_tx_buffer[2] = adc_config_vals;
    //
    	HAL_GPIO_WritePin(adc_handler->cs_port, adc_handler->cs_pin, GPIO_PIN_RESET);		// Take chip select line low for COM
    	HAL_SPI_Transmit(adc_handler->hspi, spi_tx_buffer, 3, 100);							// Transmit tx buffer data
    	HAL_GPIO_WritePin(adc_handler->cs_port, adc_handler->cs_pin, GPIO_PIN_SET);			// Take chip select line high
    
    	/*Wait for ALERT pin to go high signaling conversion of current read is ready*/
    	spi_tx_buffer[0] = __READ(DIAG_ALRT_ADDR);
    	do{
    		__NOP();
    		pin_state = HAL_GPIO_ReadPin(adc_handler->alrt_port, adc_handler->alrt_pin);
    		__NOP();
    	}while(pin_state);
    
    	HAL_GPIO_WritePin(adc_handler->pulse_port, adc_handler->pulse_pin, GPIO_PIN_RESET); // Turn Off GaN FET
    
    	spi_tx_buffer[0] = __READ(VSHUNT_ADDR);	// Prep tx buffer with read of current meas addr
    
    	HAL_GPIO_WritePin(adc_handler->cs_port, adc_handler->cs_pin, GPIO_PIN_RESET);	// Take chip select line low for COM
    	HAL_SPI_Transmit(adc_handler->hspi, spi_tx_buffer, 1, 100);		// transmit read command
    	HAL_SPI_Receive(adc_handler->hspi, spi_rx_buffer, 2, 100);		// read in response
    	HAL_GPIO_WritePin(adc_handler->cs_port, adc_handler->cs_pin, GPIO_PIN_SET);	// Take chip select line high
    
    //	float temp = 1000000*convert_raw_ina_reading(spi_rx_buffer, 's'); //uV with two dec of precision
    	uint32_t temp = 0;
    	for(int i=0; i < 4; i++){
    		temp = (temp << 8) | spi_rx_buffer[i];
    	}
    	adc_handler->shunt_voltage_value = temp;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    当您没有获得任何分流电压时、您能否测量器件输入引脚的电压差以确认确实有电流在运行?

    此致、

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Mitch、

    首先要感谢大家对解决这个问题的奉献精神。 我检查了4个分流电阻器中的电压、在 INA 读取不良的分流读数期间、Fluke 上得到的电压读数良好。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    不客气! 您是否偶尔有 INA239EVM 来看看是否可以重现问题?  

    Mitch

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    甚至只是在设置中使用 EVM 的 GUI/固件以便查看(通过将 TI-SCB SPI 线路连接至您的硬件)、以排除任何可能出现固件问题的可能性。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    跟进问题。 在 diag_alrt 寄存器上、我是否希望 SLOWALERT 位和 CNVR 位都为高电平、以便在完成平均值就绪后获取 ALERT 引脚操作? 或者、这是一个位还是另一个位、具体取决于我是否需要平均值?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CNVR 位是您设置为在平均转换就绪时在 ALERT 引脚上获得警报的位。 SLOWALERT 用于阈值警报(如 SOVL 或 SUVL)、可选择是要在各个转换时发出警报还是要在平均转换值时发出警报。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嘿、Isaac、

    您是否在上面看到过我关于使用 SCB 或 EVM 尝试在您的系统中重现错误的问题?

    此致、

    Mitch