ATmega + 12bit ADC

Обсуждаем контроллеры компании Atmel.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение Alexeyslav »

просто накапливать и усреднять шум нужно окном не короче 4^N
Чтобы что? откуда цифра 4 и что такое N?
Шум, не зависимо какой он носит характер, амплитудой к примеру 2милли вольта, а при режиме ограничения тока он может достигать 100 милли вольт, нельзя идентифицировать как полезный сигнал.
Хоть заусредняйтесь, всему есть предел.
Это всё мат.статистика. Шум имеет такую характеристику как матожидание, если он случайный с нормальным распределением - его матожидание равно нулю, а значит что в результате усреднения мы получим исходную величину полезного сигнала. В идеале - при бесконечном усреднении, в реале нам надо ограничиваться каким-то разумным пределом, т.к. у нас нет времени ждать результата. из двух выборок, понятное дело ничего хорошего получить не выйдет, из миллиона выборок - пожалуй да. Но у нас же лааапки... ограниченный контроллер, а значит есть не так много выборок. 1-2К Но ещё у нас есть ограничение по скорости выборок и время на "результат", если ограничить задержкой в 1 секунду и 1000выб/сек у нас просто нет шансов на другой размер окна...
Частота среза фильтра должна быть половине частоты работы ацп. Если вы будете еще резать, вы будете урезать динамический диапазон АЦП.
Никому она ничего не должна. Просто на АЦП НЕ ДОЛЖНО попасть частоты выше чем половина частоты семплирования, т.к. это приводит к стробоскопическому эффекту и восстановить исходный сигнал по отсчетам невозможно - возникает фантомный сигнал. Что вы делаете фильтром на 500Гц? он только после 500Гц начинает резать сигнал... причем на 1кГц он срежет только 20дБ, т.е. не такой уж сильный сигнал частотой в 1кГц легко проникает на вход АЦП и делает свои дела. Чтобы фильтр с частотой среза реально работал он должен быть очень высокого порядка, для ваших 10 бит навскидку это должен быть фильтр 400Гц 3-4 порядка. Сделаете на 100Гц может можно будет условно обойтись и фильтром 1-го порядка - т.е. обычной RC-цепочкой.
Реклама
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Alexeyslav писал(а):Чтобы что? откуда цифра 4 и что такое N?
читай апноут:
Для каждого дополнительного бита разрешения требуется увеличение частоты дискретизации в 4 раза.
Alexeyslav писал(а):в реале нам надо ограничиваться каким-то разумным пределом, т.к. у нас нет времени ждать результата.
этот предел не какой-то, а кратен 4^N, где N это количество дополнительных бит разрешения

Добавлено after 2 hours 8 minutes 46 seconds:
вот формула расчета, где n - дополнительные биты

Изображение

Добавлено after 45 minutes 24 seconds:
можно еще поусреднять с коэффициентом k

Изображение

Добавлено after 1 hour 48 minutes 44 seconds:
Alexeyslav писал(а):если ограничить задержкой в 1 секунду и 1000выб/сек у нас просто нет шансов на другой размер окна...
а кто это придумал?
и кто мешает сделать сумму из 1000 + 24 семплов,
или накапливать сумму сумм, например, сумма 2^n сумм 2^n семплов = сумма 4^n семплов
не вижу проблемы
Вложения
CodeCogsEqn (2).gif
(1.95 КБ) 467 скачиваний
CodeCogsEqn (1).gif
(844 байт) 498 скачиваний
ohmycode!
primuss3.com
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение Alexeyslav »

Что-то у вас какая-то вольная интерпретация формул. Прям как руководство к действию, тогда как они описывают лишь граничные значения. Эта формула даёт минимальное количество, которое необходимо обеспечить. Больше - лучше.
И потом, вы пытаетесь переносить ограниченность архитектуры на теорию. Не надо так. 1000 семплов или 1024 - это лишь удобство чтобы не заморачиваться с вычислениями на вещественных числах на крайне ограниченном железе. На более продвинутом железе это будет выглядеть нелепо, там где процедура подсчета среднего из 1000 семплов будет занимать по времени меньше чем измерение 2-х семплов, не говоря уже о дополнительных 24.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

правильно, для +5 бит "минимальное граничное" - 1024 семпла
и подсчет среднего из 1000 семплов здесь нафиг не нужен.
просто загоняешь в любой сглаживающий алгоритм результаты "минимального граничного":

Изображение

Добавлено after 42 minutes 8 seconds:
Alexeyslav писал(а):На более продвинутом железе это будет выглядеть нелепо, там где процедура подсчета среднего из 1000 семплов будет занимать по времени меньше чем измерение 2-х семплов, не говоря уже о дополнительных 24.
скорость вычислений здесь до лампочки, все упирается в скорость АЦП
Вложения
CodeCogsEqn (3).gif
(1.13 КБ) 409 скачиваний
ohmycode!
primuss3.com
Реклама
Эиком - электронные компоненты и радиодетали
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n писал(а):все упирается в скорость АЦП
Атмега с успехом работает от 27МГц, а не которые экземпляры и выше,
от 27МГц максимальная скорость АЦП 843кГц, а это 1,18мкс, в stm32f030 максимум 1мкс, внешний АЦП не рассматриваем.
Повышать скорость АЦП можно до определенного момента, дальше смысла нет, лезет большая погрешность.
slav0n писал(а):скорость вычислений здесь до лампочки
логично, а вот количество выборок - да.
К примеру:
на 1024 выборок на 2 канала при скорости АЦП 18мкс требуется 36мс,
на 4096 - 147мс
а на 16384 - уже 0,6 секунды.
Все зависит от того, что хотим получить на выходе.
Реклама
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

это все ясно давно
ohmycode!
primuss3.com
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

Вот к примеру:
1 видео
Спойлербез СС, режим АЦП 10 бит, скорость одного преобразования 18 мкс, количество отсчетов 1024
Верхняя строка сумма после сдвига на 5 бит (теперь верно, десять раз проверил), справа результат, слева DAC
2 видео
Спойлербез СС, режим АЦП 10 бит, скорость одного преобразования 18 мкс, количество отсчетов 4096
Верхняя строка сумма после сдвига на 6 бит
3 видео
Спойлербез СС, режим АЦП 10 бит, скорость одного преобразования 18 мкс, количество отсчетов 16384
Верхняя строка сумма после сдвига на 7 бит
А дальше, мы упираемся в количество отсчетов и скорость АЦП и хороший фильтр, а не какая-то там rc цепь.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

Alexeyslav писал(а):1024 - это лишь удобство чтобы не заморачиваться с вычислениями на вещественных числах на крайне ограниченном железе.
а зачем заморачиваться, ведь это же красиво:

4 = 1 бит(дробная часть) + 1 бит(шум, мусор)
16 = 2 бита(дробная часть) + 2 бита(шум, мусор)
64 = 3 бита(дробная часть) + 3 бита(шум, мусор)
256 = 4 бита(дробная часть) + 4 бита(шум, мусор)
1024 = 5 бит(дробная часть) + 5 бит(шум, мусор)

Добавлено after 2 hours 10 minutes 12 seconds:
Dimon456 писал(а): 1 видео
2 видео
3 видео
Dimon456, поставь на сумму хотя бы элементарный сглаживающий фильтр, чтоб не так сильно мельтешило.
типа такого:

Код: Выделить всё

static int sum_out_to_LCD;
sum_out_to_LCD += ((int)sum_adc - sum_out_to_LCD) / 2; 
ohmycode!
primuss3.com
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n писал(а):поставь на сумму хотя бы элементарный сглаживающий фильтр,
что-то не вижу что бы этот фильтр работал
СпойлерИзображение
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

хм... а я вижу.
постав делитель 3 - сгладит сильнее
ohmycode!
primuss3.com
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n писал(а):постав делитель 3 - сгладит сильнее
еще чего придумал, и начнем резать динамический диапазон ацп, в аккурат младшие биты подрезать, которые мы так старались оверсемплингом получить.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

ну, тогда поставь фильтр на фильтр
или упрощенного калмана
ohmycode!
primuss3.com
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

Я то же об этом думаю - активный фильтр третьего порядка.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

а шум? без которого оно работать не будет
ohmycode!
primuss3.com
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n, ты думаешь, что из-за шума оно работает?
TL431 какова ее стабильность? 1%, сколько это в милли вольтах? На чем основан ключевой элемент в TL431? На компараторе?
Вот он, твой шум. На этот 1% прыгает опорное. К сожалению мой осциллограф видит минимум 20 милли вольт, ниже нет.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

если 1% это типа 10 МЗР 10-ти бит. вроде нормально.
ладно, я формулу нарисовал, а железки твои, делай с ними что хочешь
ohmycode!
primuss3.com
Аватара пользователя
Starichok51
Модератор
Сообщения: 19054
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: ATmega + 12bit ADC

Сообщение Starichok51 »

Dimon456 писал(а):TL431 какова ее стабильность? 1%, сколько это в милли вольтах?
если ты про стабильность опоры, сделанной на TL431, то выше я писал:[uquote="Starichok51",url="/forum/viewtopic.php?p=4077356#p4077356"]для полной проверки подключил вход напряжения к опорному напряжению.
полная сумма стоит мертво, с тремя нулями (1000 выборок), то есть, на опоре нет никакого шума и никакого дрейфа.[/uquote]
а опора у меня сделана на TL431.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n,
slav0n писал(а):а зачем заморачиваться, ведь это же красиво:
Всё не так, как не старайся.

Входные данные АЦП 12бит, максимум 30вольт, хочу с точностью 1милли вольт.
1 видео, средне из 512 выборок на каждый канал, а их 2
Формула 33000*1/4096=7,3 милли вольта
Спойлерt АЦП 18мкс, общее время 18,5милли секунд
Берем оверсемплинг:
slav0n писал(а):1024 = 5 бит(дробная часть) + 5 бит(шум, мусор)
Считаем 1024*4096=4194304 >> 5 = 131072
Считаем по формуле 33000 * 1 /(4096UL << 5)) = 33000 * 1 / 131072 = 0,25 милли вольта
2 видео
Спойлер1024 выборки, t АЦП 18мкс, общее время 36,8милли секунд
Сдвиг на 5 бит
А мне надо 1 милли вольт, 33000 * 1 /(4096UL << 3)) = 33000 * 1 / 32768 = 1,007 милли вольта
3 видео
Спойлер1024 выборки, t АЦП 18мкс, общее время 36,8милли секунд
Сдвиг на 7 бит
Формула 33000 * 1 /(4096UL << 3))
Для сравнения
4 видео
Спойлер4096 выборки, t АЦП 18мкс, общее время 147,5 милли секунд
Сдвиг на 9 бит
Формула 33000 * 1 /(4096UL << 3))
5 видео
Спойлер16384 выборки, t АЦП 6мкс, общее время 196,6 милли секунд
Сдвиг на 11 бит
Формула 33000 * 1 /(4096UL << 3))
6 видео
Спойлер32768 выборки, t АЦП 6мкс, общее время 393,2 милли секунд
Сдвиг на 12 бит
Формула (33000 * 1 /(4096UL << 3)))/2
И 7 видео, тест тока
Спойлер32768 выборки, t АЦП 6мкс, общее время 393,2 милли секунд
Сдвиг на 12 бит
Формула 33000 * 1 /(4096UL << 3))
Выходное напряжение 4,992Вольта, нагрузочное сопротивление 78,5 Ом
Последний раз редактировалось Dimon456 Сб авг 21, 2021 19:29:30, всего редактировалось 1 раз.
Аватара пользователя
slav0n
Опытный кот
Сообщения: 882
Зарегистрирован: Ср дек 01, 2010 00:38:15
Откуда: Харьков
Контактная информация:

Re: ATmega + 12bit ADC

Сообщение slav0n »

чтобы получить разрешение 1мВ тебе надо +3 бита
т.е 64 семпла, сдвиг на 3 и формула х*33000/32768. ВСЕ.
а дальше умножай-дели фильтруй как хочешь, но учти, что даже на "чистом" АЦП "средне из 512" у тебя дергается на 1 разряд,
а это значит, что сглаживать придется очень и очень
ohmycode!
primuss3.com
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: ATmega + 12bit ADC

Сообщение Dimon456 »

slav0n писал(а):что сглаживать придется очень и очень
Начни сглаживать и будешь резать младшие разряды, до сглаживаешься до того что смысл от оверсемплинга будет 0.

Смотри, 64 семпла
СпойлерПрименен твой фильтр, К изменяем

Код: Выделить всё

static int sum_out_to_LCD;
sum_out_to_LCD += ((int)sum_adc - sum_out_to_LCD) / K;

Очень медленный фильтр, а если К накрутить до 30, ну очень медленный фильтр.
Ответить

Вернуться в «AVR»