Страница 3 из 3

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 13:54:25
КРАМ
То есть желания обосновать математику повышения точности оверсемплингом так и не появилось?
:dont_know:

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 14:55:27
Pnjom-Penb
Вы все еще расчитываете на то, что ерничанье поможет скрыть ну ооочень белые нитки? Напрасно, мир не без умных людей, что бы вам ни казалось по этому поводу. Изображение

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 16:13:01
КРАМ
Тут важно отличать умных от дураков и правых от ошибающихся.
Для этого нужно ДУМАТЬ САМОМУ.
А не надеяться на силабс или микрочип.
ЗЫ. А с чего Вы решили, что я ерничаю? Как раз я с радостью приму Ваши доказательства. Потому что сам не представляю как это доказать.
ЗЗЫ. Более того, я с трудом представляю доказательство, которое опровергнет мой личный опыт. И опыт совсем не разовый. потому как обработка сигналов - мое основное занятие на работе.

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 16:35:00
E30M20B20
Блин, парни. Вот вы все такие умные, а из-за срача, который здесь развёлся, хрен потом увидишь суть. Как и обычно впрочем.

Давайте лучше я сформулирую проблему и её решение с позиции любителя ассемблера-самоучки, далёкого от теории, но близкого к практике (то бишь себя).

Иногда так бывает, что для выбранного диапазона измерения и цены деления немного не хватает разрядности АЦП. Немного - это один, максимум 2 бита. Например, есть 10-битный АЦП (любой современный младший PIC), а надо 11- или 12-битный.

Немного нарастить разрядность (без улучшения абсолютной точности) поможет метод оверсэмплинга. Суть заключается в том, что нужно взять несколько измеренных 10-битных значений (для удобства кол-во значений должно быть одной из степеней двойки), вычислить их 10-битное среднее арифметическое, и умножить его на 2 столько раз, сколько бит разрядности надо добавить. Например, берём 8 10-битных отсчётов (буфер не стековый, а кольцевой, т.е., при записи нового значения затирается самое старое из 8-ми существующих), складываем эти 8 10-битных чисел (получается 13-битная сумма), и делим не на 8, а на 4 или 2. При этом получается 11-и или 12-и битное число, которое мы и используем в дальнейшем как результат работы 11-и или 12-и битного АЦП.

Для нормальной работы данного метода нужно, чтобы во входном измеряемом напряжении присутствовал белый шум, в качестве которого может послужить цифровой шум самого процессора, или шум ОУ предварительного масштабирующего усилителя.

Кол-во отсчётов нужно брать чем больше, тем лучше. Ограничение здесь - объём ОЗУ и результирующая скорость измерения.

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

Подробнее о методе здесь: http://www.atmel.com/Images/doc8003.pdf

Так? Или что-то не так?

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 16:47:39
КРАМ
Все именно так, с тем лишь добавлением, что при необходимости цифровой фильтрации не требуется специально делать оверсемплинг для повышения разрядности. Достаточно провести нормировку текущей суммы в КИХ фильтре не длиной массива, а в 2^N меньшей величиной. то есть и фильтр останется и разрядность повысится.
Это, правда, потребует увеличения порядка фильтра, поскольку мы увеличиваем чувствительность тракта.

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пн фев 01, 2016 20:46:02
Pnjom-Penb
КРАМ писал(а):А с чего Вы решили, что я ерничаю?
С трех раз догадаетесь? И второе - не только я так решил. Это даже не шило в мешке.

Re: Программно увеличить разрядность АЦП до 11 бит

Добавлено: Пт фев 26, 2016 08:27:58
amd9800
E30M20B20 писал(а):А почему? 64 отсчёта мне в RAM не влезет, у 675-го PICа всего 64 байта RAM!
Ну тогда прощай кольцевой буфер.
Но можно просто суммировать все результаты в одну переменную, а в другую считать количество. Когда достигнешь нужного количества то делишь и опять начинаешь с начала.