FDC2214噪声大

Other Parts Discussed in Thread: FDC2214

您好,我在用FDC2214做水位检测,因为低功耗需要所以是每秒从sleep下唤醒一次,读完数据再回到sleep。但是有一个通道噪声比其他通道大。观察发现是进入sleep时候正在转换的那个通道。就好像这个没转换完的结果被读到了一样。我试了读取两遍或者延时让他连续转换多次,并没有效果。如果不sleep的话噪声就没问题。

这个未转换完的数据是怎么影响测量值的?

寄存器配置:

RCOUNT 0 = 0x2089

OFFSET 0 = 0x0
SETTLECOUNT 0 = 0xA
CLOCK_DIVIDERS 0 = 0x2001
DRIVE_CURRENT 0 = 0xC800
RCOUNT 1 = 0x2089
OFFSET 1 = 0x0
SETTLECOUNT 1 = 0xA
CLOCK_DIVIDERS 1 = 0x2001
DRIVE_CURRENT 1 = 0xC800
RCOUNT 2 = 0x2089
OFFSET 2 = 0x0
SETTLECOUNT 2 = 0xA
CLOCK_DIVIDERS 2 = 0x2001
DRIVE_CURRENT 2 = 0xC800
RCOUNT 3 = 0x2089
OFFSET 3 = 0x0
SETTLECOUNT 3 = 0xA
CLOCK_DIVIDERS 3 = 0x2001
DRIVE_CURRENT 3 = 0xC800
ERROR_CONFIG = 0x3801
CONFIG = 0x1C81
MUX_CONFIG = 0xC20D
RESET_DEV = 0x0

  • 您好,
    感谢您对TI产品的关注!您可以比较进入睡眠模式之前和退出睡眠模式后的所有寄存器值吗?
  • 除了睡眠那个bit之外,在睡眠中读的话寄存器就是我所说的值。退出睡眠之后DRIVE_CURRENT会变成CE40,回到睡眠之后会恢复。Data寄存器睡眠中读取确实全部变成0了。status在睡眠中是0,退出睡眠之后是多数情况是8,小概率读到0、4之类的。但是如果我改延时的话有概率碰到睡眠时status也不为0的情况。

    另外下面附上读取时的代码

    			uint8_t DelayCount = 0;
    			FDC2214_DumpReg();
    			Ret &= FDC2214_SetSleepMode(false);
    			do {
    				vTaskDelay(150);//这个时间对于现在的RCOUNT其实长了。改这个值的话噪声大的通道会变。
    				DelayCount++;
    				if (DelayCount > 3)
    				{
    					Ret = false;
    					break;
    				}
    			} while (!FDC2214_IsDone());
    			Ret &= FDC2214_GetData();
    			Ret &= FDC2214_SetSleepMode(true);
    
    
    
    bool FDC2214_IsDone(void)
    {
    	uint16_t StatusVal = 0;
    	if (FDCIIC_Read(FDC2214_STATUS, &StatusVal))
    	{
    		if ((StatusVal & (0xF)) == (0xF))
    		{
    			return true;
    		}
    	}
    	return false;
    }
    
    
    bool FDC2214_UpdateChannelData(uint8_t Channel)
    {
    	uint8_t DataRegAddrH = FDC2214_DATA_CH0 + 2 * Channel;
    	uint8_t DataRegAddrL = FDC2214_DATA_LSB_CH0 + 2 * Channel;
    	uint16_t DataRegH = 0;
    	uint16_t DataRegL = 0;
    	ulong SensorCounter = 0;
    	bool Res = true;
    
    	ASSERT(Channel < 4);
    
    	Res &= FDCIIC_Read(DataRegAddrH, &DataRegH);
    	Res &= FDCIIC_Read(DataRegAddrL, &DataRegL);
    
    	SensorCounter = ((ulong)(DataRegH & FDC2214_DATA_MSB_MASK)) << 16 | DataRegL;
    	Channels[Channel].Freq = (float)Channels[Channel].SensorDivider * SensorCounter / Channels[Channel].ClockDivider * ClkFreq / (1L << 28);
    
    	if (DataRegH & FDC2214_DATA_ERR_AW_MASK)
    	{
    		Channels[Channel].AW = 1;
    	}
    	else
    	{
    		Channels[Channel].AW = 0;
    	}
    	if (DataRegH & FDC2214_DATA_ERR_WD_MASK)
    	{
    		Channels[Channel].WD = 1;
    	}
    	else
    	{
    		Channels[Channel].WD = 0;
    	}
    
    	ChannelNewDataMask |= 1 << Channel;
    
    	return Res;
    }
    
    bool FDC2214_GetData(void)
    {
    	uint8_t i = 0;
    	bool Res = true;
    	uint16_t StatusVal = 0;
    	Res &= FDCIIC_Read(FDC2214_STATUS, &StatusVal);
    	if (Res)
    	{
    		uint8_t i = 0;
    		for (i = 0; i < 4; i++)
    		{
    			if (StatusVal & (FDC2214_STATUS_CH0_UNREADCONV_MASK >> i))
    			{
    				Res &= FDC2214_UpdateChannelData(i);
    			}
    			else
    			{
    				Res = false;
    			}
    		}
    	}
    	return Res;
    }
    
    
    

  • 似乎跟电感选型有关,现在用的是18uH 0603,电流几mA的叠层电感,我换了10uH 0603电流15mA的电感之后单通道噪声大的问题减轻了一些。这个问题有可能跟电感的材料/额定电流有关吗?或者有可能单纯因为某个频率有问题?

  • 我不确定是否与电感的自激震荡频率有关,数据手册10.2.3.3 Inductor Self-Resonant Frequency章节写了关于电感SRF参数的选择
  • SRF都比工作频率高很多,所以我感觉不是SRF的问题。但不管怎么说,我这里换了电感之后问题消失了。不知道你们用小封装电感时候有没有观察到过这种问题。

  • 表面贴装电感器的噪声性能非常棘手。 根据我们的经验,没有一种好的方法来计算它,这取决于材料和制造过程。 比较电感器噪声性能的最佳方法是使用 EVM 测试电感器并监控输出数据。

    我们测试了许多不同的电感器,我们为 EVM 选择的电感器是我们测试过的电感器中最好的。 它应该能很好地满足大多数应用的需求。

    尝试选择低DCR和高Q的电感器。 选择电感器的最佳方法是在电路板上测试电感器并检查峰到峰的噪声 - 在测试之后,我们为 EVM 选择了 CMH322522-180KL。

    如果您想尝试使用不同的电感器,我们建议使用屏蔽电感器以获得更好的抗噪性。