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

Настройка хитрого ПИД регулятора

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

 

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

 

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

 

Соответственно, мотор заслонки управляется с микроконтроллера при помощи ШИМ сигнала.

 

Реализован "классический" алгоритм ПИД-регулятора, вот кусок си-кода:

 

en0=angle - servo_pos;
integral_term = SumE / 73.5;                    // Divide by the sampling frequency
derivative_term = en0 - en1;
integral_term = integral_term * ki;            //  Ki
derivative_term = derivative_term * kd;        // Kd
Cn = en0 + integral_term + derivative_term;    // Sum the terms
Cn = (Cn * kp);                         //Kp
en1 = en0;

 

Где, angle - требуемое положение, servo_pos - фактическое положение сервы

сооветственно Cn - выход на ШИМ, ki kd kp - коэффициента ПИДа.

 

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

 

НО. У нее есть как-бы люфт. То есть, если нажать на заслонку пальцем - она сначала поворачивается, потом из-за накопления ошибки I-звена плавно возвращается на заданное положение. Такое ощущение что недостаточно большой коэффициент P.

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

Так же был опробован "частотный" метод подбора коэффициентов ПИДа - безрезультатно. Заслонка работает, но есть "люфт".

 

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

 

Подскажите, пожалуйста - в какую сторону копать... Вообще, применим ли пид в подобных системах?

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


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

Сдаётся мне никто не будет разбираться с вашим замечательным кодом.

Надо сделать математическую модель вашей системы, определить полюса и нули, построить её ЛАФЧХ, и исходя из полученных результатов моделировать параметры корректора.

Если мне не изменяет память, у такого привода имеется полюс второго порядка, определяемый в основном моментом инерции ротора.

Вот с этой напастью и следует бороться.

То что заслонка не пытается возвратиться сразу в заданное положение, говорит о недостаточности дифференцирующей составляющей в корректоре.

PS/ Вот уж не думал что автомобильная дроссельная заслонка управляется так сложно. :wacko:

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


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

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

 

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

 

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

 

Подскажите, пожалуйста - в какую сторону копать...

Там есть особенности..

1. Есть порог тока двигателя - вместе с трением дает люфт. Данный выше совет выше про шум полезен тут.

2. Интегральный член после перехода в новое положение равновесия должен равняться нулю - отсюда колебания. Но в процессе движения он накапливается.

Вот попробуйте приложить постоянную силу к заслонке... Или пружинку. Или током...

3. Скорость лучше извлекать из противоЭДС двигателя.

4. Если следить за током двигателя, то можно следить за моментом - ускорением. Простой ШИМ не дает "правильного" момента, т.к. есть противоЭДС.

-----------

Попробуйте сначала убрать интегральный член.

Почитайте у Microchip application note по поводу управления перевернутым маятником...

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


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

Сдаётся мне никто не будет разбираться с вашим замечательным кодом.

 

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

Вопрос в том, применим ли "классический" пид для такого сервопривода.

 

 

попробуйте добавлять шумы к servo_pos, когда заслонка почти закрылась

 

Спасибо, сегодня попробую!

 

Вот попробуйте приложить постоянную силу к заслонке... Или пружинку. Или током...

 

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

 

3. Скорость лучше извлекать из противоЭДС двигателя.

 

Нереально. Стоит задача повторить "заводской" алгоритм управления, используемый в серийных авто. Там аппаратная часть вполне определенная, и не подразумевает измерение противо-ЭДС.

 

Попробуйте сначала убрать интегральный член.

Почитайте у Microchip application note по поводу управления перевернутым маятником...

 

Без интегрального члена возникает ошибка, связанная с наличием пружины. То есть переходный процесс при закрытии заслонки имеет другую форму чем при открытии. С интегралом все одинаково.

 

Собственно, кусочек кода в первом сообщение это и есть микрочиповский код :)

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


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

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

 

3. Скорость лучше извлекать из противоЭДС двигателя.

 

Нереально. Стоит задача повторить "заводской" алгоритм управления, используемый в серийных авто. Там аппаратная часть вполне определенная, и не подразумевает измерение противо-ЭДС.

С пружиной все должно работать...

А ток в аппаратной части измеряется? А про противоЭДС Вы уверены?

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


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

По противо эдс уверен. Схема очень примитивна, я ее "срисовывал" с Bosch'евского "мозга".

Ток не измеряется, есть только сигнал "превышение тока".

 

У меня такое ощущение возникает, что:

- есть некий уровень шима для удержания заслонки в определенном положении. Определяется усилием пружины.

- и есть некий аддитивный коэффициент для "страгивания" заслонки с этого положения - компенсация трения покоя

Возможно ли что к выходу ПИДа нужно просто прибавлять или вычитать (в зависимости от направления движания) этот коэффициент?

 

 

И еще вопрос :) В некоторых аппнотах упоминается про такой регулятор (PIV):

 

То есть, сначала компенсируется разница в скорости вращения, потом положения.

В чем плюсы по сравнению с ПИДом? Как я понимаю, Velocity error - это по сути "вид сбоку" на D-звено?

post-68694-1323158846_thumb.png

Изменено пользователем K.Viktor

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


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

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

Вопрос в том, применим ли "классический" пид для такого сервопривода.

Так я не сомневаюсь что сама программа рабочая, я сомневаюсь в том что параметры "обычного" пида выбраны верно.

 

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


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

По противо эдс уверен. Схема очень примитивна, я ее "срисовывал" с Bosch'евского "мозга".

Ток не измеряется, есть только сигнал "превышение тока".

Я бы еще раз проверила про противоЭДС. Ведь это самый правильный метод измерения скорости. А раз есть сигнал превышения тока, значит он как-то измеряется...

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

Еще подумайте, что ПИД не предназначен для "правильной" отработки больших невязок.

Еще над тем, что конечный момент (ток) есть однозначная функция от положения (опять спасибо пружине).

И эта функция известна заранее. И в равновесии (при нулевой невязке и ее производной) все управляющее воздействие содержится в интегральном члене. Должно.

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


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

То есть, сначала компенсируется разница в скорости вращения, потом положения.
Не совсем так. Это лишь реализация дифференциальной составляющей ПИДа, как вы верно сами подметили.

В чем плюсы по сравнению с ПИДом?
Ни в чём - т.к. это обычный ПИД.

Единственный бонус - это то что вам не нужно считать производную положения и иметь радость фильтровать её.

Т.е. плюс один - меньше математики в алгоритме.

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

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


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

Так я не сомневаюсь что сама программа рабочая, я сомневаюсь в том что параметры "обычного" пида выбраны верно.

 

Совершенно верно.

Прежде, чем бросаться крутить ручки втёмную желательно познакомиться с объектом управления.

Нужно узнать его Ке, электрическую и электромеханическую постоянные.

По ходу ознакомления нарисуются Lя – индуктивность якоря, Rя – сопротивление якоря.

Если механическая и электрическая постоянные разнесены на порядок, то объект управления можно условно считать звеном первого порядка, при условии, что влияние электрической постоянной будет глубоко закопано на (-12 – (-20))дБ полосы авторегулирования. Естественно, я надеюсь, туда уже закопана и частота ШИМ.

Тогда мы имеем дело только с электромеханической постоянной, звеном первого порядка, для которого применяем корректирующее ПИ – звено. Не ПИД!

Д – может сбить Вас с толку, запутать, причём с Вашим счастьем, это сделается легко.

 

Тут Вам советовали завести дополнительную верёвку по ЭДС, хотя это и не предусмотрено в «оригинале».

Хочу напомнить, что ОС по ЭДС вращения для коллекторных машин может быть замечена, когда её значение превышает падение напряжения на щётках.

U = E + I*Rя + Uщ.

 

U – напряжене, приложенное к машине.

E – ЭДС.

I – ток.

Rя – сопротивление якоря.

Uщ – дифференциальное падение напряжения на щётках.

 

Совершенно очевидно, что при определённых моментах (токах) нагрузки и «малых или ползучих» оборотах вала, ЭДС «прячется» за падением напряжения на щётках.

Начиная с каких-то «эффективных» оборотов вала и дружественных токов нагрузки, ЭДС «выходит из тени», но погрешность её измерения столь велика, что сводит на пшик все потуги измерения.

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

Не забываем, что задача про сервак, то есть – основная работа в районе «ползучих» скоростей, где ЭДС не сыскать и днём с огнём.

 

Теперь про пружину.

Ту её так хвалили, что пройти мимо этих од сложно.

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

Об этом не следует забывать.

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

Либо сузить полосу, так чтобы закопать резонанс пружины глубоко под 0дБ, либо вводить корректирующее Д-звено (вот оно – то самое счастье), так чтобы наклон разомкнутой ЛАЧХ пересекал 0дБ усиления под углом -20дБ/дек. Тут Вам крепко «повезло», ибо не во всех случаях удаётся справиться с норовистыми пружинами с помощью простого ПИДа.

Но будем надеяться, что редуктор ослабит её дурное влияние.

 

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


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

Тут Вам советовали завести дополнительную верёвку по ЭДС, хотя это и не предусмотрено в «оригинале».

Хочу напомнить, что ОС по ЭДС вращения для коллекторных машин может быть замечена, когда её значение превышает падение напряжения на щётках.

 

Теперь про пружину.

Ту её так хвалили, что пройти мимо этих од сложно.

Почти во всем с Вами согласна.

Но... не могу молчать...

ЭДС можно и нужно измерять при нулевом токе - в паузах ШИМа.

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

Что до собственных колебаний пружины, то согласна с Вами. Но колебания всей механической системы - не повод для расстройства. Трение придает оптимизм. И превращает окружность (эллипс) на фазовой плоскости в спираль...

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

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


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

 

 

PS

Забыл сказать про редуктор.

Не доведи хоспадя, если редуктор имеет механический люфт!

Это означает, что ОС по положению не жесткая в ноле, «в люфте» привязана на рзиночке.

Качания при условно широкой (нужной для эффективного регулирования) полосе авторегулирования и эффективном усилении обеспечены автоматом.

Про датчик положения.

Лучше всего поставить инкрементальный датчик на валу двигателя, - самое идеальное снятие ОС и эффективное управление – непосредственное воздействие на объект управления, с которого снимается ОС.

Ваш потенциометр стоит на валу редуктора, что уже не есть хорошо, а больше плохо.

Редуктор значительно ослабляет значение ОС (воздействуем на двигатель, а ОС снимаем с редуктора, ошибка регулирования начинает теряться в шумах), делая замкнутую систему вялой и «мягкой».

Изменено пользователем Andron55

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


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

PS

Забыл сказать про редуктор.

А ТС написал, что пружина возвращает заслонку в некоторое нулевое положение при обесточенном двигателе.

Отсюда можно найти еще одну полезную функцию пружины - устранение люфта. Еще замечу, что при "простом" управлении ШИМом противоЭДС уменьшает ток и момент пропорционально скорости. Таким образом имеется еще одно "трение".

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


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

Почти во всем с Вами согласна.

Но... не могу молчать...

ЭДС можно и нужно измерять при нулевом токе - в паузах ШИМа.

 

 

Такой метод имеет место быть при условии разрывных токов в нагрузке.

То есть, при достаточно низкой частоте ШИМ и не превышающих определённых значений (заведомо известных) моментах на валу.

В противном случае, из-за непрерывного тока в двигателе, ЭДС нам не видать, как своих ушей, - Ldi/dt скроет её за своей широкой спиной.

Такое стечение предварительных условий наносит определённые ограничения на применимость данного метода.

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

 

А ТС написал, что пружина возвращает заслонку в некоторое нулевое положение при обесточенном двигателе.

Отсюда можно найти еще одну полезную функцию пружины - устранение люфта.

 

Да, но в момент сервоуправления в «ноле» и при имеющемся люфте ОС болтается на резинке (пружина) – очень «полезно».

Завидую разработчику, на которого свалилось такое «счастье».

:biggrin:

 

Еще замечу, что при "простом" управлении ШИМом противоЭДС уменьшает ток и момент пропорционально скорости. Таким образом имеется еще одно "трение".

 

Вот это не осилил понять.

Как это?

Изменено пользователем Andron55

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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