Аппаратная платформа Arduino для автоматизации наших процессов
dee
Научный сотрудник
Минск
6.5K 1.7K
Отв.1060 12 Марта 15, 12:46
что бы пересчитать время открытия симистора в мощность достаточно одной формулы
Отв.1061 12 Марта 15, 12:51, через 6 мин
Да не, я работаю пропуском полупериодов, так помех меньше
dee
Научный сотрудник
Минск
6.5K 1.7K
Отв.1062 12 Марта 15, 12:53, через 2 мин
тогда могу тебе подкинуть идею как увеличить точность установки мощности, но как реализовать ее я не думал
Отв.1063 12 Марта 15, 12:56, через 4 мин
Да ну точность нормальная, у меня сеть хорошая, точность можно повысить просто увеличив массив например до 200
Добавлено через 1мин.:
Но от идеи не откажусь
Добавлено через 1мин.:
Но от идеи не откажусь
dee
Научный сотрудник
Минск
6.5K 1.7K
Отв.1064 12 Марта 15, 13:44, через 49 мин
массив в 256 значений дает 2,56 секунды период, не знаю - много это для РК или мало, точность получается 0,4% а вот если взять период в 10 тактов то получится точность 10% НО можно использовать переключение между соседними режимами, например 15% можно получить чередуя 10% и 20%, 12% - 4 10% и 1 20% включения, 11% 9 10% и 1 20%.
алгоритм, кмк, может быть такой: находиться ближайшее значение мощности и вычисляется ошибка в установке, одновременно вычисляется и корректировка, которую дает переход на соседнее значения. когда сумма ошибок становиться больше чем корректировка происходит разовый переход на соседнее значение, от суммы ошибки отнимается корректировка и процесс зацикливается.
например контроллер установлен на 12%, ближайшее значение - 10%, ошибка 2%, соседнее - 20%, корректировка 8%. первый такт - ошибка 2%, второй такт - ошибка 4%, третий такт ошибка 6%, четвертый такт - ошибка 8%, включается корректировка 20% 5й такт ошибка 0%, 6й такт ошибка 2% и т.д.
алгоритм, кмк, может быть такой: находиться ближайшее значение мощности и вычисляется ошибка в установке, одновременно вычисляется и корректировка, которую дает переход на соседнее значения. когда сумма ошибок становиться больше чем корректировка происходит разовый переход на соседнее значение, от суммы ошибки отнимается корректировка и процесс зацикливается.
например контроллер установлен на 12%, ближайшее значение - 10%, ошибка 2%, соседнее - 20%, корректировка 8%. первый такт - ошибка 2%, второй такт - ошибка 4%, третий такт ошибка 6%, четвертый такт - ошибка 8%, включается корректировка 20% 5й такт ошибка 0%, 6й такт ошибка 2% и т.д.
Отв.1065 12 Марта 15, 13:49, через 5 мин
Т.е. как бы двухуровневый брезенхэм получается... Ну надо думать
KD
Научный сотрудник
Танкоград
1.4K 647
Отв.1066 12 Марта 15, 13:57, через 8 мин
если пропускать по целому периоду (а не полупериодами, дабы не провоцировать появление постоянной составляющей) то получим точность установки 2% на секундном интервале, что более чем достаточно, к примеру изменение сетевого напряжения на 2 В даст ту же погрешность.
Так что хз-хз, нужно ли все это.
Лучше ток/напряжение мерять как делает msg31, больше пользы будет
Так что хз-хз, нужно ли все это.
Лучше ток/напряжение мерять как делает msg31, больше пользы будет
dee
Научный сотрудник
Минск
6.5K 1.7K
Отв.1067 12 Марта 15, 14:03, через 7 мин
блок питания с детектором нуля и измерителем напряжения на предыдущей странице: два стабилитрона, два резистора и диод. для защиты от перенапряжения понадобится еще один стабилитрон
KD
Научный сотрудник
Танкоград
1.4K 647
Отв.1068 13 Марта 15, 08:00
блок питания с детектором нуля и измерителем напряжения на предыдущей страницеdee, 12 Марта 15, 16:03не нравится он мне
ну детектор еще прокатит, только поправку надо будет делать
а вот измерять напряжение транса который нагружен переменной (реле включилось/выключилось) нагрузкой не совсем правильно, впрочем выходное напряжение транса работающего на ХХ тоже далеко не в линейной зависимости от входного
правильнее вообще ток в нагрузке контролировать, заказал ACS712, пока в пути
детектор [сообщение #12242572] вчера собрал
работает, не греется
Отв.1069 13 Марта 15, 08:31, через 32 мин
правильнее вообще ток в нагрузке контролировать, заказал ACS712, пока в путиKD, 13 Марта 15, 08:00m16 правильно говорит.
я уже месяц думаю над этим, и все больше убеждаюсь, что более качественно, чем пид-регулирование по току нагрузки, нельзя будет стабилизировать мощность.
svarnoy
Профессор
Жуковский.
8.6K 4.4K
Отв.1070 14 Марта 15, 21:15
Сделал ещё в том году, мысль вроде интересная.
На фотографии, две крутилки снизу слева, это галетный переключатель на 16 позиций слева, и переменный резистор справа. Ручки одинаковые.
Переключатель переключает на режимы: СС/ Ректификация/ Тушёнка/ сыр/ пользовательский.
Резистор, с плавающим числом. В зависимости от режима ему присваиваются разные значения и множители.
Например:
Гоним сырец с браги, нажали старт. Единственный параметр который можно/нужно регулировать, это температура в кубе до которой гоним.
У резистора множитель стоит, что бы весь его ход был в пределах 80-101. Это значение и будет точкой остановки.
Делаем ректификат:
Тут задаваемый параметр, только головы. Я отбираю головы по времени, при фиксированном отборе 50-70 мл/час.
В данном случае, после нажатия старт, кручу до нужного, множитель 0 тоесть до 1023 минуты.
Тушёнка:
При переключении на режим тушёнка, отображается температура готовки. Множитель стоит, что бы было 90-125.
Выставляю температуру, при нажатии старт, резистор работает на время готовки, с множителем 20-150.
С сыром оказалось всё на много сложнее, и готового решения пока нет.
Пользовательский, можно в ручном режиме пользоваться всеми ресурсами.
На фотографии, две крутилки снизу слева, это галетный переключатель на 16 позиций слева, и переменный резистор справа. Ручки одинаковые.
Переключатель переключает на режимы: СС/ Ректификация/ Тушёнка/ сыр/ пользовательский.
Резистор, с плавающим числом. В зависимости от режима ему присваиваются разные значения и множители.
Например:
Гоним сырец с браги, нажали старт. Единственный параметр который можно/нужно регулировать, это температура в кубе до которой гоним.
У резистора множитель стоит, что бы весь его ход был в пределах 80-101. Это значение и будет точкой остановки.
Делаем ректификат:
Тут задаваемый параметр, только головы. Я отбираю головы по времени, при фиксированном отборе 50-70 мл/час.
В данном случае, после нажатия старт, кручу до нужного, множитель 0 тоесть до 1023 минуты.
Тушёнка:
При переключении на режим тушёнка, отображается температура готовки. Множитель стоит, что бы было 90-125.
Выставляю температуру, при нажатии старт, резистор работает на время готовки, с множителем 20-150.
С сыром оказалось всё на много сложнее, и готового решения пока нет.
Пользовательский, можно в ручном режиме пользоваться всеми ресурсами.
msg31
Научный сотрудник
Барнаул
4.6K 2.5K
Отв.1071 15 Марта 15, 05:08
m16 правильно говорит.
я уже месяц думаю над этим, и все больше убеждаюсь, что более качественно, чем пид-регулирование по току нагрузки, нельзя будет стабилизировать мощность.g100m, 13 Марта 15, 08:31
Коллеги, подскажите, как Вы ПИД будете применять при использовании одного только датчика тока и Брезенхема?
Я понимаю для фазового управления можно: рассчитали угол открытия симистора, затем фактическую мощность через датчик тока замеряли и ПИД применяем если нужная мощность не совпала с требуемой.
А для Брезенхеме по-моему там никакой ПИД вообще не нужен. Измеряете квадрат тока протекающий в сети за полу-период (или за несколько), затем определяете среднеквадратичный ток, из среденеквадратичного тока мощность. Делите требуемую мощность на фактическую и получаете коэффициент для Брезенхема. Как мне кажется, что он кореллирует с пропорциональным коэффициент для ПИД. Остальные коэффициенты в этом случае вырождены, то есть нулевые.
Ну и чтобы не флудить в ветке предлагаю недавно написанную мной функцию извлечения квадратного корня для квадратов чисел от 90 д 255.
#define MAX_TABLE_SQRT 34
unsigned char tableSQRT[MAX_TABLE_SQRT+1]; //Значение корня
unsigned int tableSQ[MAX_TABLE_SQRT+1]; //Значение квадрата
// Функция расчета квадратного корня.
// Значения корней от 0 до 90 и от 256 до 512 считаются по очень приблизительным формулам, поскольку такое значение среднеквадратичного в нормальной сети 220 вольт недопустимо
// Больше 512 значение не определено.
int my_sqrt(unsigned long tsQT)
{ char i;
unsigned int sQT; // Временная переменная, чтобы поменьше сравнивать 4-битных чисел.
int res=666;
// Если попадаем в диапазон
if (tsQT<tableSQ[0])
{
// Если меньше минимального значения, тогда расчет по крайне приближенной формуле
res=tsQT*tableSQRT[0]/tableSQ[0];
}
else
if (tsQT<=tableSQ[MAX_TABLE_SQRT-1])
{
sQT=tsQT;
for(i=1;i<MAX_TABLE_SQRT;i++)
{
if (tableSQ[i-1]<=sQT && tableSQ>=sQT)
{
if (tableSQ[i-1]==sQT) res=tableSQRT[i-1]; // На крайних значениях берем готовые цифры
else
if (tableSQ==sQT) res=tableSQRT; // На крайних значениях берем готовые цифры
else res=(sQT-tableSQ[i-1])*(tableSQRT-tableSQRT[i-1])/(tableSQ-tableSQ[i-1]) + tableSQRT[i-1] +1; // На промежуточных вычисляем.
return res;
}
}
}
else
{
// Если больше максимального считаем по крайне приближенной формуле, исходя из максимума значений в 512
res=(tsQT-tableSQ[MAX_TABLE_SQRT-1])*(512-tableSQRT[MAX_TABLE_SQRT-1])/(262144-tableSQ[MAX_TABLE_SQRT-1]) + tableSQRT[MAX_TABLE_SQRT-1] +1;
}
return res;
}
Таблицу квадратов сначала необходимо проинициализировать.
for(i=0;i<MAX_TABLE_SQRT;i++)
{ tableSQRT=(int) i*5+90;
tableSQ=(unsigned int) tableSQRT*tableSQRT;
}
Дятел
Доктор наук
NA
554 119
Отв.1072 15 Марта 15, 06:34
Я понимаю для фазового управления можно: рассчитали угол открытия симистора, затем фактическую мощность через датчик тока замеряли и ПИД применяем если нужная мощность не совпала с требуемой.Подобным алгоритмом пользуюсь я.
А для Брезенхеме по-моему там никакой ПИД вообще не нужен. Измеряете квадрат тока протекающий в сети за полу-период (или за несколько), затем определяете среднеквадратичный ток, из среденеквадратичного тока мощность. Делите требуемую мощность на фактическую и получаете коэффициент для Брезенхема. Как мне кажется, что он кореллирует с пропорциональным коэффициент для ПИД. Остальные коэффициенты в этом случае вырождены, то есть нулевые.msg31, 15 Марта 15, 05:08
ПИД как таковой не нужен в нашем случае, только пропорциональная часть. Это не терморегулирование, тут нет инерционности.
Пользую только датчик тока.
Кроме того таблицу я получаю при первом включении- калибровке, а не расчетным путем интеграла синуса.
Это сводит на нет необходимость определения сдвига фронта датчика нуля от истинного нуля.
Кроме того таблица строится не с определенным шагам по углу включения, а по мощности- это увеличивает точность. Шаг по мощности не постоянный, а изменяется пропорционально мощности.
К примеру: 100 вт, 110,125,150,180,210 и т.д
Отв.1073 15 Марта 15, 09:41
Коллеги, подскажите, как Вы ПИД будете применять при использовании одного только датчика тока и Брезенхема?msg31, 15 Марта 15, 05:08а никто про Брезенхема и не говорил в совокупности с датчиком тока, речь шла именно о угле открытия.
если пропускать полупериоды, ты прав абсолютно.
Дятел
Доктор наук
NA
554 119
Отв.1074 15 Марта 15, 12:01
Ни интегральной, ни дифференциальной части для регулирования мощности на ТЭН-е на обеих алгоритмах ( угол или пропуск полупериодов) не нужно.
сообщения удалены (26)
nakhalovka
Научный сотрудник
moskva
446 586
Отв.1075 04 Мая 15, 13:37
Нужна помощь в написание скетча, несложного, за написании приз, 10 литров домашнего пива. Плата Arduino Pro Mini . будет четыре кнопки и светодиод. При нажимании одной из низ светодиод будет мигать с разным интервалом. Более подробно расскажу в личку или по телефону.
Добавлено через 8ч. 48мин.:
Ну а если не хватит пива кальвадосика добавлю. Если есть другие варианты то в личку.
Программа не сложная. А то я Arduino не практиковал.
Добавлено через 8ч. 48мин.:
Ну а если не хватит пива кальвадосика добавлю. Если есть другие варианты то в личку.
Программа не сложная. А то я Arduino не практиковал.
mak
Модератор
Екатеринбург
6.3K 1.8K
Отв.1076 05 Мая 15, 06:28
Напиши в личку, сделать не сложно, помогу
nakhalovka
Научный сотрудник
moskva
446 586
Отв.1077 05 Мая 15, 11:18
Напиши в личку, сделать не сложно, помогуmak, 05 Мая 15, 06:28
Написал.
MuxaJIbI4
Студент
tsk
12 2
Отв.1078 30 Июня 15, 19:41
вроде разобрался, один вопрос по поводу реле низкого /высокого уровня, можно простыми словами как разобраться какое у меня реле и какое значение выбирать? KLP_HIGH
Grin52
Бакалавр
Нижний Новгород
68 8
Отв.1079 06 Июля 15, 16:18
Решил замутить пивоварню, по истечению 2-х месяцев вот что вышло, коробок мелкий, пришлось повозиться, проводки в дальнейшим сделаю короче(наверное), хотел сделать кнопки "джойстиком" не вышло, так и не понял почему, поэтому сделал в линию, "гемороя" от этого на корпусе много образовалось пришлось делать наклейку, заказал в типографии еще в процессе. Это сейчас бумага для визуальной наглядности! . )
Вопрос по насосу для прокачки сусла, по литературе читал, что его можно подключить прямо к электромеханическому реле 5V. Вопрос выдержит или нет и подключается аналогичным образом как и реле нагревателя или нет???
Вопрос по насосу для прокачки сусла, по литературе читал, что его можно подключить прямо к электромеханическому реле 5V. Вопрос выдержит или нет и подключается аналогичным образом как и реле нагревателя или нет???