PID. Только информация.

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

PID. Только информация.

Сообщение Lexxa »

PID-регуляторы, описание, настройка, примеры. Только информация.

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

Оглавление

См. также

Что такое ПИД статья на roboforum.ru
Настройка параметров ПИД-регулятора статья на powergroup.com.ua

Как в общих чертах настраивать отдельные узлы в сервосистемах cтатья на
linuxcnc.org (англ.)
PID статья на : linuxcnc.org (англ.)
Автонастройка пида cтатья на: linuxcnc.org (англ.)
PWM Servo Amplifiers статья на linuxcnc.org (англ.)
Man по компонентам pid и at_pid от LinuxCNC (англ.)
Последний раз редактировалось Lexxa 18 янв 2012, 19:17, всего редактировалось 5 раз.
:bender:
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

http://wiki.linuxcnc.org/cgi-bin/emcinf ... _PID_Loops
Что там пишут:

Настройка ПИД-регулирования в ЕМС

Введение

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

John Kasunich:

Начнем с нуля:

При создании вещей я придеживаюсь подхода "снизу вверх".
Я даже не начинаю с ЕМС как все, я часто проектирую отдельный контур позиционирования в HAL и проверяю его с входными сигналами от генератора. Только когда контур позиционирования работает я подключаю его к ЕМС.
Вероятно, большинство так делать не будет, но я так делаю, поскольку мне удобно работать в HAL. Когда нибудь я могбы сделать hal-файлы и инструкцию c моим методом, которыми будут пользоваться неопытные пользователи HAL, сейчас у меня есть время для описания вещей в общих чертах.
(
Замечание. Везде здесь я использую дюймы, потому что мне действительно очень не хочется писать "дюймы" или "мм" дюжину раз. Там, где вы встретите "дюймы" можете подставить "(или мм)" следом за ними.
) Фактически, вы можете использовать любую машинную единицу, какую хотите в том случае, если вы последовательны. Машинные единицы во всех блоках HAL совпадают с машинными единицами, поределенными в ini-файле ЕМС.

Получить рабочие энкодеры.

Любой сервосистеме необходима обратная связь по положению. Большинство систем в качестве обратной связи с двигателем используют квадратурный энкодер. В первую очередь вам необходимо приобрести энкодер, шлейф и источник питания для соединения программных или аппаратных устройств, которые вы намереваетесь использовать для посчета импульсов энкодеров. Подробная информация о которых зависит от конкретного устройства. Как только вы установите аппаратную часть, в ваш hal-файл необходимо загрузить соответствующий драйвер (и еще загрузить HAL-модуль программного счетчика энкодера, если вы его используете). Детали позже. Вы должны иметь возможность провернуть вал двигателя и посмотреть параметр энкодера "counts" (отсчеты) используя команду "halcmd show param" или HAL-метр.

Установка масштаба энкодера.

Используйте машинные данные для вычисления числа отсчетов энкодера за дюйм или мм. Например, если ваш станок имеет 5 оборотов ШВП на дюйм, 40 зубцов шкива редуктора на ШВП, 20 зубцов шкива на моторе и 512 циклов отсчета на оборот (2048 отсчетов на оборот) энкодера, то шкала будет такой:
5 оборотов ШВП на дюйм * ( 40 зубцов шкива редуктора на ШВП / 20 зубцов шкива на моторе) * 2048 отсчетов на оборот энкодера = 20480 отсчетов на дюйм. Таким образом параметр position-scale энкодера должен быть 20480. Если вы установите параметр "scale", то HAL-пин "position" будет показывать текущее положение в дюймах (или мм).

Проерка полярности энкодера.

С выключенным двигателем проверните каждую ось так, чтобы стол станка подвинутся в положительном направлении. Если положение ответившего энкодера увеличилось, то полярность правильная и вы можете приступать к следующему шагу. Если положение ответившего энкодера уменьшилось, то полярность обратная. Данную проблему можно решить двумя способами. Вы можете исправить оборудование, чтобы были правильные отсчеты (например поменять местами сигналы А и В энкодера или поменять местами сигналы А и не-А квадратурного энкодера). Или вы можете решить проблему программно, установив отрицательное значение масштаба.

Грубая проверка масштаба энкодера.

С выключенным двигателем запишите значение HAL-пина "position", затем вручную передвиньте ось так, чтобы рабочий орган станка переместится на известное расстояние, например 1 дюйм. Затем запишите новое значение HAL-пина "position" и вычтите их друг из друга. Разность должна быть расстоянием, на которое вы переместили стол станка. Если она отличается на несколько процентов, это не проблема и она может быть четко решена позже. Если разность велика, повторите шаг, где расчитывается масштаб, выясните, что пошло не так и исправьте это. Если "position" обратной связи точно (в пределах нескольких процентов) отображает путь оси, то переходите к следующему шагу.

Режим скорости или крутящего момента?

Сервосистемы могут работать в одном из двух режимов, основанных на управляющих сигналах сервоприводов. Если сигнал привода представляет собой желаемый крутящий момент двигателя, то систма в режиме Крутящий момент. Если сигнал привода представляет собой желаемую скорость, то система в режиме Скорость. (Примечание: со щеточными двигателями постоянного тока момент прапорционален току якоря, а скорость прапорциональна напряжению якоря.) Таким образом, если привод управляется током, то это система работает в режиме Крутящий момент, а если напряжением, то - Скорость.
Добавлено пользователем jros (не специалист):
Я думаю, что некоторые нестандартные ПИД-модули, настроенные параметрами такими как FF0, FF1, FF2, bias, имеют большую чувствительность в режиме Момент, потому что они предсталяют собой физические оценки априори необходимого крутящего момента (т.е. FF1 - вязкость(трение), FF2 - инерционность, удержание тяжести,...) Я не могу понять смысл FF1, например, если управление в режиме Скорость.

Проверка вывода ЦАП

Соедините HAL-сигнал с выводом ЦАП, установите масштаб ЦАП в 1.0. Затем с выключенным приводом и двигателем установите HAL-сигнал в +1.0В и проверьте мультиметром, что выходное напряжение правильное. Повторите операцию созначением выходного напряжения -1.0В. Затем проверьте с большими значениями в зависимости от диапазона ЦАП, например +5.0В и -5.0В. Следующие шаги должны быть описаны более подробно.

Установка масштаба DAC

Вычислиние основано на отношении Вольт к оборотам в минуту и прочим так, что HAL-пин DAC масштабируется в дюйм в секунду.

Проверка полярности предусилителя привода и масштаба.

Скомандуйте приводу медленно двигаться установив выход ЦАП в 0,05 дюйма/сек и проверьте, что актуальная скорость и направление оси верны. Ошибка в 10-20% это нормально, но обратную полярность или грубую ошибку скорости необходимо исправить.
Последний раз редактировалось Lexxa 18 янв 2012, 18:50, всего редактировалось 1 раз.
:bender:
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: PID. Только информация.

Сообщение aftaev »

Lexxa, ты бы для начало рассазал что такое ваще PID. Куча народу не знает шо это за зверь такой и зачем он нужен.

Для тех кто незнает что такое PID. Но решил узнать этого зверя, зайдя в эту тему, здесь расписано вполне доходчиво что такое PID:
http://roboforum.ru/wiki/%D0%9F%D0%B5%D ... 0%D1%85%22
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?PiD

Рассмотрим замкнутый котроллер шпинделя управляющий частотно-регулируемым приводом (VFD), где входное напряжение равно выходной скорости.
Само по себе P-усиление работать не будет. Как только шпиндель достигнет скорости, так P-коэффициент станет равным нулю и VFD потребует равенства нулю. Итак, вам нужно большое усиление, и всегда ровно столько, чтобы задать необходимое выходное напряжение ниже заданного значения. Если 10В = 1000rpm, и вы хтите 500rpm, тогда с единичным P-усилением у вас будет на выходе 5В с действительной скоростью 999.5rpm, но, скорее всего это это будет слишком высокое усиление для того чтобы быть стабильным. Обычно в замкнутом управлении шпинделя вы будете заканчивать пользуясь интегральным членом для обеспечения постоянного значения вследствии его изменения компонентом Р.
FF0 FF0 позволит вам запрограммировать коэффициент Скорость/напряжение. Тогда прапорциональный, интегральный и дифференциальный компоненты будут мало влиять на него так, что усиление станет меньше, а стабильность регулирования выше.
Когда я говорю о математическом «порядке» я имею в виду производную по времени.
Закрытая петля шпинделя это скорость-результат и команда скорости. Двигатели с тахометром это скорость результат и комманда скорости. Режим крутящего момента на сервомашинах это положение-результат и команда ускорения (трением пренебрегаем), шаговые системы это положение-результат и комманда положения.
Итак, FF0 будет полезна в системах скорость-скорость или положение-положение, FF1 - положение-скорость, а FF2 в системах положение-ускорение.
:bender:
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

aftaev писал(а):Lexxa, ты бы для начало рассазал что такое ваще PID. Куча народу не знает шо это за зверь такой и зачем он нужен.
Кто сталкнется, погуглит)
:bender:
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: PID. Только информация.

Сообщение NightV »

Lexxa а ты ссылки то в шапку суй, тоесть в свой первый пост чтоб народу всю ветку не читать и искать сылки, правда его нать еще оформить. мы щас пока пофлудим(без этого пока никак) и Nick'a потом попросим он и удалит все лишнее с темы(типа ему больше заняться нечем как за нами подметать)
Всё просто! если знаешь КАК!
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

дада, без бэ, флуд - это круто)
У меня почему-то в теме про 6р13 недоступна правка первого сообщения.
:bender:
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: PID. Только информация.

Сообщение NightV »

это к Nick'у... начальник!! (стучит шваброй по потолку) добавь кнопку то! тут народ просит проболжение банкета! :D нужная вещь когда тут такая пьянка пошла по поводу ПИДа.
думаю там стоит проверка условий, так можно привязать что "автор темы" может редактиравать свои сообщение-я, и чтоб кнопка "править" не пропадала... млин.. пока писал пришла мысль, что еще нужно сверять чтоб это могли делать определенная "группа" , модеры например или отдельная група, кстате а где модераторы? или у нас Nick так сказать "в одном флаконе"? :wtf:
Всё просто! если знаешь КАК!
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: PID. Только информация.

Сообщение Nick »

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

Исправим :).
ЗЫ Вы вообще когда-нибудь спите? Я ложусь, вы пишете, встаю вы пишите :).
Аватара пользователя
Dmaster
Мастер
Сообщения: 1271
Зарегистрирован: 15 июл 2011, 13:36
Репутация: 476
Контактная информация:

Re: PID. Только информация.

Сообщение Dmaster »

Вопервых господа. добавлю это!
http://wiki.linuxcnc.org/cgi-bin/wiki.p ... Amplifiers

И есть такая штука!!! Как авто настройка. но на неё ругаются в инете и начения ff0 ff1 она не подбирает.

http://linuxcnc.org/docs/2.3/html/man/m ... pid.9.html ((как пользоваться не разобрался. это к Нику))

Еще одно. Перд настройкой PID с использованием плат MESA ОБЯЗАТЕЛЬНО ЗАЗЕМЛИТЬ КОМП... лучше на единую шину с приводом. Помех на 60% меньше. + почти пропадает лишний дрейф.
" Linux CNC - наше всё"
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

Ник, на работе)))))
:bender:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: PID. Только информация.

Сообщение Nick »

Dmaster писал(а):И есть такая штука!!! Как авто настройка. но на неё ругаются в инете и начения ff0 ff1 она не подбирает.http://linuxcnc.org/docs/2.3/html/man/m ... pid.9.html ((как пользоваться не разобрался. это к Нику))
Есть такая штука...
Компонент at_pid. После загрузки его название будет просто pid, а не at_pid, наверное сделано для того, чтобы можно было быстро поменять pid на at_pid в hal-файле, настроить ось и поменять обратно. at_pid представляет собой такой же ПИД-регулятор, с некоторыми отличиями.

Итак, по отличиям.
Появились новые пины:
pid.N.tune-mode bit in Когда равен true, включает режим авто настройки. Когда false, работает как обычный ПИД.
pid.N.tune-start bit io Когда равен true, начинает авто настройку. Обнуляется по завершению настройки.
Параметры:
tunee-type u32 rwх Когда равен 0, вычисляются Pgain/Igain/Dgain. Когда равен 1, вычисляются Pgain/Igain/FF1.
pid.N.tune-cycles u32 rw Определяет количество циклов которые будут выполнены, чтобы характеризовать процесс. tune-cycles на самом деле задает количество полу-циколв. Больше циклов дадут лучшую характеризацию.
pid.N.tune-effort float rw Определяет пределы цикла при тестах. tune-effort должен быть положительным значением меньшим maxoutput. Начинайте с маленьких значений и постепенно увеличивайте его до практически максимальных значений хода мотора. Чем меньше значение, тем меньше
амплитуда пределов цикла. [... тут я с переводом немного подкосячил если кто-то может исправьте ...]

pid.N.tune-effort float rw
Determines the effor used in setting up the limit cycle in the process. tune-effort should be set to a positive value less than maxoutput. Start with something small and work up to a value that results in a good portion of the maximum motor current being used. The smaller the value, the smaller the amplitude of the limit cycle.

pid.N.ultimate-gain float ro (only if debug=1)
Determined from process characterization. ultimate-gain is the ratio of tune-effort to the limit cycle amplitude multipled by 4.0 divided by Pi. pid.N.ultimate-period float ro (only if debug=1) Determined from process characterization. ultimate-period is the period of the limit cycle.

По работе с ним, пишем вместо загрузки pid загрузку at_pid, добавляем не хватающие пины. И запускаем например из консоли:
halcmd setp pid.N.tune-start 1
Наверное, можно настраивать даже несколько осей одновременно.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

Шапка исходника модуля PID

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

/********************************************************************
* Description:  pid.c
*               This file, 'pid.c', is a HAL component that provides 
*               Proportional/Integeral/Derivative control loops.
*
* Author: John Kasunich
* License: GPL Version 2
*    
* Copyright (c) 2003 All rights reserved.
*
* Last change: 
********************************************************************/
/** This file, 'pid.c', is a HAL component that provides Proportional/
    Integeral/Derivative control loops.  It is a realtime component.

    It supports a maximum of 16 PID loops.

    The number of pid components is set by the module parameter 'num_chan='
    when the component is insmod'ed.  Alternatively, use the
    names= specifier and a list of unique names separated by commas.
    The names= and num_chan= specifiers are mutually exclusive.

    In this documentation, it is assumed that we are discussing position
    loops.  However this component can be used to implement other loops
    such as speed loops, torch height control, and others.

    Each loop has a number of pins and parameters, whose names begin
    with 'pid.x.', where 'x' is the channel number.  Channel numbers
    start at zero.

    The three most important pins are 'command', 'feedback', and
    'output'.  For a position loop, 'command' and 'feedback' are
    in position units.  For a linear axis, this could be inches,
    mm, metres, or whatever is relavent.  Likewise, for a angular
    axis, it could be degrees, radians, etc.  The units of the
    'output' pin represent the change needed to make the feedback
    match the command.  As such, for a position loop 'Output' is
    a velocity, in inches/sec, mm/sec, degrees/sec, etc.

    Each loop has several other pins as well.  'error' is equal to
    'command' minus 'feedback'.  'enable' is a bit that enables
    the loop.  If 'enable' is false, all integrators are reset,
    and the output is forced to zero.  If 'enable' is true, the
    loop operates normally.

    The PID gains, limits, and other 'tunable' features of the
    loop are implemented as parameters.  These are as follows:

    Pgain	Proportional gain
    Igain	Integral gain
    Dgain	Derivative gain
    bias	Constant offset on output
    FF0		Zeroth order Feedforward gain
    FF1		First order Feedforward gain
    FF2		Second order Feedforward gain
    deadband	Amount of error that will be ignored
    maxerror	Limit on error
    maxerrorI	Limit on error integrator
    maxerrorD	Limit on error differentiator
    maxcmdD	Limit on command differentiator
    maxcmdDD	Limit on command 2nd derivative
    maxoutput	Limit on output value

    All of the limits (max____) are implemented such that if the
    parameter value is zero, there is no limit.

    A number of internal values which may be usefull for testing
    and tuning are also available as parameters.  To avoid cluttering
    the parameter list, these are only exported if "debug=1" is
    specified on the insmod command line.

    errorI	Integral of error
    errorD	Derivative of error
    commandD	Derivative of the command
    commandDD	2nd derivative of the command

    The PID loop calculations are as follows (see the code for
    all the nitty gritty details):

    error = command - feedback
    if ( abs(error) < deadband ) then error = 0
    limit error to +/- maxerror
    errorI += error * period
    limit errorI to +/- maxerrorI
    errorD = (error - previouserror) / period
    limit errorD to +/- maxerrorD
    commandD = (command - previouscommand) / period
    limit commandD to +/- maxcmdD
    commandDD = (commandD - previouscommandD) / period
    limit commandDD to +/- maxcmdDD
    output = bias + error * Pgain + errorI * Igain +
             errorD * Dgain + command * FF0 + commandD * FF1 +
             commandDD * FF2
    limit output to +/- maxoutput

    This component exports one function called 'pid.x.do-pid-calcs'
    for each PID loop.  This allows loops to be included in different
    threads and execute at different rates.
*/

/** Copyright (C) 2003 John Kasunich
                       <jmkasunich AT users DOT sourceforge DOT net>
*/

/** This program is free software; you can redistribute it and/or
    modify it under the terms of version 2 of the GNU General
    Public License as published by the Free Software Foundation.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111 USA

    THE AUTHORS OF THIS LIBRARY ACCEPT ABSOLUTELY NO LIABILITY FOR
    ANY HARM OR LOSS RESULTING FROM ITS USE.  IT IS _EXTREMELY_ UNWISE
    TO RELY ON SOFTWARE ALONE FOR SAFETY.  Any machinery capable of
    harming persons must have provisions for completely removing power
    from all motors, etc, before persons enter any danger area.  All
    machinery must be designed to comply with local and national safety
    codes, and the authors of this software can not, and do not, take
    any responsibility for such compliance.

    This code was written as part of the EMC HAL project.  For more
    information, go to www.linuxcnc.org.
*/
:bender:
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

В папке с исходником pid есть кое какой мануал:
Ей бы перевод...

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

= PID Tuning

== PID Controller

A proportional-integral-derivative controller (PID controller) is a
common feedback loop component in industrial control
systems.footnote:[This Subsection is taken from an much more extensive
article found at http://en.wikipedia.org/wiki/PID_controller]

The Controller compares a measured value from a process (typically an
industrial process) with a reference set point value. The difference
(or 'error' signal) is then used to calculate a new value for a
manipulable input to the process that brings the process measured value
back to its desired set point.

Unlike simpler control algorithms, the PID controller can adjust
process outputs based on the history and rate of change of the error
signal, which gives more accurate and stable control. (It can be shown
mathematically that a PID loop will produce accurate, stable control in
cases where a simple proportional control would either have a
steady-state error or would cause the process to oscillate).

=== Control loop basics

Intuitively, the PID loop tries to automate what an intelligent
operator with a gauge and a control knob would do. The operator would
read a gauge showing the output measurement of a process, and use the
knob to adjust the input of the process (the 'action') until the
process's output measurement stabilizes at the desired value on the
gauge.

In older control literature this adjustment process is called a
'reset' action. The position of the needle on the gauge is a
'measurement', 'process value' or 'process variable'. The desired value
on the gauge is called a 'set point' (also called 'set value'). The
difference between the gauge's needle and the set point is the 'error'.

A control loop consists of three parts:

1. Measurement by a sensor connected to the process (e.g. encoder),

2. Decision in a controller element,

3. Action through an output device such as an motor.

As the controller reads a sensor, it subtracts this measurement from
the 'set point' to determine the 'error'. It then uses the error to
calculate a correction to the process's input variable (the 'action')
so that this correction will remove the error from the process's output
measurement.

In a PID loop, correction is calculated from the error in three ways:
cancel out the current error directly (Proportional), the amount of
time the error has continued uncorrected (Integral), and anticipate the
future error from the rate of change of the error over time
(Derivative).

A PID controller can be used to control any measurable variable which
can be affected by manipulating some other process variable. For
example, it can be used to control temperature, pressure, flow rate,
chemical composition, speed, or other variables. Automobile cruise
control is an example of a process outside of industry which utilizes
crude PID control.

Some control systems arrange PID controllers in cascades or networks.
That is, a 'master' control produces signals used by 'slave'
controllers. One common situation is motor controls: one often wants
the motor to have a controlled speed, with the 'slave' controller
(often built into a variable frequency drive) directly managing the
speed based on a proportional input. This 'slave' input is fed by the
'master' controller's output, which is controlling based upon a related
variable.

=== Theory

'PID' is named after its three correcting calculations, which all add
to and adjust the controlled quantity. These additions are actually
'subtractions' of error, because the proportions are usually negative:

==== Proportional

To handle the present, the error is multiplied by a (negative)
constant P (for 'proportional'), and added to (subtracting error from)
the controlled quantity. P is only valid in the band over which a
controller's output is proportional to the error of the system. Note
that when the error is zero, a proportional controller's output is
zero.

==== Integral

To learn from the past, the error is integrated (added up) over a
period of time, and then multiplied by a (negative) constant I (making
an average), and added to (subtracting error from) the controlled
quantity. I averages the measured error to find the process output's
average error from the set point. A simple proportional system either
oscillates, moving back and forth around the set point because there's
nothing to remove the error when it overshoots, or oscillates and/or
stabilizes at a too low or too high value. By adding a negative
proportion of (i.e. subtracting part of) the average error from the
process input, the average difference between the process output and
the set point is always being reduced. Therefore, eventually, a
well-tuned PID loop's process output will settle down at the set point.

==== Derivative

To handle the future, the first derivative (the slope of the error)
over time is calculated, and multiplied by another (negative) constant
D, and also added to (subtracting error from) the controlled quantity.
The derivative term controls the response to a change in the system.
The larger the derivative term, the more rapidly the controller
responds to changes in the process's output.

More technically, a PID loop can be characterized as a filter applied
to a complex frequency-domain system. This is useful in order to
calculate whether it will actually reach a stable value. If the values
are chosen incorrectly, the controlled process input can oscillate, and
the process output may never stay at the set point.

=== Loop Tuning

'Tuning' a control loop is the adjustment of its control parameters
(gain/proportional band, integral gain/reset, derivative gain/rate) to
the optimum values for the desired control response. The optimum
behavior on a process change or set point change varies depending on
the application. Some processes must not allow an overshoot of the
process variable from the set point. Other processes must minimize the
energy expended in reaching a new set point. Generally stability of
response is required and the process must not oscillate for any
combination of process conditions and set points.

Tuning of loops is made more complicated by the response time of the
process; it may take minutes or hours for a set point change to produce
a stable effect. Some processes have a degree of non-linearity and so
parameters that work well at full-load conditions don't work when the
process is starting up from no-load. This section describes some
traditional manual methods for loop tuning.

There are several methods for tuning a PID loop. The choice of method
will depend largely on whether or not the loop can be taken 'offline'
for tuning, and the response speed of the system. If the system can be
taken offline, the best tuning method often involves subjecting the
system to a step change in input, measuring the output as a function of
time, and using this response to determine the control parameters.

==== Simple method

If the system must remain on line, one tuning method is to first set
the I and D values to zero. Increase the P until the output of the loop
oscillates. Then increase I until oscillation stops. Finally, increase
D until the loop is acceptably quick to reach its reference. A fast PID
loop tuning usually overshoots slightly to reach the set point more
quickly; however, some systems cannot accept overshoot.

[width="90%", options="header", cols="^,4*<"]
|================================================================================|
|Parameter | Rise Time      | Overshoot   | Settling Time    | Steady State Error
|      P   | Decrease       | Increase    | Small Change     | Decrease
|      I   | Decrease       | Increase    | Increase         | Eliminate
|      D   | Small Change   | Decrease    | Decrease         | Small Change
|================================================================================|

Effects of increasing parameters

==== Ziegler-Nichols method

Another tuning method is formally known as the 'Ziegler-Nichols
method', introduced by John G. Ziegler and Nathaniel B. Nichols. It
starts in the same way as the method described before: first set the I
and D gains to zero and then increase the P gain and expose the loop to
external interference for example knocking the motor axis to cause it
to move out of equilibrium in order to determine critical gain and
period of oscillation until the output of the loop starts to oscillate.
Write down the critical gain (K~c~) and the oscillation
period of the output (P~c~). Then adjust the P, I and D
controls as the table shows:

[width="90%", options="header", cols="4*^"]
|========================================
|Control type      |       P  |        I  |     D
|         P        |   .5K~c~ |           | 
|         PI       | .45K~c~  | 1.2/P~c~  | 
|         PID      |   .6K~c~ | 2/P~c~    | P x P~c~/8

|========================================

==== Final Steps

After tuning the axis check the following error with Halscope to make
sure it is within your machine requirements. More information on 
Halscope is in the HAL User manual.
Вложения
pid-feedback_fr.png
pid-feedback_fr.png (7.03 КБ) 10300 просмотров
Последний раз редактировалось Lexxa 18 янв 2012, 23:04, всего редактировалось 4 раза.
:bender:
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

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

/* do output calcs only if enabled */
    if (enable != 0) {
	/* calculate the output value */
	tmp1 =
	    *(pid->bias) + *(pid->pgain) * tmp1 + *(pid->igain) * *(pid->error_i) +
	    *(pid->dgain) * *(pid->error_d);
	tmp1 += command * *(pid->ff0gain) + *(pid->cmd_d) * *(pid->ff1gain) +
	    *(pid->cmd_dd) * *(pid->ff2gain);
	/* apply output limits */
	if (*(pid->maxoutput) != 0.0) {
	    if (tmp1 > *(pid->maxoutput)) {
		tmp1 = *(pid->maxoutput);
		pid->limit_state = 1.0;
	    } else if (tmp1 < -*(pid->maxoutput)) {
		tmp1 = -*(pid->maxoutput);
		pid->limit_state = -1.0;
	    } else {
		pid->limit_state = 0.0;
	    }
	}
    } else {
	/* not enabled, force output to zero */
	tmp1 = 0.0;
	pid->limit_state = 0.0;
    }
:bender:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: PID. Только информация.

Сообщение Nick »

Lexxa писал(а):В папке с исходником pid есть кое какой мануал:
Ей бы перевод...
Сделаем :). Сюда же повешу.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

http://gnipsel.com/linuxcnc/tuning/servo.html
занятная статейка
:bender:
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: PID. Только информация.

Сообщение Nick »

И правда интересно! Жаль не пишет, на каких сервах и каком станке он это делал, от этого многое зависит.
Аватара пользователя
Lexxa
Мастер
Сообщения: 2703
Зарегистрирован: 16 дек 2011, 16:48
Репутация: 319
Настоящее имя: Алексей
Откуда: ryazan
Контактная информация:

Re: PID. Только информация.

Сообщение Lexxa »

Ник, главное там то, что скорость двигателя есть функция от Uзадания.
:bender:
tuumanov
Новичок
Сообщения: 10
Зарегистрирован: 10 фев 2013, 20:32
Репутация: 0
Контактная информация:

Re: PID. Только информация.

Сообщение tuumanov »

Lexxa, ты программист конечно классный, но данная тема не твоя. Полезность выше изложенного заключается только в ссылках, а остальное ..... И нет главного.
В теории автоматического регулирования есть следующие методы анализа и настройки серво: метод моделирования и численный метод неприемлемы в данном случае по причине: то что они требуют помимо структуры PID регулятора, еще структуру привода с точным указанием характеристик всех внутренних элементов. Плюс к этому необходимо определять приведенный момент инерции на вал двигателя. Частотно- фазовый метод я за 38 лет ни разу не использовал поскольку он требует аппаратных средств. Linux CNC это позволяет. Когда испытаю, поделюсь результатом. Все при настройки серво пользуются методом который в TАР-е называется: Анализ системы автоматического регулирования по переходным процессам при воздействии на систему сигнала в виде скачка.
А теперь о главном: в серво главное звено сам привод - не будет результата если привод не проверен и не настроен на конкретное железо, для убедительности могу привести пример: на последнем седьмом станке в режиме серво привода были настроены с особой тщательностью и как результат в настройках у меня только один параметр Р=2, а остальные нули.
Привод проверяю следующим образом, собирая схему : реле М3,М4 подают через н/о контакты на переменник +,-10в, а с переменника на вх .привода. В конфигурации без выхода в "0", запускается циклическая программка: М3 G4P2 M5 G4P2 M4 G4P2
HAL осциллограф, сигнал encoder velocity. Задача настройки привода заключается в получение максимум быстродействия и минимум перерегулирования. Настройка привода - отдельная тема, я ее не затрагиваю. После настройки привода никаких проверок не делаю, вскрытие покажет, главное чтобы работал сигнал pwm-enable на деблокировку привода. Для настройки системы в целом тестовая программа (G1X0F@,G4P2, X200, G4P2) в цикле. Параметр MAX_OUTPUT=10-так удобнее. На мониторе одновременно калибровка, HAL осциллограф,f-error,-output. Кстати о параметрах FF : я где-то в Linux CNC видел блок схему где они есть. Подбор параметров произвожу по таблице сверху вниз методом последовательного приближения, картинка переходных процессов показывает все. В конечном итоге величина параметра OUTPUT_SCALE выбирается такой, чтобы на быстром ходу output был в приделах(9.5-9.8). По данной теме у меня все.
Кто может подсказать, как возможно сделать чтобы главный привод в одной конфигурации по команде M-101 работал в режиме серво - ось вращения и по команде М-102 как обычный привод – токарная обработка, это мне нужно для работ следующего типа.
http://classicdekor.ru/index.html
Помощь в проектировании и сборка шкафов управления, за 3года сделано19 разных станков.
С 3-го по 6-е в Краснодаре выставка по деревообработки. Завтра еду по просьбе одной фирмы
подключать и запускать китайские станки.
Ответить

Вернуться в «LinuxCNC»