Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: изобретаю цифровой фильтр
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
esaulenka
Есть система, представляющая собой нагрузку типа "N резисторов параллельно" с управлением от микроконтроллера. Питается оно от аккумуляторов (внутреннее сопротивление аккумуляторов и нагрузки, если N максимальное, сопоставимо).
Количество одновременно включенных резисторов переменное (рулится контроллером, заранее предсказать сложно) от 0 до N. Также в контроллер заведено напряжение с аккумуляторов - на АЦП.

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

Вариант "включить, померять k раз, усреднить, посчитать время выключения" не проходит, т.к. включать надо на единицы миллисекунд, и в промежутках ещё кучу всего делать.

Величину нагрузки в каждый момент я знаю довольно точно (N резисторов + ещё потребление прочих элементов), а вот с внутренним сопротивлением аккумуляторов засада - завтра пользователь их поменяет, послезавтра производство другую партию закупит...

Вопрос: что делать-то? Читать про Калмана? Вроде бы самое оно...
Вот только не делал я никогда, даже "простейший одномерный случай без входного воздействия".
Demeny
Цитата(esaulenka @ Apr 3 2012, 15:45) *
Вопрос: что делать-то? Читать про Калмана?

Читать про Кирхгофа.
Внутреннее сопротивление источника можно вычислить, измерив падение напряжения на источнике при подключении к нему известного сопротивления.
esaulenka
Ну да, я слышал что-то :-)
Проблема в том, что вся эта конструкция весьма заметно "шумит" - значение сопротивления каждый раз будет меняться. Вопрос, как его усреднять, с учётом того, что "известное сопротивление" у меня каждый раз будет разным.
Demeny
Имхо, сопротивление источника - параметр, который меняется очень медленно (например, из-за старения аккумулятора), поэтому усреднять его можно совершенно безбожно rolleyes.gif , тем же скользящим средним. При каждом подключении нагрузки вычисляете внутреннее сопротивление, и измеренное значение пропускаете через фильтр, например, такой:
Rсреднее = Rсреднее + (Rизмер - Rсреднее)/1000.0 (при усреднении по 1000 измерениям).
А в вычислении "предсказания" падения напряжения перед подключением нагрузки используйте уже отфильтрованное Rсреднее.
DRUID3
Тут впору нейрокластер применить... и связать его по UART через аудиомодем по воздуху biggrin.gif ...

Как вяжется Калман(!) с требованием просто усреднить сигнал? Да и еще(о боги!) "в промежутках ещё кучу всего делать"...
Непонятна сама постановка задачи. Если необходимо обеспечить постоянную адаптивную подстройку, а включать АЦП хочется в каких-то паузах между работой то это к Гарри Потеру скорее.
Если задача выделить постоянную составляющую в пульсирующем сигнале то скользящее (блочное?) среднее самое то, только интервал накопления подобрать.
Если избавить от шума переменный не детерминированный сигнал (разделить по-сути 2-а стохастических) то да, это задача адаптивной фильтрации(того или иного метода).

P.S.: ...если Калманом Вы пытаетесь сделать какой-то "инерциоид" - то ничего не выйдет, нет никаких данных(если измерять "в паузах") о наличии этого "инерциоида" в Вашем сигнале...
esaulenka
АЦП будет мерять предыдущее значение, "каких-то пауз" не предусмотрено. "Всё выключено" - это просто частный случай с N=0.

Demeney, спасибо. Надо бы вывод всех значений организовать, посмотреть, что там с помехами. А то кажется мне, что если усреднять уже посчитанное Rвнутр, ошибок больно много будет... При небольших нагрузках оно даже отрицательным может получится - если помеха "перебьёт" просадку напряжения.
DRUID3
Цитата(esaulenka @ Apr 3 2012, 16:26) *
При небольших нагрузках оно даже отрицательным может получится - если помеха "перебьёт" просадку напряжения.

Т.е. все-таки "нестационарность" помехи соизмерима с "нестационарностью" сигнала?
maksimp
Цитата(esaulenka @ Apr 3 2012, 15:45) *
Вариант "включить, померять k раз, усреднить, посчитать время выключения" не проходит, т.к. включать надо на единицы миллисекунд, и в промежутках ещё кучу всего делать.

Может взять контроллер поновее и сделать именно такой вариант? В последних сериях контроллеров АЦП делает измерение примерно за микросекунду. За требуемое время успеет выполнить тысячи измерений, которые можно усреднить, и принять решение когда выключать резисторы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.