Mik174 0 Posted March 19, 2019 · Report post Здравствуйте! Если кто имел опыт работы с АЦП 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 Помогите, пожалуйста, разобраться, что я делаю не так, уже всю голову сломал... Quote Ответить с цитированием Share this post Link to post Share on other sites
Tanya 0 Posted March 19, 2019 · Report post Лучше бы график построили. Напряжение - код. Quote Ответить с цитированием Share this post Link to post Share on other sites
alexunder 0 Posted March 19, 2019 · Report post 10мВ - довольно большое смещение. А без калибровки в самом простом режиме (одиночный семпл) что показывает? Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted March 19, 2019 · Report post 1 hour ago, Mik174 said: АЦП ADS1256 Простите, а что вы калибруете? Смещение? Полную шкалу? Мы в своих приборах используем ADS1247, не знаю, насколько они похоже. Но мы делаем "системную калибровку" - смещение с учётом внешней по отношению к АЦП цепи. А также делаем калибровку измеряемой величины по мерам. Вот тогда всё работает. Quote Ответить с цитированием Share this post Link to post Share on other sites
Mik174 0 Posted March 19, 2019 · Report post 3 hours ago, alexunder said: 10мВ - довольно большое смещение. А без калибровки в самом простом режиме (одиночный семпл) что показывает? С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю Quote Ответить с цитированием Share this post Link to post Share on other sites
Mik174 0 Posted March 19, 2019 · Report post 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 Она должна поочередно выполнить сначала самокалибровку смещения, потом полной шкалы Quote Ответить с цитированием Share this post Link to post Share on other sites
alexunder 0 Posted March 19, 2019 · Report post 2 hours ago, Mik174 said: С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю То есть при Vin = 100 мВ, измеряете 110 мВ, а при Vin = 200 мВ, получаете 210 мВ? В общем, для начала следует добиться нормальной работы без всяких калибровок, установив PGA Кус = 1, в самом простом режиме, дергая за ногу, которая инициирует конверсию (SYNC). Если АЦП полностью управляется через SPI, то убедиться, что на шине SPI у вас нет "звона" (был опыт с ADS1259, которая из-за небольшого звона неправильно понимала, что от нее хотят). Уверены, что ваш МК правильно интерпретирует данные от АЦП? Если при любых условиях всегда +10мВ смещение, то не исключено, что какие-нибудь младшие разряды постоянно в "1". P.S. может частота на SPI слишком высокая? Quote Ответить с цитированием Share this post Link to post Share on other sites
haker_fox 0 Posted March 20, 2019 · Report post 6 hours ago, Mik174 said: С калибровкой показывает точно такие же цифры, как и без калибровки как будто я ее и не включаю Гм... т.е. у вас систематическая погрешность, которую можно выкалибровать? А перед АЦП у вас что стоит? Поглядите утечки в этих цепях. Quote Ответить с цитированием Share this post Link to post Share on other sites