Прошивка BLHeli_S для ESC

mil-lion
Сергей_Уж:

Отлично, я там дал выше ссылки писал Крайков, там как раз есть ссылки на куски кода Бориса на тот момент.
( потом он их поменял ) Это во второй ссылке, со слов “физически в прошивке Бориса если посмотреть код”

Опять немного не в тему, но вот куски кода Бориса из файла pid.c в подтверждение моих слов что коэффициенты ПИД контролера константы:

    // ----------PID controller----------
    for (axis = 0; axis < 3; axis++) {
...
            Kp[axis] = PTERM_SCALE * pidProfile->P8[axis];
            Ki[axis] = ITERM_SCALE * pidProfile->I8[axis];
            Kd[axis] = DTERM_SCALE * pidProfile->D8[axis];
...
        // -----calculate P component
        PTerm = Kp[axis] * rP * dynReduction;
...
        // -----calculate I component.
        // Reduce strong Iterm accumulation during higher stick inputs
        float accumulationThreshold = (axis == YAW) ? pidProfile->yawItermIgnoreRate : pidProfile->rollPitchItermIgnoreRate;
        float setpointRateScaler = constrainf(1.0f - (ABS(setpointRate[axis]) / accumulationThreshold), 0.0f, 1.0f);

        // Handle All windup Scenarios
        // limit maximum integrator value to prevent WindUp
        float itermScaler = setpointRateScaler * kiThrottleGain;

        errorGyroIf[axis] = constrainf(errorGyroIf[axis] + Ki[axis] * errorRate * getdT() * itermScaler, -250.0f, 250.0f);

        // I coefficient (I8) moved before integration to make limiting independent from PID settings
        ITerm = errorGyroIf[axis];

        //-----calculate D-term (Yaw D not yet supported)
        if (axis != YAW) {
...
            DTerm = Kd[axis] * delta * dynReduction;

            // -----calculate total PID output
            axisPID[axis] = constrain(lrintf(PTerm + ITerm + DTerm), -900, 900);
...
#ifdef BLACKBOX
        axisPID_P[axis] = PTerm;
        axisPID_I[axis] = ITerm;
        axisPID_D[axis] = DTerm;
#endif

Как оказалось это классическая форма ПИД контроллера ту что я привел выше. Самое замечательное в комментариях кода: D для Yaw не применяется! 😃
Но конечно у Бориса очень много вставок по Д, введены фильтры, и по I - какие то особенности вычисления суммы ошибки.
И для BlackBox выводятся значения PTerm, ITerm и DTerm - а не коэффициенты Kp, Ki, Kd - те которые мы задаем через конфигуратор. И те параметры которые мы вводим - это не ограничения по ПИД, ограничение на управляющий сигнал - это разрядность выходного сигнала и если сумма упр.сигнала превышает, то просто берется макс. допустимое значение.
Очень хороший код у Бориса - читается с листа! Молодец!

Сергей_Уж

Вышла новая прошивка Blheli_S 16.35 ( возможно это прошивка со вчерашними изменениями бута, но нигде инфы не нашел, просто появилась новая папка с прошивкой в которой поменялась цифра, нового сюита нет, поэтому чуть засомневался, может это просто обновленная с новым номером )
www.dropbox.com/sh/…/Blheli_S 16.35?dl=0

mil-lion:

Опять немного не в тему

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

Хотел написать сюда статью Бориса как лично он настраивает PID, но вижу она чуть устарела, там есть такие вещи типа "I found a dterm_cut_hz of 8 a nice sweet spot on 3 different frames. pterm_cut_hz can be kept higher 40 or even higher. " что сейчас уже не актуально.
Интереснее свежий видео Vlog 3 | Tuning от Skitzo где он на примере RaceFlight рассказывает и показывает настройку PID, посмотрите если кто то не видел И все эти ребята в своих видео обращают внимание что не нужно задирать D, а делать его минимально возможным

mil-lion

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

Вчера в поле облетал свой квадрик на новой прошивке RC11 на раме Martian-II 220mm. Сетап: моторы DYS SE2205PRO, регуляторы ZTW Flash 30A, мозг LUX F3, пропы трешки DAL V2 T5045BN, 4S аккумулятор. Прошивки BetaFlight 3.0.0-RC11, BLHeli_S A_H_20 16.2.
Все настройки по умолчанию, ПИД не трогал. Установил только луптайм 8/8/32. При этом загрузка проца 50%. Включена телеметрия, ОСД, управление по PPM.
Для меня квадрик летает отлично! Четкое поведение и управление. Крутил и флипы и ролы, ничего не заметил. Но я пока пилот не ас, но в курсовой ни дрожи ни болтанки. Летает по “рельсам” четкое и адекватное поведение. Падал камнем вниз, аирмод включён на двух режимах Acro и Horizon. За 5 акков полёта ни одного краха, правда через ворота не летал, но летал на большой скорости так медленней не мог - наклон камеры установил в 30 градусов. Очень понравилось! До этого летал на 250 размере и с аккумулятором внутри.
Но есть один момент: от порыва ветра квадрик раскачивало. Это нормально или все таки нужно ПИД подкрутить? В остальном просто нет нареканий, или просто опыт маловат 😃
Да к чему я все это писал: регуляторы отработали очень хорошо, ни одного срыва синхро, но у меня параллельно регулятором впаяны конденсаторы 470мкФ. И порадовал мозг LUX на таком луптайме и с такой загрузкой проца - ни каких проблем. На SPRF3 этого не получалось.

mil-lion
Кариёзный_монстр:

Не должно раскачивать

Но это было один два раза. Может резкий порыв ветра был. До этого квадрики были тяжёлые (Eachine Racer 250 & Falcon 250), а новый весит 360 грамм без акка, да и сейчас аккумулятор сверху (парусность выше сбоку стала)

Кариёзный_монстр
mil-lion:

Может резкий порыв ветра был. До этого квадрики были тяжёлые (Eachine Racer 250 & Falcon 250), а новый весит 360 грамм без акка, да и сейчас аккумулятор сверху (парусность выше сбоку стала)

У меня 337 весит и акк сверху, не раскачивает ))

mil-lion
Кариёзный_монстр:

У меня 337 весит и акк сверху, не раскачивает ))

Значит надо будет разбираться из-за чего. Заказал BlackBox, на Lux его нет, буду тогда учиться читать логи. На SPRF3 пробовал - не удобно, долго копируется, мало пишется по времени, в поле неудобно компом пользоваться, в поле летать надо!

Сергей_Уж
mil-lion:

вдруг узнаю полезное по настройке И

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

PS Еще раз повторюсь В видео это 15м 02 сек и далее.Переворачивает квадри кверху ногами, говорит что убран газ и показывает как ведет себя квадрик при малом I

упячка
Сергей_Уж:

PS Еще раз повторюсь В видео это 15м 02 сек и далее.Переворачивает квадри кверху ногами, говорит что убран газ и показывает как ведет себя квадрик при малом I

Надо попробовать, поднимусь повыше перевернусь и уберу газ в ноль))

nppc

Я сначала подумал, что вы сами приколохозили кондёры, а линк открыл… нее колхоз продаётся! 😁😆

arb

А кто нибудь встречал реги с процессором экономичнее чем В2? А то что-то все что 50 МГц сильно горячее.

lokanaft

Так быстрее или экономичнее? Вот побыстрее в 2 раза. И зачем он такой на реге нужен?

nppc
arb:

А кто нибудь встречал реги с процессором экономичнее чем В2? А то что-то все что 50 МГц сильно горячее.

Неужели процессор горячее мосфетов на регуле? Мои В2 регуляторы абсолютно холодные.

SergejK
lokanaft:

Вот побыстрее в 2 раза. И зачем он такой на реге нужен?

Вангую следующее поколение регулей на таких скоростных чипах 😁 Новый протокол управления будет называться MegaShot, и суть его будет в синхнонизации сигнала гиры с каждым силовым импульсом шима на сам мотор 😃 Естественно на соотвествующей частоте в 32КГц.

arb
lokanaft:

Так быстрее или экономичнее?

Естественно холоднее (в сумме по тексту).

nppc:

Неужели процессор горячее мосфетов на регуле?

В точку. И еще мосфеты разогревают заодно. А еще ldo греют.

nppc:

Мои В2 регуляторы абсолютно холодные.

Да они холодные, если обдуваются. А надо, чтобы без обдува были холодные.

100xanoff

Когда уже на CAN шину перейдем, наконец-то!?

Кариёзный_монстр
100xanoff:

Когда уже на CAN шину перейдем, наконец-то!?

Изначально коптеры начинались с i2c по моему )) Какая то германская контора делала мозги и регули

Не говорю про всякие извраты чисто на гироскопах ))

100xanoff
Кариёзный_монстр:

Изначально коптеры начинались с i2c по моему )) Какая то германская контора делала мозги и регули

Не говорю про всякие извраты чисто на гироскопах ))

Вы, видимо, про MikroKopter.
i2c совсем не помехоустойчив, а вот CAN-лучший из всех интерфейсов для целей передачи управляющих сигналов на регули и обратно. Все современный контролеры работают именно с ним: DJI Phantom, контролер от VisAsta, Autoquad, Aerolab

П.С. вот у меня какая штука еще завалялась. 3 крутилки настраивают пиды

lokanaft
100xanoff:

Когда уже на CAN шину перейдем, наконец-то!?

А зачем?

100xanoff
lokanaft:

А зачем?

Обратная связь и универсальный протокол, самый безглючный интерфейс.