Easyelectronics.ru

Электроника для всех
Текущее время: 22 янв 2019, 13:45

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 10:32 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 658
Привет.
Сгенерировал FIR фильтр в filter solutions. Фильтр будет использоваться с микросхемой HX711 тензорные весы.
Фильтр нижней частоты. Окно Hamming.
Частота дискретизации 80 Гц. Полоса пропускания 1 Гц.
Получил вот такой код:
Show

Мне не ясно как правильно использовать данную функцию.
Что за параметры invar initval setic?
Как правильно передать данные в функцию и забрать отфильтрованные.
И как проверить что данный фильтр рабочей?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 11:13 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2547
Откуда: Санкт-Петербург
Фильтр рабочий. Но он вам не нужен. Вам нужен простенький IIR невысокого порядка, на уровне y += (x-y)*0.01.

invar - очередное входное значение (фильтрует по 1 отсчёту за раз)
initval - начальное значение (как будто до вашего сигнала всё время шло это значение)
setic - если подать 1, то фильтр сбросится в исходное состояние (как будто на входе долго был initval)

Использовать - один раз позвать с setic=1, потом для каждого отсчёта звать с setic=0 и получать результат, что ещё?

Генератор написан криворуким дятлом, кстати. Надо будет запомнить название, чтобы случайно не воспользоваться их поделиями.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 11:34 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 658
aamonster можно попросить у вас пример кода работы с данным фильтром?
У них есть возможность убрать галочку initialize capability. И получить следующий код:
Show

Я сделал обычный рекурсивный фильтр:
Show

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 13:00 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2547
Откуда: Санкт-Петербург
zhilenkov, так и будет болтать. Фильтры - это не что-то чудесное, тут степень сглаживания обратно пропорциональна времени отклика, и разницу между вашим опробованным фильтром (скользящее среднее), сгенерированным софтиной КИХ и "моим" (простейший БИХ) вы даже и не заметите (во всяком случае, если чуть-чуть поиграть с параметрами, чтобы они обеспечивали одинаковую "степень сглаживания").

Конкретно для весов, скорее всего, можно сделать фильтр лучше: не просто давить выше определённой частоты, а подавить резонансы системы весы-груз. Но оно вам надо?

Пример... Какой пример? Для сгенерённого? Просто вместо вашей функции filter вызываете их DigFil.
Для "моего"? Вместо filter(x) пишете y += (x-y)*0.01 (и используете значение y). Да, где будете переменную y определять (в начале проги) - инициализируйте её каким-нибудь разумным значением, например float y=0.0;
Если слабо сглаживает - вместо 0.01 ставите значение поменьше. Если слишком медленно реагирует на вес - наоборот, побольше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 13:53 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3087
простого y+= (x-y)/K c 20дБ/дек может не хватить, если надо с полосой 1 Гц хорошо задавить какие-нибудь 50Гц или собственные резонансы на единицах/десятках Гц.
в самих АЦП внутри как правило обходятся CIC фильтрами из-за их простоты да и частоту/децимацию дополнительно можно подобрать так чтобы провалы как раз попадали куда надо, чтобы те же 50Гц полностью задавить.
https://github.com/EsonJohn/CIC-filter плюсы только убрать и динамическое выделение памяти, останется несколько строчек.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:05 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 658
Прикрепил экспериментальные данные. Снимались 30 мин. Работает рекурсивный фильтр. Между отчетами 4 сек. Частота HX711 80 Гц.

Есть еще одна проблема, плывет сам датчик. Помимо того что шумит.


Вложения:
1.log [3.08 Кб]
Скачиваний: 143
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:38 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Не (только) датчик плавает, а 711.
Для борьбы с шумом делайте оцифровку Чаще, желательно кратно 20 мс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 14:58 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2547
Откуда: Санкт-Петербург
_pv, CIC хорошо, да. Но для топикстартера может быть сложновато. Кстати, что касается резонансов - их частоты могут зависеть от массы на весах, так что фильтр для них может стать неочевидным и узкоспециализированным.

zhilenkov, ну, что плывёт - тут вы особо ничего сделать не сможете, наверное (может, это разогрев датчика, может, ещё что) - лучше смириться, понять, какая точность достижима, и выводить нужное количество значащих цифр (опционально - поборовшись с "дрожанием" показаний с помощью небольшого гистерезиса)

Кстати о "дрожании": если у вас на весах постоянный вес - есть ещё варианты, как показывать и быстро, и ровно. Например, два фильтра с разными постоянными (1 с и 10 с), и когда разница между ними мала - "прижиматься" к 10-секундному. Получится, что как поместили груз на весы - быстро показали результат "с дрожанием", а потом дрожание потихоньку ушло.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 15:26 
Старожил

Зарегистрирован: 08 июн 2015, 16:26
Сообщения: 258
aamonster писал(а):
_pv, CIC хорошо, да. Но для топикстартера может быть сложновато. Кстати, что касается резонансов - их частоты могут зависеть от массы на весах, так что фильтр для них может стать неочевидным и узкоспециализированным.


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

В несколько похоже случае я делал так: сначала КИХ-фильтр, который отрезал все лишнее выше Fs/2 (где Fs - частота дискретизации), потом делал CIC-дециматор (который, кстати, тоже вносил свой вклад в подавление нежелательных гармоник), потом еще один БИХ-фильтр то ли 4-го, то ли 6-го порядка - не помню уже - с частотой среза где-то Fs/4, причем именно для новой Fs, пониженной. Тогда на выходе получались достаточно чистые данные. Но задержка становилась довольно-таки приличной, около 300, а то и 400 мс. Но для меня это было некритично.

Еще один вариант по сабжу - это взять сигма-дельта АЦП какой-нибудь для инструментальных измерений. В нем "по долгу службы" уже стоит цепочка из дециматоров, интерполяторов и sinc-фильтров, которая и 50 Гц помех подавит, и всяческие резонансы. Я уже забыл, какой применяли на старой работе. AD77xx какой-то. http://www.analog.com/en/parametricsear ... 0Modulator - вот в этой таблице можно выбрать какой-нибудь из АЦП с архитектура Sigma-delta.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 15:34 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Для справки - 711'ый только после переключения выдает полноценный отсчет (поэтому он такой долгий). Все последующие являются частичной выборкой с усреднением. Не помню, там банальная alpha или окно на N отсчетов.
С точки зрения адекватности, полезнее делать полноценные отсчеты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 17:21 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 658
Что вы думаете о питание моста переменным напряжением как это сделано в http://www.ti.com/lit/ug/tiduac1/tiduac1.pdf ? стр. 4 пункт 2.2.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 05 июн 2018, 17:36 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3087
в нормальных АЦП уже внутри всё для этого сделано: ADS1261, AD7195.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 06 июн 2018, 10:27 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 730
aamonster писал(а):
Фильтр рабочий. Но он вам не нужен. Вам нужен простенький IIR невысокого порядка, на уровне y += (x-y)*0.01.

invar - очередное входное значение (фильтрует по 1 отсчёту за раз)
initval - начальное значение (как будто до вашего сигнала всё время шло это значение)
setic - если подать 1, то фильтр сбросится в исходное состояние (как будто на входе долго был initval)

Использовать - один раз позвать с setic=1, потом для каждого отсчёта звать с setic=0 и получать результат, что ещё?

Генератор написан криворуким дятлом, кстати. Надо будет запомнить название, чтобы случайно не воспользоваться их поделиями.


В защиту этих самых дятлов.... Вообще говоря программка не плохая. Хорошо считает всевозможные аналоговые и активные фильтры. Ну коэффициенты для цифровых фильтров тоже. Насчет использования ихнего кода сказать ничего не могу не использовал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 09:14 
Только пришел

Зарегистрирован: 07 ноя 2012, 17:31
Сообщения: 26
Приветствую !
(извиняюсь не совсем по теме)
Подскажите пожалуйста как точно можно отследить свой вес например 70кг ?
1г ? 0,1г ?
калибровка не важна - хоть в попугаях.....

У кого спросить ,где копать ....

Юрий


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 09:51 
Старожил
Аватара пользователя

Зарегистрирован: 14 апр 2014, 11:06
Сообщения: 1446
Откуда: Курск
Юрий. Представьте. Съели конфетку - вес увеличился. Побрились, всплакнули - уменьшился
К чему такая точность


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 11:20 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2305
Откуда: Русь, Новороссийск
Cthulhu писал(а):
Съели конфетку - вес увеличился. Побрились, всплакнули - уменьшился
:) Меня тут понесло:
а если пукнуть, то вес уменьшится или увеличится? Вроде метан (будем исходить, что мы относительно здоровы и сероводородов в существенном количестве не выделяем) существенно легче воздуха, но вот адекватно ли при этом не учитывать изменение объёма тела и, соответственно, архимедову силу?
Есть над чем поразмышлять в праздники...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 11:57 
Старожил

Зарегистрирован: 23 мар 2017, 14:45
Сообщения: 4350
Yur писал(а):
70кг <...> 0,1г
Вообще-т 20-битная оцифровка. Нехило получается. Ловля таких блох - дело нетривиальное.

Учтите еще, что с каждым ударом сердца ток крови (а ее около 5кг) проходит по всем сосудам, так что даже если Вы лежите спокойно, эти толчки будут отражаться. Есть даже такой метод: баллистокардиография (регистрация этих толчков кровообращения).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 12:44 
Заглядывает иногда

Зарегистрирован: 09 июл 2013, 17:10
Сообщения: 172
Откуда: Санкт-Петербург
Код:
out=out-(out>>k)+(in<<3);//k - коэффициент затухания 

для использования out надо сдвинуть вправо на (k+3)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 26 дек 2018, 18:22 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3087
Кот495 писал(а):
Yur писал(а):
70кг <...> 0,1г
Вообще-т 20-битная оцифровка. Нехило получается. Ловля таких блох - дело нетривиальное.

проблемы не в оцифровке, а в абсолютной стабильности датчика, в первую очередь от температуры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 27 дек 2018, 16:58 
Старожил

Зарегистрирован: 10 апр 2013, 17:41
Сообщения: 266
Yur писал(а):
Приветствую !
(извиняюсь не совсем по теме)
Подскажите пожалуйста как точно можно отследить свой вес например 70кг ?
1г ? 0,1г ?
калибровка не важна - хоть в попугаях.....

У кого спросить ,где копать ....Юрий


Датчик класса С3 гарантирует в заявленном температурном диапазоне 3000 точек. Тензодатчик на 70кг берем 100кг. 100/3000 = 33грамма. Далее ряд округляется до 50грамм.
http://www.vashdom.ru/gost/29329-92/

_________________
Стиль: "G&P"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 28 дек 2018, 03:40 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
Я тут купил весы, а-ля "ювелирные", на 200 грамм. Вопрос "точности" рассматривать не будем, не интересно, а вот дискретность показа 0.01 гр. Т.е. шкала 20000 единиц. При измерении последний знак стоит очень устойчиво, шума нет. Возможно, реальное разрешение оцифровки еще в 5-10 раз выше. (с учетом фильтрации, естественно).
Итого, речь идет о шкале в 100000 единиц.
Если взять 100 кг, это будет дискретность в 0.001 кг или 1 гр.
Так что - берется специализированная (фирменная) микросхема, а не HX711, тензодатчики на нужный вес (2-4 шт) и "кодить".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 28 дек 2018, 03:57 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 620
Для стационарных (неподвижных) весов - фильтр можно упростить. Просто накапливать измерения непрерывно, и делить на время измерения в момент индикации. Даже если прыгать на таких весах, за пять секунд будет полный точный вес. Двойной точности должно хватить.
Для ручных нужно добавить аксель.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 28 дек 2018, 10:40 
Старожил

Зарегистрирован: 10 апр 2013, 17:41
Сообщения: 266
u37 писал(а):
Так что - берется специализированная (фирменная) микросхема, а не HX711, тензодатчики на нужный вес (2-4 шт) и "кодить".


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

А разрешающую способность получить много ума не надо. Можно и высокую точность получить, но надо носить с собой гирю 70кг и точностью 0.1грамм для метода компараторов.

Да, и по фильтрам. Для HX надо на входе ставить медианный фильтр на 5-7 отсчетов, далее скользящее среднее, режим можно 10SPS, для статического взвешивания.

_________________
Стиль: "G&P"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 28 дек 2018, 12:07 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5370
"И после кодирования узнаете что основной вклад в точность дает температурная погрешность тензодатчика которая на три порядка больше температурной понрешности HX711."
Я и до"кодинга" знаю. К этому есть свои приемы, стандартные. Не надо съезжать с темы, вы говорили о "разрешающей способности".

Если говорить о проблемах (не придуманных), то у тензодатчиков резистивного вида есть два неприятных дефекта - эффект сминания (измерили - сжали - отпустили - измерили: не_равно) и гистерезис. Оба дефекта следует учитывать при работе на пределе разрешения.
Со сминанием бороться нельзя, придется жертвовать диапазоном (брать датчики с запасом и ни в коем случае не стучать по ним). С гистерезисом уже можно что-то сделать. Это (электрический) - питать датчик не постоянным напряжением с соответствующей обработкой, и (механический) - поставить банальный вибратор на десяток грамм. Его и не слышно и не заметно, а мост будет трясти. Лучше использовать оба метода, они не заменяют друг-друга.
Впрочем, я не думаю, что кто-то будет делать весы 100 кг с 1 гр. )) Это как делать аналоговый осциллограф 250 МГц на транзисторах в домашних условиях - сделать то можно, лет за 5-10. )))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Цифровой фильтр нижней частоты
СообщениеДобавлено: 28 дек 2018, 12:30 
Старожил

Зарегистрирован: 10 апр 2013, 17:41
Сообщения: 266
Вот то, что вы говорите, и плюс температурный дрейф и заложены в три тысячи точек. Не зря датчики С6 стоят дороже.
Хотя и алюминиевые датчики есть С6, но все одно дрянь. А разрешающую способность на ста тонных весах в один кг я не раз демонстрировал - только к метрологии это не имеет отношения - при изменении температуры на 10 градусов вес меняется на порядка триста кг. И никаким ацп или кодированием это не убрать, только программной температурной компенсацией. Сминаемость и гистерезис влияют несоизмеримо меньше.

_________________
Стиль: "G&P"


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: _pv


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB