ПИД регулятор

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Добрый день.

Подскажите пожалуйста, как в конкретном случае применить ПИД.
НА входе — измеренная толщина объекта (input) 50, имеем установленный (setpoint) 65
в микронах.
На выходе (computePID ) имеем безразмерную величину, напримерP: ошибка (65-50)*kp (1) = 15 единиц и тд.
Толщину материала задает мотор со скоростью работы Speed от 1000 до 6000 оборотов.

Как связать скорость вращения и управляющий безразмерный сигнал ПИД?
speed = speed * computePID ?
speed = speed - computePID ?
speed = speed + speed * computePID ?
у меня какой то тупик.... как соединить разноразмерные величины?
 

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
speed = computePID
Но для начала нужно доказать, что в этой задаче не работает табличное управление.
 

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Спасибо, но получается странно:
C++:
// функция пид
int computePID(float input, float setpoint, float kp, float ki, float kd, float dt, int minOut, int maxOut) {
  float err = setpoint - input;
  static float integral = 0, prevErr = 0;
  integral = constrain(integral + (float)err * dt * ki, minOut, maxOut);
  float D = (err - prevErr) / dt;
  prevErr = err;
  return constrain(err * kp + integral + D * kd, minOut, maxOut);
}
в моем случае
err =65-60 = 15
интеграл и дифф для простоты опустим пока
функция computePID (15*1, 1000, 6000) вернет просто 1000 об/минуту
если
speed = computePID
то скорость мотора станет 1000 об в минуту...
 

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
Может быть, функции надо дать другие коэффициенты? Может быть, о правильном выборе коэффициентов очень умные люди написали много умных материалов, которые нужно прочитать перед тем, как тыкать непонятно что непонятно куда?
 

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
так я и прошу конкретной помощи, как измеряя микроны и отклонение от заданного - регулировать обороты=)
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,975
634
45
Может для начала почитать/посмотреть как работает П/ПИ/ПИД регулятор? Возможно тогда все вопросы отпадут (и появятся новые) :)
 

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
@78125,
Хорошо, давай еще раз дам тебе конкретный совет.
ШАГ 1: Доказать, что в этой задаче не работает табличное управление.
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Как мне кажется нужна ещё некая зависимость толщины от оборотов двигателя. По хорошему - нужно знать или оценить реактивности системы, задержки и т.п.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
500
145
[ШАГ 1: Доказать, что в этой задаче не работает табличное управление.
Можете дать ссылку на Табличное управление? Решил почитать. То, что я нашел наверное не то, что вы имели в виду
5.6.2. Табличное управление
Наиболее простым методом адаптации ПИД-регулятора к изменяющимся свойствам объекта управления является табличное управление коэффициентами регулятора.
 

78125

✩✩✩✩✩✩✩
1 Дек 2019
76
2
Сделал так.
Коэфф. через потенциометры задаю, вывожу на экран.
Визуально работает.

C++:
#include <GyverPID.h>
GyverPID regulator(1, 0, 0, 500);
 void setup()
{
regulator.setDirection(REVERSE); //напрвление регуулирования
regulator.setLimits(minSpeed, maxSpeed); //пределы
regulator.setpoint = SizeConst; //размер поддержания
 }
void loop() {
if(  millis() - MotorSpeedUpdateTimer > 500) { // расчет и обновление скорости
                                              MotorSpeedUpdateTimer = millis();
                                              //ПИД
                                              regulator.input  = NOWSize;
                                              motorSpeed = regulator.getResultTimer();
                                            }
}
 

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
Значит, что составляешь таблицу соответствия установка -> выход, без всяких сложных алгоритмов. Можно с линейной интерполяцией, если значений сильно много.