Перейти к содержанию
    

АЦП в ATMega8: 8 бит или 10 бит?

Snaky

 

Ради интереса попробуйте вот это (по 4м точкам):

 

int UpdateAverage( int CurrVal )
{
    static int Sum = 0;
    int tmp = (Sum + 2) >> 2;
    Sum += CurrVal - tmp;
    return tmp;
}

 

за 12 итераций будет вам 10. ;>

А алгоритм прост до ужаса, упрощенно:

 

среднее = Sum / кол-во выборок по который усредняем.

Sum = Sum + Текущее значение - среднее.

 

Но это, IMHO, не скользящее среднее.

...

А этот "экспоненциальный" фильтр имеет поведение как у RC-цепочки.

Согласен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пример рабочий. Вы дальше повызывайте.

Хотите чтоб быстрее получался рез-тат усредняйте по 8-ми или по 4-м точкам.

Почитайте какую-нить книжку по усреднению прежде чем выступать.

Константа эта для устранения абсолютной погрешности в 0.5LSB при накоплении суммы.

У вас видать памяти в МК всегда много..

Тогда называйте вещи своими именами сразу. А то человек спросил про скользящее среднее, а вы ему совсем другое под этим названием подсовываете. Метод скользящего среднего - это то,что описал IgorKossak и Lepeksiy. Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся.

 

PS Да, памяти у меня в МК всегда много - не жалуюсь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Свои имена не всегда упомнишь.

Я не подсовываю, а делюсь примером, мог бы ведь и не делиться. Он сам решит подходит ему пример или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся.
Да, реакция на выбросы у них отличается.

Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем! Благодаря вашим советам мне удалось запустить АЦП.

Только врёт он немножко.

 

Эталон --- АЦП

96 мВ --- 89 мВ

207 мВ --- 201 мВ

500 мВ --- 496 мВ

1 В --- 1 В

1.49 мВ --- 1.492 мВ

2 В --- 2.011 В

2.52 В --- 2.532 В

 

Как это исправить, подскажите! :help:

Изменено пользователем Anjey_N

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это исправить, подскажите! :help:
Если эталон - китайский мультиметр, то сменить мультиметр. Если же эталон заслуживает доверия, то давайте думать. Это не похоже на погрешность источника опорного напряжения, ибо отклонения имеют разный знак на концах шкалы. Какое у вас выходное сопротивление источника сигнала? И что вы используете в качестве опорного напряжения? Если внешняя опора, то какое выходное сопротивление ее источника?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, реакция на выбросы у них отличается.

Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-)

Разница между скользящим средним и "экспоненциальным" заключается в том что

"экспоненциальный" дает сдвиг фазы сигнала до 1/2 частоты сигнала

То есть если сигнал "постоянный" то разницы нет никакой, а вот если

изменяющийся, то тогда в каждом конкретном случае нужно рассчитывать

в какой момент времени данные уже устаканились и устраивает ли нас такой сдвиг фазы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, реакция на выбросы у них отличается.

Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-)

Оба фильтра по сути цифровая реализация ФНЧ. Просто фильтр скользящего среднего с массивом - это КИХ фильтр, экспоненциальный - БИХ. В моих задачах нужна конечная по времени реакция на отклик - я иду на затраты памяти.

Олссон/Пиани интерпретируют экспоненциальный фильтр как авторегрессионный фильтр скользящего среднего первого порядка (признаю, тут можно согласиться с defunct). Подробнее - см. аттач (имхо лучше не объяснишь).

 

PS Что значит "с более нормальным откликом" - я не понял :)

filtr.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

VladimirYU

А как это выражается формулами?

 

Все очень просто, привожу не код, а алгоритм:

 

Исходно имеем

 

Summator - переменная двойной длины,

Current - результат текущих измерений (данные с прибора, АЦП ...)

Previos - предыдущий фильтрованный результат

 

Далее

 

error = Current - Previos

Summator = Summator +error

Previos = Summator>>N

 

N определяет степень фильтрации ( количество результатов по которым идет усреднение).

Ньюансы кода, как понимаете, зависят от формы предсавления результатов (разрядность, тип и т.д.)

 

А математика за этим следующая

 

1/(TS+1) представить можно как интегратор 1/TS охваченный единичной отрицательной

обратной связью.

 

W(S) = Wпр(S)/(Wпр(S)*Wос(S) + 1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такой вот рабочий код приведен в документе

slaa037.pdf - апликэшн репорт от тексаса

 

*****************************************************************************
* Anti–bias results
* answer = input + (0.875 * lasty) – lastx;
* lasty = answer;
* lastx = input;
*****************************************************************************

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если эталон - китайский мультиметр, то сменить мультиметр. Если же эталон заслуживает доверия, то давайте думать. Это не похоже на погрешность источника опорного напряжения, ибо отклонения имеют разный знак на концах шкалы. Какое у вас выходное сопротивление источника сигнала? И что вы используете в качестве опорного напряжения? Если внешняя опора, то какое выходное сопротивление ее источника?

 

 

1) Мультимер UNI-T M890F, купленный 4 года назад за 20 баксов. На него я ещё не разу не жаловался!

2) В качестве источника входного сигнала я ис пользую такую сему

3) ИОН внутренний с конденсатором на ножке AREF, равен 2.66 В

 

 

Может я чего намутил в программе,посмотрите, пожалуйста, код

ADC_new.rar

post-24374-1177838275_thumb.jpg

Изменено пользователем Anjey_N

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На него я ещё не разу не жаловался!
Это не значит что он показывает правильно.

2) В качестве источника входного сигнала я ис пользую такую сему
Выходное сопротивление вашей цепи близко к предельному:
The ADC is optimized for analog signals with an output impedance of approximately 10k or less. If such a source is used, the sampling time will be negligible.
Попробуйте увеличить время выборки (sampling time) снизив тактовую частоту АЦП или возьмите потенциометр на 10К

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...