|
Нелинейность в АЦП., используется внутреннее АЦП контроллера ЛПЦ2468 |
|
|
|
Jun 5 2009, 12:42
|
Группа: Новичок
Сообщений: 11
Регистрация: 1-06-09
Пользователь №: 49 784

|
Схема подключения состоит из резисторного делителя 5В -> 3.3В (5.1кОм/10кОм). Большая нелинейность наблюдается в нижнем диапазоне - менее 1В, дальше нелинейность поменьше. Что посоветуете, как от нее избавиться? Заранее спасибо.
|
|
|
|
|
Jun 5 2009, 13:36
|
Группа: Новичок
Сообщений: 11
Регистрация: 1-06-09
Пользователь №: 49 784

|
Цитата(AHTOXA @ Jun 5 2009, 17:11)  Либо калибровать по нескольким точкам, либо ставить операционник. Ну или накрайняк резисторы побольше раз в сто  Сейчас как раз пытаюсь калибровать, но думаю это не лучший выход. Операционник - это интересно... а не знаете где можно найти схему его подключения для АЦП? На счет резисторов не понял. В даташите на этот проц написано, что максимальное входное сопротивление для АЦП - 40кОм. Если увеличить резисторы, не знаю что и получится
|
|
|
|
|
Jun 5 2009, 14:08
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(k_crimson @ Jun 5 2009, 19:36)  Сейчас как раз пытаюсь калибровать, но думаю это не лучший выход. Операционник - это интересно... а не знаете где можно найти схему его подключения для АЦП? Я думаю, сгодится банальный повторитель. Это когда сигнал подаётся на неинвертирующий вход, а инвертирующий вход соединяется с выходом. Коэффициент усиления получается единица. Перед повторителем ставите свои резисторы. Цитата На счет резисторов не понял. В даташите на этот проц написано, что максимальное входное сопротивление для АЦП - 40кОм. Если увеличить резисторы, не знаю что и получится  Я перепутал, надо резисторы поменьше. Суть в том, что входное сопротивление АЦП должно быть много больше выходного сопротивления сигнала. Как-то так
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 5 2009, 18:13
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата Я перепутал, надо резисторы поменьше. Суть в том, что входное сопротивление АЦП должно быть много больше выходного сопротивления сигнала. Как-то так Резисторы таких размеров вполне приемлимые, главное acquisition time достаточным задать. Смотрите даташиты. Емкость sampling capacitor там дана, сопротивление вашего делителя, входное сопротивление считаете необходимое время. АЦП вообще весьма линейные устройства.
|
|
|
|
|
Jun 8 2009, 04:16
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870

|
Цитата(ar__systems @ Jun 5 2009, 22:13)  Резисторы таких размеров вполне приемлимые, главное acquisition time достаточным задать.
Смотрите даташиты. Емкость sampling capacitor там дана, сопротивление вашего делителя, входное сопротивление считаете необходимое время.
АЦП вообще весьма линейные устройства. Я ставлю 150к на 33к + кондер на 0.1 мкФ и все линейно работает. REF без опорника просто от питания.
Сообщение отредактировал Step_ARM - Jun 8 2009, 04:17
|
|
|
|
|
Jun 9 2009, 06:44
|
Группа: Новичок
Сообщений: 11
Регистрация: 1-06-09
Пользователь №: 49 784

|
Проверил без делителя - напряжение идет напрямую на ногу контроллера. Та же картина. Приведу код, а то не знаю что еще делать...
инициализация: // ADC0 PinBlockFuncSelect(PORT0, PIN23, PIN_ALT_FIRST); // настроить как аналоговый вход PinBlockModeSet(PORT0, PIN23, PIN_NOT_PULL); // выключить подтяжку pADC->pReg = &AD0DR0; pADC->Channel = 1; // ADC1 . . . // ADC7
PCONP |= 1<<12; // turn on ADC AD0CR |= 1<<21; // set PDN AD0INTEN = 0; // disable interrupts AD0CR |= 0xFF; AD0CR |= (SYS_GetFpclk(ADC_PCLK_OFFSET)/4500000 - 1) << 8; // 4,5МГц AD0CR |= ADCR_BURST; // Burst mode
чтение: #if USE_BURST_MODE // Для Burst режима while(!(*pADC->pReg & ADDR_DONE)); // Ждем бит DONE для считываемого канала data = (*pADC->pReg >> 6) & 0x3FF; AD0GDR; #else ADC->AD_CR &= 0xFFFFFF00; ADC->AD_CR |= pADC->Channel); // change channel while(Len--) { AD0CR |= 1<<24; // start conversion while(!(AD0GDR & 0x80000000)); data[Len] = (AD0GDR >> 6) & 0x3FF; } AD0CR &= 0xF8FFFFFF; // stop ADC now #endif
Может в коде что не так?
|
|
|
|
|
Jun 9 2009, 09:27
|
Группа: Новичок
Сообщений: 11
Регистрация: 1-06-09
Пользователь №: 49 784

|
Цитата(Alechek @ Jun 9 2009, 12:11)  На отальные ноги АЦП не приходит случает напряжение более чем Vref? Нет, не приходит. Тоже вот в еррате прочитал такое замечание: When the input voltage is Vi ≥ Vdd I/O + 0.5 v on each of the following port pins P0.23, P0.24. P0.25, P0.26, P1.30, P1.31, P0.12, and P0.13 configured as general purpose input pin (s)), current must be limited to less than 4 mA by using a series limiting resistor. Пообрезал все каналы, где была вероятность превышения Vdd(=Vref) - пригоги все те же
|
|
|
|
|
Jun 9 2009, 18:26
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Скажите пожалуйста, а что может быть принято за эталонное напряжение? Где его берут? Делители на сопротивлениях - ерунда, т.к. у резисторов номинал редко выдерживается точнее 1%, а любой АЦП на порядок точнее. А если меня 20-ти и более разрядный АЦП, то как определить на сколько он врет при измерении? Даже источники опорного напряжения тут не годятся, т.к. несмотря на то, что напряжение они держат неплохо, но сама величина этого напряжения варьируется в пределах 0.1 вольта даже в одной партии. Измерителные приборы? А за них кто поручится? Ведь даже самый точный вольтметр не потянет на одну миллионную часть шкалы. А вот 20-разрядный АЦП как раз имеет примерно такую величину дискреты. ЦАПы? Но они и по разрядности уступают АЦПам, и наверняка сами имеют собственные погрешности, превосходящие АЦП, поскольку приготовить высокоточное напряжение технологически сложнее, чем его измерить. Ситуация оказывается плачевной - АЦП имеют "класс точности" выше, что то напряжение, которые мы можем подать на их вход.
P.S. Такие вопросы возникают у меня из-за того, что все измерительные приборы положено "поверять". Таково формальное требование закона. Вот и любопытно мне, как можно АЦП "поверить", если подойти к делу честно.
Сообщение отредактировал Xenia - Jun 9 2009, 18:31
|
|
|
|
|
Jun 10 2009, 12:02
|
Группа: Новичок
Сообщений: 11
Регистрация: 1-06-09
Пользователь №: 49 784

|
Цитата(Xenia @ Jun 9 2009, 22:26)  Скажите пожалуйста, а что может быть принято за эталонное напряжение? Где его берут? Делители на сопротивлениях - ерунда, т.к. у резисторов номинал редко выдерживается точнее 1%, а любой АЦП на порядок точнее. А если меня 20-ти и более разрядный АЦП, то как определить на сколько он врет при измерении? В качестве источника используется mastech hy3010 (30В, 10А) и проверяется еще тестером MY65 той же фирмы. К ним у меня больше доверия, чем к процессорному ацп  Цитата(Altemir @ Jun 9 2009, 17:56)  k_crimson А, может, это не нелинейность, а помехи/шум на эту ногу приходят? Какая длина линии до входа АЦП? Уменьшите до минимума частоту дискретизации АЦП (допустим, 50-100000 выборок/с) длина у каждого ~100mm, уменьшал частоту - не помогает. Еще заметил, что при частоте проца 72МГц напряжение после делителя падает сильнее, чем при 48МГц. Цитата(etoja @ Jun 10 2009, 11:50)  У АЦП нелинейность не больше двух младших разрядов. Вот документация:
Убедитесь в правильности тактовой частоты на АЦП и дожидайтесь окончания преобразования. Читал я документацию. Окончания преобразования тоже дожидаюсь, в коде, который я выложил, это вроде видно.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|