baton, фазоимпульсный регулятор из этой темы с MOC3083 работать не будет, так как она имеет встроенный детектор нуля.
OldBean в [Ненавязчивая автоматизация ректификационной установки] использует "алгоритм Брезенхема" пропуск полупериодов, другой метод регулирования.
Регулятор напряжения и тока на Arduino Pro Mini
sebra
Куратор
Республика Коми
147 85
Отв.540 25 Дек. 17, 00:49
baton
Доктор наук
Санкт-Петербург
648 230
Отв.541 25 Дек. 17, 02:18
sebra, понял, спасибо!
Тогда спаяю сам.
Тогда спаяю сам.
Chatterbox
Специалист
Калуга
123 60
Отв.543 27 Дек. 17, 19:54
Немного поправил алгоритм (от ChatterBox'a) и получилось заметно прибавить в точности регулирования.Tomat7, 27 Дек. 17, 11:26Спасибо. Выложи изменения.
sevpro
Доктор наук
Worldwide
769 281
Отв.544 27 Дек. 17, 22:19
На картинках изменения еще заметнееTomat7, 27 Дек. 17, 11:26Хотелось бы понять, откуда взялась картинка "было"? Параллельно цепи стабилизации была подключена нагрузка в 1750 Вт? Симмуляция? На цену деления временной шкалы хотелось бы взглянуть
Tomat7
Магистр
Черноморская губинния
236 138
Отв.545 27 Дек. 17, 22:31, через 12 мин
Выложи изменения.Chatterbox, 27 Дек. 17, 19:54Общая идея - начинать сбор суммы квадратов тока в момент (или сразу после) отработки прерывания по zero_cross.
Это приводит к тому, что в момент начала подсчёта ток будет близок к нулю.
В итоге получаем единообразие условий на каждом "подсчетном периоде".
Прикладываю файл с библиотекой, там понятно.
Добавлено через 5мин.:
Хотелось бы понять, откуда взялась картинка "было"? Параллельно цепи стабилизации была подключена нагрузка в 1750 Вт? sevpro, 27 Дек. 17, 22:19
В качестве нагрузки был 3кВт ТЭН. 1750вт - это заданная регулятору мощность.
Кстати, на видео ваттметр показывет около 1770вт при той же заданной мощности! Кто врёт - не знаю.
Обе картинки из приложения управляющего регулятором, точнее из его просмотрщика архивов, подробнее - https://simplight.ru/
Симмуляция?sevpro, 27 Дек. 17, 22:19:'(
На цену деления временной шкалы хотелось бы взглянутьsevpro, 27 Дек. 17, 22:19Да легко! Картинки в ассортименте с привязкой ко времени прикладываю.
Частота опроса регулятора опросной станцией - 1 секунда. Это и на графике видно.
На первой картинке (с синим графиком) запечатлен момент перехода на модифицированный алгоритм с одной из неудачных модификаций.
m16
Модератор
Тамбов
1.9K 1K
Отв.546 27 Дек. 17, 23:25, через 55 мин
Общая идея - начинать сбор суммы квадратов тока в момент (или сразу после) отработки прерывания по zero_cross.Tomat7, 27 Дек. 17, 22:31так и должно быть , а было иначе?
Tomat7
Магистр
Черноморская губинния
236 138
Отв.547 27 Дек. 17, 23:43, через 18 мин
m16, будь так добр, ткни меня носом в текст скетча где это есть.
А то мож я зря велосипед изобретаю.
А то мож я зря велосипед изобретаю.
sevpro
Доктор наук
Worldwide
769 281
Отв.548 28 Дек. 17, 06:56
Картинки в ассортименте с привязкой ко времени прикладываю.Tomat7, 27 Дек. 17, 22:31Ну и о каком "было" и "стало" может идти речь если графики снимались не просто не одновременно, а вообще в разное время суток?
Я потому и задал вопрос про симуляцию, что для корректности результатов графики нужно снимать одновременно на одинаковых (близких) нагрузках, а это в два раза больше оборудования.
m16
Модератор
Тамбов
1.9K 1K
Отв.549 28 Дек. 17, 08:04
будь так добр, ткни меня носомTomat7, 27 Дек. 17, 23:43
U_regulator_free_LCD_display_button.ino
U_regulator_free_7display_button.ino
U_regulator_free.ino
//======================================================== Обработка прерывания АЦП для расчета среднеквадратичного напр
ISR(ADC_vect)
{
byte An_pin = ADCL;
byte An = ADCH;
Uism = (An << + An_pin;
Uism *= Uism;// возводим значение в квадрат
Usumm += Uism; // складываем квадраты измерений
cntr++;
}
Tomat7
Магистр
Черноморская губинния
236 138
Отв.550 28 Дек. 17, 08:37, через 34 мин
m16,
В приведенном тобой коде нет проверки хоть какого-то условия, а в коде zero_crosss_int() нет сброса/поднятия флажков (или обнуления Usumm и cntr).
Я наверное реально торможу и поэтому не вижу как начало сбора измеренных значений (квадратов тока) привязано хоть к чему-нибудь по времени.
Может такая привязка в даташите на ATmel описана? Ну просвети тормоза!
В приведенном тобой коде нет проверки хоть какого-то условия, а в коде zero_crosss_int() нет сброса/поднятия флажков (или обнуления Usumm и cntr).
Я наверное реально торможу и поэтому не вижу как начало сбора измеренных значений (квадратов тока) привязано хоть к чему-нибудь по времени.
Может такая привязка в даташите на ATmel описана? Ну просвети тормоза!
m16
Модератор
Тамбов
1.9K 1K
Отв.551 28 Дек. 17, 08:58, через 21 мин
Tomat7, извини не подскажу, мопед не мой. sebra может просветить как автор. я в сях ни бельмеса. у меня свой проект стабилизатора на асме для тини13.
Tomat7
Магистр
Черноморская губинния
236 138
Отв.552 28 Дек. 17, 09:32, через 35 мин
Ну и о каком "было" и "стало" может идти речь если графики снимались не просто не одновременно, а вообще в разное время суток?sevpro, 28 Дек. 17, 06:56Думаешь за полдня я переключился на стабилизатор или мне домой "жирную" фазу завели?
нужно снимать одновременно на одинаковых (близких) нагрузкахsevpro, 28 Дек. 17, 06:56Нагрузка в обоих случаях одинаковая. Второй экземпляр делать не выжу смысла, да и ТЭН второй тоже не нужен.
Сегодня постараюсь сделать несколько переключений между разными алгоритмами в течении часа, каждый по 2-3 минуты.
В результаты такого эксперимента поверишь?
pisto
Студент
Стерлитамак
15 4
Отв.553 28 Дек. 17, 10:16, через 44 мин
В приведенном тобой коде нет проверки хоть какого-то условия, а в коде zero_crosss_int() нет сброса/поднятия флажков (или обнуления Usumm и cntr).
Я наверное реально торможу и поэтому не вижу как начало сбора измеренных значений (квадратов тока) привязано хоть к чему-нибудь по времени.Tomat7, 28 Дек. 17, 08:37
void zero_crosss_int() {
TCNT1 = 0;
zero++;
}
......
if (zero == 6) {//расчет среднеквадратичного//zero - количество полупериодов дря рассчета среднеквадратичного
sqrtUsum = Usumm / cntr; //
real_U = sqrt(sqrtUsum); //
cntr = 0;
Usumm = 0;// обнуляем суммы напряжений
zero = 0;
}
Расчет за 6 полупериодов,соответственно и привязка к каждому 6-му переходу.
Tomat7
Магистр
Черноморская губинния
236 138
Отв.554 28 Дек. 17, 11:34
Расчет за 6 полупериодов,соответственно и привязка к каждому 6-му переходу.pisto, 28 Дек. 17, 10:16pisto, где привязка к переходу?
(zero == 6) будет всё время до того как zero станет равно 7, а это один полупериод сетевой синусоиды или 10 миллисекунд.
Соответственно, и cntr = 0; Usumm = 0; произойдут в ЛЮБОЙ момент в течении этого полупериода - может в начале или в конце, когда U близко к нулю, а может в середине полупериода, когда U на максимуме. В простом случае - если код регулятора занимается только слежением за напряжением (током) - количество тактов от одного попадания в (zero == 6) до следующего будет одинаково. Но в коде есть всякие проверки (if..else) и некоторые из них срабатывают, есть общение через UART - всё это приводит к тому, что длительность периода от одного [if (zero == 6) {.. cntr = 0; Usumm = 0;}] до следующего может оказаться разным. И чем больше в коде еще функций отжирающих процессор, тем больше будет плавать длительность этого периода.
Смотри картинку - один подсчет будет за период между точками C-D, а следующий между точками A-B.
Не исключаю, что только у меня это проявляется так заметно - у меня и функций дополнительных Ардуина выполняет много и фаза сама по себе плавает сильно. ::)
В любом случае ТЭН устройство крайне инертное и для наших целей что "скакалка" +/- 5 ватт, что +/- 50 ватт без разницы. ;D
sebra
Куратор
Республика Коми
147 85
Отв.555 28 Дек. 17, 11:51, через 18 мин
И чем больше в коде еще функций отжирающих процессорTomat7, 28 Дек. 17, 11:34А это никого особо не волнует, как показало время. Некоторые пытаются запихнуть еще датчики температуры. И я в свое время еще повелся на кнопочки-экранчики...
Tomat7, Если есть исправленный алгоритм выкладывай, потестируем
Tomat7
Магистр
Черноморская губинния
236 138
Отв.556 28 Дек. 17, 11:58, через 8 мин
выкладывай, потестируемsebra, 28 Дек. 17, 11:51Так вот здесь же [сообщение #13199115] RegPower.zip приложен!
Некоторые пытаются запихнуть еще датчики температуры.sebra, 28 Дек. 17, 11:51Да помню я твое предупреждение. С двумя датчиками действительно перебор, а вот с одним прекрасно получается!
А еще LCD и дополнительные внешние коммуникации нормально тянет.
m16
Модератор
Тамбов
1.9K 1K
Отв.557 28 Дек. 17, 12:37, через 39 мин
есть общение через UART - всё это приводит к тому, что длительность периода от одного [if (zero == 6) {.. cntr = 0; Usumm = 0;}] до следующего может оказаться разным.Tomat7, 28 Дек. 17, 11:34посему под каждую процедуру отводить фиксированное время кратное полупериоду. в тыньке я делал так :
;******************************************************************************state2, state3 - целый период ацп в режиме непрерывного преобразования , на лету считается сумма квадратов SUMu и количество измерений за период Nu.
// счётчик полупериодов
// 00 - вычисление среднеквадратичного state0
// 01 - измерение напряжения управления state1
// 10 - измерение напряжения сети state2
// 11 - -----------//------------- state3
state0 - из полученных SUMu и Nu вычисляется среднеквадратичное напряжение на нагрузке Urms . Urms сравнивается с заданным напряжением управления Uctrl , вычисляется ошибка, корректируется ТОР таймера
state1 - измерение напряжения управления Uctrl, в вашем случае опрос уарта.
nod32
Бакалавр
Новокузнецк
90 20
Отв.558 02 Янв. 18, 12:15
Не нашел на какие пины подключается 1602. Есть тут такой вариант или только I2 и сборка LED?
sebra
Куратор
Республика Коми
147 85
Отв.559 03 Янв. 18, 10:32
nod32, в скетче есть комментарии как подключить дисплей напрямую
сообщение удалено