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