Jump to content

    
Sign in to follow this  
Mik174

Проблема с ADS1256. Завышает измерения

Recommended Posts

Здравствуйте!

Если кто имел опыт работы с АЦП ADS1256, помогите разобраться, что я делаю не так...

Использую готовую отладочную плату (https://www.chipdip.ru/product/high-precision-ad-da-board)
 

Данные от АЦП получаю, на изменение напряжения на входе реагирует, но напряжение при этом выдает примерно на 10 мВ больше (измерял прецизионным вольтметром непосредственно на входах АЦП).

Такое ощущение, что не происходит калибровка.

При этом логическим анализатором смотрел - после запуска калибровки сигнал готовности АЦП появляется не сразу а через время примерно соответствующее времени самокалибровки при разных скоростях работы АЦП, т.е. вроде она запускается...
Но результат хоть с ней хоть без нее остается прежним.

Попробовал просто "ручками" записать значения в регистры ADS1256_OFC0 - ADS1256_OFC2
После записи в них значений результат, выдаваемый АЦП меняется, значит все-таки получается почему-то не работает калибровка?

Вот кусок кода:
 

	Init_ADS1256_GPIO();
	
	RST_0();
	Delay_ms(100);
	RST_1();

   	ADS1256_PDWN_0();
	Delay_ms(100);
   	ADS1256_PDWN_1();

   	CS_1();
   	Delay_ms(100); 	
	
	while(ADS1256_DRDY());
	ADS1256WREG(ADS1256_IO,0x00);

   	ADS1256WREG(ADS1256_STATUS,0x00);               
	ADS1256_SetK(1);
	ADS1256MUX(ADS1256_MUXP_AINCOM, ADS1256_MUXN_AINCOM);
	ADS1256_SetRate(30000);
	
   	Delay_ms(100); 	
   	// ADS1256Calibrate();
   	ADS1256WREG(ADS1256_OFC0,0xff);   
   	ADS1256WREG(ADS1256_OFC1,0x1f);    
  
	while(1)
	{		
	  ADS1256ReadData(1, ADS1256_MUXP_AIN0 | ADS1256_MUXN_AINCOM);
	  A0=ADS1256_Get_mkV(ADS1256ReadADC_Data());

	  sprintf(text, "UA0=%07lu\n",(unsigned long)(A0));
	  send_str_USART(1,text);
		
	  Delay_ms(500);
  	}

Здесь подпрограмма калибровки:
 

void ADS1256Calibrate(void)
{
  CS_0(); ADS1256_DelaySCLK();	
  while(ADS1256_DRDY());
  ADS1256WREG(ADS1256_STATUS,0x02);  
  SPI_WriteByte(ADS1256_CMD_SELFCAL);	
  while(ADS1256_DRDY());	
  ADS1256WREG(ADS1256_STATUS,0x00);  
  CS_1(); ADS1256_DelaySCLK();	
} // ADS1256Calibrate

Помогите, пожалуйста, разобраться, что я делаю не так, уже всю голову сломал...

Share this post


Link to post
Share on other sites
1 hour ago, Mik174 said:

АЦП ADS1256

Простите, а что вы калибруете? Смещение? Полную шкалу?

Мы в своих приборах используем ADS1247, не знаю, насколько они похоже. Но мы делаем "системную калибровку" - смещение с учётом внешней по отношению к АЦП цепи. А также делаем калибровку измеряемой величины по мерам. Вот тогда всё работает.

Share this post


Link to post
Share on other sites
3 hours ago, alexunder said:

10мВ - довольно большое смещение. А без калибровки в самом простом режиме (одиночный семпл) что показывает?

С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю

Share this post


Link to post
Share on other sites
3 hours ago, haker_fox said:

Простите, а что вы калибруете? Смещение? Полную шкалу?

Мы в своих приборах используем ADS1247, не знаю, насколько они похоже. Но мы делаем "системную калибровку" - смещение с учётом внешней по отношению к АЦП цепи. А также делаем калибровку измеряемой величины по мерам. Вот тогда всё работает.

В нем есть режим самокалибровки смещения и полной шкалы. При этом заявлено что внешние входы отключаются и внутри самого АЦП либо подключаются к середине аналогового питания для калибровки смещения, и к входам опорного напряжения для полной шкалы.

"SELFOCAL performs a self offset calibration. The analog inputs AINP and AINN are disconnected from the signal source and connected to AVDD/2."
"SELFGCAL performs a self gain calibration. The analog inputs AINP and AINN are disconnected from the signal source and AINP is connected internally to VREFP while AINN is connected to VREFN."

Отправляю команду SELFCAL Offset and Gain Self-Calibration
Она должна поочередно выполнить сначала самокалибровку смещения, потом полной шкалы

Share this post


Link to post
Share on other sites
2 hours ago, Mik174 said:

С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю

То есть при Vin = 100 мВ, измеряете 110 мВ, а при Vin = 200 мВ, получаете 210 мВ?

В общем, для начала следует добиться нормальной работы без всяких калибровок, установив PGA Кус = 1, в самом простом режиме, дергая за ногу, которая инициирует конверсию (SYNC). Если АЦП полностью управляется через SPI, то убедиться, что на шине SPI у вас нет "звона" (был опыт с ADS1259, которая из-за небольшого звона неправильно понимала, что от нее хотят).

Уверены, что ваш МК правильно интерпретирует данные от АЦП? Если при любых условиях всегда +10мВ смещение, то не исключено, что какие-нибудь младшие разряды постоянно в "1".

 

P.S. может частота на SPI слишком высокая?

Share this post


Link to post
Share on other sites
6 hours ago, Mik174 said:

С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю

Гм... т.е. у вас систематическая погрешность, которую можно выкалибровать? 

А перед АЦП у вас что стоит? Поглядите утечки в этих цепях.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this