Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Получить от АЦП полные 10 бит. Как?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Dikoy
Так получилось, что для получения необходимого разрешения по измеряемому напряжению мне нужно 10+ бит. Использовать планирую ATmega48 с внутренним генератором на 4-8 МГц. Атмега будет мерить 2 входа АЦП (6 и 7, т.к. на них больше ничего нету), выполнять элементарный расчёт и выдавать на семисегментный индикатор в динамическом режиме.
На входе имеем 7 вольт и померить их надо с разрешением (и точностью) 0,006946891517745 вольт.
10 бит на таком диапазоне, это 0,0068359375, то есть как раз.
И того, надо получить 1024 чистые точки. Без дрожания.
Хотелось бы услышать мнения, как это сделать.

Например, хватит ли внутреннего ИОНа для такой точности?
В ДШ шум документирован как 0,5 LSB. Правда, нигде не нашёл, это при измерении в шутдауне, или при работающем ядре тоже?

Допустим, на время измерения я буду отправлять МК в шутдаун (хотя не хотелось бы, т.к. на нём ещё и динамическая индикация). Делать усреднение (оверсемплинг) по 8-16 выборкам подряд... Что ещё можно сделать?..
Tanya
Цитата(Dikoy @ Dec 5 2011, 06:35) *
Так получилось, что для получения необходимого разрешения по измеряемому напряжению мне нужно 10+ бит.
....
Делать усреднение (оверсемплинг) по 8-16 выборкам подряд... Что ещё можно сделать?..

Либо читайте форум - это многократно обсуждалось, либо берите МК с лучшим АЦП. Либо внешний. Их еще делают пока. Не все засунули в АВРки.
777777
Я еще понимаю когда речь идет о 14-16 разрядном АЦП, но как можно добиться дрожания хотя бы одного бита у 10-разрядного?
Tanya
Цитата(777777 @ Dec 5 2011, 08:22) *
Я еще понимаю когда речь идет о 14-16 разрядном АЦП, но как можно добиться дрожания хотя бы одного бита у 10-разрядного?

А я вот не могу понять, как может быть без дрожания? Оно всегда должно быть. Даже в одноразрядном АЦП.
Но ТС интересует точность, а не дрожание. Хоть он об этом и не говорит. А говорит о дрожании.
rx3apf
Цитата(Tanya @ Dec 5 2011, 08:39) *
А я вот не могу понять, как может быть без дрожания? Оно всегда должно быть. Даже в одноразрядном АЦП.
Но ТС интересует точность, а не дрожание. Хоть он об этом и не говорит. А говорит о дрожании.

Если дрожит меньше 1LSB - то дрожание можно и не увидеть. Точности - хватит. А начальной точности опорника - не хватит однозначно, необходимо калибровать. Да и ошибка смещения у них очень даже изрядная.
arttab
не забудьте считывать результат из 2х регистров
Tanya
Цитата(rx3apf @ Dec 5 2011, 11:05) *
Если дрожит меньше 1LSB - то дрожание можно и не увидеть.

А если близко к краю подойти, то дрожь невозможно ни удержать, ни не увидеть .
pavel-pervomaysk
Я делал так значительно лучше результат, сравнение до 999 убери.


CODE
read_adc: // Чтение АЦП 64 раза , и вычисление среднеарифметического значения
clr yl //
clr yh //
ldi loop,64 // Загружаем количество выборок
read_cycle: // Цикл чтения АЦП
sbi adcsra,6 // Запускаем АЦП
w_adc: //
sbic adcsra,6 // Ждем готовности АЦП к чтению данных
rjmp w_adc //
in xl,ADCL // считываем 8 младших битов АЦП
in xh,ADCH // считываем 2 старших бита АЦП
add yl,xl //
adc yh,xh //
dec loop // Счетчик циклов - 1
brne read_cycle //
// Деление полученого результата на 64 , >> 6 , сдвигаем на 6 разрядов в право
ldi loop,6 //
devide_adc: //
lsr yh //
ror yl //
dec loop //
brne devide_adc //
ldi xl,low (999) //
ldi xh,high(999) //
cp yl,xl //
cpc yh,xh //
brsh set_adc_data //
ret // На выход , результат хранится в Y
set_adc_data: //
ldi yl,low (999) //
ldi yh,high(999) //
ret //
777777
Цитата(arttab @ Dec 5 2011, 11:13) *
не забудьте считывать результат из 2х регистров

А я всегда считываю из одного:

int v = ADC; // sm.gif

Цитата(Павлик @ Dec 5 2011, 13:15) *
Я делал так значительно лучше результат

Это разгильдяйство.
Navovvol
"0,006946891517745 вольт. " И зачем такая точность ? Ни один датчик или другое устройство не сможет поддерживать на выходе такую точность. Абсолютной линейности вых. сигналов в аналоговых датчиках не бывает.
xemul
Цитата(Navovvol @ Dec 5 2011, 13:45) *
"0,006946891517745 вольт. " И зачем такая точность ? Ни один датчик или другое устройство не сможет поддерживать на выходе такую точность. Абсолютной линейности вых. сигналов в аналоговых датчиках не бывает.

В Колумбии именно с такой точностью взвешивают кокс. Заморачиваться с правилами округления там не принято.
delamoure
Кокос, кокос, не издевайтесь...
Стремление измерить 7000 mV с точностью +/- 7 mV мне непонятно.
Ну и вообще как такой потенциал попадет в конечном итоге на мегу без делителя дело лично топикстартера.
Время было 4:30 утра, человек перед сном задал вопрос sm.gif

Если по сути вопроса.
Вы сами в курсе общих требованией:
1. правильная топология печатной платы;
2. фильтрация питающих цепей;
3. фильтрация измеряемых сигналов;
4. выбор ион (начальная точность, временная/температурная стабильность)ж
5. оверсемплинг в разумных пределах.

Просто когда вы натыкаетесь на какую-то сложную задачу в простых приложениях, значит вы что-то делаете не так. Измените ее, измените решение etc.
rx3apf
Цитата(Tanya @ Dec 5 2011, 11:20) *
А если близко к краю подойти, то дрожь невозможно ни удержать, ни не увидеть .

Это как бы самоочевидно. А реализовав дизеринг, эту "дрожь" можно и с пользой применить, уж два-три бита совсем просто добавляются...
Tanya
Цитата(rx3apf @ Dec 5 2011, 14:44) *
Это как бы самоочевидно.

Для Вас. А ТС хотел от этого избавиться. И не только он. Вот и пишу банальности.
ViKo
Цитата(rx3apf @ Dec 5 2011, 13:44) *
А реализовав дизеринг, эту "дрожь" можно и с пользой применить...

А как его "реализовать" по-простому?
rx3apf
Цитата(ViKo @ Dec 5 2011, 16:22) *
А как его "реализовать" по-простому?

Я это делал резистивным DAC на весовых резисторах. А вариантов много - меандр превратить в подобие треугольника и подмешать, или сделать цифровой генератор шума и тоже отфильтровать и подмешать....
Tanya
Цитата(rx3apf @ Dec 5 2011, 16:27) *
- меандр превратить в подобие треугольника и подмешать

Это можно даже не особо трудиться - меандр с ножки ШИМа на RC-цепочку...
Только смещение нужно измерить...

Цитата(rx3apf @ Dec 5 2011, 16:27) *
сделать цифровой генератор шума и тоже отфильтровать и подмешать....

Это как?
ViKo
Цитата(Tanya @ Dec 5 2011, 15:54) *
Это как?

например, ПСП, а дальше - аналогично...
Tanya
Цитата(ViKo @ Dec 5 2011, 16:56) *
например, ПСП, а дальше - аналогично...

А что это?
ViKo
Цитата(Tanya @ Dec 5 2011, 16:02) *
А что это?

Псевдослучайная последовательность, на регистре сдвига.
rx3apf
Цитата(Tanya @ Dec 5 2011, 16:54) *
Это можно даже не особо трудиться - меандр с ножки ШИМа на RC-цепочку...

Это и имелось в виду.
Цитата
Только смещение нужно измерить...

DC проще обрезать.


Tanya
Цитата(ViKo @ Dec 5 2011, 17:06) *
Псевдослучайная последовательность, на регистре сдвига.

Не понимаю... ШИМ сам-собой работает. А это другим контроллером? Тогда уж стабилитроном каким-нибудь...
Вроде бы были какие-то даже транзисторы специальные...

Цитата(rx3apf @ Dec 5 2011, 17:14) *
DC проще обрезать.

В нуле плохо будет. Около нуля. Или кажется?
rx3apf
Цитата(Tanya @ Dec 5 2011, 17:27) *
Не понимаю... ШИМ сам-собой работает. А это другим контроллером? Тогда уж стабилитроном каким-нибудь...
Вроде бы были какие-то даже транзисторы специальные...

Стабилитроны, транзисторы - лишнее усложнение. Уровни согласовывать, запитку (повышенным напряжением !) обеспечивать, жрет оно... А генерировать ПСП можно хоть в обработчике прерываний ADC (все равно оверсемплинг надо делать). Резистивный DAC тоже там же обновлять. А асинхронная пила от независимого таймера - можно словить биения между частотами семплирования и дизеринга. Я все ж предпочитаю DAC с предсказуемым поведением, и код менять синхронно с семплером.
Цитата
В нуле плохо будет. Около нуля. Или кажется?

А, ну если вблизи нулевых и максимальных значений - то да. Так там еще и собственная ошибка смещения ADC может подгадить (и подгадит).
Dikoy
Цитата(777777 @ Dec 5 2011, 08:22) *
Я еще понимаю когда речь идет о 14-16 разрядном АЦП, но как можно добиться дрожания хотя бы одного бита у 10-разрядного?

Все АЦП дрожат. И понятие ENOB никто ещё не отменял. У АВР документировано 0,5 LSB, но стыдливо скрыто в каком режиме.
Понятно, что минимальный такт, но нужна ли остановка ядра?

Цитата(rx3apf @ Dec 5 2011, 11:05) *
А начальной точности опорника - не хватит однозначно, необходимо калибровать. Да и ошибка смещения у них очень даже изрядная.

Вот. Точности опорника я в ДШ вообще не нашёл.
И ухода тоже.
Откалибровать не проблема, есть эталонный источник напряжения до 3 знака после запятой. Определить систематическую погрешность можно легко. Но насколько калибровка сохраниться со временем?
Диапазон рабочих температур будующего прибора +15..+40.


Цитата(Navovvol @ Dec 5 2011, 13:45) *
"0,006946891517745 вольт. " И зачем такая точность ? Ни один датчик или другое устройство не сможет поддерживать на выходе такую точность. Абсолютной линейности вых. сигналов в аналоговых датчиках не бывает.

Объясняю.
Делается аналог древнего измерительного прибора. Тот прибор кажет 3 разряда (2 целых и 1 дробный) http://electronix.ru/forum/index.php?act=a...st&id=63263
Входной сигнал прибора - 0..7 вольт. Этот сигнал линейно преобразуется к отображаемым величинам. А это 999 точек. Наиболее близко к 1024, то есть к 10 битам.
7/(999) = 0,007
7/(2^10) = 0,0068359375
Вот и вся арифметика.

Цитата(xemul @ Dec 5 2011, 13:52) *
В Колумбии именно с такой точностью взвешивают кокс. Заморачиваться с правилами округления там не принято.

В колумбии люди умеют в уме (!!!) округлять сами. Это совсем не сложно.

Цитата(rx3apf @ Dec 5 2011, 14:44) *
Это как бы самоочевидно. А реализовав дизеринг, эту "дрожь" можно и с пользой применить, уж два-три бита совсем просто добавляются...

Дизеринг подразумевает известный спектр шумовой составляющей, в противном случае всё вырождается в простое усреднение. Или вы о чём?

Цитата(Tanya @ Dec 5 2011, 17:27) *
Не понимаю... ШИМ сам-собой работает. А это другим контроллером? Тогда уж стабилитроном каким-нибудь...
Вроде бы были какие-то даже транзисторы специальные...

Он логично предлагает генерировать шум в программе и подмешивать этот шум опять же программно, арифметически, если хотите. А опоры для шума в АВР валом. Тот же термометр встроенный...

Цитата(delamoure @ Dec 5 2011, 14:23) *
Ну и вообще как такой потенциал попадет в конечном итоге на мегу без делителя дело лично топикстартера.

Ну во-1 есно с делителем. Не думал, что такие вещи надо уточнять sm.gif , во-2 а какая разница с делителем или без? 1024 точки на диапазон остаются, не важно, 2, 5, или 50 там вольт. Я привёл разрешения для диапазона 7 вольт, остальные мне побоку.
rx3apf
Цитата(Dikoy @ Dec 5 2011, 19:41) *
Вот. Точности опорника я в ДШ вообще не нашёл.


Есть. Может быть не на все кристаллы, но есть.

Цитата
Дизеринг подразумевает известный спектр шумовой составляющей, в противном случае всё вырождается в простое усреднение. Или вы о чём?

Дизеринг подразумевает только _подмешивание_. Чего именно - вопрос другой. Я, например, подмешиваю пилу. С белым шумом при достаточном оверсемплинге результат будет тот же. В любом случае, 10 бит - это смешное требование. Дизеринг элементарно обеспечивает _дополнительные_ два-три бита минимум. Без каких-то особых усилий.
Цитата
Он логично предлагает генерировать шум в программе и подмешивать этот шум опять же программно, арифметически, если хотите. А опоры для шума в АВР валом. Тот же термометр встроенный...

Кто такой бред предлагает ? Какой смысл что-то "подмешивать" _программно_ ?

Tanya
Цитата(Dikoy @ Dec 5 2011, 19:41) *
Дизеринг подразумевает известный спектр шумовой составляющей, в противном случае всё вырождается в простое усреднение. Или вы о чём?

Он логично предлагает генерировать шум в программе и подмешивать этот шум опять же программно, арифметически, если хотите. А опоры для шума в АВР валом. Тот же термометр встроенный...

Вы не поняли сути - подмешивать нужно до АЦП. Аналоговый сигнал.
Иначе, - какой в этом смысл?
А если подмешивать сигнал шума... 2-3 младших разряда, то ошибка квантования после усреднения уходит.
Вот представьте просто один компаратор с порогом 1 вольт и на входе сигнал на... 5 милливольт ниже порога. Без шума получаем ноль.
А если добавить шум (10 - 20 милливольт) и долго-долго (миллион примерно раз) усреднять единицы и нули, то получим 995 милливольт. При этом спектр шума даже не очень важен. И одноразрядный АЦП стал 10 разрядным.
А опорник нужен внешний хороший в этом случае.
Dikoy
Цитата(rx3apf @ Dec 5 2011, 19:49) *
Есть. Может быть не на все кристаллы, но есть.


Дизеринг подразумевает только _подмешивание_. Чего именно - вопрос другой. Я, например, подмешиваю пилу. С белым шумом при достаточном оверсемплинге результат будет тот же. В любом случае, 10 бит - это смешное требование. Дизеринг элементарно обеспечивает _дополнительные_ два-три бита минимум. Без каких-то особых усилий.

Кто такой бред предлагает ? Какой смысл что-то "подмешивать" _программно_ ?

На последние кристаллы с 1,1В я не нашёл. Нарыл в инете несколько тем по этому поводу - там тоже ничего не нашли.
ИОН, допустим, я поставлю REF192. Хватит за уши на 10 битах. Но таки хочется ограничиться одним МК...

Смысл такой же, как в фотошопах, фотоаппаратах и т.п.

Цитата(Tanya @ Dec 5 2011, 19:51) *
Вы не поняли сути - подмешивать нужно до АЦП. Аналоговый сигнал.
Иначе, - какой в этом смысл?
А если подмешивать сигнал шума... 2-3 младших разряда, то ошибка квантования после усреднения уходит.
Вот представьте просто один компаратор с порогом 1 вольт и на входе сигнал на... 5 милливольт ниже порога. Без шума получаем ноль.
А если добавить шум (10 - 20 милливольт) и долго-долго (миллион примерно раз) усреднять единицы и нули, то получим 995 милливольт. При этом спектр шума даже не очень важен. И одноразрядный АЦП стал 10 разрядным.
А опорник нужен внешний хороший в этом случае.

Это называется сигма/дельта, а не дизеринг sm.gif
То, что вы описываете, элементарно делается программно. Результат АЦП сдвигается влево, до принятия младшими разрядами необходимого веса шума. Добавляется шум, сгенерённый, например, от термодатчика или random-ом на крайний случай. И в таком виде всё суммируется. А потом делаем обратный сдвиг и имеем результат исходной разрядности. Нарисовал специально для Вас в матлабе:

Жёлтый график - программный шум. Синий - результат. Чёрный - уход гироскопа. И чем больше выборок, тем он точнее и ровнее.
Или Вы считаете, что бит, переключённый внешним сигналом принципиально отличается от бита, переключённого программно? sm.gif

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

То же самое будет, если вы будете читать регистр таймера, крутящегося по кругу. Но только при условии, что АЦП и таймер работают не синхронно. То есть АЦП не привязана к какому-нибудь стётчику тоже. Ибо в этом случае велика вероятность "попадания" ацп на те же точки. А если АЦП работает чисто программно, с вызовом по мере надобности, то такой метод абсолютно эквивалентен внешней пиле.
rx3apf
Цитата(Dikoy @ Dec 5 2011, 21:41) *
На последние кристаллы с 1,1В я не нашёл. Нарыл в инете несколько тем по этому поводу - там тоже ничего не нашли.

Смотреть допуск на Vbg. Вот, в даташите 2006-го года на 48V-88V-168V - уже есть. Допуск 1.0...1.2V.
Цитата
Смысл такой же, как в фотошопах, фотоаппаратах и т.п.

Вы о чем-то своем, явно...
Цитата
Это называется сигма/дельта, а не дизеринг sm.gif

А в огороде - бузина. Дизеринг - это сам факт "подмешивания" дополнительного сигнала к измеряемому.
Цитата
Или Вы считаете, что бит, переключённый внешним сигналом принципиально отличается от бита, переключённого программно? sm.gif

Бред какой-то. Ну, возьмите вместо отсчета с ADC какую-нибудь константу, высосанную из, скажем, пальца. И сделайте с ней то же самое преобразование. В чем фокус-то ? Никаких лишних битов ниоткуда не возьмется, ибо просто неоткуда. Кроме того случая, когда младший бит уже на уровне порога переключения и _уже_ дрожит_.

Dikoy
Цитата(rx3apf @ Dec 5 2011, 21:57) *
Смотреть допуск на Vbg. Вот, в даташите 2006-го года на 48V-88V-168V - уже есть. Допуск 1.0...1.2V.

Допуск допуском, это систематика, а уход? ТК? Шум?

--Бред какой-то. Ну, возьмите вместо отсчета с ADC какую-нибудь константу, высосанную из, скажем, пальца. И сделайте с ней то же самое преобразование. В чем фокус-то ? Никаких лишних битов ниоткуда не возьмется, ибо просто неоткуда. Кроме того случая, когда младший бит уже на уровне порога переключения и _уже_ дрожит_.
Вы пытаетесь в известный вам метод всунуть подмешивание после АЦП. А я вовсе не о том говорю. Читайте внимательней и осмысляйте.

--Вы о чем-то своем, явно...
Ну почитайте про интерполяцию например... Методы повышения разрешения изображений как в камере, так и уже в ПК.

--А в огороде - бузина. Дизеринг - это сам факт "подмешивания" дополнительного сигнала к измеряемому.
Но Таня то описала сигму дельту.

rx3apf
Цитата(Dikoy @ Dec 5 2011, 23:17) *
Допуск допуском, это систематика, а уход? ТК? Шум?

А опыт ? Делайте, экспериментируйте...
Цитата
А я вовсе не о том говорю. Читайте внимательней и осмысляйте.

А что тут осмыслять ? Есть отсчет с ADC. Он фиксированный, до тех пор пока не вблизи границ переключения LSB. И хоть что делайте с этим отсчетом - результат останется прежним.
Цитата
Ну почитайте про интерполяцию например... Методы повышения разрешения изображений как в камере, так и уже в ПК.

Из двух смежных отсчетов можно сделать промежуточный. Но в данном случае это ничем не поможет. Было 100, сделать можно хоть 100000 отсчетов. Но они все будут одинаковые...
Dikoy
Попробую объяснить на пальцах.
Допустим имеем 8 бит АЦП, которое дало результат 148 = 10010100. Сдвигаем результат на 7 бит влево: 0b100101000000000 Условно, в реале величину сдвига надо считать.
Теперь прибавляем сюда случайно выхваченное значение 8-и битного счётчика, до кучи преобразованное к знаковому виду. Вот тебе и шум - он может быть меньше веса младшего значащего бита и не привести к его переключению (или нескольких младших бит)), а может быть больше, и бит перескочит. Всё как в жизни.
Тут возможны варианты. Можно реализовать программный компаратор и щёлкать младший бит согласно условию больше/меньше счётчика. То, о чём писала Татьяна, по сути. Собственно, эти методы были описаны ещё во времена СССР, но тогда подмешивание реального электрического шума было простейшим решением для полуаналоговых ЭВМ. Зачем это делать сейчас?..
При дальнейшем накоплении (самплировании реального сигнала) прибавленный шум также суммируется (или вычитается).
Результатом будет усреднение выборок со сдвигом до исходных 8 бит, или той разрядности, что нам нужна.
То есть ключом является сдвиг результата АЦП влево. Если вы не делаете сдвиг а просто суммируете шум к результату, вот тут уже будет бред.

Теперь хотелось бы посмотреть на вашу реализацию и найти общие точки sm.gif



Цитата(rx3apf @ Dec 5 2011, 23:33) *
А опыт ? Делайте, экспериментируйте...

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

Еще раз - показания ADC стоят как влитые, пока входной уровень не изменится на 1LSB. Вы можете прибавлять туда шум, возраст Вселенной в секундах, умножать на свой рост в миллиметрах и заниматься еще кучей бесполезных арифметических действий. Но различить изменение входного уровня меньше 1LSB - не сможете. Неужели это не очевидно ? Нет ? Ладно, я запасаюсь попкорном и буду просто наблюдать этот цирк...
xemul
Цитата(Dikoy @ Dec 5 2011, 23:48) *
Всё как в жизни...

Бессмысленные шаманские пляски? Здесь сложно получить что-то отличающееся от лишнего шума и погрешности от возможной неслучайности. Элементарный ФНЧ (при правильном округлении) даст не-худший результат. Но ровнее != точнее.

Дизеринг и дельта-сигма - однояйцевые близнецы, только причёски слегка разные.
Dikoy
Цитата(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) *
Бессмысленные шаманские пляски?

А то. А апогей шаманства - фильтр Калмана.
rx3apf
Цитата(Dikoy @ Dec 6 2011, 00:29) *
У меня есть конкретная задача - получить 10 бит на 10-и битном АЦП, без дрожания. Какое нафиг получение уровня меньше 1LSB? Вы себе придумали повышения разрядности до 12 бит и прёте к этой эмпирической цели. А задача то намного проще.

И Вам с самого начала сказали - никаких сложностей в этом нет. _Вообще_ нет. Если, конечно, учтете сказанное. Но +/- младший разряд - будет всегда, как у любого цифрового измерительного прибора. Не нравится - увеличивайте разрядность. Механизм увеличения разрядности был приведен всего лишь как пример пользы "дрожания" младшего бита. А вот Ваше теоретизирование по поводу тождественности аппаратного и программного добавления шума - это лично Ваши измышления, к реальности отношения не имеющие.

Цитата
Чувствительность АЦП УЖЕ достаточна. Шум ВНУТРИ АЦП, внешними пилами вы его не выпилите.

Шум _внутри_ АЦП много меньше 1LSB. Как бы не на порядок.


Dikoy
Знать значение младШИХ битОВ или младШЕГО битА - разные вещи. Последнее можно определить тупо усреднением, что является формой вероятностной дисперсии. Ви таки удивитесь, но ваша внешняя городушка работает по аналогичному принципу.
Что до "моих теоретизирований", то без коментариев. Это даже в Кнуте есть. А уж про Калмана или модовую декомпозицию вообще молчу. Другой вопрос, что Вы этого не знаете.
Хотя, для повышения разрядности такой метод действительно не годится. Но о повышении никто, кроме Вас, и не говорил.

Цитата(rx3apf @ Dec 5 2011, 23:37) *
И Вам с самого начала сказали - никаких сложностей в этом нет. _Вообще_ нет.

Я категорически не хочу вводить внешние элементы. Во-1 дефицит лап, во-2 дефицит площади, в-3 ограничение себистоимости.
Потому все решения с внешней городушкой не годятся.
rx3apf
Цитата(Dikoy @ Dec 6 2011, 01:05) *
Я категорически не хочу вводить внешние элементы. Во-1 дефицит лап, во-2 дефицит площади, в-3 ограничение себистоимости.
Потому все решения с внешней городушкой не годятся.

Тогда убейте себя апстену. Начальной точности и температурной стабильности (между прочим, график Vbg vs Vcc, причем для разных температур, в даташите тоже есть) встроенного опорника недостаточно. Что же касается "дефицита лап" - намекну, что у ATmega48 вход Aref - отдельная нога, ни с чем больше не разделяемая. И про ошибку смещения ADC Вам тоже было сказано (это к вопросу о 1024 отсчетах).
777777
Цитата(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) *
Не нравится - увеличивайте разрядность.

А при большей разрядности младший разряд не будет прыгать? sm.gif
rx3apf
Цитата(777777 @ Dec 6 2011, 11:26) *
Да почему всегда?! Это будет только если измеряемый сигнал будет находиться вблизи границы переключения.

Да. Но неопределенность-то сохраняется.
Цитата
А при большей разрядности младший разряд не будет прыгать? sm.gif

Естественно будет. Но "вес" прыжка будет меньше.
Tanya
Цитата(rx3apf @ Dec 6 2011, 12:24) *
Да. Но неопределенность-то сохраняется.

Я бы даже сказала - квантовая неопределенность...
Не удержались...
Ни Вы, ни я.
ViKo
Dikoy, вы неправы!
Про рандомизацию чуть-чуть написано в книжке Р. Лайонс "Цифровая обработка сигналов".
Кстати, дизеринг (он же рандомизация) и сигма-дельта - это разные вещи.
Dikoy
Цитата(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 сорт sm.gif
Намекну, что ARef визически соединена с опорой. Потому использование внутреннего ИОН подразумевает отсутствие наружнего. Хотя бы перемычкой.
Смещение, нелинейность и ошибка усиления удаляются калибровкой. Это систематические погрешности.
А вот шум - нет.
Сейчас обкатал в матлабе несколько вариантов из апнот силабса и атмела, лучше всего работает БИХ и КИХ.
Скользящее среднее не удаляет шум а только маскирует. Но тоже пригодно.

Цитата(ViKo @ Dec 6 2011, 21:36) *
Dikoy, вы неправы!
Про рандомизацию чуть-чуть написано в книжке Р. Лайонс "Цифровая обработка сигналов".
Кстати, дизеринг (он же рандомизация) и сигма-дельта - это разные вещи.

У кнута тоже есть. Не так явно и пальцеобразно, но есть. Про ковбоя и пулю.
Подмешивание шума применял ещё Фон Браун в своих Р2, добиваясь более-менее сносной работы гирокомпаса. Интеграторы там были аналоговые и шум генерировался тоже аналогово. С тех пор народ по привычке (или под действием старой литературы) тоже многое старается делать в аналоге. А зря.
Я не говорю про определение дробного порога сдвигом (сигма-дельта, или то о чём писала Татьяна) - тут да, только суммирование сигнала в аналоговом тракте. Но когда АЦП уже имеет достаточную чувствительность, всё это не нужно. Взять хотя бы современные 24 разрядные АЦП с ENOB бит 17. Разрешение есть, точности нет. Однако простой оверсемплинг с БИХ на выходе позволяет вытянуть аналоговый сигнал на 18-20 реальных бит. Как простейший пример.
Говоря про калмана, то по каналу наблюдения во многих реализациях вводится белый шум. Те же гироблоки работают на столе значительно хуже, чем в полёте, где ловят лишние вибрации.
Михась
Цитата(Dikoy @ Dec 7 2011, 01:00) *
У кнута тоже есть. Не так явно и пальцеобразно, но есть. Про ковбоя и пулю.
Подмешивание шума применял ещё Фон Браун в своих Р2, добиваясь более-менее сносной работы гирокомпаса. Интеграторы там были аналоговые и шум генерировался тоже аналогово. С тех пор народ по привычке (или под действием старой литературы) тоже многое старается делать в аналоге. А зря.


Классно. biggrin.gif Только какое отношение это имеет к нашей реальности? Наприме знаете, зачем ставят такие маленькие катушечки на гироскопы и подают маленький синус? А для "оживления" подшипников гироскопа. А как бы вы оживили гироскоп программно. Не, не могу серьезно rolleyes.gif И ведь правильно совершенно говорит:

Цитата
Те же гироблоки работают на столе значительно хуже, чем в полёте, где ловят лишние вибрации.


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

Конечно, именно так вы можете сделать. Если оверсемплинг будет очень большой, если будете усреднять очень много выборок, можете получить и все 24 разряда, и даже больше. Именно благодаря тому, что в сигнале всегда есть шум. Достаточно того, что есть. Если же вдруг недостаточно (например, АЦП 4-битовый), то тогда необходима рандомизация. До АЦП.
usav
Итак выводы (на основе опыта)!
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) Добавлять шум программно бессмысленно - кроме своего шума он ничего в измерения не добавит!
Dikoy
Цитата(Михась @ Dec 7 2011, 05:56) *
Классно. biggrin.gif Только какое отношение это имеет к нашей реальности? Наприме знаете, зачем ставят такие маленькие катушечки на гироскопы и подают маленький синус? А для "оживления" подшипников гироскопа. А как бы вы оживили гироскоп программно. Не, не могу серьезно rolleyes.gif И ведь правильно совершенно говорит:
А потом скатывается на программизм. А тут мемс систему "оживляют" реальные, а не программные вибрации

У мемсов подшипники?
Вы случайно с магнитометрами их не попутали? sm.gif Им катушечки как раз лепят. Но не затем. wink.gif И не на все wink.gif
Во-1 МЕМСы, это ДУСы, а не гироскопы. И скажу по секрету, сами собой почти не шумят. Ошибку позиционирования даёт ошибка интегрирования или квантования. Накопительная. Вторая по счёту ошибка - от температуры.
В моём комплексе используются в том числе и цифровые шумы: http://www.dikoy44.narod.ru/projects/UAV_berkuchi.htm И ведь летает и работает wink.gif

Цитата(ViKo @ Dec 7 2011, 12:50) *
Конечно, именно так вы можете сделать. Если оверсемплинг будет очень большой, если будете усреднять очень много выборок, можете получить и все 24 разряда, и даже больше. Именно благодаря тому, что в сигнале всегда есть шум. Достаточно того, что есть. Если же вдруг недостаточно (например, АЦП 4-битовый), то тогда необходима рандомизация. До АЦП.

Вот по этому я и не мог понять 2 страницы, для чего мне в принудительно форме пытаются насоветовать всовывание шумов на вход АЦП wink.gif

Цитата(usav @ Dec 8 2011, 23:28) *
Итак выводы (на основе опыта)!
1) AVR_ADC10 работает весьма стабильно и, если не делать явных глупостей, держит младшую
единицу даже при работе без усреднений.
2) Температурный коэффициент опорника (ATMEL умалчивает, разве что кто-то делал запрос - сообщите!),
видимо близок к 10 битам при уходе температуры на 20-30 градусов - тыкание паяльником показывает
даже удивительную стабильность!
3) А вот заводская точность опорника как по DS = +/-10%, так и в жизни! Калибровать нужно каждый прибор!
За 10 центов (TL431XX, в т.ч. sot23) можно получить 1% или даже 0,5%(?).
10) Добавлять шум программно бессмысленно - кроме своего шума он ничего в измерения не добавит!

1-3: спасибо за опыт! В общем то претензий к АЦП АВР тоже небыло, но я никогда его точностью особо и не заморачивался.
Я тоже подумал о ТЛ431 кстати sm.gif Как раз по точности к 10 битам подходит. Просто REF192 у меня лежат 3 штуки в выцветшем чиподиповском пакетике образца 2006 года... Разведу на плате обе. Первые партии выпущу с рефом, для затравки, а потом тл буду ставить.
10. Нифига. Для ФСС или усреднения конечно не добавит. Но тому же калману впаять шум по каналу наблюдения очень полезно. Можете сами поиграться в матлабе. И таких фильтров много. В данной ветке возникло недопонимание. Я думал мне советуют как-раз подобный фильтр.


Кстати, чтобы заставить 431 выдавать свои 2.495В используется ведь эта схема?
Microwatt
Цитата(Dikoy @ Dec 9 2011, 00:49) *
Кстати, чтобы заставить 431 выдавать свои 2.495В используется ведь эта схема?

УгУ!
Михась
Цитата
У мемсов подшипники?
Вы случайно с магнитометрами их не попутали? Им катушечки как раз лепят. Но не затем. И не на все


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

Там ситуация, что пока машина едет, шум есть. Машина стоит и начинает работать автоматическая система компенсации прецессии и тут трение подшипников становится серьезным фактором. И тут подмешивание шума решает вопрос трения.

Посмотрел сайт, круто! Удачи.
Dikoy
Ну, прецессию обычно компенсируют диагональной связью между двумя дисками.
ArtemKAD
Цитата
На какой странице график? http://www.atmel.com/dyn/resources/prod_do...nts/doc2545.pdf Фоксит его не находит.

На 335-й.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.