Настройка AT_PID шпинделя c асинхронным мотором

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Алексс »

Хочу поделиться результатами сегодняшних экспериментов.

Все подключил по мануалу, вместо pid грузим at_pid.
sum2 не подключал, надеялся заменить установкой FF0 в 1. Сразу скажу - не получилось.

Запускаем linuxcnc, затем в консоли пишем:

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

halcmd setp pid.0.tune-mode  1
в axis даем команду типа s1000m3.

Запускаем halscope, настраиваем два канала:

pid.0.error
pid.0.output

error должен показать 1000, output предположительно около нуля.

в консоли пишем:

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

halcmd setp pid.0.tune-start  1
наверняка ничего не начнет крутится либо будет, но настройка не идет.
Начинаем увеличивать pid.0.tune-effort, при этом pid.0.output должен увеличиваться, pid.0.error уменьшаться, до тех пор, пока не пересечет ноль. После этого шпиндель должен начать разгонятся/тормозить - типа идет настройка.
Когда процесс отстановится, настройка как-бы завершена.

Можно проверить как оно работает в реале:

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

halcmd setp pid.0.tune-mode  0
Если что-то не так - повторяем процес. Можно попробовать увечить количество итераций

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

halcmd setp pid.0.tune-cycles  1000
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Nick »

А параметры ПИД на сколько я понял при этом не сохраняются? Их надо потом самому в ini переписать?
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Алексс »

само собой в ini они не пишутся :)
они будут записаны в pid.0.
надо их оттуда считать и в hal конфиг перенести. ну или в ini, для особых любителей прекрасного :hehehe:
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение PKM »

Алексс писал(а):само собой в ini они не пишутся :)
они будут записаны в pid.0.
надо их оттуда считать и в hal конфиг перенести. ну или в ini, для особых любителей прекрасного :hehehe:
Любопытно, можно ли для этого использовать Calibration tool?
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Алексс »

что за тулза ?
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Алексс »

еще такая мысль.

в приведенной ссылке используется компонент sum2 для компенсации отрицательных значений:

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

net pid_command       pid.0.command  => sum2.0.in0
net pid_output            pid.0.output      => sum2.0.in1
но, как я понимаю, pid может выдавать на output значения от -maxoutput до +maxoutput.
тоесть опять может случиться ситуация:
command = 1000, output = -4000

при этом output пойдет на pwmgen, который на знак не смотрит!

итого pwmgen начнет генерить "трафик" на базе значения 3000. при этом шпиндель разгоняется, значение output еще больше уменьшается и тд. тоесть мотор просто разгоняется на максимум и оттуда уже не выходит.
что в общем-то у меня и случилось.

приведу еще тут формулы вычисления значений pid:

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

    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
из них, к стати, видно, что FF0 = 1 не спасет от отрицательных значений.
также из этого видно, что можно еще подкрутить maxerror-ы, для предотвращения выхода в ноль и некоего "сглаживания" характера pid.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение PKM »

Алексс писал(а):что за тулза ?
В меню Machine - Calibration, можно изменять и сохранять параметры
Аватара пользователя
Алексс
Почётный участник
Почётный участник
Сообщения: 2210
Зарегистрирован: 20 июл 2012, 15:49
Репутация: 266
Заслуга: IQ32
Настоящее имя: Алексей
Откуда: Прага
Контактная информация:

Re: Настройка AT_PID шпинделя c асинхронным мотором

Сообщение Алексс »

никогда в жизни не видел :)
надо дома посмотреть...
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Ответить

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