Перейти к содержанию
    

Алгоритм позиционирования

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

Тема перекочевала отсюда.

 

В моем приводе это вопрос позиционирования встал ребром. По началу я не считал эту задачу сложной, но теперь понял, что все не так просто...

Застабилизировать скорость, когда вал должен просто вращаться, оказалось делом не сложным. PI регулятор работает.

Но вот вопрос позиционирования раскусить не могу... то, что смог реализовать работает с затухающими колебаниями относительно точки, в которую приводу нужно уйти.

Привожу код, который сможет пояснить суть алгоритма. Но общий принцип такой: берется рассогласованиее по координатам, которое домножается на некоторой коэффициент posTolPGain (пропорциональная часть), получаем скорость, на которой приказываем приводу двигаться. По мере приближения к заданной точке, рассогласование будет уменьшаться, пока не достигнет того минимума, при котором привод останавливается. Остается некоторая ошибка. Эта ошибка (ее величина определяется переменной posTolerance), компенсируется следующей ступенью пропорционального регулятора, у которого коэффициент posTolPGain1, который много больше, чем posTolPGain, в силу малости ошибки. Перввая ступень регулятора работает великолепно, но всегда остается ошибка. Вторая ступень дает колебания. Будут ли они затухающими, или нет, зависит от posTolPGain1, но они есть всегда... Мне не приходит идея, что делать? Использовать еще и интегральную составляющую для устранения ошибки позиционирования? Но это уже будет целых два ПИ-регулятора со своими коэффициентами... многовато их получается... Есть ли какие-нибудь идей у уважаемых профессионалов? Спасибо!

Да, датчик обратной связи - энкодер. Больше ничего нет..., и добалять нельзя. Привода аппаратно готов и какой бы ущербный он не был, придется придумывать, как реализовать позиционирование на энкодере.

/*
    This function must be called every 5 ms in Position Mode
    IN:
        pos - desired position
    OUT:
        servo result codes
*/
uint8_t TServoControl::positionModeProcess(int16_t pos)
{
    int32_t pos_tolerance = pos - getPosition();
    int32_t dp = pos_tolerance;
    if(dp < 0)
        dp*= -1L;
    if(dp > posTolerance)
        {
            int32_t vel = ((pos - getPosition()) * posTolPGain) / 128L;
            if(vel > 0)
                {
                    if(vel > velocityLimit)
                        vel = velocityLimit;
                }
            else
                if(vel < 0)
                    {
                        if(vel < -velocityLimit)
                            vel = -velocityLimit;
                    }
            velocityModeProcess(vel);
        }
    else
        {
            int16_t s_pwm = pos_tolerance * posTolPGain1 / 128L;
            if(s_pwm > 0)
                setServoMode(SERVO_POS_VELOCITY_MODE);
            else
                if(s_pwm < 0)
                    {
                        setServoMode(SERVO_NEG_VELOCITY_MODE);
                        s_pwm*= -1;
                    }
            if(s_pwm > 250L)
                s_pwm = 250;
            if(s_pwm)
                setPWM((uint8_t)s_pwm);
            else
                setServoMode(SERVO_FAST_STOP_MODE);
        }
    return SERVO_OK_RESULT;
}

Требования не высокие: нужно просто перемещаться из текущей точки в заданную. Ускорение и максимальная скорость, до которой разгоняемя - задаются. Погрешность допустима.. ну сколько, даже не знаю как выразить. Ну вал двигателя может провернуться или не довернуться процентов на 20 - 40 от того значения, которое соответсвует заданной координате. Извините за доморощенные термины. Ну вот, пока вроде все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Требования не высокие: нужно просто перемещаться из текущей точки в заданную. Ускорение и максимальная скорость, до которой разгоняемя - задаются. Погрешность допустима.. ну сколько, даже не знаю как выразить. Ну вал двигателя может провернуться или не довернуться процентов на 20 - 40 от того значения, которое соответсвует заданной координате. Извините за доморощенные термины. Ну вот, пока вроде все.

А в чем же проблема? Вы должны посчитать зависимость позиция(время).А потом придерживаться этого курса. Например, исходя из постоянной мощности, скорость будет пропорциональна корню из времени, позиция - времени в степени 3/2. Это при разгоне и торможении. В зависимости от длины перемещения возможны случаи как с участком, проходимым с постоянной скоростью, если максимальная скорость ограничена, так и без оного. Возможно, что торможение может быть более быстрым... Это зависит от механики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вторая ступень дает колебания. Будут ли они затухающими, или нет, зависит от posTolPGain1, но они есть всегда...

1) Похоже, что надо PID вместо PI. Множитель дифференциальной части должен быть равен примерно 0,5 от множителя пропорциональной.

2) В microchip были аппликухи про серваки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в чем же проблема? Вы должны посчитать зависимость позиция(время).А потом придерживаться этого курса. Например, исходя из постоянной мощности, скорость будет пропорциональна корню из времени, позиция - времени в степени 3/2. Это при разгоне и торможении. В зависимости от длины перемещения возможны случаи как с участком, проходимым с постоянной скоростью, если максимальная скорость ограничена, так и без оного. Возможно, что торможение может быть более быстрым... Это зависит от механики.

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

Может быть я Вас неверно понимаю, если что, не ругайте сильно) Я еще пока только начинающий.

 

1) Похоже, что надо PID вместо PI. Множитель дифференциальной части должен быть равен примерно 0,5 от множителя пропорциональной.

Ага, прихожу к тому же. Только Вы еще Д-составляющую предлагаете. В данном случае она будет работать, если мы решим сорвать привод с установившейся точки?

2) В microchip были аппликухи про серваки.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Может быть я Вас неверно понимаю, если что, не ругайте сильно) Я еще пока только начинающий.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вы выразились вполне ясно, просто мой уровень компетенции еще не вырос до нужного значения)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы выразились вполне ясно, просто мой уровень компетенции еще не вырос до нужного значения)

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

А может стоит перед экспериментами поизучать описания и структурные схемы промышленных приводов позиционирования? Неплохая документация у Сименса (серия SIMOTION) , Омрон-Яскава, Бекхофф и многих других. На сайте Техаса http://focus.ti.com/docs/solution/folders/print/195.html

http://focus.ti.com/dsp/docs/dspplatformsc...0&tabId=518

Скачайте и поставьте систему и библиотеку TIDKS для разных типов двигателей. Там есть описания и исходники и учебные работы . Есть библиотека псевдоплавающих вычислений для регуляторов. По регуляторам в журнале СТА http://www.cta.ru/ за последние два года был ряд хороших статей с практическими советами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин!) Еще одна неприятность выяснилась: появляются лишние импульсы от энкодера, если его резко повращать "туда-сюда". Если вращение идет плавно, все ок! Ну не дают денег на промышленный энкодер, пришлось ставить оптрон из мышки..., а они там, видимо, не очень по точности...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так:

В контур скорости поставьте ПИ регулятор, а в контур положения П.

Должно заработать нормально.

 

Блин!) Еще одна неприятность выяснилась: появляются лишние импульсы от энкодера, если его резко повращать "туда-сюда". Если вращение идет плавно, все ок! Ну не дают денег на промышленный энкодер, пришлось ставить оптрон из мышки..., а они там, видимо, не очень по точности...

А у Вас не те же проблемы что и у меня были =)

post-20249-1227241953_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте так:

В контур скорости поставьте ПИ регулятор, а в контур положения П.

Должно заработать нормально.

Я именно так вчера и проэксперементировал! Да. работает, 1 колебание есть и затихает. Но скорость позиционирования не удовлетворяет. Да и при рывке привода с установившейся координаты проходит достаточно много времени (2 сек примерно), пока он вернет все на свои места.

А у Вас не те же проблемы что и у меня были =)

Да похоже, что нет. Ведь у меня аппаратная обработка фаз энкодера на триггерах... Нда... нужно смотреть....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но скорость позиционирования не удовлетворяет.

А что предпологается позиционировать-то (крутить двигателем). Есть такие важные понятия как приведенный момент инерции и жескость механических связей... от них многое зависит... :)

А еще есть такой параметр kФ, который также во многом определяет быстродействие. :)

А еще есть максимальный ток якоря... Который лучше бы не превышать... :)

Если хочется не просто позиционировать, а позиционировать быстро ИМХО эти праметры нужно знать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что предпологается позиционировать-то (крутить двигателем). Есть такие важные понятия как приведенный момент инерции и жескость механических связей... от них многое зависит... :)

А еще есть такой параметр kФ, который также во многом определяет быстродействие. :)

А еще есть максимальный ток якоря... Который лучше бы не превышать... :)

Если хочется не просто позиционировать, а позиционировать быстро ИМХО эти праметры нужно знать.

Позиционировать нужно манипулятор. Три оси. Манипулятор промышленный, готовый. Документации нет. Соответсвенно провести динамический расчет возможности нет. Хотелось, если честно, методом тыка и проб и ошибок. Я полностью понимаю, что это не научно и может привести к провалу. Но времени и рерусов на проведение исследований нет. Также не хочется брать что-либо промышленное, хочется сделать своими руками. В общем задачу можно считать академеической. Но делать надо. Простаивает лабораторное оборудование (робот). Хочется отремонтировать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем приводе это вопрос позиционирования встал ребром. По началу я не считал эту задачу сложной, но теперь понял, что все не так просто...

Застабилизировать скорость, когда вал должен просто вращаться, оказалось делом не сложным. PI регулятор работает.

Но вот вопрос позиционирования раскусить не могу... то, что смог реализовать работает с затухающими колебаниями относительно точки, в которую приводу нужно уйти.

Сначала нужно конкретизировать задачу. Что требуется просто позиционирование или полноценный серво (следящий) привод.

1. Позиционирование. На станочном обоудовании обычно осуществляется следующим образом.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПИ-регулятор принципиально дает перерегулирование.

Добавление скоростной компенсации к П-регулятору тоже дает перерегулирование.

Способы устранения перерегулирования:

- задатчики интенсивности

- П-регулятор

- адаптивный регулятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Позиционировать нужно манипулятор. Три оси...

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...