Инструменты пользователя

Инструменты сайта


au:kuk:вращение_для_kk

Это старая версия документа!


Разборка принципа работы управления вращением ROLL через ПИД-Регулятор

Он заключается в том, чтобы подтягивать текущие значения вращения, полученный через гироскоп, соответственным по положениям стиков, формируя из их разности сигнал ошибки для ПИД-регулятора. Они воздействует на управляющие элементы - положения рулей.

Схема однокоптера -

          M1 CCW
          |
          |
.
          M2 (Servo)
          |
          |
   M5 ---- ---- M3
  (Servo) | (Servo)
          |
          M4 (Servo)

Выделим самые ответственные куски кода для файла kk.c -

//Входим в бесконечный цикл
//Значения, прочитанные с каждой гиры, за вычетом смещения нуля.
 gyroADC[ROLL]-= gyroZero[ROLL];
 gyroADC[PITCH]-= gyroZero[PITCH];
 gyroADC[YAW]-= gyroZero[YAW];

//Начальные значения на сервах и моторах, соответственные для M1-M5 - 
 MotorOut1 = RxInCollective;    //RxInCollective - значение throttle приемника
 MotorOut2 = 840;  //840
 MotorOut3 = 840;  //840
 MotorOut4 = 945;  //840+840/8  //Видимо, чтобы скомпенсировать момент винта
 MotorOut5 = 945;  //840+840/8

//Шаг 1, для вращения ROLL.
//Нормализация данных - с приемника RxInRoll и прочитанного с гироскопа gyroADC[ROLL]
//на коэффициент, заданный пот-ом на плате.
 RxInRoll = ((int32_t)RxInRoll * (uint32_t)GainInADC[ROLL]) >> STICK_GAIN_SHIFT;
 gyroADC[ROLL] = ((int32_t)gyroADC[ROLL] * (uint32_t)GainInADC[ROLL]) >> GYRO_GAIN_SHIFT;

//Пид-регулятор, желаемое положение RxInRoll, текущее - gyroADC[ROLL].
if (0) {
 error = RxInRoll - gyroADC[ROLL];
 integral[ROLL]+= error;
 derivative = error - last_error[ROLL];
 last_error[ROLL] = error;
 RxInRoll+= error + (integral[ROLL] >> 2) + (derivative >> 2);
} else {
 RxInRoll-= gyroADC[ROLL]; 
}

//применяем результат
 MotorOut2+=RxInRoll;
 MotorOut4-=RxInRoll;

//Далее, то же для крена, тангажа и т.д.
//конец бесконечного цикла

PS. MotorOut2, RxInRoll, gyroADC[ROLL] имеют одну размерность - частота вращения.

au/kuk/вращение_для_kk.1657148466.txt.gz · Последнее изменение: 2022/07/07 02:01 — setproperty

Страницы, ссылающиеся на эту: [au:kuk:kk_код]
Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki