ПИД-регулирование. Общие вопросы.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Все зависит от того, что мы подаем на ПИД pid.command. Может подавать желаемое положение, тогда ПИД будет регулировать положение, можем скорость, тогда ПИД будет стараться удержать скорость, эта система сама настаивается на управление.
Также и ПИД может управлять сервой по скорости, может по моменту, может по положению. От всего этого будут зависеть оптимальные параметры ПИД.
И еще в качатстве обратной связи ПИД получает у нас что? Обычно, положение от энкодера, значит и команда должна быть на положение.
Также и ПИД может управлять сервой по скорости, может по моменту, может по положению. От всего этого будут зависеть оптимальные параметры ПИД.
И еще в качатстве обратной связи ПИД получает у нас что? Обычно, положение от энкодера, значит и команда должна быть на положение.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Разберем пример.
Пусть станку необходимо переместить ось на 0.5 метра со скоростью 0.1 м/с.
Для определенности считать будем в системе СИ как в школе, единцу станка возьмем метр.
Руководствуемся схемой ПИД из мануала (стр.82).
Рассмотрим схему в упрощенном варианте, т.е. уберем всякие ограничения типа deadband, max-error, max-cmd и max-output.
Входные сигналы - command, feedback и enable, но он нас особо не интересует.
Выходные - error и output.
Вот я никак не могу связать эту схему с переменной скоростью.
Т.е. каким образом ЕМС заставит двигаться все эти полметра с постоянной не максимальной скоростью используя только комманд и фидбэк?
Я вижу только один способ - толчковый.
У кого настроен уже более менее ПИД, посмотрите, куда завязан пин pid.<loopnum>.error? Просто у меня нигде не используется.
Итак по схеме. Предположим, что command есть положение в метрах.
Важная формула:, где
bias - смещение
Pgain - коэффициент P
Igain - коэффициент I
Dgain - коэффициент D
FF0 - коэффициент FF0
FF1 - коэффициент FF1
FF2 - коэффициент FF2
command - задание
commandD - производная задания
commandDD - вторая производная задания
Не могу понять, как регулируется скорость оси??
Мне думается, что используя в качестве command положение мы заставляем конфликтовать ПИД ЧПУ и ПИД привода.
За то понятно, что для правильной работы станка необходимо, чтобы command была скоростью, и чтобы EMC расчитывал скорость "наперед". Тогда ПИД ЧПУ (часть с P I D коэффициентами) будет выполнять дублирующую функцию и мало влиять на движение, зато коэффициенты FFn окажутся как нельзя кстати.
ПИД привода обеспечивает и заданную скорость и заданный момент без вмешательства извне. Поскольку на двигателе постоянный момент, то ускорение тоже постоянная величина.
У всех есть такое?
Это значит что комманд это расстояние? Судя по схеме ПИД должен будет передвинуть согласно коэффициентам ось с максимально возможной скоростью.
Предположим, что комманд мы как-то сделали скоростью, например расчитав его из подачи.
Ник, можно это сделать?
Тогда коэффициеты P, I, D своего смыслового значения не теряют (не теряют?), а вот FF0, FF1 и FF2 получаются несколько иными, поскольку
FF0 есть множитель скорости, своего рода масштаб
FF1 - величина, характеризующая ускорения
FF2 - величина, характризующая ускорение ускорения.
Как и писалось в http://wiki.linuxcnc.org/cgi-bin/wiki.pl?PiD
Nightv, ты говорил, что когда ты поставил P=I=D=0, то вместо нескольких сантиметров у тебя станок проехал на значительно большее расстояние? Так и должно быть. Какое перемещение ты при этом выставил и какое значение FFn было? Станок проехал и остановился? получилось что output = command * FF0 + commandD * FF1 + commandDD * FF2, т.е. выходной сигнал (скорость) была прапорционален перемещению.
Я хочу заставить ПИД ЕМС регулировать скорость, а не перемещение.
Пусть станку необходимо переместить ось на 0.5 метра со скоростью 0.1 м/с.
Для определенности считать будем в системе СИ как в школе, единцу станка возьмем метр.
Руководствуемся схемой ПИД из мануала (стр.82).
Рассмотрим схему в упрощенном варианте, т.е. уберем всякие ограничения типа deadband, max-error, max-cmd и max-output.
Входные сигналы - command, feedback и enable, но он нас особо не интересует.
Выходные - error и output.
Вот я никак не могу связать эту схему с переменной скоростью.
Т.е. каким образом ЕМС заставит двигаться все эти полметра с постоянной не максимальной скоростью используя только комманд и фидбэк?
Я вижу только один способ - толчковый.
У кого настроен уже более менее ПИД, посмотрите, куда завязан пин pid.<loopnum>.error? Просто у меня нигде не используется.
Итак по схеме. Предположим, что command есть положение в метрах.
Важная формула:
Код: Выделить всё
output = bias + error * Pgain + errorI * Igain + errorD * Dgain + command * FF0 + commandD * FF1 + commandDD * FF2bias - смещение
Pgain - коэффициент P
Igain - коэффициент I
Dgain - коэффициент D
FF0 - коэффициент FF0
FF1 - коэффициент FF1
FF2 - коэффициент FF2
command - задание
commandD - производная задания
commandDD - вторая производная задания
Не могу понять, как регулируется скорость оси??
Мне думается, что используя в качестве command положение мы заставляем конфликтовать ПИД ЧПУ и ПИД привода.
За то понятно, что для правильной работы станка необходимо, чтобы command была скоростью, и чтобы EMC расчитывал скорость "наперед". Тогда ПИД ЧПУ (часть с P I D коэффициентами) будет выполнять дублирующую функцию и мало влиять на движение, зато коэффициенты FFn окажутся как нельзя кстати.
ПИД привода обеспечивает и заданную скорость и заданный момент без вмешательства извне. Поскольку на двигателе постоянный момент, то ускорение тоже постоянная величина.
У всех есть такое
Код: Выделить всё
net xpos-cmd axis.0.motor-pos-cmd => pid.x.commandЭто значит что комманд это расстояние? Судя по схеме ПИД должен будет передвинуть согласно коэффициентам ось с максимально возможной скоростью.
Предположим, что комманд мы как-то сделали скоростью, например расчитав его из подачи.
Ник, можно это сделать?
Тогда коэффициеты P, I, D своего смыслового значения не теряют (не теряют?), а вот FF0, FF1 и FF2 получаются несколько иными, поскольку
FF0 есть множитель скорости, своего рода масштаб
FF1 - величина, характеризующая ускорения
FF2 - величина, характризующая ускорение ускорения.
Как и писалось в http://wiki.linuxcnc.org/cgi-bin/wiki.pl?PiD
Nightv, ты говорил, что когда ты поставил P=I=D=0, то вместо нескольких сантиметров у тебя станок проехал на значительно большее расстояние? Так и должно быть. Какое перемещение ты при этом выставил и какое значение FFn было? Станок проехал и остановился? получилось что output = command * FF0 + commandD * FF1 + commandDD * FF2, т.е. выходной сигнал (скорость) была прапорционален перемещению.
Я хочу заставить ПИД ЕМС регулировать скорость, а не перемещение.
Последний раз редактировалось Lexxa 31 янв 2012, 23:12, всего редактировалось 1 раз.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Ник, согласен про фидбэк. Обычно, по умолчанию, это сигнал энкодера. Что мешает его пересчитать в скорость? Ничего вроде бы.
Коллеги, как вы считаете, Если заставить ЕМС ПИДом регулировать скорость, будет ли это мешать ЕМС держать точность перемещений?
Коллеги, как вы считаете, Если заставить ЕМС ПИДом регулировать скорость, будет ли это мешать ЕМС держать точность перемещений?
-
Impartial
- Мастер
- Сообщения: 953
- Зарегистрирован: 23 фев 2011, 01:50
- Репутация: 36
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
ЕМС работает на трех потоках. Первый,( не помню как называется) самый медленный около 50мс, в нем работает сам ЕМС и выдает набор координат. Второй - servo thread в этом потоке работают компоненты ХАЛ. Третий ,base thread в нем работает только одна задача - синтезатор частоты для шаговых двигателей. Если их нет, то не используется и можно отключить.Lexxa писал(а):Разберем пример.
Пусть станку необходимо переместить ось на 0.5 метра со скоростью 0.1 м/с.
Интерполятор разбивает путь на точки, а планировщик траектории привязывает их к времени.
В случае сервопривода на вход ПИД ХАЛ подается эта разбитая на время первого потока 50 мс временная траектория. Т.е. ПИД получает задание скорости каждые 50мс(скорость первого потока). Далее уже сам ПИД компонент ХАЛ с дискретностю серво потока пытается отследить эту скорость.
Последний раз редактировалось Impartial 31 янв 2012, 23:40, всего редактировалось 1 раз.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Да, если есть два ПИД один на приводе, один в емс2, то они оба дублируются, никуда от этого не деться. При этом на ПИД привода могут быть такие же FFn. ПИД - это условное название, коэффициентов может быть больше (или меньше, но тогда его могут называть ПИ).Lexxa писал(а):За то понятно, что для правильной работы станка необходимо, чтобы command была скоростью, и чтобы EMC расчитывал скорость "наперед". Тогда ПИД ЧПУ (часть с P I D коэффициентами) будет выполнять дублирующую функцию и мало влиять на движение, зато коэффициенты FFn окажутся как нельзя кстати.
FFn служат для компенсации различных дополнительных составляющих возникающих при движении, т.к. мы знаем физику процесса, к стандартным PID мы добавляем эти FFn, они могут компенсировать трение и инерцию. В других системах которые регулируют температуру или что-нибудь вообще экзотическое эти параметры могут быть другими.
По ускорению, все правильно помимо значений ПИД, которые управляют непосредственно приводом emc2 должен знать максимальную скорость и ускорение. На самом деле это знает другой компонент - motion, который планирует траекторию. Совершенно верно, управляться привод будет как бы рывками, но рывки эти будут длинно 1 миллисекунда (или меньше, зависит от servo-thread). Вообще, т.к. траектория рассчитывается в servo-thread, значит задания выходят тоже раз в servo-thread. Те же stepgen получают необходимую частоту на следующий servo-thread с такой же частотой и на протяжении этого времени едут к заданной точке.
Если у нас есть внешний PID можно просто выдавать на него задание в нужной ему величине и все. Если его нет, то мы делаем свой PID и урпавляем непосредственно выходом на усилок движка.
Да, только рассчитывается он из положения, просто берется производная положения по времени. (Все работает численно.)Lexxa писал(а):Предположим, что комманд мы как-то сделали скоростью, например расчитав его из подачи.
Ник, можно это сделать?
Можно получать и скорость и ускорение. Для этого как я уже писал используется компонент ddt, он выдает производную произвольной величины по времени.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Это общий вопрос по ПИД, вообще нужно как-то определиться с использованием одного ПИД и двух ПИД, когда это оправдано.
-
Hunter
- Новичок
- Сообщения: 20
- Зарегистрирован: 11 янв 2012, 17:41
- Репутация: 1
- Откуда: Вологда
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Неплохо изложенная теория в картинках. Может пригодится кому...
http://www.bookasutp.ru/Chapter5_1.aspx
http://www.bookasutp.ru/Chapter5_1.aspx
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Народ, разжуйте как запустить это http://www.linuxcnc.org/index.php/germa ... 10&id=6495
Делаю
на этапе 1 получаю:
Где взять comp этот??
Делаю
Код: Выделить всё
В двух словах, чтобы ее запустить нужно:
0. скачать-распаковать
1. установить компоненты sudo comp --install *.comp
2. исправить настройки в файле hal, чтобы соответствовали твоему оборудованию
3. запустить halrun -f config.halКод: Выделить всё
sudo: comp: command not found-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Распаковать , положить в папку со своей конфиг.
В ини прописать в [DISPLAY]
Уже должна загруз панель:
В [HAL]
вот здесь все прописывать в хал в соответствии со своими настройками
В ини прописать в [DISPLAY]
Код: Выделить всё
PYVCP = servo-tuning-gui.xmlКод: Выделить всё
POSTGUI_HALFILE = config.hal- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
А в своем хале закоментить всё, что продублировано в config.hal или оно подставится вместо родных?
падает с ошибкой:
падает с ошибкой:
Код: Выделить всё
Print file information:
RUN_IN_PLACE=no
LINUXCNC_DIR=
LINUXCNC_BIN_DIR=/usr/bin
LINUXCNC_TCL_DIR=/usr/lib/tcltk/linuxcnc
LINUXCNC_SCRIPT_DIR=
LINUXCNC_RTLIB_DIR=/usr/realtime-2.6.32-122-rtai/modules/linuxcnc
LINUXCNC_CONFIG_DIR=
LINUXCNC_LANG_DIR=/usr/share/linuxcnc/tcl/msgs
INIVAR=inivar
HALCMD=halcmd
LINUXCNC_EMCSH=/usr/bin/wish8.5
LINUXCNC - 2.5.0
Machine configuration directory is '/home/lexxa/linuxcnc/configs/my_LinuxCNC_machine'
Machine configuration file is '6Р13Ф3_test.ini'
INIFILE=/home/lexxa/linuxcnc/configs/my_LinuxCNC_machine/6Р13Ф3_test.ini
PARAMETER_FILE=emc.var
TASK=milltask
HALUI=halui
DISPLAY=axis
Starting LinuxCNC...
Starting LinuxCNC server program: linuxcncsvr
Loading Real Time OS, RTAPI, and HAL_LIB modules
Starting LinuxCNC IO program: io
Starting HAL User Interface program: halui
INFO CLASSICLADDER- No ladder GUI requested-Realtime runs till HAL closes.
Starting TASK program: milltask
Starting DISPLAY program: axis
HAL: ERROR: duplicate thread name servo-thread
THREADS: ERROR: could not create thread 'servo-thread'
Shutting down and cleaning up LinuxCNC...
Running HAL shutdown script
Killing task linuxcncsvr, PID=10117
Killing task milltask, PID=10174
Removing HAL_LIB, RTAPI, and Real Time OS modules
Removing NML shared memory segments
Cleanup done
Debug file information:
Can not find -sec MOT -var MOT -num 1
Can not find -sec IO -var IO -num 1
Can not find -sec LINUXCNC -var NML_FILE -num 1
Can not find -sec EMC -var NML_FILE -num 1
config.hal:4: Warning: File contains DOS-style line endings.
insmod: error inserting '/usr/realtime-2.6.32-122-rtai/modules/linuxcnc/threads.ko': -1 Operation not permitted
config.hal:4: exit value: 1
config.hal:4: insmod failed, returned -1
See the output of 'dmesg' for more information.
10117
PID TTY STAT TIME COMMAND
10174
PID TTY STAT TIME COMMAND
Stopping realtime threads
Unloading hal components
Kernel message information:
[12187.665821] I-pipe: Domain RTAI registered.
[12187.665833] RTAI[hal]: <3.8.1> mounted over IPIPE-NOTHREADS 2.6-03.
[12187.665835] RTAI[hal]: compiled with gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) .
[12187.665841] RTAI[hal]: mounted (IPIPE-NOTHREADS, IMMEDIATE (INTERNAL IRQs DISPATCHED), ISOL_CPUS_MASK: 0).
[12187.665843] PIPELINE layers:
[12187.665846] f8385e20 9ac15d93 RTAI 200
[12187.665848] c085cb20 0 Linux 100
[12187.694836] RTAI[malloc]: global heap size = 2097152 bytes, <BSD>.
[12187.695054] RTAI[sched]: IMMEDIATE, MP, USER/KERNEL SPACE: <with RTAI OWN KTASKs>, kstacks pool size = 524288 bytes.
[12187.695058] RTAI[sched]: hard timer type/freq = APIC/12557015(Hz); default timing: periodic; linear timed lists.
[12187.695062] RTAI[sched]: Linux timer freq = 250 (Hz), TimeBase freq = 2210282000 hz.
[12187.695064] RTAI[sched]: timer setup = 999 ns, resched latency = 2943 ns.
[12187.695211] RTAI[usi]: enabled.
[12187.781133] RTAI[math]: loaded.
[12187.891568] hm2: loading Mesa HostMot2 driver version 0.15
[12187.895711] hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7
[12187.895764] hm2_pci: discovered 5i20 at 0000:01:07.0
[12187.895849] hm2_5i20.0: firmware: requesting hm2/5i20/SVST8_4.BIT
[12188.032842] hm2/hm2_5i20.0: 72 I/O Pins used:
[12188.032851] hm2/hm2_5i20.0: IO Pin 000 (P2-01): Encoder #1, pin B (Input)
[12188.032854] hm2/hm2_5i20.0: IO Pin 001 (P2-03): Encoder #1, pin A (Input)
[12188.032857] hm2/hm2_5i20.0: IO Pin 002 (P2-05): Encoder #0, pin B (Input)
[12188.032860] hm2/hm2_5i20.0: IO Pin 003 (P2-07): Encoder #0, pin A (Input)
[12188.032863] hm2/hm2_5i20.0: IO Pin 004 (P2-09): Encoder #1, pin Index (Input)
[12188.032867] hm2/hm2_5i20.0: IO Pin 005 (P2-11): Encoder #0, pin Index (Input)
[12188.032870] hm2/hm2_5i20.0: IO Pin 006 (P2-13): PWMGen #1, pin Out0 (PWM or Up) (Output)
[12188.032873] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)
[12188.032877] hm2/hm2_5i20.0: IO Pin 008 (P2-17): PWMGen #1, pin Out1 (Dir or Down) (Output)
[12188.032880] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) (Output)
[12188.032883] hm2/hm2_5i20.0: IO Pin 010 (P2-21): PWMGen #1, pin Not-Enable (Output)
[12188.032887] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)
[12188.032890] hm2/hm2_5i20.0: IO Pin 012 (P2-25): Encoder #3, pin B (Input)
[12188.032893] hm2/hm2_5i20.0: IO Pin 013 (P2-27): Encoder #3, pin A (Input)
[12188.032896] hm2/hm2_5i20.0: IO Pin 014 (P2-29): Encoder #2, pin B (Input)
[12188.032899] hm2/hm2_5i20.0: IO Pin 015 (P2-31): Encoder #2, pin A (Input)
[12188.032902] hm2/hm2_5i20.0: IO Pin 016 (P2-33): Encoder #3, pin Index (Input)
[12188.032905] hm2/hm2_5i20.0: IO Pin 017 (P2-35): Encoder #2, pin Index (Input)
[12188.032908] hm2/hm2_5i20.0: IO Pin 018 (P2-37): IOPort
[12188.032911] hm2/hm2_5i20.0: IO Pin 019 (P2-39): PWMGen #2, pin Out0 (PWM or Up) (Output)
[12188.032914] hm2/hm2_5i20.0: IO Pin 020 (P2-41): IOPort
[12188.032917] hm2/hm2_5i20.0: IO Pin 021 (P2-43): PWMGen #2, pin Out1 (Dir or Down) (Output)
[12188.032920] hm2/hm2_5i20.0: IO Pin 022 (P2-45): IOPort
[12188.032923] hm2/hm2_5i20.0: IO Pin 023 (P2-47): PWMGen #2, pin Not-Enable (Output)
[12188.032926] hm2/hm2_5i20.0: IO Pin 024 (P3-01): IOPort
[12188.032928] hm2/hm2_5i20.0: IO Pin 025 (P3-03): IOPort
[12188.032931] hm2/hm2_5i20.0: IO Pin 026 (P3-05): IOPort
[12188.032933] hm2/hm2_5i20.0: IO Pin 027 (P3-07): IOPort
[12188.032935] hm2/hm2_5i20.0: IO Pin 028 (P3-09): IOPort
[12188.032938] hm2/hm2_5i20.0: IO Pin 029 (P3-11): IOPort
[12188.032940] hm2/hm2_5i20.0: IO Pin 030 (P3-13): IOPort
[12188.032943] hm2/hm2_5i20.0: IO Pin 031 (P3-15): IOPort
[12188.032945] hm2/hm2_5i20.0: IO Pin 032 (P3-17): IOPort
[12188.032948] hm2/hm2_5i20.0: IO Pin 033 (P3-19): IOPort
[12188.032950] hm2/hm2_5i20.0: IO Pin 034 (P3-21): IOPort
[12188.032953] hm2/hm2_5i20.0: IO Pin 035 (P3-23): IOPort
[12188.032955] hm2/hm2_5i20.0: IO Pin 036 (P3-25): IOPort
[12188.032957] hm2/hm2_5i20.0: IO Pin 037 (P3-27): IOPort
[12188.032960] hm2/hm2_5i20.0: IO Pin 038 (P3-29): IOPort
[12188.032962] hm2/hm2_5i20.0: IO Pin 039 (P3-31): IOPort
[12188.032965] hm2/hm2_5i20.0: IO Pin 040 (P3-33): IOPort
[12188.032967] hm2/hm2_5i20.0: IO Pin 041 (P3-35): IOPort
[12188.032970] hm2/hm2_5i20.0: IO Pin 042 (P3-37): IOPort
[12188.032972] hm2/hm2_5i20.0: IO Pin 043 (P3-39): IOPort
[12188.032975] hm2/hm2_5i20.0: IO Pin 044 (P3-41): IOPort
[12188.032977] hm2/hm2_5i20.0: IO Pin 045 (P3-43): IOPort
[12188.032980] hm2/hm2_5i20.0: IO Pin 046 (P3-45): IOPort
[12188.032982] hm2/hm2_5i20.0: IO Pin 047 (P3-47): IOPort
[12188.032985] hm2/hm2_5i20.0: IO Pin 048 (P4-01): IOPort
[12188.032987] hm2/hm2_5i20.0: IO Pin 049 (P4-03): IOPort
[12188.032989] hm2/hm2_5i20.0: IO Pin 050 (P4-05): IOPort
[12188.032992] hm2/hm2_5i20.0: IO Pin 051 (P4-07): IOPort
[12188.032994] hm2/hm2_5i20.0: IO Pin 052 (P4-09): IOPort
[12188.032997] hm2/hm2_5i20.0: IO Pin 053 (P4-11): IOPort
[12188.032999] hm2/hm2_5i20.0: IO Pin 054 (P4-13): IOPort
[12188.033002] hm2/hm2_5i20.0: IO Pin 055 (P4-15): IOPort
[12188.033004] hm2/hm2_5i20.0: IO Pin 056 (P4-17): IOPort
[12188.033006] hm2/hm2_5i20.0: IO Pin 057 (P4-19): IOPort
[12188.033009] hm2/hm2_5i20.0: IO Pin 058 (P4-21): IOPort
[12188.033011] hm2/hm2_5i20.0: IO Pin 059 (P4-23): IOPort
[12188.033014] hm2/hm2_5i20.0: IO Pin 060 (P4-25): IOPort
[12188.033016] hm2/hm2_5i20.0: IO Pin 061 (P4-27): IOPort
[12188.033019] hm2/hm2_5i20.0: IO Pin 062 (P4-29): IOPort
[12188.033021] hm2/hm2_5i20.0: IO Pin 063 (P4-31): IOPort
[12188.033024] hm2/hm2_5i20.0: IO Pin 064 (P4-33): IOPort
[12188.033026] hm2/hm2_5i20.0: IO Pin 065 (P4-35): IOPort
[12188.033028] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort
[12188.033031] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort
[12188.033033] hm2/hm2_5i20.0: IO Pin 068 (P4-41): IOPort
[12188.033036] hm2/hm2_5i20.0: IO Pin 069 (P4-43): IOPort
[12188.033038] hm2/hm2_5i20.0: IO Pin 070 (P4-45): IOPort
[12188.033041] hm2/hm2_5i20.0: IO Pin 071 (P4-47): IOPort
[12188.033130] hm2/hm2_5i20.0: registered
[12188.033133] hm2_5i20.0: initialized AnyIO board at 0000:01:07.0
[12188.047442] creating ladder-state
[12191.048260] HAL: ERROR: duplicate thread name servo-thread
[12191.048269] THREADS: ERROR: could not create thread 'servo-thread'
[12191.805436] hm2_5i20.0: dropping AnyIO board at 0000:01:07.0
[12191.805447] hm2/hm2_5i20.0: unregistered
[12191.808991] hm2_pci: driver unloaded
[12191.812738] hm2: unloading
[12194.004922] RTAI[math]: unloaded.
[12194.064778] SCHED releases registered named ALIEN RTGLBH
[12194.080329] RTAI[malloc]: unloaded.
[12194.180038] RTAI[sched]: unloaded (forced hard/soft/hard transitions: traps 0, syscalls 0).
[12194.183493] I-pipe: Domain RTAI unregistered.
[12194.183504] RTAI[hal]: unmounted.
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Скинь целиком свои конфиги...Lexxa писал(а):HAL: ERROR: duplicate thread name servo-thread
THREADS: ERROR: could not create thread 'servo-thread'
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Закинул в прицеп
- Вложения
-
- my_LinuxCNC_machine.tar.gz
- (12.86 КБ) 1107 скачиваний
- Nick
- Мастер
- Сообщения: 22776
- Зарегистрирован: 23 ноя 2009, 16:45
- Репутация: 1735
- Заслуга: Developer
- Откуда: Gatchina, Saint-Petersburg distr., Russia
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Наверное твой родной hal будет уже не нужен, в том который config.hal и так все, что нужно загружается... т.е. закомменти его в ini:
# HALFILE = 6Р13Ф3_test.hal
# HALFILE = 6Р13Ф3_test.hal
-
xentaur
- Опытный
- Сообщения: 178
- Зарегистрирован: 09 ноя 2010, 02:29
- Репутация: 1
- Откуда: Украина Харьков
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
Вывод из последней фразы неточен. Так как команда на управление (скорость, положение, момент, температура...) и сигнал обратной связи выбирается с учетом того что нужно достичь (контролировать и корректировать) в результате управления.Nick писал(а):Все зависит от того, что мы подаем на ПИД pid.command. Может подавать желаемое положение, тогда ПИД будет регулировать положение, можем скорость, тогда ПИД будет стараться удержать скорость, эта система сама настаивается на управление.
Также и ПИД может управлять сервой по скорости, может по моменту, может по положению. От всего этого будут зависеть оптимальные параметры ПИД.
И еще в качатстве обратной связи ПИД получает у нас что? Обычно, положение от энкодера, значит и команда должна быть на положение.
Например, для сверлильного станка не важна траектория достижения точки позиционирования (чем быстрее - тем лучше, а по прямой или нет неважно), а значит и задание и обратная связь по положению проще.
Для приводов подач фрезерных, токарных и др. станков важно обойти контур с заданной скоростью и поэтому задаем желаемую скорость, а контролируем по положению.
Для главных приводов важно контролировать скорость - достаточно тахогенератора или таходатчика с ПИ регулятором.
Момент важен в устройствах натяжения, для инструментов критичных к силе.
Сами параметры ПИД для каждого случая и системы свои.
Для приводов подач нужны сервы со встроенным заданием и контролем скорости (или покруче). Контроль по положению осуществляет УЧПУ, в нашем случае EMC2, и корректирует скорость. Задание скорости и опрос привода в ЕМС2 происходит 1000 раз в секунду как и во многих промышленных системах.
- Lexxa
- Мастер
- Сообщения: 2703
- Зарегистрирован: 16 дек 2011, 16:48
- Репутация: 319
- Настоящее имя: Алексей
- Откуда: ryazan
- Контактная информация:
Re: ПИД-регулирование. Общие вопросы.
ооооооооооооочень важно по какой траектории сверло придет в точку сверления!!!!xentaur писал(а):чем быстрее - тем лучше, а по прямой или нет неважно
Нет. Если управляешь скоростью, то контролировать надо скорость (про ПИД), и одновременно контролировать положение (про траекторию)xentaur писал(а):Для приводов подач фрезерных, токарных и др. станков важно обойти контур с заданной скоростью и поэтому задаем желаемую скорость, а контролируем по положению.
Все современные серовприводы имеют двойной контур ПИД - момент и скорость. Не современные - только момент. Поддержанием заданной(расчетной) скорости занимается в этом случае ЧПУ, а привод обеспечивает лишь заданный момент. Поэтому если, например, сервопривод имеет управление +-10В, то супер неправильно подгонять значения PID, регулирующего положение, чтобы станок нормально ездил.
