|
АЦП в ATMega8: 8 бит или 10 бит?, Загадка в АЦП ATMega8 (ADC5) |
|
|
|
Apr 27 2007, 01:39
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
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 + Текущее значение - среднее. Цитата(ReAl @ Apr 26 2007, 22:17)  Но это, IMHO, не скользящее среднее. ... А этот "экспоненциальный" фильтр имеет поведение как у RC-цепочки. Согласен
|
|
|
|
|
Apr 27 2007, 05:30
|

Mute Beholder
  
Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754

|
Цитата(defunct @ Apr 26 2007, 16:07)  Пример рабочий. Вы дальше повызывайте. Хотите чтоб быстрее получался рез-тат усредняйте по 8-ми или по 4-м точкам. Почитайте какую-нить книжку по усреднению прежде чем выступать. Константа эта для устранения абсолютной погрешности в 0.5LSB при накоплении суммы. У вас видать памяти в МК всегда много.. Тогда называйте вещи своими именами сразу. А то человек спросил про скользящее среднее, а вы ему совсем другое под этим названием подсовываете. Метод скользящего среднего - это то,что описал IgorKossak и Lepeksiy. Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся. PS Да, памяти у меня в МК всегда много - не жалуюсь.
--------------------
Common sense is not so common.
|
|
|
|
|
Apr 27 2007, 18:49
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Snaky @ Apr 27 2007, 04:30)  Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся. Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-)
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 27 2007, 22:05
|

Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374

|
Спасибо всем! Благодаря вашим советам мне удалось запустить АЦП. Только врёт он немножко. Эталон --- АЦП 96 мВ --- 89 мВ 207 мВ --- 201 мВ 500 мВ --- 496 мВ 1 В --- 1 В 1.49 мВ --- 1.492 мВ 2 В --- 2.011 В 2.52 В --- 2.532 В Как это исправить, подскажите!
Сообщение отредактировал Anjey_N - Apr 27 2007, 22:06
|
|
|
|
|
Apr 28 2007, 02:31
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ReAl @ Apr 27 2007, 19:49)  Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-) Разница между скользящим средним и "экспоненциальным" заключается в том что "экспоненциальный" дает сдвиг фазы сигнала до 1/2 частоты сигнала То есть если сигнал "постоянный" то разницы нет никакой, а вот если изменяющийся, то тогда в каждом конкретном случае нужно рассчитывать в какой момент времени данные уже устаканились и устраивает ли нас такой сдвиг фазы
|
|
|
|
|
Apr 28 2007, 05:59
|

Mute Beholder
  
Группа: Свой
Сообщений: 260
Регистрация: 4-04-07
Из: Третья планета от Солнца
Пользователь №: 26 754

|
Цитата(ReAl @ Apr 27 2007, 21:49)  Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-) Оба фильтра по сути цифровая реализация ФНЧ. Просто фильтр скользящего среднего с массивом - это КИХ фильтр, экспоненциальный - БИХ. В моих задачах нужна конечная по времени реакция на отклик - я иду на затраты памяти. Олссон/Пиани интерпретируют экспоненциальный фильтр как авторегрессионный фильтр скользящего среднего первого порядка (признаю, тут можно согласиться с defunct). Подробнее - см. аттач (имхо лучше не объяснишь). PS Что значит "с более нормальным откликом" - я не понял
Прикрепленные файлы
filtr.zip ( 495.18 килобайт )
Кол-во скачиваний: 85
--------------------
Common sense is not so common.
|
|
|
|
|
Apr 28 2007, 08:04
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(Lepeksiy @ Apr 26 2007, 18:21)  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)
|
|
|
|
|
Apr 28 2007, 19:12
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 20-10-06
Пользователь №: 21 500

|
Вот такой вот рабочий код приведен в документе slaa037.pdf - апликэшн репорт от тексаса Код ***************************************************************************** * Anti–bias results * answer = input + (0.875 * lasty) – lastx; * lasty = answer; * lastx = input; *****************************************************************************
|
|
|
|
|
Apr 29 2007, 09:13
|

Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374

|
Цитата(Сергей Борщ @ Apr 28 2007, 00:50)  Если эталон - китайский мультиметр, то сменить мультиметр. Если же эталон заслуживает доверия, то давайте думать. Это не похоже на погрешность источника опорного напряжения, ибо отклонения имеют разный знак на концах шкалы. Какое у вас выходное сопротивление источника сигнала? И что вы используете в качестве опорного напряжения? Если внешняя опора, то какое выходное сопротивление ее источника? 1) Мультимер UNI-T M890F, купленный 4 года назад за 20 баксов. На него я ещё не разу не жаловался! 2) В качестве источника входного сигнала я ис пользую такую сему 3) ИОН внутренний с конденсатором на ножке AREF, равен 2.66 В Может я чего намутил в программе,посмотрите, пожалуйста, код
Сообщение отредактировал Anjey_N - Apr 29 2007, 09:18
Эскизы прикрепленных изображений
|
|
|
|
|
Apr 29 2007, 18:29
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Anjey_N @ Apr 29 2007, 09:13)  На него я ещё не разу не жаловался! Это не значит что он показывает правильно. Цитата(Anjey_N @ Apr 29 2007, 09:13)  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К
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|