Перейти к содержанию
    

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

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

Если кто имел опыт работы с АЦП 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Mik174 said:

АЦП ADS1256

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, alexunder said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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
Она должна поочередно выполнить сначала самокалибровку смещения, потом полной шкалы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Mik174 said:

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Mik174 said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...