Пт май 13, 2022 16:10:59
dt из программы выкинуть ни-как не получится! но, если dt всегда равен 0,01с (или другому значению, важно, что он постоянен) то его можно учесть в прикомпонентных коэффициентах вот и весь фокус...
Пт май 13, 2022 16:15:04
Пт май 13, 2022 16:17:04
Пт май 13, 2022 16:26:01
Пт май 13, 2022 16:34:45
Пт май 13, 2022 18:02:42
Во-вторых: Здесь интегральную составляющую лучше считать так:
Integral += error * Ki;
Далее - ограничение. Это и будет I.
Integral += error * dt;
if (Integral > max/Ki) {
Integral = max/Ki;
} else if (Integral < -max/Ki) {
Integral = -max/Ki;
}
I = Ki*Integral;
Пт май 13, 2022 18:21:10
Пт май 13, 2022 18:42:49
Сб май 14, 2022 07:26:40
Сб май 14, 2022 08:23:45
Сб май 14, 2022 09:35:13
Сб май 14, 2022 10:13:54
Сб май 14, 2022 11:10:55
jcxz писал(а):Ув. Ivanoff-iv уже объяснил. Вкратце, если переписать вычисление интегральной как я советовал, то будет:
Integral += error * dt * Ki;
где: dt * Ki - const. А зачем многократно вычислять одно и то же, если его можно вычислить только один раз - при настройке Ki? А если учесть, что само значение Ki - это просто безразмерный коэффициент, не имеющий физического выражения (в метрах/кг/etc.) и Вы его просто подбираете каким-то методом, то просто отбрасывайте dt из формулы и подбирайте Ki.
rusl32 писал(а):ТС рулит синусоидой пропорционально шимом, вроде. Что даст сильно нелинейную зависимость задание-мощность. Тяжко пиду будет.
Откуда взялся период в 10мс? Вообще-то, период вычисления- это величина расчётная. Неужели так сложно почитать об инженерных методах настройки регуляторов?
Кстати, и период снятия отсчётов с АЦП тоже берётся не от фонаря, а связан и с периодом регулирования, и с частотой сети.
Сб май 14, 2022 12:17:36
Сб май 14, 2022 12:47:40
Сб май 14, 2022 13:01:01
Сб май 14, 2022 13:56:03
чем чаще вызывать алгоритм - тем лучше.
Сб май 14, 2022 14:47:44
Сб май 14, 2022 15:44:52
Сб май 14, 2022 21:42:05