baton, фазоимпульсный регулятор из этой темы с MOC3083 работать не будет, так как она имеет встроенный детектор нуля.
OldBean в [Ненавязчивая автоматизация ректификационной установки] использует "алгоритм Брезенхема" пропуск полупериодов, другой метод регулирования.
				
				Регулятор напряжения и тока на Arduino Pro Mini
					sebra
					Куратор
					Республика Коми
					 148  87
					 
				
				 
				
					
						
						Отв.540  25 Дек. 17, 00:49
					
					
				
				
				
			
					baton
					Доктор наук
					Санкт-Петербург
					 648  230
					 
				
				 
				 Отв.541  25 Дек. 17, 02:18
 
						
						Отв.541  25 Дек. 17, 02:18
					
					
				
					sebra, понял, спасибо!
Тогда спаяю сам.
				
				
			Тогда спаяю сам.
					Chatterbox
					Специалист
					Калуга
					 123  61
				
				 Отв.543  27 Дек. 17, 19:54
 
						
						Отв.543  27 Дек. 17, 19:54
					
					
				Немного поправил алгоритм (от ChatterBox'a) и получилось заметно прибавить в точности регулирования.Tomat7, 27 Дек. 17, 11:26Спасибо. Выложи изменения.
					sevpro
					Доктор наук
					Worldwide
					 769  281
				
				 Отв.544  27 Дек. 17, 22:19
 
						
						Отв.544  27 Дек. 17, 22:19
					
					
				На картинках изменения еще заметнееTomat7, 27 Дек. 17, 11:26Хотелось бы понять, откуда взялась картинка "было"? Параллельно цепи стабилизации была подключена нагрузка в 1750 Вт? Симмуляция? На цену деления временной шкалы хотелось бы взглянуть
					Tomat7
					Магистр
					Черноморская губинния
					 240  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
					Магистр
					Черноморская губинния
					 240  138
				
				
					
						
						Отв.547  27 Дек. 17, 23:43 (через 18 мин)
					
					
				
				
					m16, будь так добр, ткни меня носом в текст скетча где это есть.
А то мож я зря велосипед изобретаю.
				
				
			А то мож я зря велосипед изобретаю.
					sevpro
					Доктор наук
					Worldwide
					 769  281
				
				 Отв.548  28 Дек. 17, 06:56
 
						
						Отв.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
					Магистр
					Черноморская губинния
					 240  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
					Магистр
					Черноморская губинния
					 240  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
					Магистр
					Черноморская губинния
					 240  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
					Куратор
					Республика Коми
					 148  87
					 
				
				 
				 Отв.555  28 Дек. 17, 11:51 (через 18 мин)
 
						
						Отв.555  28 Дек. 17, 11:51 (через 18 мин)
					
					
				И чем больше в коде еще функций отжирающих процессорTomat7, 28 Дек. 17, 11:34А это никого особо не волнует, как показало время. Некоторые пытаются запихнуть еще датчики температуры. И я в свое время еще повелся на кнопочки-экранчики...
Tomat7, Если есть исправленный алгоритм выкладывай, потестируем
					Tomat7
					Магистр
					Черноморская губинния
					 240  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
					Бакалавр
					Новокузнецк
					 93  21
				
				
					
						
						Отв.558  02 Янв. 18, 12:15
					
					
				
				
					Не нашел на какие пины подключается 1602. Есть тут такой вариант или только I2 и сборка LED?
				
				
				
			
					sebra
					Куратор
					Республика Коми
					 148  87
					 
				
				 
				 Отв.559  03 Янв. 18, 10:32
 
						
						Отв.559  03 Янв. 18, 10:32
					
					
				
					nod32, в скетче есть комментарии как подключить дисплей напрямую
				
				
				
			
				сообщение удалено
				
			
		









