-
Notifications
You must be signed in to change notification settings - Fork 0
/
PID.ino
30 lines (25 loc) · 1.58 KB
/
PID.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Пид регулятор - это особый способ управления подающими импульсами
// Обычно используется при построении движения какого-то механизма, задействующий механическую тягу
// Управление моторами, сервоприводами и прочими механизмами
// Коэфиценты подбираются индивидуально для каждой установки
// Обнуляя один из коэфицентов, можно изменять этот регулятор на П-ПД-ПИ-Д
int Kp = 0.4;
int Ki = 0.1;
int Kd = 0.6;
float error, prevErr;
// функция по организации вычислений нового импульса, исходя от переданных данных
// мы передаем в нее наше значение текущего импульса, желаемое значение и разницу в замерах по времени
int PID(int input, int target, int dt){
// инициализируем переменные PID регулятора
int P, I, D;
// Вычисляем значения
P = target - input;
I = I + (target - input) * dt;
error = target - input;
D = (error - prevErr) / dt;
// предыдущая ошибка сравнивается с текущей ошибкой и заменяется
prevErr = error;
// считаем выходной сигнал
int out = P*Kp + I*Ki + D*Kd;
return out;
}