|
|
  |
Получить от АЦП полные 10 бит. Как? |
|
|
|
Dec 5 2011, 19:48
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676

|
Попробую объяснить на пальцах. Допустим имеем 8 бит АЦП, которое дало результат 148 = 10010100. Сдвигаем результат на 7 бит влево: 0b100101000000000 Условно, в реале величину сдвига надо считать. Теперь прибавляем сюда случайно выхваченное значение 8-и битного счётчика, до кучи преобразованное к знаковому виду. Вот тебе и шум - он может быть меньше веса младшего значащего бита и не привести к его переключению (или нескольких младших бит)), а может быть больше, и бит перескочит. Всё как в жизни. Тут возможны варианты. Можно реализовать программный компаратор и щёлкать младший бит согласно условию больше/меньше счётчика. То, о чём писала Татьяна, по сути. Собственно, эти методы были описаны ещё во времена СССР, но тогда подмешивание реального электрического шума было простейшим решением для полуаналоговых ЭВМ. Зачем это делать сейчас?.. При дальнейшем накоплении (самплировании реального сигнала) прибавленный шум также суммируется (или вычитается). Результатом будет усреднение выборок со сдвигом до исходных 8 бит, или той разрядности, что нам нужна. То есть ключом является сдвиг результата АЦП влево. Если вы не делаете сдвиг а просто суммируете шум к результату, вот тут уже будет бред. Теперь хотелось бы посмотреть на вашу реализацию и найти общие точки Цитата(rx3apf @ Dec 5 2011, 23:33)  А опыт ? Делайте, экспериментируйте... Ну, это, какбэ, колхоз...
Сообщение отредактировал Dikoy - Dec 5 2011, 19:51
|
|
|
|
|
Dec 5 2011, 19:59
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Dikoy @ Dec 5 2011, 23:48)  Попробую объяснить на пальцах. Допустим имеем 8 бит АЦП, которое дало результат 148 = 10010100. Сдвигаем результат на 7 бит влево: 0b100101000000000 Условно, в реале величину сдвига надо считать. Теперь прибавляем сюда случайно выхваченное значение 8-и битного счётчика, до кучи преобразованное к знаковому виду. Вот тебе и шум - он может быть меньше веса младшего значащего бита и не привести к его переключению (или нескольких младших бит)), а может быть больше, и бит перескочит. Всё как в жизни. Еще раз - показания ADC стоят как влитые, пока входной уровень не изменится на 1LSB. Вы можете прибавлять туда шум, возраст Вселенной в секундах, умножать на свой рост в миллиметрах и заниматься еще кучей бесполезных арифметических действий. Но различить изменение входного уровня меньше 1LSB - не сможете. Неужели это не очевидно ? Нет ? Ладно, я запасаюсь попкорном и буду просто наблюдать этот цирк...
|
|
|
|
|
Dec 5 2011, 20:31
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676

|
Цитата(rx3apf @ Dec 5 2011, 23:59)  Еще раз - показания ADC стоят как влитые, пока входной уровень не изменится на 1LSB. Вы можете прибавлять туда шум, возраст Вселенной в секундах, умножать на свой рост в миллиметрах и заниматься еще кучей бесполезных арифметических действий. Но различить изменение входного уровня меньше 1LSB - не сможете. Неужели это не очевидно ? Нет ? Ладно, я запасаюсь попкорном и буду просто наблюдать этот цирк... Твой имат! Что в переводе означает "умрём за царя". У меня есть конкретная задача - получить 10 бит на 10-и битном АЦП, без дрожания. Какое нафиг получение уровня меньше 1LSB? Вы себе придумали повышения разрядности до 12 бит и прёте к этой эмпирической цели. А задача то намного проще. Чувствительность АЦП УЖЕ достаточна. Шум ВНУТРИ АЦП, внешними пилами вы его не выпилите. "Неужели это не очевидно ?" (с) Или хотелось за ДСП поболтать? :/ Цитата(xemul @ Dec 6 2011, 00:21)  Но ровнее != точнее. Да. Однако систематическая погрешность компенсируется, а случайная - нет. Цитата(xemul @ Dec 6 2011, 00:21)  Бессмысленные шаманские пляски? А то. А апогей шаманства - фильтр Калмана.
|
|
|
|
|
Dec 5 2011, 20:37
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Dikoy @ Dec 6 2011, 00:29)  У меня есть конкретная задача - получить 10 бит на 10-и битном АЦП, без дрожания. Какое нафиг получение уровня меньше 1LSB? Вы себе придумали повышения разрядности до 12 бит и прёте к этой эмпирической цели. А задача то намного проще. И Вам с самого начала сказали - никаких сложностей в этом нет. _Вообще_ нет. Если, конечно, учтете сказанное. Но +/- младший разряд - будет всегда, как у любого цифрового измерительного прибора. Не нравится - увеличивайте разрядность. Механизм увеличения разрядности был приведен всего лишь как пример пользы "дрожания" младшего бита. А вот Ваше теоретизирование по поводу тождественности аппаратного и программного добавления шума - это лично Ваши измышления, к реальности отношения не имеющие. Цитата Чувствительность АЦП УЖЕ достаточна. Шум ВНУТРИ АЦП, внешними пилами вы его не выпилите. Шум _внутри_ АЦП много меньше 1LSB. Как бы не на порядок.
|
|
|
|
|
Dec 5 2011, 21:05
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676

|
Знать значение младШИХ битОВ или младШЕГО битА - разные вещи. Последнее можно определить тупо усреднением, что является формой вероятностной дисперсии. Ви таки удивитесь, но ваша внешняя городушка работает по аналогичному принципу. Что до "моих теоретизирований", то без коментариев. Это даже в Кнуте есть. А уж про Калмана или модовую декомпозицию вообще молчу. Другой вопрос, что Вы этого не знаете. Хотя, для повышения разрядности такой метод действительно не годится. Но о повышении никто, кроме Вас, и не говорил. Цитата(rx3apf @ Dec 5 2011, 23:37)  И Вам с самого начала сказали - никаких сложностей в этом нет. _Вообще_ нет. Я категорически не хочу вводить внешние элементы. Во-1 дефицит лап, во-2 дефицит площади, в-3 ограничение себистоимости. Потому все решения с внешней городушкой не годятся.
|
|
|
|
|
Dec 5 2011, 21:16
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Dikoy @ Dec 6 2011, 01:05)  Я категорически не хочу вводить внешние элементы. Во-1 дефицит лап, во-2 дефицит площади, в-3 ограничение себистоимости. Потому все решения с внешней городушкой не годятся. Тогда убейте себя апстену. Начальной точности и температурной стабильности (между прочим, график Vbg vs Vcc, причем для разных температур, в даташите тоже есть) встроенного опорника недостаточно. Что же касается "дефицита лап" - намекну, что у ATmega48 вход Aref - отдельная нога, ни с чем больше не разделяемая. И про ошибку смещения ADC Вам тоже было сказано (это к вопросу о 1024 отсчетах).
Сообщение отредактировал rx3apf - Dec 5 2011, 21:23
|
|
|
|
|
Dec 6 2011, 07:26
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Dikoy @ Dec 6 2011, 00:31)  Твой имат! Что в переводе означает "умрём за царя". У меня есть конкретная задача - получить 10 бит на 10-и битном АЦП, без дрожания. Какое нафиг получение уровня меньше 1LSB? Вы себе придумали повышения разрядности до 12 бит и прёте к этой эмпирической цели. А задача то намного проще. Чувствительность АЦП УЖЕ достаточна. Тогда нет ничего проще. Делаешь сплошную землю на внутренем слое, если плата двухслойная - подводишь ее толстыми проводниками, на каждый вывод питания проца в непосредственной близости от него вешаешь керамику 0.1 мкф (а лучше больше, сейчас есть керамика до 10 мкф), переходные отверстия к земле делаешь толстыми, не меньше 0.5 мм, опору заводишь через RC-фильтр причем конденсатор этого фильтра подключаешь к земле в непосредственной близости от проца, сигнал от датчика заводишь двумя проводами, причем земляной подключаешь рядом с аналоговой землей. Ну и, конечно, убеждаешься в том, что по земле мимо поцессора не протекают токи от мощных потребителей (светодиодов например). От них возвратные токи должны идти отдельным проводником сразу к источнику питания. Для стояния 10 разрядов этого более чем достаточно. Цитата(rx3apf @ Dec 6 2011, 00:37)  Но +/- младший разряд - будет всегда, как у любого цифрового измерительного прибора. Да почему всегда?! Это будет только если измеряемый сигнал будет находиться вблизи границы переключения. Цитата(rx3apf @ Dec 6 2011, 00:37)  Не нравится - увеличивайте разрядность. А при большей разрядности младший разряд не будет прыгать?
|
|
|
|
|
Dec 6 2011, 08:24
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(777777 @ Dec 6 2011, 11:26)  Да почему всегда?! Это будет только если измеряемый сигнал будет находиться вблизи границы переключения. Да. Но неопределенность-то сохраняется. Цитата А при большей разрядности младший разряд не будет прыгать?  Естественно будет. Но "вес" прыжка будет меньше.
|
|
|
|
|
Dec 6 2011, 19:00
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 4-03-09
Из: Богота, Колумбия
Пользователь №: 45 676

|
Цитата(rx3apf @ Dec 6 2011, 01:16)  Тогда убейте себя апстену. Начальной точности и температурной стабильности (между прочим, график Vbg vs Vcc, причем для разных температур, в даташите тоже есть) встроенного опорника недостаточно. Что же касается "дефицита лап" - намекну, что у ATmega48 вход Aref - отдельная нога, ни с чем больше не разделяемая. И про ошибку смещения ADC Вам тоже было сказано (это к вопросу о 1024 отсчетах). На какой странице график? http://www.atmel.com/dyn/resources/prod_do...nts/doc2545.pdf Фоксит его не находит. Ну, не хватит так не хватит. Буду делать 2 версии - со впаянным REF192 и без оного. Будет 1 и 2 сорт Намекну, что ARef визически соединена с опорой. Потому использование внутреннего ИОН подразумевает отсутствие наружнего. Хотя бы перемычкой. Смещение, нелинейность и ошибка усиления удаляются калибровкой. Это систематические погрешности. А вот шум - нет. Сейчас обкатал в матлабе несколько вариантов из апнот силабса и атмела, лучше всего работает БИХ и КИХ. Скользящее среднее не удаляет шум а только маскирует. Но тоже пригодно. Цитата(ViKo @ Dec 6 2011, 21:36)  Dikoy, вы неправы! Про рандомизацию чуть-чуть написано в книжке Р. Лайонс "Цифровая обработка сигналов". Кстати, дизеринг (он же рандомизация) и сигма-дельта - это разные вещи. У кнута тоже есть. Не так явно и пальцеобразно, но есть. Про ковбоя и пулю. Подмешивание шума применял ещё Фон Браун в своих Р2, добиваясь более-менее сносной работы гирокомпаса. Интеграторы там были аналоговые и шум генерировался тоже аналогово. С тех пор народ по привычке (или под действием старой литературы) тоже многое старается делать в аналоге. А зря. Я не говорю про определение дробного порога сдвигом (сигма-дельта, или то о чём писала Татьяна) - тут да, только суммирование сигнала в аналоговом тракте. Но когда АЦП уже имеет достаточную чувствительность, всё это не нужно. Взять хотя бы современные 24 разрядные АЦП с ENOB бит 17. Разрешение есть, точности нет. Однако простой оверсемплинг с БИХ на выходе позволяет вытянуть аналоговый сигнал на 18-20 реальных бит. Как простейший пример. Говоря про калмана, то по каналу наблюдения во многих реализациях вводится белый шум. Те же гироблоки работают на столе значительно хуже, чем в полёте, где ловят лишние вибрации.
|
|
|
|
|
Dec 7 2011, 01:56
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816

|
Цитата(Dikoy @ Dec 7 2011, 01:00)  У кнута тоже есть. Не так явно и пальцеобразно, но есть. Про ковбоя и пулю. Подмешивание шума применял ещё Фон Браун в своих Р2, добиваясь более-менее сносной работы гирокомпаса. Интеграторы там были аналоговые и шум генерировался тоже аналогово. С тех пор народ по привычке (или под действием старой литературы) тоже многое старается делать в аналоге. А зря. Классно.  Только какое отношение это имеет к нашей реальности? Наприме знаете, зачем ставят такие маленькие катушечки на гироскопы и подают маленький синус? А для "оживления" подшипников гироскопа. А как бы вы оживили гироскоп программно. Не, не могу серьезно  И ведь правильно совершенно говорит: Цитата Те же гироблоки работают на столе значительно хуже, чем в полёте, где ловят лишние вибрации. А потом скатывается на программизм. А тут мемс систему "оживляют" реальные, а не программные вибрации
|
|
|
|
|
Dec 7 2011, 08:50
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Dikoy @ Dec 6 2011, 22:00)  Взять хотя бы современные 24 разрядные АЦП с ENOB бит 17. Разрешение есть, точности нет. Однако простой оверсемплинг с БИХ на выходе позволяет вытянуть аналоговый сигнал на 18-20 реальных бит. Как простейший пример. Конечно, именно так вы можете сделать. Если оверсемплинг будет очень большой, если будете усреднять очень много выборок, можете получить и все 24 разряда, и даже больше. Именно благодаря тому, что в сигнале всегда есть шум. Достаточно того, что есть. Если же вдруг недостаточно (например, АЦП 4-битовый), то тогда необходима рандомизация. До АЦП.
|
|
|
|
|
Dec 8 2011, 19:28
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 22-01-10
Из: Kiev
Пользователь №: 55 001

|
Итак выводы (на основе опыта)! 1) AVR_ADC10 работает весьма стабильно и, если не делать явных глупостей, держит младшую единицу даже при работе без усреднений. 2) Температурный коэффициент опорника (ATMEL умалчивает, разве что кто-то делал запрос - сообщите!), видимо близок к 10 битам при уходе температуры на 20-30 градусов - тыкание паяльником показывает даже удивительную стабильность! 3) А вот заводская точность опорника как по DS = +/-10%, так и в жизни! Калибровать нужно каждый прибор! За 10 центов (TL431XX, в т.ч. sot23) можно получить 1% или даже 0,5%(?). 4) Усреднение очень полезно, я бы сказал - необходимо, но надо иметь в виду такие моменты: 5) Если АЦП работает стабильно, то грубо говоря, - усреднять нечего. Но обычно это не так и результат становиться стабильнее. 6) Неплохие результаты - уверенно держит 11 бит показала прямая работа на LED-индикатор с импульсами тока 20-50мА, которые, видимо неплохо подшумливают АЦП. 7) Чтобы не допускать "как получиться" можно искусственно покачивать АЦП туда-сюда добавкой внешнего сигнала и, желательно НЕ шума, а чего-нибудь линейного во времени и пространстве. Механизм увеличения разрядности легко показать на примере треугольной добавки, равной ровно одному разряду (только для мысленного эксперимента - реально лучше с запасом - 2-4 единицы). Пусть в абсолютно стабильном АЦП входное напряжение на 0,27 ед. выше порогового уровня, например, "835". АЦП без раскачки замерзнет на "835", а с добавкой (считаем в плюс) - 27% времени будет находиться выше уровня "836", что после суммирования даст нам результат 835,27! 8) Цикл суммирования желательно синхронизировать на целое количество покачиваний. 9) Белый шум использовать хуже (и генерить сложнее!). Линейная добавка туда-сюда при суммировании дает ноль, а белый шум имеет спектр почти до нуля и его шум проникает в результат! 10) Добавлять шум программно бессмысленно - кроме своего шума он ничего в измерения не добавит!
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|