Регулятор оборотов коллекторного двигателя

flying
Offline
Зарегистрирован: 12.11.2011

 У меня получается такое:

RPM = 1525 PWM = 255 P = 0 I = 396
RPM = 1527 PWM = 255 P = 0 I = 396
RPM = 1527 PWM = 255 P = 0 I = 396
RPM = 1526 PWM = 255 P = 0 I = 343
RPM = 1528 PWM = 255 P = 0 I = 343
RPM = 1529 PWM = 255 P = 0 I = 343
RPM = 1528 PWM = 255 P = 0 I = 290
RPM = 1527 PWM = 255 P = 0 I = 290
RPM = 1525 PWM = 255 P = 0 I = 290
RPM = 1522 PWM = 237 P = 0 I = 237
RPM = 1522 PWM = 237 P = 0 I = 237
RPM = 9881 PWM = 237 P = 0 I = 237
RPM = 7396 PWM = 0 P = 0 I = 0
RPM = 2764 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 1030 PWM = 0 P = 0 I = 0
RPM = 0 PWM = 200 P = 200 I = 0
RPM = 106 PWM = 255 P = 200 I = 100
RPM = 7132 PWM = 100 P = 0 I = 100
RPM = 4921 PWM = 100 P = 0 I = 100
RPM = 4217 PWM = 0 P = 0 I = 0

 

постоянно дергается.

Завтра попробую с библиотекой PID http://arduino.cc/playground/Code/PIDLibrary

maksim
Offline
Зарегистрирован: 12.02.2012

Значит не правильно подобраны параметры регулирования

flying
Offline
Зарегистрирован: 12.11.2011

 Попробую уже завтра покрутить параметры.

whoim
Offline
Зарегистрирован: 03.11.2011

 а как выглядит управление двигателем?

maksim
Offline
Зарегистрирован: 12.02.2012

 И если будете использовать мой код ПИ-ругулятора, перекопируйте его снова, я там внес изменения.

flying
Offline
Зарегистрирован: 12.11.2011

 Управление двигателем, после arduinы стоит драйвер ir2110 и 9 шт IRF640

whoim
Offline
Зарегистрирован: 03.11.2011

flying пишет:

 Управление двигателем, после arduinы стоит драйвер ir2110 и 9 шт IRF640

 

схемкой не поделитесь?

flying
Offline
Зарегистрирован: 12.11.2011

 Она у на работе, в понедельник поделюсь. Схемка очень простая) Долго не мог подобрать транзисторы, одни сразу горели, вторые через пару минут под нагрузкой. Остановился на IRF640B, в понедельник выложу, будет все понятно.

Вам спасибо за помощь.

maksim
Offline
Зарегистрирован: 12.02.2012

Дописал плавный пуск и начальную компансацию статической ошибки.

#define RPMpin 2 // датчик Холла
#define PWMpin 5 // выход ШИМ на двигатель

int rpmzad = 3000; // заданное значение оборотов об/мин
float Kp = 0.1;    // коэф. усиления (пропорциональный)
float Ki = 0.05;   // коэф. усиления (интегральный)
int Ti = 100;      // время интегрирования в милисекундах

int norm = 0;
long micros1 = 0;
long millis1 = 0;
int rpm = 0; // текущие обороты об/мин
int P = 0;
int I = 0;

void setup() { 
  Serial.begin(9600);
  digitalWrite(RPMpin, 1); //
  pinMode(PWMpin, OUTPUT);
  attachInterrupt(0, RPM, FALLING);
  analogWrite(PWMpin, 24); // минимальное значение ШИМ для старта
  int i = 24;//  минимальное значение ШИМ для старта (то же самое)
  delay(1000);
  while(rpm < rpmzad-30){
    analogWrite(PWMpin, i++);
    delay(1000); // время нарастания ШИМ
    Serial.print("RPM = "); 
    Serial.print(rpm, DEC); // об/мин  
    Serial.print('\n');     
  }  
  norm = i;
  Serial.print('\n');
  Serial.print("NORM = "); 
  Serial.print(norm, DEC); // ШИМ  
  Serial.print('\n'); 
  Serial.print('\n');  
}

void loop() {
  if(micros()-micros1 > 500000){ // если обороты меньше 120 об/мин
    rpm = 0;                     // значит обороты равны 0 об/мин
  }
  P_reg();
  I_reg();
  int PI_reg = P + I;
  if(PI_reg < 0){ // ограничение по максимуму
    PI_reg = 0;
  }
  if(PI_reg > 255){ // ограничение по максимуму
    PI_reg = 255;
  }
  analogWrite(PWMpin, PI_reg);

  Serial.print("RPM = "); 
  Serial.print(rpm, DEC); // об/мин 
  Serial.print("  PWM = ");
  Serial.print(PI_reg, DEC);
  Serial.print("  P = ");
  Serial.print(P, DEC);
  Serial.print("  I = ");
  Serial.print(I, DEC);
  Serial.print('\n');
}

void RPM (){ // вычисление оборотов
  rpm = (1000000.0/(micros() - micros1))*60;
  micros1 = micros();
}

void P_reg(){ // пропорциональная составляющая
  P = Kp*(rpmzad - rpm) + norm;

  if(P < 0){ // ограничение по минимуму
    P = 0;
  }
}

void I_reg(){ // интегральная составляющая 
  //static long millis1;
  if(millis()-millis1 > Ti){
    if(rpmzad > rpm){
      I += Ki*(rpmzad - rpm);
    }
    if(rpmzad < rpm){
      I -= Ki*(rpm - rpmzad);
    }
    millis1 = millis();
  }

  if(I < -255){ // ограничение по минимуму
    I = -255;
  }
  if(I > 255){ // ограничение по максимуму
    I = 255;
  }
}

Чтобы получить минимальное значение ШИМ для старта, можно использовать код:

#define PWMpin 5
int pwm = 0;

void setup()  { 
  Serial.begin(9600);
  pinMode(PWMpin, OUTPUT);
} 

void loop()  { 
  analogWrite(PWMpin, pwm);  
  Serial.print("PWM = "); 
  Serial.print(pwm, DEC); // об/мин  
  Serial.print('\n');     
  delay(3000); 
  pwm++;  
}

При каком значении начнет вращаться двигатель, то значение и есть минимальное.

Установите его в 21 и 22 строки и подберите время нарастания значения ШИМ в 26 строке, чтобы двигатель запускался плано.
 

maksim
Offline
Зарегистрирован: 12.02.2012

RPM = 0
RPM = 762
RPM = 1221
RPM = 1458
RPM = 1649
RPM = 1835
RPM = 2028
RPM = 2231
RPM = 2439
RPM = 2654
RPM = 2855
RPM = 3029

NORM = 37

RPM = 3030 PWM = 33 P = 34 I = -1
RPM = 3013 PWM = 33 P = 34 I = -1
RPM = 2992 PWM = 35 P = 36 I = -1
RPM = 2986 PWM = 38 P = 38 I = 0
RPM = 2994 PWM = 37 P = 37 I = 0
RPM = 3010 PWM = 36 P = 36 I = 0
RPM = 3019 PWM = 35 P = 35 I = 0
RPM = 3017 PWM = 35 P = 35 I = 0
RPM = 3012 PWM = 35 P = 35 I = 0
RPM = 3007 PWM = 36 P = 36 I = 0
RPM = 3009 PWM = 36 P = 36 I = 0
RPM = 3013 PWM = 35 P = 35 I = 0
RPM = 3011 PWM = 35 P = 35 I = 0
RPM = 3006 PWM = 36 P = 36 I = 0
RPM = 3006 PWM = 36 P = 36 I = 0

flying
Offline
Зарегистрирован: 12.11.2011

 Загрузил програмку, но что то у меня никак.

Нарастание оборотов очень медленное пришлось изменить с 1000 на 1, и как только не игрался с параметрами, не хочет крутится постоянно. Только дергается.

maksim
Offline
Зарегистрирован: 12.02.2012

А вы минимальные значени ШИМ для старта установили? Какое? С 1000 на 1 это слишком круто, все равно что и без плавного пуска, попробуйте 500, меньше 300 не советую, лучше увеличте минимальные значени ШИМ для старта т.е. сначала он будет быстро раскручиваться, а потом медленно. Как раз первая причина того, что дергается это резкий старт.

1.Обязательно добейтесь плавного нарастания оборотов, иначе никак.

2.Далее нужно настроить пропорциональную составляющую, для этого нужно отключить интегральную - Ki = 0.0 . При отключенной интегр. составляющей добейтесь стабильной работы двигателя не обращая внимания на статическую ошибку. Если двигатель дергается значит Kp сликом большой, уменьшайте его, пробуйте 0.1, 0.07, 0.04, 0.01, 0.007, 0.004, 0.001 и т.д., но пока двигатель не начнет стабильно работать дальше настраивать нет смысла.

Отпишитесь какие установили значения: заданные обороты, минимальные значени ШИМ для старта, время нарастания ШИМ и Кр.

maksim
Offline
Зарегистрирован: 12.02.2012

Вот попробовал с библиотекой PID :

#define RPMpin 2 // датчик Холла
#define PWMpin 5 // выход ШИМ на двигатель

#include <PID_v1.h>

long millis1, micros1 = 0;
int rpm = 0;
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Define the aggressive and conservative Tuning Parameters

double aggKp=0.11, aggKi=0.05, aggKd=0.03;// агресивные параметры
double consKp=0.1, consKi=0.035, consKd=0.035;// нормальные параметры

//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);

void setup()
{
  Serial.begin(9600);
  digitalWrite(RPMpin, 1); //
  pinMode(PWMpin, OUTPUT);
  attachInterrupt(0, RPM, FALLING);
  Input = rpm;
  Setpoint = 1000; // заданное значение оборотов об/мин
  //turn the PID on
  myPID.SetMode(AUTOMATIC);
}

void loop(){
  if(micros()-micros1 > 500000){ // если обороты меньше 120 об/мин
    rpm = 0;                     // значит обороты равны 0 об/мин
  }
  Serial.print("RPM = ");
  Serial.print(rpm, DEC);
  Input = rpm;
  double gap = abs(Setpoint-Input); //distance away from setpoint
  if(gap<10)
  {  //we're close to setpoint, use conservative tuning parameters
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
    //we're far from setpoint, use aggressive tuning parameters
    myPID.SetTunings(aggKp, aggKi, aggKd);
  }
  myPID.Compute();
  analogWrite(PWMpin,Output);
  Serial.print("  PWM = ");
  Serial.print(Output, DEC);
  Serial.print('\n');
}

void RPM (){ // вычисление оборотов
  rpm = (1000000.0/(micros() - micros1))*60;
  micros1 = micros();
 

Сириал:

RPM = 0  PWM = 115.0000000000
RPM = 0  PWM = 115.0000000000
RPM = 0  PWM = 115.0000000000
RPM = 0  PWM = 120.0000000000
RPM = 0  PWM = 120.0000000000
RPM = 0  PWM = 120.0000000000
RPM = 0  PWM = 120.0000000000
RPM = 0  PWM = 125.0000000000
RPM = 0  PWM = 125.0000000000
RPM = 0  PWM = 125.0000000000
RPM = 0  PWM = 125.0000000000
RPM = 0  PWM = 130.0000000000
RPM = 0  PWM = 130.0000000000
RPM = 0  PWM = 130.0000000000
RPM = 0  PWM = 130.0000000000
RPM = 0  PWM = 135.0000000000
RPM = 0  PWM = 135.0000000000
RPM = 108  PWM = 135.0000000000
RPM = 108  PWM = 135.0000000000
RPM = 108  PWM = 95.1800079345
RPM = 108  PWM = 95.1800079345
RPM = 466  PWM = 95.1800079345
RPM = 466  PWM = 95.1800079345
RPM = 466  PWM = 0.0000000000
RPM = 565  PWM = 0.0000000000
RPM = 565  PWM = 0.0000000000
RPM = 565  PWM = 0.0000000000
RPM = 565  PWM = 52.4550018310
RPM = 565  PWM = 52.4550018310
RPM = 461  PWM = 52.4550018310
RPM = 461  PWM = 52.4550018310
RPM = 461  PWM = 127.4900054931
RPM = 461  PWM = 127.4900054931
RPM = 369  PWM = 127.4900054931
RPM = 369  PWM = 137.1650085449
RPM = 369  PWM = 137.1650085449
RPM = 369  PWM = 137.1650085449
RPM = 542  PWM = 137.1650085449
RPM = 542  PWM = 40.9250068664
RPM = 715  PWM = 40.9250068664
RPM = 715  PWM = 40.9250068664
RPM = 715  PWM = 40.9250068664
RPM = 686  PWM = 35.3550109863
RPM = 686  PWM = 35.3550109863
RPM = 686  PWM = 35.3550109863
RPM = 585  PWM = 35.3550109863
RPM = 585  PWM = 122.0400009155
RPM = 585  PWM = 122.0400009155
RPM = 585  PWM = 122.0400009155
RPM = 524  PWM = 119.1300048828
RPM = 524  PWM = 119.1300048828
RPM = 524  PWM = 119.1300048828
RPM = 649  PWM = 51.3350105285
RPM = 649  PWM = 51.3350105285
RPM = 733  PWM = 51.3350105285
RPM = 733  PWM = 51.3350105285
RPM = 733  PWM = 55.7300109863
RPM = 679  PWM = 55.7300109863
RPM = 679  PWM = 55.7300109863
RPM = 679  PWM = 55.7300109863
RPM = 608  PWM = 134.1399993896
RPM = 608  PWM = 134.1399993896
RPM = 608  PWM = 134.1399993896
RPM = 610  PWM = 97.7700119018
RPM = 610  PWM = 97.7700119018
RPM = 736  PWM = 97.7700119018
RPM = 736  PWM = 97.7700119018
RPM = 736  PWM = 48.0300025939
RPM = 776  PWM = 48.0300025939
RPM = 776  PWM = 48.0300025939
RPM = 749  PWM = 48.0300025939
RPM = 749  PWM = 81.7550048828
RPM = 749  PWM = 81.7550048828
RPM = 681  PWM = 81.7550048828
RPM = 681  PWM = 81.7550048828
RPM = 681  PWM = 115.1300125122
RPM = 668  PWM = 115.1300125122
RPM = 668  PWM = 115.1300125122
RPM = 717  PWM = 115.1300125122
RPM = 717  PWM = 81.3850097656
RPM = 717  PWM = 81.3850097656
RPM = 792  PWM = 81.3850097656
RPM = 792  PWM = 81.3850097656
RPM = 799  PWM = 59.5700149536
RPM = 799  PWM = 59.5700149536
RPM = 779  PWM = 59.5700149536
RPM = 779  PWM = 59.5700149536
RPM = 779  PWM = 93.4750061035
RPM = 727  PWM = 93.4750061035
RPM = 727  PWM = 93.4750061035
RPM = 718  PWM = 93.4750061035
RPM = 718  PWM = 113.8950195312
RPM = 718  PWM = 113.8950195312
RPM = 750  PWM = 113.8950195312
RPM = 750  PWM = 83.7250137329
RPM = 813  PWM = 83.7250137329
RPM = 813  PWM = 83.7250137329
RPM = 830  PWM = 83.7250137329
RPM = 830  PWM = 61.3750152587
RPM = 830  PWM = 61.3750152587
RPM = 819  PWM = 61.3750152587
RPM = 819  PWM = 61.3750152587
RPM = 776  PWM = 108.6350097656
RPM = 776  PWM = 108.6350097656
RPM = 757  PWM = 108.6350097656
RPM = 757  PWM = 108.6350097656
RPM = 757  PWM = 101.4400024414
RPM = 812  PWM = 101.4400024414
RPM = 812  PWM = 101.4400024414
RPM = 856  PWM = 101.4400024414
RPM = 856  PWM = 55.8700103759
RPM = 887  PWM = 55.8700103759
RPM = 887  PWM = 55.8700103759
RPM = 868  PWM = 55.8700103759
RPM = 868  PWM = 81.3100128173
RPM = 809  PWM = 81.3100128173
RPM = 809  PWM = 81.3100128173
RPM = 809  PWM = 81.3100128173
RPM = 785  PWM = 120.0150146484
RPM = 785  PWM = 120.0150146484
RPM = 791  PWM = 120.0150146484
RPM = 791  PWM = 120.0150146484
RPM = 863  PWM = 63.8200111389
RPM = 863  PWM = 63.8200111389
RPM = 909  PWM = 63.8200111389
RPM = 909  PWM = 63.8200111389
RPM = 872  PWM = 84.1700134277
RPM = 872  PWM = 84.1700134277
RPM = 838  PWM = 84.1700134277
RPM = 838  PWM = 84.1700134277
RPM = 838  PWM = 104.1100006103
RPM = 832  PWM = 104.1100006103
RPM = 832  PWM = 104.1100006103
RPM = 850  PWM = 104.1100006103
RPM = 850  PWM = 85.4800033569
RPM = 887  PWM = 85.4800033569
RPM = 887  PWM = 85.4800033569
RPM = 900  PWM = 85.4800033569
RPM = 900  PWM = 70.8800048828
RPM = 894  PWM = 70.8800048828
RPM = 894  PWM = 70.8800048828
RPM = 871  PWM = 70.8800048828
RPM = 871  PWM = 98.4150009155
RPM = 840  PWM = 98.4150009155
RPM = 840  PWM = 98.4150009155
RPM = 849  PWM = 98.4150009155
RPM = 849  PWM = 99.4899978637
RPM = 849  PWM = 99.4899978637
RPM = 873  PWM = 99.4899978637
RPM = 873  PWM = 99.4899978637
RPM = 897  PWM = 73.7249984741
RPM = 897  PWM = 73.7249984741
RPM = 913  PWM = 73.7249984741
RPM = 913  PWM = 73.7249984741
RPM = 891  PWM = 91.1299972534
RPM = 891  PWM = 91.1299972534
RPM = 870  PWM = 91.1299972534
RPM = 870  PWM = 91.1299972534
RPM = 873  PWM = 97.3450012207
RPM = 873  PWM = 97.3450012207
RPM = 883  PWM = 97.3450012207
RPM = 883  PWM = 97.3450012207
RPM = 901  PWM = 80.9599990844
RPM = 901  PWM = 80.9599990844
RPM = 908  PWM = 80.9599990844
RPM = 908  PWM = 80.9599990844
RPM = 894  PWM = 92.7600021362
RPM = 894  PWM = 92.7600021362
RPM = 888  PWM = 92.7600021362
RPM = 888  PWM = 92.7600021362
RPM = 888  PWM = 90.3600006103
RPM = 896  PWM = 90.3600006103
RPM = 896  PWM = 90.3600006103
RPM = 903  PWM = 90.3600006103
RPM = 903  PWM = 88.5749969482
RPM = 907  PWM = 88.5749969482
RPM = 907  PWM = 88.5749969482
RPM = 908  PWM = 88.5749969482
RPM = 908  PWM = 89.0849990844
RPM = 907  PWM = 89.0849990844
RPM = 907  PWM = 89.0849990844
RPM = 908  PWM = 89.0849990844
RPM = 908  PWM = 91.0449981689
RPM = 911  PWM = 91.0449981689
RPM = 911  PWM = 91.0449981689
RPM = 915  PWM = 91.0449981689
RPM = 915  PWM = 88.5999984741
RPM = 920  PWM = 88.5999984741
RPM = 920  PWM = 88.5999984741
RPM = 921  PWM = 88.5999984741
RPM = 921  PWM = 88.6349945068
RPM = 920  PWM = 88.6349945068
RPM = 920  PWM = 88.6349945068
RPM = 920  PWM = 88.6349945068
RPM = 920  PWM = 91.2450027465
RPM = 920  PWM = 91.2450027465
RPM = 920  PWM = 91.2450027465
RPM = 923  PWM = 91.2450027465
RPM = 923  PWM = 90.0999984741
RPM = 929  PWM = 90.0999984741
RPM = 929  PWM = 90.0999984741
RPM = 933  PWM = 90.0999984741
RPM = 933  PWM = 87.2350006103
RPM = 936  PWM = 87.2350006103
RPM = 936  PWM = 87.2350006103
RPM = 935  PWM = 87.2350006103
RPM = 935  PWM = 89.7399978637
RPM = 933  PWM = 89.7399978637
RPM = 933  PWM = 89.7399978637
RPM = 934  PWM = 89.7399978637
RPM = 934  PWM = 91.0800018310
RPM = 936  PWM = 91.0800018310
RPM = 936  PWM = 91.0800018310
RPM = 939  PWM = 91.0800018310
RPM = 939  PWM = 89.0349960327
RPM = 944  PWM = 89.0349960327
RPM = 944  PWM = 89.0349960327
RPM = 947  PWM = 89.0349960327
RPM = 947  PWM = 87.5199966430
RPM = 948  PWM = 87.5199966430
RPM = 948  PWM = 87.5199966430
RPM = 946  PWM = 87.5199966430
RPM = 946  PWM = 90.5999984741
RPM = 943  PWM = 90.5999984741
RPM = 943  PWM = 90.5999984741
RPM = 943  PWM = 90.5999984741
RPM = 943  PWM = 91.8149948120
RPM = 947  PWM = 91.8149948120
RPM = 947  PWM = 91.8149948120
RPM = 951  PWM = 91.8149948120
RPM = 951  PWM = 87.8799972534
RPM = 955  PWM = 87.8799972534
RPM = 955  PWM = 87.8799972534
RPM = 956  PWM = 87.8799972534
RPM = 956  PWM = 89.6949996948
RPM = 953  PWM = 89.6949996948
RPM = 952  PWM = 89.6949996948
RPM = 952  PWM = 89.6949996948
RPM = 953  PWM = 90.5299987792
RPM = 953  PWM = 90.5299987792
RPM = 955  PWM = 90.5299987792
RPM = 955  PWM = 90.5299987792
RPM = 957  PWM = 89.1050033569
RPM = 957  PWM = 89.1050033569
RPM = 959  PWM = 89.1050033569
RPM = 959  PWM = 89.1050033569
RPM = 960  PWM = 89.2749938964
RPM = 960  PWM = 89.2749938964
RPM = 961  PWM = 89.2749938964
RPM = 961  PWM = 89.2749938964
RPM = 961  PWM = 89.9599914550
RPM = 961  PWM = 89.9599914550
RPM = 962  PWM = 89.9599914550
RPM = 962  PWM = 89.9599914550
RPM = 963  PWM = 89.6249923706
RPM = 963  PWM = 89.6249923706
RPM = 964  PWM = 89.6249923706
RPM = 964  PWM = 89.6249923706
RPM = 964  PWM = 89.9949874877
RPM = 964  PWM = 89.9949874877
RPM = 965  PWM = 89.9949874877
RPM = 965  PWM = 89.9949874877
RPM = 966  PWM = 89.6449890136
RPM = 966  PWM = 89.6449890136
RPM = 966  PWM = 89.6449890136
RPM = 966  PWM = 89.6449890136
RPM = 966  PWM = 90.4149856567
RPM = 967  PWM = 90.4149856567
RPM = 967  PWM = 90.4149856567
RPM = 969  PWM = 90.4149856567
RPM = 969  PWM = 89.3399887084
RPM = 971  PWM = 89.3399887084
RPM = 971  PWM = 89.3399887084
RPM = 972  PWM = 89.3399887084
RPM = 972  PWM = 89.1499862670
RPM = 972  PWM = 89.1499862670
RPM = 972  PWM = 89.1499862670
RPM = 973  PWM = 89.1499862670
RPM = 973  PWM = 89.7749862670
RPM = 973  PWM = 89.7749862670
RPM = 973  PWM = 89.7749862670
RPM = 973  PWM = 89.7749862670
RPM = 973  PWM = 90.2099914550
RPM = 973  PWM = 90.2099914550
RPM = 973  PWM = 90.2099914550
RPM = 974  PWM = 90.2099914550
RPM = 974  PWM = 89.9299850463
RPM = 976  PWM = 89.9299850463
RPM = 976  PWM = 89.9299850463
RPM = 977  PWM = 89.9299850463
RPM = 978  PWM = 88.6999893188
RPM = 978  PWM = 88.6999893188
RPM = 978  PWM = 88.6999893188
RPM = 978  PWM = 88.6999893188
RPM = 977  PWM = 90.4249877929
RPM = 977  PWM = 90.4249877929
RPM = 977  PWM = 90.4249877929
RPM = 977  PWM = 90.4249877929
RPM = 979  PWM = 89.4099884033
RPM = 979  PWM = 89.4099884033
RPM = 980  PWM = 89.4099884033
RPM = 980  PWM = 89.4099884033
RPM = 980  PWM = 89.6999816894
RPM = 980  PWM = 89.6999816894
RPM = 980  PWM = 89.6999816894
RPM = 980  PWM = 89.6999816894
RPM = 981  PWM = 89.6849822998
RPM = 981  PWM = 89.6849822998
RPM = 981  PWM = 89.6849822998
RPM = 981  PWM = 89.6849822998
RPM = 981  PWM = 90.0799865722
RPM = 980  PWM = 90.0799865722
RPM = 980  PWM = 90.0799865722
RPM = 983  PWM = 90.0799865722
RPM = 983  PWM = 89.3449935913
RPM = 984  PWM = 89.3449935913
RPM = 984  PWM = 89.3449935913
RPM = 984  PWM = 89.3449935913
RPM = 984  PWM = 89.6149902343
RPM = 983  PWM = 89.6149902343
RPM = 983  PWM = 89.6149902343
RPM = 983  PWM = 89.6149902343
RPM = 983  PWM = 90.4099960327
RPM = 984  PWM = 90.4099960327
RPM = 984  PWM = 90.4099960327
RPM = 985  PWM = 90.4099960327
RPM = 988  PWM = 88.1199874877
RPM = 988  PWM = 88.1199874877
RPM = 988  PWM = 88.1199874877
RPM = 988  PWM = 88.1199874877
RPM = 985  PWM = 90.9249877929
RPM = 985  PWM = 90.9249877929
RPM = 984  PWM = 90.9249877929
RPM = 984  PWM = 90.9249877929
RPM = 986  PWM = 89.6849822998
RPM = 986  PWM = 89.6849822998
RPM = 987  PWM = 89.6849822998
RPM = 987  PWM = 89.6849822998
RPM = 986  PWM = 90.0549850463
RPM = 986  PWM = 90.0549850463
RPM = 987  PWM = 90.0549850463
RPM = 987  PWM = 90.0549850463
RPM = 989  PWM = 88.8799819946
RPM = 990  PWM = 88.8799819946
RPM = 990  PWM = 88.8799819946
RPM = 989  PWM = 88.8799819946
RPM = 989  PWM = 89.8349838256
RPM = 988  PWM = 89.8349838256
RPM = 988  PWM = 89.8349838256
RPM = 987  PWM = 89.8349838256
RPM = 987  PWM = 90.7199859619
RPM = 988  PWM = 90.7199859619
RPM = 988  PWM = 90.7199859619
RPM = 990  PWM = 90.7199859619
RPM = 990  PWM = 88.9399871826
RPM = 991  PWM = 88.9399871826
RPM = 991  PWM = 88.9399871826
RPM = 991  PWM = 88.9399871826
RPM = 989  PWM = 90.3049926757
RPM = 989  PWM = 90.3049926757
RPM = 990  PWM = 90.3049926757
RPM = 990  PWM = 90.3049926757
RPM = 992  PWM = 88.5729904174
RPM = 992  PWM = 88.5729904174
RPM = 993  PWM = 88.5729904174
RPM = 993  PWM = 88.5729904174
RPM = 991  PWM = 90.1044921875
RPM = 991  PWM = 90.1044921875
RPM = 989  PWM = 90.1044921875
RPM = 989  PWM = 90.1044921875
RPM = 990  PWM = 90.3044967651
RPM = 990  PWM = 90.3044967651
RPM = 992  PWM = 90.3044967651
RPM = 992  PWM = 90.3044967651
RPM = 995  PWM = 87.6719970703
RPM = 996  PWM = 87.6719970703
RPM = 996  PWM = 87.6719970703
RPM = 994  PWM = 87.6719970703
RPM = 994  PWM = 89.8929977416
RPM = 990  PWM = 89.8929977416
RPM = 990  PWM = 89.8929977416
RPM = 990  PWM = 89.8929977416
RPM = 990  PWM = 91.2929992675
RPM = 990  PWM = 91.2929992675
RPM = 990  PWM = 91.2929992675
RPM = 992  PWM = 91.2929992675
RPM = 992  PWM = 89.1210098266
RPM = 995  PWM = 89.1210098266
RPM = 995  PWM = 89.1210098266
RPM = 996  PWM = 89.1210098266
RPM = 996  PWM = 88.0350036621
RPM = 996  PWM = 88.0350036621
RPM = 996  PWM = 88.0350036621
RPM = 996  PWM = 88.0350036621
RPM = 995  PWM = 89.9025039672
RPM = 995  PWM = 89.9025039672
RPM = 994  PWM = 89.9025039672
RPM = 994  PWM = 89.9025039672
RPM = 994  PWM = 90.0235061645
RPM = 994  PWM = 90.0235061645
RPM = 994  PWM = 90.0235061645
RPM = 994  PWM = 90.0235061645
RPM = 996  PWM = 88.7875137329
RPM = 997  PWM = 88.7875137329
RPM = 997  PWM = 88.7875137329
RPM = 994  PWM = 88.7875137329
RPM = 994  PWM = 90.4085083007
RPM = 992  PWM = 90.4085083007
RPM = 992  PWM = 90.4085083007
RPM = 993  PWM = 90.4085083007
RPM = 993  PWM = 90.1830062866
RPM = 994  PWM = 90.1830062866
RPM = 994  PWM = 90.1830062866
RPM = 995  PWM = 90.1830062866
RPM = 995  PWM = 88.9505157470
RPM = 997  PWM = 88.9505157470
RPM = 997  PWM = 88.9505157470
RPM = 997  PWM = 88.9505157470
RPM = 996  PWM = 89.2145156860
RPM = 996  PWM = 89.2145156860
RPM = 995  PWM = 89.2145156860
RPM = 995  PWM = 89.2145156860
RPM = 995  PWM = 90.0320129394
RPM = 995  PWM = 90.0320129394
RPM = 995  PWM = 90.0320129394
RPM = 995  PWM = 90.0320129394
RPM = 996  PWM = 89.2460174560
RPM = 996  PWM = 89.2460174560
RPM = 998  PWM = 89.2460174560
RPM = 998  PWM = 89.2460174560
RPM = 999  PWM = 88.2495117187
RPM = 999  PWM = 88.2495117187
RPM = 999  PWM = 88.2495117187
RPM = 997  PWM = 88.2495117187
RPM = 997  PWM = 90.2100143432
RPM = 996  PWM = 90.2100143432
RPM = 996  PWM = 90.2100143432
RPM = 998  PWM = 90.2100143432
RPM = 998  PWM = 89.0670166015
RPM = 999  PWM = 89.0670166015
RPM = 999  PWM = 89.0670166015
RPM = 999  PWM = 89.0670166015
RPM = 999  PWM = 88.9705200195
RPM = 1000  PWM = 88.9705200195
RPM = 1000  PWM = 88.9705200195
RPM = 999  PWM = 88.9705200195
RPM = 996  PWM = 90.6845245361
RPM = 996  PWM = 90.6845245361
RPM = 996  PWM = 90.6845245361
RPM = 996  PWM = 90.6845245361
RPM = 999  PWM = 88.2880172729
RPM = 999  PWM = 88.2880172729
RPM = 1000  PWM = 88.2880172729
RPM = 1000  PWM = 88.2880172729

 

flying
Offline
Зарегистрирован: 12.11.2011

 Как у вас все красиво.) А у меня что то ни как. Может связано с arduino-й.?

maksim
Offline
Зарегистрирован: 12.02.2012

Наврядли дело в ардуине. Просто я проверяю на небольшом двигателе и задаю средние обороты. Вы, кстати, так и не отписались какие обороты хотите поддерживать?

flying
Offline
Зарегистрирован: 12.11.2011

 Минимальные гдето 800-1000. Дома на месте проверяю тоже на маленьком двигателе. Еще хочу попробовать на оптическом датчике, думаю как к двигателю его прикрутить.

maksim
Offline
Зарегистрирован: 12.02.2012

А чем датчик холла не устраивает? 

flying
Offline
Зарегистрирован: 12.11.2011

 Вроде бы устраивает, и понадежнее чем оптический.

maksim
Offline
Зарегистрирован: 12.02.2012

Я кстати, там где скачал библиотеку PID, видил библиотеку для автоматической настройки этого регулятора. Пробовали?

flying
Offline
Зарегистрирован: 12.11.2011

 Нет, не видел. Есть что то интересное?

maksim
Offline
Зарегистрирован: 12.02.2012
flying
Offline
Зарегистрирован: 12.11.2011

 Сейчас добился пока того что, пока обороты не достигли заданых (регулирую напряжение двигателя) крутится равномерно, как только доходит до заданого значения (1000), начинает дергатся

maksim
Offline
Зарегистрирован: 12.02.2012

Какие параметры Kp, Ki, Kd?

flying
Offline
Зарегистрирован: 12.11.2011

 0.3 0.3 0.06 При разных Kp Ki, изменений не замечал.

Roman
Offline
Зарегистрирован: 15.02.2013

maksim пишет:

 И если будете использовать мой код ПИ-ругулятора, перекопируйте его снова, я там внес изменения.

здравствуйте!

у меня похожая проблема. нужен код или библиотека ПИ, ПД, или ПИД регулятора, с обратной связью по импульсному сигналу от датчика Холла.

не могли бы вы поделится своим кодом ПИ регулятора?

maksim
Offline
Зарегистрирован: 12.02.2012

Код в сообщении #63, библиотеку качать отсюда.

Roman
Offline
Зарегистрирован: 15.02.2013

maksim пишет:

Код в сообщении #63, библиотеку качать отсюда.

спасибо! буду разбираться.

crecker
Offline
Зарегистрирован: 15.12.2013

при установке библиотеки PID: 

java.io.FileNotFoundException: C:\Users\serega\AppData\Local\Temp\arduino_555176\br3ttb_Arduino_PID_Library_d21d7e3470\br3ttb_Arduino_PID_Library_d21d7e3\PID_v1\Examples\PID_AdaptiveTunings\PID_AdaptiveTunings.ino (??????? ?? ??????? ????? ????????? ????)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
 
что можно сделать?

 

sergey_mak
Offline
Зарегистрирован: 07.01.2014

А как код ПИ регулятора переделать, если у меня датчик выдает 60 импульсов за один оборот вала?