О среднеквадратичном значении напряжения.
- Войдите на сайт для отправки комментариев
Добрый день, помогите немного, друзья. Я новичок. Стараюсь читать, изучать, но некоторые вопросы (в частности, данная задача) оказались не по зубам (квалификация пока ниже плинтуса).
Имеется надобность вычислить среднеквадратичное значение напряжения для симисторного стабилизатора мощности (нагреватель для ректификационной колонны, прошу прощения за такую подробность). Предполагаю делать это с развязкой от сети через цепочку: понижающий трасформатор->диодный мост (чтобы считывать положительные значения)->резистивный делитель с подстроечным потенциометром->аналоговый пин Ардуино УНО (ну, так как положено, с опорным напряжением). Считывать и вычислять хочу без таймера, просто в цикле "for". Формулу рассчета знаю. И вот тут вопросы:
1. Сколько полупериодов надо обсчитать для адекватного результата?
2. Сколько при этом получится измерений, учитывая конкретную плату?
3. Прочел, что возведение в степень Ардуино делает намного медленнее, нежели умножение. Отсюда вопрос: имеет ли смысл при рассчетах не возводить показатель в квадрат, а просто перемножать его само на себя?
Или этот путь излишне навороченный? Как альтернатива - определять максимум полупериода компаратором, по прерыванию измерять в этот момент напряжение и просто умножать полученное значение на 0,707?
Заранее спасибо и простите за ламерство.
01
float
sRed(
int
PIN){
02
int
cnt=0;
03
unsigned
long
Usumm=0;
04
unsigned
long
Uism=0;
05
unsigned
long
Usr=0;
06
float
sqrtUsum = 0;
07
int
per=537;
08
while
(cnt<per){
09
Uism = analogRead(PIN);
10
Uism *= Uism;
// возводим значение в квадрат
11
Usumm+= Uism;
// склдываем квадраты измерений
12
cnt++;
13
// Serial.print(PIN);
14
// Serial.print("_");
15
// Serial.println(Uism);
16
}
17
Usr=Usumm/per;
18
if
(Usr!=0)sqrtUsum = sqrt(Usr);
19
return
sqrtUsum;
20
}
У меня так.
Спасибо, а каким образом выходим на значение "537"? Почему именно столько?
возведение в степень Ардуино делает намного медленнее, нежели умножение.
И далеко не только Ардуино
имеет ли смысл при рассчетах не возводить показатель в квадрат, а просто перемножать его само на себя?
Нормальные люди именно так и делают.
Боюсь, что:
1. получите цену на прошлогодний овёс;
2. на время Вашего for контроллер будет умирать (игнорировать любые внешние воздействия, типа кнопок, внешних устройст и т.п., кроме прерываний).
"...Нормальные люди именно так и делают..."
Расту в собственных глазах :)
Кстати, не пойму, как цитировать не пост целиком, а только его фрагмент?
Сначала целиком, а потом ручками убирать лишнее.
Спасибо, а каким образом выходим на значение "537"? Почему именно столько?
При моих условиях было выведено эксперементально:)
Если контроллер на "фор" будет умирать, то стоит использовать альтернативный метод измерения?
Если контроллер на "фор" будет умирать, то стоит использовать альтернативный метод измерения?
Ну он не умирает, просто кроме поставленной задачи ни на что больше не реагирует. Многопоточности нет. Нужно оно вам или нет, в вашем проекте-решать только вам.
Да наверное, и не нужно: собственно, процесс такой: измеряем-вычисляем СКЗ напряжения, вычисляем нужную мощность и выдаем в нагреватель соответствующее количество полупериодов (по Брезенхейму), потом процесс повторяется. Другой вопрос, что может быть (может быть?!) в этой ситуации проще измерять "пупок" синуса и умножать его на 0,707 вместо многократных измерений, возведения в степень, суммирования, потом возведения всей байды в степень 0,5....
измерять "пупок" синуса и умножать его на 0,707
1.Как искать пупок будете?
2. пока измеряете напряжение (дуня только этой задачей занята), кто будет выдавать полупериоды?
1. "Пупок" ищется компаратором - и в прерывание...
2. Дуня изменяет напругу быстро (особенно, если штатно - многократное измерение и усреднение, а через" пупок"). Дальше - процедура пропуска нужного количества полупериодов. По окончании - снова в начало цикла: измерить напругу, посчитать нужную мощность и начать выдавать полупериоды.
Как-то так. Я сначала думал резать симистором полуволну, но это целый геморрой в связи с плохим качеством сети (гуляние частоты, "бороды", синусоидальная зависимости мощности от уггла открытия и т.д.). С пропуском полупериодов все делается проще.
Какая мощность? Может Брезенхем и не нужен?
4500 вт в максимуме. Разумеется, рабочий режим в пределах 35-70%. На меньших мощностях можно вполне было бы обойтись ШИМом с ключами на мосфетах или игбт. Но при такой мощности через питание прет такая помеха, что ардуина с ума сходит. Ничем отфильтроваться я не смог. А Брезик для такой задача - самое оно.
Ну, не наю, у меня фиксированная мощность от плитки индукционной, правда питание на дом стабилизировано. Вся регулировка отбором, ну и температуру воды надо контролировать (своя насоска, разбег в 1,5кг.)
Индукционная плитка (в большинстве случаев, исключая дорогущие) имеет шаг регулировки мощности слишко м большой. В таких условиях можно проводить только дистилляцию. Процесс ректификации требует высокой стабильности нагрева, поэтому нужен стабилизатор регулируемой мощности (ну и плюс прочая автоматика типа системы отбора в зависимости от температцуы колонны и т.д.). Эти устройства я давно уж реализовал. А стабилизатор мощности использую заводской. Но это вещь в себе, работает, конечно, и неплохо. Но хотелось бы сделать устройство, которое выполняет то, что я хочу. И как я хочу. То есть, чтоб оно подстраивалось под мои хотелки, а не наоборот :)
Я вас не отговариваю, просто делюсь опытом (пять лет). Спирит ~96%, по ареометру, горит синим пламенем, похмелья от продукта нет.))) Температура держиться стабильно в течении всего процесса ~ 11часов.
Мне кажется, мы вышли из темы. Пообщаться было бы интересно, но на другой площадки (или в мессенджерах, почте...). давайте перенесемся для начала, скажем вот сюда: bma280156@mail.ru. Вечером отвечу.
Если нужно честное RMS напряжения то нужно цифровать полный период напряжения 200 точками с привязкой к началу периода сети. На нане это занимает более 40 мс. 20 на оцифровку остальное на расчёт. По хорошему для использования в регуляторе надо усреднить перодов 10, учитывая инерционность нагревателя, это даёт возможность пропускать единичные скачки напяжения при включении соседями чайников.
У LT есть микросхемы измеряющие RMS напряжения, но цена не гуманная, зато имеем на выходе аналоговое значение, которе можно получать в любой момент.
На блюпилл расчёт RMS занимает 200мкс при этом АЦП в режиме ДМА не тратит время процессора на цикл оцифровки. На самогонщиках есть полностью готовый проект на этой плате со всеми наворотами.
Да наверное, и не нужно: собственно, процесс такой: измеряем-вычисляем СКЗ напряжения, вычисляем нужную мощность и выдаем в нагреватель соответствующее количество полупериодов (по Брезенхейму), потом процесс повторяется. Другой вопрос, что может быть (может быть?!) в этой ситуации проще измерять "пупок" синуса и умножать его на 0,707 вместо многократных измерений, возведения в степень, суммирования, потом возведения всей байды в степень 0,5....
Ну начнем с того, что в посто советских сетях форма "синуса" иногда бывает очень странная, и на "пупке" зачастую можно втретить выбросы. Так что если хотите нормальной стабилизации, то нужен RMS
При этом важно измерения делать с регулярным шагом. Для этого лучше всего запускать ADC в режиме "free run" . То есть после окончания измерения АЦП генерирует прерыравание, и само перезапускается.
А в прерывании надо результаты измерения возвести в кватдрат и просуммировать. Без переполнения 32 разрядного целого можно гарантированно просуммировать 1024 выборки. В, общем, можно и больше, поскольку гарантированно будет много "маленьких" значиний. От этого и плясать.
Если взять количество выборок кратных степени двойки, то деление сводится к сдвигу вправо, что производиться очень быстро в отличии от "нормального" деления.
Причем для стабилизации корень вычислять НЕ НАДО. Просто сравнивать сумму квадратов с заданной величиной (возведенном в квадрат напряжением стабилизации).
По поводу Брезинхема. Для стабилизации он не очень хорошо подходит. У него время регулирования порядка сенунд. Да и получение хорошей точности, особенно на малых значения не слишком простая задача. Плюс лампочки будут подмигивать. Соседям и домочадцам может непонравится.
Проще делать стабилизацию на фазовом методе. А задердку открытия тиристора регулировать с помощью упрощеного целочисленного ПИД регулятора. Это буквально десяток строк кода.
Кстати, не пойму, как цитировать не пост целиком, а только его фрагмент?
(quote)кусок скопированного текста(/quote)
скобки только квадратные[]
Не совсем понятно, зачем нужно это самое среднеквадратичное значение (кроме красивой индикации с мигающим циферками). ИМХО, для управления ладнее измерять целевой параметр - т.е. температуру браги или что там греется.
Есть понятие первичный параметр. Температура это производная величина и к тому же имеющаяя большую постоянную времени регулирования. Удержать среднеквадратичное значение напряжения проще. При этом колебание температуры существенно меньше.
ИМХО, для управления ладнее измерять целевой параметр - т.е. температуру браги или что там греется.
Температура - категорически не ладнее. Из конечных параметров при ректификации эффективно можно использовать только давление в колонне. Однако дельта давления (да и само оно) довольно низкие, поэтому отслеживать их (есть такие датчики) сложнее, нежели напряжение. Вернее, не сложнее технически, а адекватное выцарапывание данных.
Ну начнем с того, что в посто советских сетях форма "синуса" иногда бывает очень странная, и на "пупке" зачастую можно втретить выбросы. Так что если хотите нормальной стабилизации, то нужен RMS
При этом важно измерения делать с регулярным шагом. Для этого лучше всего запускать ADC в режиме "free run" . То есть после окончания измерения АЦП генерирует прерыравание, и само перезапускается.
А в прерывании надо результаты измерения возвести в кватдрат и просуммировать. Без переполнения 32 разрядного целого можно гарантированно просуммировать 1024 выборки. В, общем, можно и больше, поскольку гарантированно будет много "маленьких" значиний. От этого и плясать.
Если взять количество выборок кратных степени двойки, то деление сводится к сдвигу вправо, что производиться очень быстро в отличии от "нормального" деления.
Причем для стабилизации корень вычислять НЕ НАДО. Просто сравнивать сумму квадратов с заданной величиной (возведенном в квадрат напряжением стабилизации).
По поводу Брезинхема. Для стабилизации он не очень хорошо подходит. У него время регулирования порядка сенунд. Да и получение хорошей точности, особенно на малых значения не слишком простая задача. Плюс лампочки будут подмигивать. Соседям и домочадцам может непонравится.
Проще делать стабилизацию на фазовом методе. А задердку открытия тиристора регулировать с помощью упрощеного целочисленного ПИД регулятора. Это буквально десяток строк кода.
Спасибо, многое стало яснее. И как забирать материал и как его обсчитывать. Мерси за то, что корень из рассчетов рекомендуете убрать (сам до этого уже допёр, но сомнения глодали). Брезенхемом заинтересовался из очень простого соображения: импульс детектора ZeroCross при нашей сети опережает переход на ноль на НЕ стабильную величину. Отсюда непонятно, с какого момента надо отсчитывать время открытия симистора. В середке синуса эта неточность играет небольшую роль, а вот на краях - беда (синус, подлюка...).
А можно я обнаглею? Хотел попросить к Вас пример фрагмента кода считывания напруги и ее пересчета в СКЗ. Если не влом, конечно. Только с комментариями поподробнее: хочу разобраться, изучить и понять смысл и алгоритм. А то все, что высасывал из сети, или некомментировано или комментарии неинформативны. А я совсем новичок. Буду благодарен!
4500 вт в максимуме. Разумеется, рабочий режим в пределах 35-70%. На меньших мощностях можно вполне было бы обойтись ШИМом с ключами на мосфетах или игбт. Но при такой мощности через питание прет такая помеха, что ардуина с ума сходит. Ничем отфильтроваться я не смог. А Брезик для такой задача - самое оно.
У Вас принципиально не верный подход к управлению ректификационной колонной (это сугубо моё личное мнение, а занимаюсь я этим уже лет 8), начинал с такой же фигни как у Вас и была полная опа, то перегрев и выброс флегмы, то недогрев и процесс не идёт и постонный контроль и ещё раз контроль, тоесть от аппарата практически не отойти.
Нагрев бака у меня завязан на превышении давления в колонне над атмосферным с помощью датчиков давления (BMP 180 (2шт.)). После снятия головы процесс идёт полностью в атоматическом режиме, на выходе спирт96%. Процесс перегона 40 литров браги (кранов нет - калиброванный жиклёр) до хвостов около 15 часов. Ну конечно ни какого шима включение тен (3 Квт.) через zerro ни каких помех.
Я занимаюсь этим делом не намного меньше (6 лет). Ректификацией у меня тоже управляет автоматика. Регулирование нагрева - через РМ-2 (единственный элемент фабричного производства) и мощный триак (как раз с помощью фазового метода). Отбор тоже автоматический с системой температурного "старт-стопа" для отжатия хвостов. От жиклеров давно отказался, использую нержовый клапан. Настройкой РМ-2, старт-стопом и работой клапана заведует Ардуино (мой первый опыт программирования на ней, но там ничего сложного вообще нет). Ардуино и РМ-2 связаны между собой и управляются программой на ПК (писана на VB6, c ним я достаточно знаком). С датчиками давления дело имел, но недолго: отметил большую зависимость показаний от атмосферного давления, что мне не понравилось в приниципе. Кстати, где и как Вы размещали ВМРки. Один - как эталонный - понятно, где-то в стороне, а второй - "рабочий"? Я счел, что стабильный нагрев при хорошей термоизоляции такой инертной системы, как ТЭН-куб-колонна, вполне осуществим стабилизацией подаваемого напряжения. Никаких захлебов или недогревов нет в принципе. От моего устройства вполне можно отойти (есть системы аварийного отключения при переливе, перегреве и т.д.). Тем не менее, считаю легкомысленно бросать работающее оборудование неправильным. Нынешние же мои потуги связаны с тем, что хочу отказаться от ПК и полностью возложить все на автоматику, сделанную своими руками. И вот самый острый для меня вопрос - считывание и анализ напряжения в сети. Все остальное - уже примитив.
Не совсем понятно, зачем нужно это самое среднеквадратичное значение (кроме красивой индикации с мигающим циферками). ИМХО, для управления ладнее измерять целевой параметр - т.е. температуру браги или что там греется.
Температуру браги стабилизировать невозможно в приципе. Точнее застабилизировать-то можно, но процесс перегонки или ректификации при этом просто остановится.
При перегоне целевым параметром, как раз является подводимая мощность.
С датчиками давления дело имел, но недолго: отметил большую зависимость показаний от атмосферного давления, что мне не понравилось в приниципе.
В этом и заключается весь смысл использования датчиков давления, один датчик измеряет атмосферное давление, а второй датчик измеряет давление в кубе и соответственно процессор путём включения - выключения тен нагрева поддерживает определённое (устанавливается заранее, для моей колонны это атмосферное + 18мм.Рт.ст ) давление в кубе, которое получается довольно стабильным и практически весь процесс после с"ёма головы и до начала хвостов происходит в стационарном режиме (относительное колебание температуры дефлегматора не превышает 0.1С). Процесс дефлегмации начинается примерно при температуре куба 93-94С и заканчивается 96-97С. Изменение атмосферного давления не влияет на стационарность процесса так-как разность давления куб - атмосфера не меняется.
Ну, не надо забывать, что у нас квадрат, так что основной взнос в мощность получается как раз около 90 градусов. То есть нестабильнось детектирования 0 даст нам максимальную погрешность при уле открытия где-то в районе 70 и 110 градусов. Но поскольку мы отслеживаем накопленный интеграл, то это не особо важно. При ПИД регулировании ошибки скомпенсируются.
Ох, я это лет 7 назад делал, боюсь исходники и не найду уже. Да и делал я это на чистом С безо всякого wiring.
Есть на хоме тема, "Регулятор напряжения и тока на Arduino Pro Mini" целиком посвященная вопросу топика.
Есть на хоме тема, "Регулятор напряжения и тока на Arduino Pro Mini" целиком посвященная вопросу топика.
А "хом" это где?
А "хом" это где?
это первая ссылка в гугле
Есть на хоме тема, "Регулятор напряжения и тока на Arduino Pro Mini" целиком посвященная вопросу топика.
Я там давно сижу. И вот как раз много в это теме мне непонятно. Оттого и запостился тут.
Я не понимаю.
Вам скучно?
Нагреватель с инерцией в десятки-сотни секунд.
Нахрена вам фазовое управление?
Пропускаете 1 период из тысячи
и сразу получаете 0.1 % дискрету (шаг) регулировки мощности.
Или один из 1000000.
Но это уже для любителей "точности".
Выше уже говорилось, что при мощной нагрузке этот способ регулирования будет вызывать мигание ламп во всей хате.
Выше уже говорилось, что при мощной нагрузке этот способ регулирования будет вызывать мигание ламп во всей хате.
Лампы возможно и будут мигать (если проводка хреновая), но зато не будут генерится помехи и ардуина будет жить счастливо и долго.
Да
Если это на лампы подать то конечно будут мигать.
Но если вы думаете что если управлять таким образом тэном
и при этом напряжение будет проседать на пару- пятерку Вольт то лампы этого не заметят, а современным ЛЕД это совсем по пендикуляру.
Странно продублировалось.
Продолжу.
Какие киловатты вы видели в пивоварне?
Как в чайнике 2 ?
И у вас при включении напряжение садится?
Зря мучаетесь, здесь ушли в область теологии, а она, как знаете, алогичная наука.))))
"...о, сколько нам открытий чудных..."
Читаю, изучаю, сталкиваюсь...
Есть такие микросхемы (конверторы СКЗ в постоянное напряжение), к примеру, AD737. Почудилось мне, что на ход ей надо подать напряжение на ТЭН (огрызки синусоиды после регулятора), получить некое значение постоянки, сниять эту постоянку на аналоговый вход Ардуины - и получается отчетливая обратная связь по напряжению. Дальше - задача для первоклассника. Или я что-то неправильно понял про эти конверторы?
Если правильно, то не нарисует ли кто схему подключения измеряемой напруги к конвертору? А то из дарашита я этого не понял (в такой электронике совсем не силен).
Главный по тарелочкам -wdrakula - что-то не отметился в теме, непорядок )))
"...о, сколько нам открытий чудных..."
Читаю, изучаю, сталкиваюсь...
Есть такие микросхемы (конверторы СКЗ в постоянное напряжение), к примеру, AD737.
Так она стоит дороже ардуины. Взять тиньку, пусть она меряет и считает. И передает в главную ардуину, хоть шимом, хоть по SPI.
так и разбирайтесь тогда конкретно с тем, что непонятно, а то вам тут уже навешали бочку арестантов
Цена не так уж и велика. А что такое тинька?
Выше уже говорилось, что при мощной нагрузке этот способ регулирования будет вызывать мигание ламп во всей хате.
Лампы возможно и будут мигать (если проводка хреновая), но зато не будут генерится помехи и ардуина будет жить счастливо и долго.
Кстати именно так и регулируется средняя мощность микроволновок.
http://arduino.ru/forum/programmirovanie/attiny13-i-arduino-ide
Из серии "а что такое веранда?")
Из серии "а что такое веранда?")
А что про веранду? Я знаю историю про "а что такое шабат" :)