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

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.

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

Сообщение Алексс » 11 июл 2013, 23:39

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

Все подключил по мануалу, вместо 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
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
 
Сообщения: 2216
Зарегистрирован: 20 июл 2012, 15:49
Откуда: Прага
Репутация: 266
Заслуга: IQ32
Медальки:
Настоящее имя: Алексей

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

Сообщение Nick » 12 июл 2013, 10:57

А параметры ПИД на сколько я понял при этом не сохраняются? Их надо потом самому в ini переписать?
Аватара пользователя
Nick
Мастер
 
Сообщения: 22442
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1508
Заслуга: Developer
Медальки:

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

Сообщение Алексс » 12 июл 2013, 11:04

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

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

Сообщение PKM » 12 июл 2013, 11:07

Алексс писал(а):само собой в ini они не пишутся :)
они будут записаны в pid.0.
надо их оттуда считать и в hal конфиг перенести. ну или в ini, для особых любителей прекрасного :hehehe:

Любопытно, можно ли для этого использовать Calibration tool?
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4247
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 695
Медальки:
Настоящее имя: Андрей

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

Сообщение Алексс » 12 июл 2013, 11:09

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

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

Сообщение Алексс » 12 июл 2013, 11:24

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

в приведенной ссылке используется компонент 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.
Каждая собака, бегущая на поводке впереди хозяина, думает, что ведет его за собой.
Аватара пользователя
Алексс
Почётный участник
Почётный участник
 
Сообщения: 2216
Зарегистрирован: 20 июл 2012, 15:49
Откуда: Прага
Репутация: 266
Заслуга: IQ32
Медальки:
Настоящее имя: Алексей

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

Сообщение PKM » 12 июл 2013, 13:00

Алексс писал(а):что за тулза ?

В меню Machine - Calibration, можно изменять и сохранять параметры
Аватара пользователя
PKM
Почётный участник
Почётный участник
 
Сообщения: 4247
Зарегистрирован: 31 мар 2011, 18:11
Откуда: Украина
Репутация: 695
Медальки:
Настоящее имя: Андрей

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

Сообщение Алексс » 12 июл 2013, 13:06

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


Вернуться в LinuxCNC

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

Зарегистрированные пользователи: 1240, aftaev, Argentum47, Argon-11, atomichammer, Bing [Bot], CactusMan, Сергей Саныч, dima138, Gestap, Google [Bot], Hanter, Hugo, ikrom, ilya37rus, KAT Kzn, klapanasos, Lexxa, Majestic-12 [Bot], MGG, nik1, peratron, Portos, R6MF49T2, rlan, rolopomia997, sergey27rus, sima8520, Smlua, smoke, SyraGAD, Taganrog, Tillman, timani, UAVpilot, Uda4LIVEc, Umnik, Vlad_Z, vovafed, X-Ray, Yandex [bot]

Поделиться

cron
Reputation System ©'