Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Индикация текущего тока блока питания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
sonycman
На данный момент контроллером отображается на ЖКИ мгновенное значение тока в определённый момент времени (меряется несколько раз в секунду).
А хотелось бы получать значение, подобное отображаемому на амперметре постоянного тока, включенном в разрыв цепи.
То есть это должно быть среднее арифметическое, или RMS значение за опред. промежуток времени?
Как его правильно посчитать?
=GM=
T=sqrt(sum(Ti*Ti)/N).
demiurg_spb
На мой взгляд, для постоянки среднее арифметическое это то, что надо, но всё же лучше применяйте медианную фильтрацию - так будут более адекватные показания.

То =GM=: а почему Вы так считаете?
Цитата(=GM= @ Dec 8 2008, 13:02) *
T=sqrt(sum(Ti*Ti)/N).

Ведь для постоянки RMS=среднему, а в Вашем случае придётся ещё и корень извлекать - это лишне.
sonycman
Цитата(=GM= @ Dec 8 2008, 14:02) *
T=sqrt(sum(Ti*Ti)/N).

Хм.. а что означает sum(Ti*Ti) и как это считать? 05.gif
А, понял, это тоже самое, что и:


Цитата(demiurg_spb @ Dec 8 2008, 14:08) *
На мой взгляд, для постоянки среднее арифметическое это то, что надо, но всё же лучше применяйте медианную фильтрацию - так будут более адекватные показания.

Ведь для постоянки RMS=среднему, а в Вашем случае придётся ещё и корень извлекать - это лишне.

Понятно. Спасибо. Буду пробовать smile.gif

ЗЫ: но разве RMS равно среднему? Например, для значений из ряда 5,6,7,8,9 и 10 среднее ариф. и RMS будут разными (7,5 и 7.69 соответственно)...
demiurg_spb
Цитата(sonycman @ Dec 8 2008, 13:31) *
Хм.. а что означает sum(Ti*Ti)
Это сумма квадратов. SQRT((5*5+5*5+5*5)/3) = 5
Цитата(sonycman @ Dec 8 2008, 13:31) *
ЗЫ: но разве RMS равно среднему? Например, для значений из ряда 5,6,7,8,9 и 10 среднее ариф. и RMS будут разными (7,5 и 7.69 соответственно)...
У постоянки значения из ряда 5,5,5,5,5,5,5:)
sonycman
Цитата(demiurg_spb @ Dec 8 2008, 14:36) *
У постоянки значения из ряда 5,5,5,5,5,5,5:)

А, понятно. smile.gif
Но ведь в реальной жизни такого ряда не будет практически никогда - потребление электронных приборов хоть немного, да динамическое... по крайней мере моих макеток с ШИМ... и в данном случае среднее и квадратичное значения будут несколько отличаться... 05.gif
demiurg_spb
Цитата(sonycman @ Dec 8 2008, 13:49) *
Но ведь в реальной жизни такого ряда не будет практически никогда - потребление электронных приборов хоть немного, да динамическое... по крайней мере моих макеток с ШИМ... и в данном случае среднее и квадратичное значения будут несколько отличаться... 05.gif
Эта разница пренебрежимо мала. Расслабьтесь.
sonycman
Да, наверное, так и есть...
Эх, можно было просто поставить ФНЧ перед входом АЦП smile.gif
МП41
С корнями в AVR будет туговато, по-моему можно просто усреднять, вы же не синусоидальный ток измеряете?
=GM=
Цитата(demiurg_spb @ Dec 8 2008, 10:08) *
То =GM=: а почему Вы так считаете?

Вообще-то это определение действующего значения. В пределе, когда квантование стремится к 0, а количество слагаемых к бесконечности, в формуле должен стоять интеграл. Формула ИНВАРИАНТНА к форме тока, и работает для переменного тока любой формы, ну и для постоянного тока тоже, как частный случай переменного.

Цитата(demiurg_spb @ Dec 8 2008, 10:08) *
Ведь для постоянки RMS=среднему, а в Вашем случае придётся ещё и корень извлекать - это лишнее

Для постоянки так и есть, но автор вроде хотел действующее значение отображать. Для тех, кто на си пишет, что стоит поставить B=sqrt(A)?
defunct
Цитата(sonycman @ Dec 8 2008, 14:12) *
Да, наверное, так и есть...
Эх, можно было просто поставить ФНЧ перед входом АЦП smile.gif

дык, сделайте ФНЧ программно, пример:

Код
int nStepFilter( int val)
{
#define  shift  (4)   // n = 2^shift
#define  lsb    ((1 << (shift)) >> 1)

    static int x = 0;
    int av = (x + lsb) >> shift;

    x += val - av;

    return av;
#undef lsb
#undef shift
}
demiurg_spb
Цитата(=GM= @ Dec 8 2008, 16:41) *
Для постоянки так и есть, но автор вроде хотел действующее значение отображать. Для тех, кто на си пишет, что стоит поставить B=sqrt(A)?
Стоит немалого куска пзу и машинных циклов. Ничто не проходит бесследно.
Предлагаю автору топика провести следственный эксперимент.
Путь он считает параллельно сразу двумя способами (RMS и среднее),
а на индикатор выводит их разность. Вот и посмотрим какого она порядка.
P.S. Я вообще как-то не часто в жизни встречал терминологию RMS применительно постоянного тока/напряженияsmile.gif
sonycman
Ого, вариант с программным ФНЧ - это интересно! Спасибо!

В общем, надо будет попробовать всеми тремя способами - благо места на ЖКИ хватает.
А весь смысл в том, чтобы показания на дисплее как можно точнее соответствовали показаниям отдельного амперметра.
Какое значение получается в амперметрах постоянного тока? Среднее? Действующее? Я не в курсе, к сожалению sad.gif

Вообще, про аббревиатуру RMS - root mean square - квадратичное значение?
То есть действующее значение? Тогда что такое эффективное значение?
Арк К
Цитата(sonycman @ Dec 8 2008, 21:13) *
Вообще, про аббревиатуру RMS - root mean square - квадратичное значение?
То есть действующее значение? Тогда что такое эффективное значение?


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

Эффективное значение - это из другой оперы smile.gif
AnV22
Цитата(Арк К @ Dec 9 2008, 11:36) *
"Действующим значением переменного тока (правильнее среднеквадратичным значением) называют некоторое значение постоянного тока, который за время одного периода произведёт тот же самый тепловой или электродинамический эффект, что и переменный ток."

Постоянный ток
ARV
Цитата(Арк К @ Dec 9 2008, 09:36) *
Эффективное значение - это из другой оперы smile.gif
эффективное = действующее. это синонимы

общепринятая характеристика постоянного (т.е. не меняющего знак) тока есть среднее значение (вспомните хотя бы ШИМ).
для источника питания, имхо, следует использовать индикацию именно среднего значения, для получения которого использовать метод скользящего среднего
sonycman
Цитата(ARV @ Dec 9 2008, 11:42) *
для источника питания, имхо, следует использовать индикацию именно среднего значения, для получения которого использовать метод скользящего среднего

Ну вот, опять запутали 07.gif
А как вычислять это "скользящее среднее"?
ARV
ну как... типа так:
Код
int average(int val){
   static int buf[BUFSZ];
   static int current = 0;
   long result = 0;

   buf[current] = val;
   for(int i=0; i<BUFSZ; i++) result += buf[i];
   if(++current == BUFSZ) current = 0;

   return result / BUFSZ;
}
подаете на вход очередной замер АЦП, получаете на выходе усредненный по последним BUFSZ замерам результат. чем больше BUFSZ, тем "среднее" smile.gif

возможно с терминологией у меня путаница - может это и не то, о чем я говорил... но работает хорошо smile.gif
defunct
Цитата(sonycman @ Dec 9 2008, 11:48) *
Ну вот, опять запутали 07.gif
А как вычислять это "скользящее среднее"?

ФНЧ приведенный выше и скользящее среднее на постоянном пульсирущем токе дадут одинаковый рез-тат. Скользящее среднее требует больше памяти для реализации и больше вычислений.

Скользящее среднее это КИХ фильтр - текущий рез-тат зависит от строго конечного числа измерений (от размерности массива - от BUFSZ в примере выше).
ФНЧ приведенный выше - БИХ фильтр (аналогичен RC) - текущий рез-тат зависит от всех предыдущих измерений.
=GM=
Цитата(ARV @ Dec 9 2008, 10:15) *
возможно с терминологией у меня путаница - может это и не то, о чем я говорил... но работает хорошо smile.gif

Самое то, лично мне понравилось. При работе с длинным буфером можно существенно уменьшить время вычисления, если избавиться от цикла FOR.
Код
int average(int val)
{
static int buf[BUFSZ];
static int current=0;
static long result=0;
result-=buf[current];
buf[current]=val;
result+=val;
if(++current==BUFSZ) current=0;
return result/BUFSZ;
}
galjoen
Цитата(sonycman @ Dec 8 2008, 21:13) *
Ого, вариант с программным ФНЧ - это интересно! Спасибо!

В общем, надо будет попробовать всеми тремя способами - благо места на ЖКИ хватает.
А весь смысл в том, чтобы показания на дисплее как можно точнее соответствовали показаниям отдельного амперметра.
Какое значение получается в амперметрах постоянного тока? Среднее? Действующее? Я не в курсе, к сожалению sad.gif

Вообще, про аббревиатуру RMS - root mean square - квадратичное значение?
То есть действующее значение? Тогда что такое эффективное значение?

99% амперметров меряют среднее значение. Даже на переменке. Просто потом помножают на коэффициент (для чистой синусоиды). На тех амперметрах, что меряют RMS, это обязательно напишут wink.gif .
А вообще RMS в амперметрах нужно для того, чтобы ток был пропорционален мощности, выделяющейся в чисто линейной+резистивной нагрузке. Формула: и квадрат делить на р. Но если нагрузка нелинейная, хоть и резистивная, например лампочка, то всё это уже не срабатывает. Не говоря уж о всяких индуктивных-емкостных нагрузках. Вобщем для каждой нагрузки нужен свой амперметр 07.gif .
Вывод: не заморачивайтесь и считайте среднее, с амперметром совпадёт наилучшим образом.
demiurg_spb
To: galjoen P=(I^2)*R, а не делить. Чем больше R, тем "труднее электронам":)
Цитата(galjoen @ Dec 9 2008, 20:33) *
Но если нагрузка нелинейная, хоть и резистивная, например лампочка, то всё это уже не срабатывает. Не говоря уж о всяких индуктивных-емкостных нагрузках. Вобщем для каждой нагрузки нужен свой амперметр 07.gif .
Вывод: не заморачивайтесь и считайте среднее, с амперметром совпадёт наилучшим образом.
А тут я с Вами полностью согласен. RMS считать имеет смысл для синусоидальных сигналов, в чём практического смысла для автора топика нет. И ещё. Скользящее среднее "хуже" медианной фильтрации, т.к. учитывает при расчёте результата все отсчёты и даже заведомо недостоверные (импульсные помехи). Ну а если требуется сильно понизить динамику то тут уже нужно применять последовательно включённый ФНЧ любой реализации. Если хотитите поднять разрешение - экспоненциальное сглаживание поможет. Кто во что горазд. ИМХО. Сейчас книг по ЦОС, что грязи и только слепой не увидит, да глухой не услышит, как кто-то их вслух почитываетsmile.gif И последнее, самое главное: голову надо использовать с умом, а чтоб ум завёлся надо его тренировать, самому докапываться до первоисточников, пытаться самому понять и прочувствовать физический смысл явления... Простите - наболело. Если я где-то ошибаюсь, то поправьте меня пожалуйста.
ARV
Цитата(demiurg_spb @ Dec 9 2008, 21:48) *
А тут я с Вами полностью согласен. RMS считать имеет смысл для синусоидальных сигналов, в чём практического смысла для автора топика нет.
гм... как раз для синусоидальных сигналов можно и не использовать (не считать) RMS - достаточно поправочного коэффициента (и для некоторых характерных форм тока тоже достаточно коэффициентов "формы" - см. в любом электротехническом справочнике). а вот когда форма тока далека от "справочной" - тут либо мерить электромагнитным амперметром, либо обсчитывать по формулам отсчеты АЦП (либо применять специальные микросхемы).

например, измерить действующее значение напряжения (тока) после обычного диммера (фазовое регулирование) не так-то просто...
demiurg_spb
Цитата(ARV @ Dec 9 2008, 22:15) *
гм... как раз для синусоидальных сигналов можно и не использовать (не считать) RMS - достаточно поправочного коэффициента (и для некоторых характерных форм тока тоже достаточно коэффициентов "формы" - см. в любом электротехническом справочнике). а вот когда форма тока далека от "справочной" - тут либо мерить электромагнитным амперметром, либо обсчитывать по формулам отсчеты АЦП (либо применять специальные микросхемы).

например, измерить действующее значение напряжения (тока) после обычного диммера (фазовое регулирование) не так-то просто...
Это понятно. Я использовал не то слово: не синусоидальных, а периодических. Т.к. этим алгоритмом (вычислением среднеквадратичного значения) находится эквивалентная по мощности постоянная величина за период. А какой период у автора топика - период обновления индикации (как-то притянуто, хотя и не исключено)... Всё что я хочу сказать - это то, что для постоянного сигнала как не считай получишь одно и тоже значение, т.к. не требуется искать этот самый эквивалент, поскольку оригинал им и являетсяsmile.gif Меня смешит больше другое - надпись TRUE RMS на некоторых приборах. Можно подумать, что просто RMS - это конечно RMS, но как-то не совсем TRUE:)
sonycman
Цитата(demiurg_spb @ Dec 9 2008, 23:43) *
А какой период у автора топика - период обновления индикации (как-то притянуто, хотя и не исключено)...

В принципе, так оно и есть. Нет смысла вычислять значение тока слишком часто - дисплей всё равно имеет большую инертность и просто не отобразит эти значения...
Думаю, обновлять показания раз за 0.3 - 0.5 секунды будет достаточно. Или даже ещё медленнее...
bloodden
Цитата(sonycman @ Dec 9 2008, 23:31) *
В принципе, так оно и есть. Нет смысла вычислять значение тока слишком часто - дисплей всё равно имеет большую инертность и просто не отобразит эти значения...
Думаю, обновлять показания раз за 0.3 - 0.5 секунды будет достаточно. Или даже ещё медленнее...

Чаще раза в 2-3 секунды не имеет смысла. Человек просто не осознаёт что конкретно он увидел. Это-ж штука не для конвеера smile.gif там народ смышлёный.
sonycman
Цитата(bloodden @ Dec 10 2008, 03:08) *
Чаще раза в 2-3 секунды не имеет смысла.

Ну уж нет. За 2-3 секунды ток может поненяться в разы и вернуться к исходному значению. И я это прекрасно замечу по индикатору, если буду обновлять два-три раза в секунду smile.gif
defunct
Цитата(sonycman @ Dec 10 2008, 02:43) *
Ну уж нет. За 2-3 секунды ток может поненяться в разы и вернуться к исходному значению. И я это прекрасно замечу по индикатору, если буду обновлять два-три раза в секунду smile.gif

Лишь бы LCD успел корректно отобразить ;>
Если сильно часто перерисовывать - есть шанс что младшие(изменяемые) разряды сольются в кашу. Вы конечно заметите, что ток изменился но толку от цифры-каши будет ноль.

Наверное не стоит обновлять чаще 2-х раз в секунду. 1-раз в сек, на мой взгляд, самое оно.
Также можно выводить минимальный и максимальный ток за период измерения.
sonycman
Цитата(defunct @ Dec 10 2008, 04:46) *
Лишь бы LCD успел корректно отобразить ;>
Если сильно часто перерисовывать - есть шанс что младшие(изменяемые) разряды сольются в кашу. Вы конечно заметите, что ток изменился но толку от цифры-каши будет ноль.

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

Другое дело, дисплей от телефона Siemens S65 - гораздо шустрее. Но даже там глаз хорошо замечает момент обновления экрана контроллером ЖКИ (а это частота в несколько десятков герц!).
Вот если бы можно было засинхронизироваться с моментом начала отрисовки, так сказать, с "кадровой" частотой... ну да это уже другая тема совсем... wink.gif
Microwatt
Цитата(defunct @ Dec 10 2008, 04:46) *
Лишь бы LCD успел корректно отобразить ;>
Если сильно часто перерисовывать - есть шанс что младшие(изменяемые) разряды сольются в кашу. Вы конечно заметите, что ток изменился но толку от цифры-каши будет ноль.

Наверное не стоит обновлять чаще 2-х раз в секунду. 1-раз в сек, на мой взгляд, самое оно.
Также можно выводить минимальный и максимальный ток за период измерения.

Тут диспут несколько бессмысленный.
Цифровой индикатор на лабораторном источнике безусловно - лихачество. Он крайне неудобен по сравнению со стрелочным прибором. На стрелочном приборе человек затрудняется с точным отсчетом, зато прекрасно чувствует динамику процесса. Чаще всего, это и нужно.
Если нужно повысить точность, то следует помнить, что человек не способен воспринимать символьные отсчеты быстрее 1 с. Это годится для индикатора с периодическим наблюдением за медленно меняющейся величиной.
Усреднение показаний?
Да, можно предложить кучу алгоритмов. Простейший - складывать ПОЛОВИНУ предыдущих и текущих показаний. Или еще замешивать два, три прошлых показания с убывающим коэффициентом. Можно просто вести контроль функции на гладкость. Т.е. ограничить изменение показаний только младшим разрядом, все время добавляя/вычитая единичку из предыдущего показания.
Но, опять же, при выключении нагрузки показания будут либо сильно запаздывать, либо будет сплошное мелькание младшего разряда индикатора. Нащупать компромисс придется уже на практике.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.