Теория микширования

Материал из Multicopter Wiki
Перейти к: навигация, поиск
Motmix00.jpg

Микширование моторов (motor mix) - алгоритм или правила задания управляющих сигналов к контроллерам моторов в зависимости от расположения моторов относительно центра конструкции и от радиоуправляющих сигналов.

Источник

Содержание

Базовые понятия [править]

Расположение осей:

Всего для расчётов используются 3 оси:

  • Pitch и Roll для стабилизации и управления по горизонту;
  • Yaw для стабилизации и управления вокруг вертикальной оси, при этом:
    • если мотор крутится по часовой стрелке (CW, ClockWise) - это отрицательное (-) направления вращения;
    • если против (CCW, CounterClockWise) - положительное (+).

Примеры расчётов [править]

Квадрокоптер «+» [править]

Все моторы находятся на осях, максимальная длина 100% (=1) от центра на каждом.

Motmix01.jpg
Мотор pitch roll yaw
0 правый (CCW) 0% -100% +
1 левый (CCW) 0% +100% +
2 передний (CW) +100% 0% -
3 задний (CW) -100% 0% -

Пример микширования для MultiWii из файла Output.pde (прошивка версии 1.9) PIDMIX (roll, pitch, yaw) (тут ось pitch инвертирована относительно картинки, поэтому значения не совпадают знаками)

#ifdef QUADP
motor[0] = PIDMIX( 0,+1,-1); //REAR (задний)
motor[1] = PIDMIX(-1, 0,+1); //RIGHT (правый)
motor[2] = PIDMIX(+1, 0,+1); //LEFT (левый)
motor[3] = PIDMIX( 0,-1,-1); //FRONT (передний)
#endif

Пример кода из MegaPirateNG (ArduCopter)

roll_out = g.rc_1.pwm_out;
pitch_out = g.rc_2.pwm_out;
// left
motor_out[CH_1] = g.rc_3.radio_out - roll_out; (левый)
// right
motor_out[CH_2] = g.rc_3.radio_out + roll_out; (правый)
// front
motor_out[CH_3] = g.rc_3.radio_out + pitch_out; (передний)
// back
motor_out[CH_4] = g.rc_3.radio_out - pitch_out; (задний)

Квадрокоптер «X» [править]

Моторы расположены на биссектрисах между осями (45°), но расстояние до мотора сохраняется, поэтому по законам тригонометрии (гипотенузу знаем (расстояние до мотора), прилежащий угол знаем => используем функцию sin или cos (в данном случае оба катета треугольника равны) для получения искомого значения) и получается ~71%.

Motmix02.jpg
Мотор pitch roll yaw
0 передний правый (CCW) +71% -71% +
1 задний левый (CCW) -71% +71% +
2 передний левый (CW) +71% +71% -
3 задний правый (CW) -71% -71% -

Видим что везде 71%, а мы можем 100%, поэтому, чтобы моторы могли работать в полную силу, принимаем 71% за 100% и получаем:

Мотор pitch roll yaw
0 передний правый (CCW) +100% -100% +
1 задний левый (CCW) -100% +100% +
2 передний левый (CW) +100% +100% -
3 задний правый (CW) -100% -100% -

Пример микширования для MultiWii из файла Output.pde (прошивка версии 1.9) PIDMIX (roll, pitch, yaw) (тут ось pitch инвертирована относительно картинки, поэтому значения не совпадают знаками)

#ifdef QUADX
motor[0] = PIDMIX(-1,+1,-1); //REAR_R (задний правый)
motor[1] = PIDMIX(-1,-1,+1); //FRONT_R (передний правый)
motor[2] = PIDMIX(+1,+1,+1); //REAR_L (задний левый)
motor[3] = PIDMIX(+1,-1,-1); //FRONT_L (передний левый)
#endif

Пример кода из MegaPirateNG (ArduCopter)

roll_out = g.rc_1.pwm_out * .707;
pitch_out = g.rc_2.pwm_out * .707;
// left
motor_out[CH_3] = g.rc_3.radio_out + roll_out + pitch_out; // FRONT (передний левый)
motor_out[CH_2] = g.rc_3.radio_out + roll_out - pitch_out; // BACK (задний левый)
// right
motor_out[CH_1] = g.rc_3.radio_out - roll_out + pitch_out; // FRONT (передний правый)
motor_out[CH_4] = g.rc_3.radio_out - roll_out - pitch_out; // BACK (задний правый)
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты
Группа ВКонтакте