реклама на сайте
подробности

 
 
> STM32F4: цифровой фильтр АЦП
k000858
сообщение Dec 26 2014, 11:28
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Есть девайс, мерит напряжение. К сожалению, плата разведена не очень хорошо, есть шум на ацп: иногда вместо 0 показывает 0.1-0.3В (вход мерит до 72В благодаря резистивному делителю).
Планирую добавить усреднение: замерять с помощью АЦП 100 (например 100) раз канал, затем вычислять среднее арифметическое из полученных значений. Так делается или есть способ похитрее программно сгладить шумы?

В МК есть FPU и инструкции DSP. Быть может есть готовые библиотеки в CMSIS для подобных расчетов?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kovigor
сообщение Dec 26 2014, 12:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(k000858 @ Dec 26 2014, 15:28) *
Так делается или есть способ похитрее программно сгладить шумы?

Делается. Если со схемотехникой и разводкой все в порядке, то этот метод вполне применим.
Рискну спросить. А антиалиасный фильтр перед АЦП имеется ? Хотя бы простейшая RC - цепочка ? И насколько сложно будет исправить некорректно разведенную плату ?
Go to the top of the page
 
+Quote Post
k000858
сообщение Dec 29 2014, 04:12
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(kovigor @ Dec 26 2014, 16:30) *
Делается. Если со схемотехникой и разводкой все в порядке, то этот метод вполне применим.
Рискну спросить. А антиалиасный фильтр перед АЦП имеется ? Хотя бы простейшая RC - цепочка ? И насколько сложно будет исправить некорректно разведенную плату ?

На входе АЦП простой резистивный делитель + кондер на GND
На входе Vref рекомендуемая схема от ST

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

Цитата(scifi @ Dec 26 2014, 17:02) *
Вот простейший фильтр:
CODE
#define SHIFT 4 // filter time constant is T*2^SHIFT

static int acc;

// seed filter with initial value
void filter_init(int a)
{
acc = a << SHIFT;
}

// call this periodically and supply filter with input data
void filter_advance(int a)
{
acc += a - (acc >> SHIFT);
}

// filter output
int filter_result(void)
{
return acc >> SHIFT;
}

спасибо за пример. еще бы допереть как его использовать.
можно в 2х словах?
Go to the top of the page
 
+Quote Post
adnega
сообщение Dec 29 2014, 08:26
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(k000858 @ Dec 29 2014, 08:12) *
На входе АЦП простой резистивный делитель + кондер на GND

Общеизвестно, что на сопротивление такого делителя накладываются ограничения.
У вас R не больше предельного значения? В противном случае АПЦ превращается в показометр.
Go to the top of the page
 
+Quote Post
k000858
сообщение Dec 29 2014, 09:21
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(adnega @ Dec 29 2014, 11:26) *
Общеизвестно, что на сопротивление такого делителя накладываются ограничения.
У вас R не больше предельного значения? В противном случае АПЦ превращается в показометр.


плата разведена довольно неплохо, а вот схема питания устройства ( ... -> 5В -> 3.3В) так себе, соответственно Vref получается довольно шумным не смотря на фильтр.

на самом деле железной частью устройства занимаюсь не я. я больше по программной части.

Применил вышеописанный фильтр. Без подключенного измеряемого напряжения (на входе АЦП 0В):
до применения показания были 0 - 0.3В
после применения (результат берется из 100 измерений) 0.07-0.12В т.е. 0В никогда не бывает.

В общем делаю вывод, что частота помехи слишком высокая и в измерения слишком часто попадают броски. Будь частота помехи пониже, от фильтра было бы больше пользы.

Быть может у кого то еще появятся мысли о том, как мне победить помеху программным способом...

Цитата(Golikov A. @ Dec 29 2014, 09:58) *
идея в том что вы вызываете void filter_init(int a)
с первым полученным от АЦП значением или 0

а далее каждое новое значение пихаете в void filter_advance(int a), и когда вам надо
отфильтрованный результат, берете его в int filter_result(void)


это обычная экспонента

спасибо.
а чем такой способ отличается от медианного фильтра (в 2х словах, если не сложно) ?
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 29 2014, 09:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(k000858 @ Dec 29 2014, 12:21) *
Применил вышеописанный фильтр. Без подключенного измеряемого напряжения (на входе АЦП 0В):
до применения показания были 0 - 0.3В
после применения (результат берется из 100 измерений) 0.07-0.12В т.е. 0В никогда не бывает.

Можно предположить, что помеха настолько велика, что среднеквадратичное отклонение имеет порядок 0.1В, что и даёт такое среднее значение около 0 (потому что отрицательные значения на входе АЦП заменяются нулём, а положительные остаются). Это предположение нужно подтвердить. Оцифруйте 100...1000 отсчётов при ненулевом входе и посчитайте статистические показатели: среднее, мин., макс., среднеквадратичное отклонение.
Если предположение подтвердится, то можно приподнять сигнал на входе АЦП ещё одним резистором (к Vref, например), чтобы сигнал на входе АЦП никогда не опускался ниже 0 даже в присутствии шумов. Ну а потом эту поправку от резистора учесть в расчётах, естественно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32F4: цифровой фильтр АЦП   Dec 26 2014, 11:28
|- - adnega   Цитата(k000858 @ Dec 29 2014, 13:21) В об...   Dec 29 2014, 09:33
- - scifi   Вот простейший фильтр: CODE#define SHIFT 4 // filt...   Dec 26 2014, 13:02
- - AlexandrY   Цитата(k000858 @ Dec 26 2014, 13:28) Так ...   Dec 26 2014, 13:13
|- - k000858   Цитата(AlexandrY @ Dec 26 2014, 16:13) По...   Dec 29 2014, 06:45
- - Golikov A.   экспонента для плавных процессов тоже хорошо броск...   Dec 26 2014, 15:53
- - Aner   Если шум на ацп: иногда вместо 0 показывает 0.1-0....   Dec 26 2014, 19:56
- - Golikov A.   Цитатаспасибо за пример. еще бы допереть как его и...   Dec 29 2014, 06:58
|- - scifi   Цитата(Golikov A. @ Dec 29 2014, 09:58) и...   Dec 29 2014, 07:18
- - scifi   Цитата(k000858 @ Dec 29 2014, 07:12) На в...   Dec 29 2014, 08:37
- - Golikov A.   Цитатаа чем такой способ отличается от медианного ...   Dec 29 2014, 12:07
|- - ViKo   Цитата(Golikov A. @ Dec 29 2014, 15:07) м...   Dec 29 2014, 12:32
- - adnega   ЦитатаСейчас задача - улучших характеристики АЦП у...   Dec 29 2014, 12:48
|- - scifi   Цитата(adnega @ Dec 29 2014, 15:48) Обсуж...   Dec 29 2014, 12:56
- - Golikov A.   ЦитатаОтнюдь. Медианный фильтр просто отбрасывает,...   Dec 29 2014, 14:22
- - k000858   1) Vref 3.3В 2) Вход АЦП (после резистивного делит...   Dec 30 2014, 05:47
|- - scifi   Цитата(k000858 @ Dec 30 2014, 08:47) 2) В...   Dec 30 2014, 06:48
||- - k000858   Цитата(scifi @ Dec 30 2014, 09:48) Имя, с...   Dec 30 2014, 07:33
|- - adnega   Цитата(k000858 @ Dec 30 2014, 09:47) Шуми...   Dec 30 2014, 07:03
- - VAI   Вот здесь рассматривалось много разных медиан.   Dec 30 2014, 06:04
- - adnega   max = 14 14 * 3300 мВ / 4096 = 11 мВ = 0.011В А ...   Dec 30 2014, 07:49
|- - k000858   Цитата(adnega @ Dec 30 2014, 10:49) max =...   Dec 30 2014, 07:57
- - VAI   Цитатаможет стоит изменить количество точек? Медиа...   Jan 13 2015, 12:32
|- - KnightIgor   Цитата(VAI @ Jan 13 2015, 14:32) И после ...   Jan 13 2015, 12:47
||- - Сергей Борщ   Цитата(KnightIgor @ Jan 13 2015, 14:47) Э...   Jan 13 2015, 13:59
|- - k000858   Цитата(VAI @ Jan 13 2015, 15:32) Медианны...   Jan 14 2015, 04:21
- - Golikov A.   сортировка и усреднение - медиана? классическая 4...   Jan 14 2015, 06:00
|- - k000858   Цитата(Golikov A. @ Jan 14 2015, 09:00) ...   Jan 14 2015, 07:28
- - adnega   а б б б = б ?   Jan 14 2015, 08:21
- - ViKo   а если кругом одни б б, то что выдаст описанный вы...   Jan 14 2015, 08:44
- - Golikov A.   я имел ввиду про исходную последовательность.... ...   Jan 14 2015, 09:16
|- - ViKo   Цитата(Golikov A. @ Jan 14 2015, 12:16) н...   Jan 14 2015, 09:31
|- - Tanya   ТС. Прежде, чем колдовать с фильтрами, построили б...   Jan 14 2015, 10:10
- - Golikov A.   ЦитатаМедиана по трем точкам. И, вообще, по нечетн...   Jan 14 2015, 11:01
|- - Ruslan1   Цитата(Golikov A. @ Jan 14 2015, 13:01) н...   Jan 14 2015, 11:32
- - k000858   И все таки: какое количество точек для сортировки/...   Jan 21 2015, 10:13
- - Golikov A.   вижу единичные большие выбросы, остальное ровненьк...   Jan 21 2015, 10:22
|- - k000858   Цитата(Golikov A. @ Jan 21 2015, 13:22) в...   Jan 21 2015, 11:16
- - Golikov A.   Именно потому что оно выдает 0 - 4095 у вас и нет ...   Jan 21 2015, 11:25
|- - k000858   Цитата(Golikov A. @ Jan 21 2015, 14:25) s...   Jan 21 2015, 11:54
- - Golikov A.   цифровая обработка только в кино про шпионов из ра...   Jan 21 2015, 13:06
- - Latch   Нужно мерять 16 каналов 1 раз в секунду. Реально д...   Jun 3 2015, 14:07
|- - ViKo   Цитата(Latch @ Jun 3 2015, 17:07) Нужно м...   Jun 3 2015, 16:02
|- - Axel   Цитата(Latch @ Jun 3 2015, 17:07) Нужно м...   Jun 4 2015, 03:20
|- - ALEN&Co   Цитата(Latch @ Jun 3 2015, 17:07) Нужно м...   Jul 22 2016, 08:10
- - Golikov A.   0.1% от чего? от диапазона, какого? от сигнала, оп...   Jun 3 2015, 14:51
- - Latch   всем спасибо... проделал следующее: опорное 2.5V к...   Jun 5 2015, 09:54


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 13:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.0147 секунд с 7
ELECTRONIX ©2004-2016