avatar_UriBas

Моргалка на Arduino. Этюды для начинающих.

Автор UriBas, 08 Март 2017 в 16:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Яков93

#774
Цитата: Кass от 01 Фев. 2018 в 11:27
Для того, что бы реализовать подобное, нужно ставить фильтр по входу с малым тау, не ограничивающий требуемое нам быстродействие, и ограничивать значения, которые превышают скорость фильтра. В таком случае пишутся динамические звенья аналогичные с аналогичной функцией входному фильтру и сравниваются показания до и после фильтра. Тогда можно принимать значение до фильтра, если оно не выходит за скорость после фильтра и отбрасывать, если выходит. Иначе запустив какую то импульсную помеху вы просто погасите измерения.
Я говорю про программные средства, а Вы про "железные". Одно другому не мешает, и даже помогает.
Еще лучше было бы если вместо умных слов Вы привели бы пример такого фильтра под "требуемое нам быстродействием" с номиналами деталей. Пока в деле работы с Ардуино от Вас только жалобы были слышны на постоянно скачущие значения и невозможность толком усреднить показания.

Кass

Цитата: Яков93 от 01 Фев. 2018 в 12:11Я говорю про программные средства, а Вы про "железные". Одно другому не мешает, и даже помогает.

Нет, я пишу про аппаратно-программные. У вас аналогично об этом же.

Цитата: Яков93 от 01 Фев. 2018 в 12:11Пока в деле работы с Ардуино от Вас только жалобы были слышны на постоянно скачущие значения и невозможность толком усреднить показания.

Усреднить их это не значит получить жутко монотонную картинку. Можно поставить на вход фильтр с тау 1 секунда и радоваться. только никакой динамики такой ЦАП не покажет. Вы получите банально средневыпрямленное значение. Значит весь алгоритм должен быть построен именно под это. Полученные вами значения будут справедливы только для очень инертных процессов. Если измерять температуру на улице или в помещении, то пойдет. Но для алгоритмов, которые вы пытаетесь реализовать будут значения ни о чем, которые еще будут сильно отставать от реальности. Аналогично с таким усреднением по 500 измерений вы тоже получаете задержку в тысячи измерений. В таком случае все ваши пороги носят весьма условный характер.
АРМ стенда онлайн: http://scada.kontar.ru Пользователь: Электротранспорт, Пароль: 111111

Гербалайф от всех болезней, Кашпировский лучший врач,  Орифлейм самая лучшая косметика, а МММ самый лучший способ вложения денег. Кто бы спорил. ;)

Alex_Soroka

Цитата: Яков93 от 01 Фев. 2018 в 10:38
Гораздо лучше искать среднюю из действительно средних, отбрасывая слишком низкие или слишком высокие значения и вообще не включая их в расчет. Вот таким скетчем мы сначала делаем массив из скажем 32 значений, потом этот массив сортируем по величине, а потом вычисляем среднюю арифметическую только из тех значений, что стоят в середине, крайние самые высокие и самые низкие значения отбрасываются.
:facepalm:
а теперь посмотрите что "родит" компилятор, после вашего этого текста программы...
у вас Ардуино? оно 8-и битное? а вращаете вы int - это 16 бит, да еще и в цикле, да еще и сортировки  :facepalm: , да еще и средствами С++ ... а еще и пытаетесь чем-то управлять в реалтайме...
O_O

Яков93

[user]Кass[/user], "мой" конкретный скетч отлавливает случайные показания сильно выбивающиеся из общего ряда. Можно хоть сейчас применять.
Где Ваш конкретный фильтр с нужным "тау-мау", который бы удовлетворял потребностям этой самоделки на ардуино? Вы на протяжении нескольких страниц о нем философствуете, дайте уже наконец схему с номиналами под имеющийся у [user]Dunkel[/user] скетч. Если вообще представляете как его делать и подключать.

Яков93

Цитата: Alex_Soroka от 01 Фев. 2018 в 13:10
:facepalm:
а теперь посмотрите что "родит" компилятор, после вашего этого текста программы...
у вас Ардуино? оно 8-и битное? а вращаете вы int - это 16 бит, да еще и в цикле, да еще и сортировки  :facepalm: , да еще и средствами С++ ... а еще и пытаетесь чем-то управлять в реалтайме...
O_O
Спокойствие, я не автор этого скетча, это можно сказать классический скетч "из учебника" по C++. На арудино с Атмегой я его не применял, применяю на "ардуино" с STM32, компилируется обычным Arduino IDE вполне себе нормально и памяти много не занимает. Работает четко и достаточно быстро. Ну int и что такого? Не float же.

Alex_Soroka

Цитата: Яков93 от 01 Фев. 2018 в 13:16
Спокойствие, я не автор этого скетча, это можно сказать классический скетч "из учебника" по C++.
ну так не надо всякую каку сразу в рот тащить  :hello: в учебнике примеры не самого лучшего качества, их задача "из учебного курса" не сильно отличаться.

Цитироватьприменяю на "ардуино" с STM32
тогда это другое дело. На 32 битах хорошо "проворачиваются" инструкции с int.

Цитироватькомпилируется обычным Arduino IDE
который по сути С++ 11 версии  :hello: который любит сейчас сегменты данных и кода, а также некоторые паттерны менять местами наплевав на явные указания программиста.  :-(
совет: пишите программу просто - не применяйте того что не понимаете, пишите линейно, если хватает памяти и производительности.

Яков93

Цитата: Alex_Soroka от 01 Фев. 2018 в 14:55в учебнике примеры не самого лучшего качества, их задача "из учебного курса" не сильно отличаться.
Цитата: Alex_Soroka от 01 Фев. 2018 в 14:55совет: пишите программу просто - не применяйте того что не понимаете, пишите линейно, если хватает памяти и производительности.
Вот когда уважаемый А.Сорока напишет свой учебник по С++, я возможно его прочитаю и найду пример по-лучше. А пока это просто бесполезное фырканье наподобие того, что слышно от уважаемого Kass с его фильтрами с крутыми тау.
Например непонятно чего Вы взъелись на тип переменной "int".
Какой другой наименьший тип подойдет для переменной от 0 до 1023, а в моем случае с STM32 - до 4095 ?
Что конкретно Вы не поняли в приведенном мной скетче? Потому как мне лично все понятно.

Кass

Цитата: Яков93 от 01 Фев. 2018 в 13:11Кass, "мой" конкретный скетч отлавливает случайные показания сильно выбивающиеся из общего ряда. Можно хоть сейчас применять.

Применять хоть сейчас можно любой пример из вложенных в среду разработки. Это если вас вообще не интересует результат. В попробуйте на ЦАП задайте синусоидальное изменение постоянного напряжения, заведите его на АЦП с этим скетчем и постойте график того, что у вас получится. :)  А мы именно так отлаживаем алгоритмы. Эмулируем работу среды на других контроллерах и смотрим как отлаживаемый реагирует. Первый раз это эмулируется в среде разработки. В Ардуино конечно нет никаких эмуляций и средств отладки, так что только на контроллерах пробовать.
АРМ стенда онлайн: http://scada.kontar.ru Пользователь: Электротранспорт, Пароль: 111111

Гербалайф от всех болезней, Кашпировский лучший врач,  Орифлейм самая лучшая косметика, а МММ самый лучший способ вложения денег. Кто бы спорил. ;)

Яков93

Цитата: Кass от 01 Фев. 2018 в 19:55
Применять хоть сейчас можно любой пример из вложенных в среду разработки. Это если вас вообще не интересует результат. В попробуйте на ЦАП задайте синусоидальное изменение постоянного напряжения, заведите его на АЦП с этим скетчем и постойте график того, что у вас получится. :) 
Ну смотря какая частота этой синусоиды, если Герц 50 то наверное построит чего-нть. И вообще о чем речь, кто-то здесь собрался осциллограф на ардуино лепить? Есть и такие проекты и даже рабочие, но это другая тема.
ЦитироватьА мы именно так отлаживаем алгоритмы. Эмулируем работу среды на других контроллерах и смотрим как отлаживаемый реагирует. Первый раз это эмулируется в среде разработки. В Ардуино конечно нет никаких эмуляций и средств отладки, так что только на контроллерах пробовать.
Опять не в тему.
Лучше расскажите как сделать фильтр с нужным тау, чтоб работал под нужное нам быстродействие и отлавливал ошибки до фильтра и после фильтра. Вот это будет полезно.

Кass

Цитата: Яков93 от 01 Фев. 2018 в 20:22Ну смотря какая частота этой синусоиды, если Герц 50 то наверное построит чего-нть.

Так может попробовать? :)

Цитата: Яков93 от 01 Фев. 2018 в 20:22Лучше расскажите как сделать фильтр с нужным тау, чтоб работал под нужное нам быстродействие и отлавливал ошибки до фильтра и после фильтра. Вот это будет полезно.

Да я пока это на Ардуино еще не пробовал. Я проецирую это с других МК. Нужно будет подумать, на каком именно Ардуино можно будет все грамотно сделать. Я ведь потому и закупил МК от ПЛК, что бы не париться с такими вещами. Там то все это делается за 5 сек. Если адаптировать Си код ФБ от ПЛК на АРМе на Ардуино, то можно попробовать. Я пока занят написанием мастера Modbus RTU на Ардуину, что бы слепить графический интерфейс на тачскрине, на сколько хватает времени дома. На работе не до этого пока.
АРМ стенда онлайн: http://scada.kontar.ru Пользователь: Электротранспорт, Пароль: 111111

Гербалайф от всех болезней, Кашпировский лучший врач,  Орифлейм самая лучшая косметика, а МММ самый лучший способ вложения денег. Кто бы спорил. ;)

Яков93

Цитата: Кass от 01 Фев. 2018 в 20:39
Так может попробовать? :)

Мне это не надо, кому интересно пусть пробует. У меня задача проще, применить этот кусок кода в скетче для моего "кобайна для КТЦ", а там никаких синусоид обсчитывать не придется.

Dunkel

#785
NiMH 3,6V 250mAh от старого фонарика. Валялся около года, на клеммах 2,2В.
Алгоритм тот же, параметры не менял.
БП 6В 1,2А (написано 5В, по факту 6,3, ток не проверял)
Схема:



Заряд длился около суток, по окончании на АКБ 4,18В.
График завышен на 0,2В, делитель так и не откалибровал:



Квасеки выглядят вполне нормально:



Лог
https://drive.google.com/file/d/1fNhSgY_Ma6a_DfJKQjGRt851lg_wZt-d/view?usp=sharing
Многофункциональная облачная моргалка/логгер:
https://morgalka78.wordpress.com/

Alex_N

Все "умные" фильтры - не для ардуино, как и любая мало-мальская математика. 500 раз измерить - то что надо. Кстати не я придумал. Нашел где то на просторах инета. Попробовал - реально работает. Поэтому советую всем. Дешево и сердито.

bones

Цитата: Alex_N от 02 Фев. 2018 в 07:36Все "умные" фильтры - не для ардуино, как и любая мало-мальская математика.

Вот человек делал цифровой фильтр с заданным Тау на слабом контроллере, получилось вполне годно (судя по картинкам), а главное очень просто.
http://chipenable.ru/index.php/item/162

Alex_Soroka

Цитата: bones от 02 Фев. 2018 в 10:44
Вот человек делал цифровой фильтр с заданным Тау на слабом контроллере, получилось вполне годно (судя по картинкам), а главное очень просто.
это потому что человек понимает "как там внутри работает"  :hello: потому и написал просто и красиво, без математики с плавающей точкой  :hello:
Ресурсы быстродействия МК (Ардуино) надо использовать грамотно, тогда и на фильтры хватит времени.
В 90-е "Синклеры" на Z-80 процессоре , спокойно гоняли графику аркадных игр, и никто не кричал что надо 4 гига памяти и суперкарту на 1800 скалярных процессоров, чтобы нарисовать подобную игру.

Яков93

Цитата: bones от 02 Фев. 2018 в 10:44
Вот человек делал цифровой фильтр с заданным Тау на слабом контроллере, получилось вполне годно (судя по картинкам), а главное очень просто.
http://chipenable.ru/index.php/item/162
Круто конечно, только я не пойму смысла - зачем эта программа лишний раз нагружающая слабенький МК если она легко заменяется всего двумя детальками - резистором и конденсатором (RC фильтр), которые даже лучший результат дают, без всяких ступенек.

11vetal

Цитата: Яков93 от 02 Фев. 2018 в 13:09без всяких ступенек
так ступенек вы не увидите, это у него только для наглядности сделано.
Тебя оскорбили - забудь... Тебя унизили - прости... Тебя ударили - вспомни ... б**дь, всё ВСПОМНИ и накажи!!!

Яков93

Цитата: 11vetal от 02 Фев. 2018 в 13:32
так ступенек вы не увидите, это у него только для наглядности сделано.
Я-то естественно не увижу  6_6
А вот осциллограф видит и показания в МК, и следующие расчеты также идут с учетом этих ступенек. В итоге хотели сделать фильтр от помех, а создали новый источник помех.