Система автоматического полета по компасу для дирижабля.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Система автоматического полета по компасу для дирижабля.

Сообщение dotzz » 14 июл 2015, 01:04

Добрый день. Разрабатываю систему управления беспилотным дирижаблем, в т.ч. и автопилот. Сейчас стоит задача сделать автоматическое поддержания курса по датчику-компасу путем изменения мощности левого-правого двигателя. Я написал для этих целей ПИД регулятор. Однако когда взялся за настройку возникли проблемы. Начал я с пропорциональной части, при любых коэффициентах дирижабль "входит в резонанс" и в конце-концов начинает крутиться вокруг своей оси. Может сможете дать совет, как лучше реализовать и настроить подобную систему?
Вот кусок кода для регулятора:

Код: Выделить всё

//Функция масштабирования значений
private double ScaleValue(double value, double valuemin,
            double valuemax, double scalemin, double scalemax)
    {
        double vPerc = (value - valuemin) / (valuemax - valuemin);
        double bigSpan = vPerc * (scalemax - scalemin);

        double retVal = scalemin + bigSpan;

        return retVal;
    }

  //Определение мин-макс границ 
  private double Clamp(double value, double min, double max)
    {
        if (value > max)
            return max;
        if (value < min)
            return min;
        return value;
    }

//Собственно регулятор 
private void Compute()
    {
        //Значение компаса
        double pv = GlobalData.Azimuth;
        //Задание автопилота
        double sp = GlobalData.Auto_Azimuth;

       
        pv = Clamp(pv, pvMin, pvMax);
        //Масштабируем текущее состояние
        pv = ScaleValue(pv, pvMin, pvMax, -1.0f, 1.0f);

        //..И задание
        sp = Clamp(sp, pvMin, pvMax);
        sp = ScaleValue(sp, pvMin, pvMax, -1.0f, 1.0f);

        //Теперь значение ошибки в процентах
        double err = sp - pv;

        //Начальные значения для временных переменных коэффициентов, считаем пропорциональную часть
        double pTerm = err * kp;
        double iTerm = 0.0f;
        double dTerm = 0.0f;

        double partialSum = 0.0f;
        //Запоминаем текущее время
        Date nowTime = new Date();

        if (lastUpdate != null)
        {
            double dT = ((double)nowTime.getTime() - (double)lastUpdate.getTime())/1000;

            //Compute the integral if we have to...
            if (pv >= pvMin && pv <= pvMax)
            {
                //Если нужно, считаем интегральную часть
                if (ki>0)
                {
                   partialSum = errSum + dT * err;
                   iTerm = ki * partialSum;
                }
            }
                //..и дифференциальную
                if (kd>0)
                {
                   if (dT != 0.0f)
                      dTerm = kd * (pv - lastPV) / dT;
                }
        }
        //обновляем время
        lastUpdate = nowTime;
        errSum = partialSum;
        lastPV = pv;

        //Расчет результата
        double outReal = pTerm + iTerm + dTerm;

        outReal = Clamp(outReal, -1.0f, 1.0f);
        outReal = ScaleValue(outReal, -1.0f, 1.0f, outMin, outMax);

        //Выводим результат
        GlobalData.Auto_PID = outReal;
    }

//Вывод на двигатели, Auto_MedPowe- задаваемое значение, с какой средней мощностью должны работать двигатели
double temp;

//Левый  двигатель
temp=Auto_MedPower+GlobalData.Auto_PID;                              
GlobalData.Engine1=(byte)temp;

//правый двигатель                                 
temp=Auto_MedPower-GlobalData.Auto_PID;                                 
GlobalData.Engine2=(byte)temp;
dotzz
 
Сообщения: 14
Зарегистрирован: 13 июл 2015, 23:16
Откуда: Украина
прог. языки: C++, C#, Java

Re: Система автоматического полета по компасу для дирижабля.

Сообщение esisl » 14 июл 2015, 11:30

Я так понимаю крутиться он начинает при попытке лететь курсом 0 или 360? :)
esisl
 
Сообщения: 1480
Зарегистрирован: 23 июл 2012, 15:24

Re: Система автоматического полета по компасу для дирижабля.

Сообщение dotzz » 14 июл 2015, 11:41

Да, знаю прикол насчет этого участка :) Я пока что специально выбираю направление среднее 180 град, но даже если "успокоить" его рукой в этом направлении, его постепенно начинает носить влево-вправо с увеличивающейся амплитудой. Думаю, что так быть не должно
dotzz
 
Сообщения: 14
Зарегистрирован: 13 июл 2015, 23:16
Откуда: Украина
прог. языки: C++, C#, Java

Re: Система автоматического полета по компасу для дирижабля.

Сообщение esisl » 14 июл 2015, 15:32

А пробовали просто платформу на нитке подвесить?
esisl
 
Сообщения: 1480
Зарегистрирован: 23 июл 2012, 15:24

Re: Система автоматического полета по компасу для дирижабля.

Сообщение dotzz » 14 июл 2015, 15:41

а у меня так и сделано (см фото во вложении)
Вложения
IMAG0188.jpg
dotzz
 
Сообщения: 14
Зарегистрирован: 13 июл 2015, 23:16
Откуда: Украина
прог. языки: C++, C#, Java

Re: Система автоматического полета по компасу для дирижабля.

Сообщение elmot » 14 июл 2015, 20:18

Ну если регулятор без ошибок, то ясное дело - механическая инерция платформы - мощная И составляющая. Решение - зафигачить мощную Д составляющую для гашения колебаний. Потом потихоньку ее уменьшать, чтобы оно все-таки со внятной скоростью вертелось.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Система автоматического полета по компасу для дирижабля.

Сообщение Dmitry__ » 15 июл 2015, 01:18

Не ПИД вам нужен, этожжеж не инкубатор. ПИД - физика термостата...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Система автоматического полета по компасу для дирижабля.

Сообщение elmot » 15 июл 2015, 01:20

Думаю ПИДом тоже можно, но настройка ПИДа - веселое занятие:)
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Система автоматического полета по компасу для дирижабля.

Сообщение Dmitry__ » 15 июл 2015, 01:26

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

Добавлено спустя 4 минуты 1 секунду:
elmot писал(а):Думаю ПИДом тоже можно, но настройка ПИДа - веселое занятие:)

Изучен он давно, веселое занятие до 25 лет возраста инженера, включая среднюю школу и детсад, если не прошло - значит маструбация, извините за мой французский. :roll:
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Система автоматического полета по компасу для дирижабля.

Сообщение Duhas » 15 июл 2015, 07:13

ну так предлагайте структуру регулятора..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Система автоматического полета по компасу для дирижабля.

Сообщение dotzz » 15 июл 2015, 10:25

Странно, перелопатил кучу инфы, в основном по коптерам, там тоже брушлес, тоже хоббийные регуляторы, используют ПИД и довольно успешно для стабилизации в воздухе. У меня вроде как задача проще, просто примерно +-5 градусов держать курс...
dotzz
 
Сообщения: 14
Зарегистрирован: 13 июл 2015, 23:16
Откуда: Украина
прог. языки: C++, C#, Java

Re: Система автоматического полета по компасу для дирижабля.

Сообщение Dmitry__ » 15 июл 2015, 14:11

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

У них система нагруженная, обороты двигателей всегда выше 50%, чуть убавил - коптер падает. Т.е. у них полностью выбрана нелинейность брушлеса на старте. Да еще в коптерах перешивают контроллеры на управление по и2ц 400гц., ибо штатный контроллер с ppm 50 гц. плохо управляется. А у тебя, минимальный импульс мощности десятикратно выше минимального требуемого значения. Представь себе иголку растянутую на нитках. И ты пытаешься стабилизировать ее положение щелчками :)
Нужно замерить минимальный импульс мощности системы: дать 50% мощности ppm сигналом, как можно короче по времени (чтоб стабильно запускался двигатель). И только после этого делать выводы...
Duhas писал(а):ну так предлагайте структуру регулятора..

Все просто, как можно ближе к физике конкретного процесса. Например, когда делал свою серву, учитывал срыв коллекторника с точки покоя (кста, похожая ситуация), а сверху ПИД :roll: Ну и интеграл обязательно отключать при больших рассогласованиях, но это уже есть и в описании разных ПИД. Ссылку где-то давал...
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Система автоматического полета по компасу для дирижабля.

Сообщение elmot » 15 июл 2015, 20:49

ТС, ставь коллекторный импеллер поперек движения, им и рули, как вертолет хвостовым винтом. и будет щастье.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Система автоматического полета по компасу для дирижабля.

Сообщение dotzz » 15 июл 2015, 21:17

elmot писал(а):ТС, ставь коллекторный импеллер поперек движения, им и рули, как вертолет хвостовым винтом. и будет щастье.

Да, так делают в дирижаблях, но мне хотелось уйти от этого, т.к. доп мотор это расход батареи и вес, казалось, можно обойтись двумя моторами
dotzz
 
Сообщения: 14
Зарегистрирован: 13 июл 2015, 23:16
Откуда: Украина
прог. языки: C++, C#, Java

Re: Система автоматического полета по компасу для дирижабля.

Сообщение elmot » 16 июл 2015, 01:00

Тогда попробуй по-другому. Не пытайся ПИДить мощность моторов, подгазовывай их мощно, но на короткие периоды. И управляй длительностью этих периодов.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6