Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Работа с платами MESA, подключение, конфигурация.
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

Приветствую всех!

ИЛИ Я ТУПОЙ, ИЛИ ЧТО-ТО НЕ ПОНИМАЮ


Должно было быть все просто.
Купили станок 24к40сф4
Весной начали менять на нем электронику. Двигатели и приводы оставили родные. Двигатели -- болгарские постоянного тока. Приводы - советские аналоговые БТ (управление +- 10В). Одинаковые везде - 3 координаты и шпиндель.
На шпинделе энкодер BE178A5 квадратурный на 250 импульсов (умножаю на 4 получаю 1000)
На осях линейки - на одних хейденхейм, на других родное непонятное совковое (реально непонятное , т.к. найти их описание по маркировке оказалось невозможно). Но линейки работают, считают.

Купил платы mesa 5i20 + 7i27TA
Запустили EMC2 (LinuxCNC)

Мастером все поставили. Фактически почти все получилось сразу с небольшими корректировками .ini файла.
.hal даже не трогали. Добавили даже на меню некоторые "виджеты" (скорость шпинделя).
Перемещения все работают. Шпиндель крутиться. Что то получилось фрезеровать. Написали первую (к слову не самую простую программу).
Ну просто - Песня (после ручного фрезерования криволинейного контура пуансона на 6720В)

А потом замечаем что шпиндель вращается только с двумя скоростями . На 65 или 650 оборотов. Это на пониженной 1 передаче. На пониженной передаче максимальная скорость шпинделя должна быть в районе 800 оборотов (по паспорту). Фактически получается что 650 об - это почти максимальная скорость двигателя шпинделя. Хотя и 650 это вроде как на 20% меньше чем 800, но потом определили что это максимальная скорость на этой передачи для нашего станка.
Сначала думали потом резберемся. Решали другие задачи. А шпиндель так и продолжал вращаться на 650 оборотах.
Вне зависимости от того какое задание скорости ставили!
И проблему решить не смогли . Начал даже разбираться с .hal файлом.
Основной принцип его стал понятен. Как происходит установка параметров, связь различных параметров.

Но что в нем проверить? Какие пины надо смотреть? Может какие то параметры не заданы?

Что мы сделали. Первое - Проверили в первую очередь осциллографом значение подающего напряжения на входе привода управляющего шпинделем (и физически настоящим осцилографом и через HAL -meter).
Оказалось что напряжение (даже при задании скорости командой M3 S50, т.е. всего 50 об.мин.) сразу начинает от (приблизительно) 5 Вольт расти до 10,5 В (а это реально максимум, хотя вообще scale стоит 10, т.е. 10 Вольт, а тут 10,5). Определили что однозначно проблема на выходе с Месы (привод правильно реагирует на управляющее напряжение).
Независимо от того какая скорость задана - либо в программе, либо вручную командой G-кодом - всегда шпиндель начинает вращаться с 200 оборотов и постепенно (за пол минуты) увеличивает свою скорость до примерно 600 оборотов (это +- значение, т.к. оно абсолютно не стабильно, а плавает от 550 до 650 об.мин).
Такое чувство что происходит постепенное самовозбуждение в PWM месы до максимального значения. Вроде должен реагировать на данные с экодера. Но шпиндель просто разгоняется до максимума.
При этом при ручном управлении шпинделем (через панель управления EMC) при запуске шпиндель ВСЕГДА сначала вращается на 65 оборотах (это ровняется примерно 1 Вольту выходного напряжения или 10%), и держит эту скорость. И при этом РЕГУЛИРУЕТСЯ от 0 до 65 оборотов (от 0 до 100 %) в ручном режиме через Overload. Т.е. КАКОЕ-ТО управление все таки получается!
Но если нажать "+" возле кнопки ручного управления, то тогда сразу начинает расти до максимума.

Проверили энокодер. Сигналы подает правильно. Проверили. И ЧПУ считает правильно . Если бы не работал, то и обороты бы не показывал.

Проверял описание .hal и .ini. Все стандартно. Сравнил с другими примерами с форума.
У нас для осей описаны параметры ПИД регулятора (P, I, D, FF, FF1, FF2), для шпинделя - никаких параметров ПИД не указывали.. Но тут на форуме, в частности Nick , часто повторял что для шпинделя абсолютно не важно настраивать ПИД регулатор.
Менял значения

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

setp     scale.spindle.gain 60
setp     lowpass.spindle.gain 0.100000
ENCODER_SCALE = -1000.0
OUTPUT_SCALE = -10.0
Все равно разгоняется до максимума.


Но никакие танцы с бубном не привели к нормальному управлению шпинделем через команды.

Подскажите что надо проверить или поменять в настройках? Реально каша в голове.

Ниже выборки из .hal и .ini касательно шпинделя.

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

#*******************
#  SPINDLE S
#*******************

# ---PWM Generator signals/setup---

setp   hm2_5i20.0.pwmgen.02.output-type 1
setp   hm2_5i20.0.pwmgen.02.scale  [SPINDLE_9]OUTPUT_SCALE


net spindle-vel-cmd     => hm2_5i20.0.pwmgen.02.value
net spindle-enable      => hm2_5i20.0.pwmgen.02.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i20.0.encoder.02.counter-mode 0
setp    hm2_5i20.0.encoder.02.filter 1
setp    hm2_5i20.0.encoder.02.index-invert 0
setp    hm2_5i20.0.encoder.02.index-mask 0
setp    hm2_5i20.0.encoder.02.index-mask-invert 0
setp    hm2_5i20.0.encoder.02.scale  [SPINDLE_9]ENCODER_SCALE

net spindle-revs              <=  hm2_5i20.0.encoder.02.position
net spindle-vel-fb            <=  hm2_5i20.0.encoder.02.velocity
net spindle-index-enable     <=>  hm2_5i20.0.encoder.02.index-enable

# ---setup spindle control signals---

net spindle-vel-cmd-rps    <=  motion.spindle-speed-out-rps
net spindle-vel-cmd        <=  motion.spindle-speed-out
net spindle-enable         <=  motion.spindle-on
net spindle-cw             <=  motion.spindle-forward
net spindle-ccw            <=  motion.spindle-reverse
net spindle-brake          <=  motion.spindle-brake
net spindle-revs           =>  motion.spindle-revs
net spindle-at-speed       =>  motion.spindle-at-speed
net spindle-vel-fb         =>  motion.spindle-speed-in
net spindle-index-enable  <=>  motion.spindle-index-enable

# ---Setup spindle at speed signals---

sets spindle-at-speed true

#  Use ACTUAL spindle velocity from spindle encoder
#  spindle-velocity bounces around so we filter it with lowpass
#  spindle-velocity is signed so we use absolute component to remove sign
#  ACTUAL velocity is in RPS not RPM so we scale it.

setp     scale.spindle.gain 60
setp     lowpass.spindle.gain 0.100000
net spindle-vel-fb        =>   lowpass.spindle.in
net spindle-fb-filtered-rps    lowpass.spindle.out      =>   abs.spindle.in
net spindle-fb-filtered-abs-rps    abs.spindle.out      =>   scale.spindle.in
net spindle-fb-filtered-abs-rpm    scale.spindle.out

Выдержка с .ini файла

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

********************
# Spindle 
#********************
[SPINDLE_9]
ENCODER_SCALE = -1000.0
OUTPUT_SCALE = -10.0

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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение PKM »

[SPINDLE_9]
ENCODER_SCALE = -1000.0
OUTPUT_SCALE = -10.0

Я бы попробовал менять знаки здесь
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

Именно знаки или значения?

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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение PKM »

Konstantin_K писал(а):Оказалось что напряжение (даже при задании скорости командой M3 S50, т.е. всего 50 об.мин.) сразу начинает от (приблизительно) 5 Вольт расти до 10,5 В (а это реально максимум, хотя вообще scale стоит 10, т.е. 10 Вольт, а тут 10,5). Определили что однозначно проблема на выходе с Месы (привод правильно реагирует на управляющее напряжение).
Независимо от того какая скорость задана - либо в программе, либо вручную командой G-кодом - всегда шпиндель начинает вращаться с 200 оборотов и постепенно (за пол минуты) увеличивает свою скорость до примерно 600 оборотов (это +- значение, т.к. оно абсолютно не стабильно, а плавает от 550 до 650 об.мин).
Немного похоже на работу ПИД при неверном направлении энкодера - постепенное увеличение частоты вращения до максимума. Вот только ПИД в этом конфиге нет :)

Где мерялось напряжение? Кстати, карта 7I27 - 400 Watt H-bridge... для шпинделя маловато мощности?
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

PKM писал(а):Немного похоже на работу ПИД при неверном направлении энкодера - постепенное увеличение частоты вращения до максимума
Я тоже только что подумал об этом! Сейчас пойду проверять и вспоминать - почему мы поставили минусы.

Напряжение управления 0..10 В мерялось на входе в Привод и на каком то прине выходе на плате Месы (я точно не помню как называется). Посмотрю название и сегодня отпишусь.

Насчет "Кстати, карта 7I27 - 400 Watt H-bridge... для шпинделя маловато мощности?" - ну так ведь не плата шпиндель крутит, а Привод БТУ, 40 амперный, а он в свою очередь управляется Месой по управляющему напряжению +-10 Вольт (тут 400 Ватт с головой хватит).

Тут еще вопрос касательно : "Вот только ПИД в этом конфиге нет".
Сама ШИМ модуляция вроде бы есть:
setp hm2_5i20.0.pwmgen.02.output-type 1

Просто настройки ПИД явно не прописаны. Для осей тоже оси сначала не прописываются, но затем для обеспечения точности перемещения FERROR и MIN_FERROR мы указывали явно значения P, I, D, FF, FF1, FF2.
У меня вопрос - ПИД он работает (включен) всегда? Или только когда явно приписан с конкретными значениями P, I, D ?

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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Nick »

Konstantin_K писал(а):У меня вопрос - ПИД он работает (включен) всегда? Или только когда явно приписан с конкретными значениями P, I, D ?
ПИД работает, когда включен
pid.N.enable bit in
When true, enables the PID calculations. When false, output is zero, and all internal integrators, etc, are reset.

Остальное побоку, скорее всего будут дефалтные значения P I D FF0 FF1 FF2 = 0 - т.е. выход такого пид должен быть = 0 :).


Попробуй проследить все пины по цепочке.
Хммм по цепочке получается

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

net spindle-vel-cmd        <=  motion.spindle-speed-out
net spindle-vel-cmd     => hm2_5i20.0.pwmgen.02.value
Т.е. тупо задание от Gкода подается на pwmgen, зачем все остальное?
Тот же плавный пуск вроде внизу описан, но не используется...


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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение PKM »

Nick писал(а):Т.е. тупо задание от Gкода подается на pwmgen, зачем все остальное?
Тот же плавный пуск вроде внизу описан, но не используется...
То вроде для spindle-at-speed
Хотя ничего непонятно, там хал недоделанный. Можно выкинуть все что касается энкодера, оно все равно неработает. И вообще что такое
sets spindle-at-speed true ?

Первым делом нужно проверить, как значение hm2_5i20.0.pwmgen.02.value соотносится с напряжением на входе привода.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Serg »

PKM писал(а):И вообще что такое
sets spindle-at-speed true ?
Установка значения сигнала. setp - для пина, sets - для сигнала.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
PKM
Почётный участник
Почётный участник
Сообщения: 4263
Зарегистрирован: 31 мар 2011, 18:11
Репутация: 705
Настоящее имя: Андрей
Откуда: Украина
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение PKM »

Хаха, ну я специалист :) Не встречал до сих пор, надо же.

Konstantin_K, здесь все есть http://www.linuxcnc.org/docs/2.4/html/e ... indle.html
OUTPUT_SCALE должен быть равен максимальным оборотам шпинделя.
Естественно, при 10 он все время шпарит на максимуме

Хотелось бы фото, видео станочка :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Serg »

PKM писал(а):Не встречал до сих пор, надо же.
Ну у него достаточно специфическое применение - либо для отладки, либо как приём хорошего программирования:

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

# Настройки

# Периодичность смазки направляющих (кол-во движени оси)
sets lube-period 300
...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение nkp »

про sets здесь сказано
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

Кое что разобрались.
Пришлось неделю почти потратить на это.

Во первых - ВСЕГДА СНАЧАЛА НАДО ПРОВЕРЯТЬ ПРИВОД С ДВИГАТЕЛЕМ БЕЗ ЧПУ до того как их вместе подключать !
Оказалось что на привод главного движения БТУ3601 был не настроен и начальный ток, от которого зависит в том числе и максимальное число оборотов, был занижен (т.е. где то 3% от номинального тока). А должно быть 7-10% (в принципе настраивается в зависимости от того какую скорость хотим получить на приводе).
Поэтому у нас и не достигались требуемые обороты в 3000 при подаче максимального управляющего напряжения 10 Вольт.
Это вроде настроили. И одна "непонятька" заниженных оборотов ушла.
Также настроили еще некоторые параметры Привод-Двигатель (положительная обратная связь по ЭДС, начальную стабильность при M3 S0) при отключенной коробке передач.

Потом подключили коробку и чпу.
Получилась ерунда. Задаю M3 S1 - вращается 300 оборотов! Задаю M3 S50 - вообще гонит на максимум.

Я в параметрах HAL не очень разбираюсь. Т.е. основной принцип понимаю, а в точности что каждый параметр делает - не знаю. Пытался разобраться, но единой справочной системы с подробным описанием не могу найти.
Пытаюсь посмотреть что у меня на выходе:
halcmd show pin hm2
И обнаруживаю что есть такой параметр
hm2_5i20.0.pwmgen.02.value
И значение этого параметра РАВНО значению задания ЧАСТОТЫ ОБОРОТОВ.
Т.е. если я указываю M3 S1, то hm2_5i20.0.pwmgen.02.value = 1
если указываю M3 S5, то hm2_5i20.0.pwmgen.02.value = 5
M3 S100, то hm2_5i20.0.pwmgen.02.value = 100

Но ведь параметр hm2_5i20.0.pwmgen.02.value в Вольтах должен быть. С него идет напряжение на управление приводом. Т.е. получается что я пытаясь задавать Частоту оборотов, а вместо этого задаю Напряжение.
Обратил внимание на комментарий Nick'a:
Nick писал(а):Код: Выделить всё • Развернуть

net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-vel-cmd => hm2_5i20.0.pwmgen.02.value

Т.е. тупо задание от Gкода подается на pwmgen, зачем все остальное?
Тот же плавный пуск вроде внизу описан, но не используется...
Я поменял на такие связи:

net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-output => hm2_5i20.0.pwmgen.02.value (нашел где-то в примерах)
# net spindle-vel-cmd => hm2_5i20.0.pwmgen.02.value (просто закомментировал)

После это hm2_5i20.0.pwmgen.02.value стал показывать ожидаемый уровень напряжения задания +-10В

Nick, объясни пожалуйста какие значения могут принимать следующие параметры (в Вольтах, или Оборотах в секунду, минуту):

spindle-vel-cmd (описание этого параметра не нашел..... Это в чем, в Оборотах или Вольтах?)
spindle-output
hm2_5i20.0.pwmgen.02.value (тут вроде бы задание для ШИМ в Вольтах? или Оборотах?)
motion.spindle-speed-out (это насколько я знаю это Желаемая скорость в оборотах в минуту)
motion.spindle-speed-in (это насколько я знаю это Реальная скорость в каких единицах - минуту или секунду?)


После правок вроде задает напряжение правильно, но не правильно была выставлена шкала соответствия оборотов данным энкодера..

По примеру расчета Nick'а отсюда: http://cnc-club.ru/forum/viewtopic.php? ... =40#p15926

перестраиваю значения "setp scale.spindle.gain 60" на "setp scale.spindle.gain 1"
и
ENCODER_SCALE = -1000.0 (он же setp hm2_5i20.0.encoder.02.scale) на ENCODER_SCALE = -16,67

И теперь задание скорости через M3 S... стало СООТВЕТСТВОВАТЬ реальной , а также показываемой энкодером.


Но появилась другая проблема , Я задаю скорость и шпиндель начинает вращаться с Правильной скоростью. Но при этом не ровно вращается, а "тарахтит".
Как будто происходит постоянная корректировка движения. На низких оборотах это выглядит примерно как на 40 градусов повернулся, на 20 вернулся, еще повернулся , потом еще вернулся. На высоких оборотах вращается, но только с тарахтением. При этом БЕЗ ЧПУ привод работает нормально.
Смотрю на значение hm2_5i20.0.pwmgen.02.value - а оно скачет как кенгуру! И скорость не четко например 500 оборотов, а прыгает от 490 до 500.
Мне кажется что привод принимает какие то противоположные сигналы один из которых разгоняет, а другой (как будто отрицательная обратная связь) - останавливает. Как будто не в ту сторону вращается.

Может ли это быть из за энкодера или неправильной настройки Знаков значений ENCODER_SCALE или OUTPUT_SCALE ?
Я знаки менял, но либо вращается в другую сторону также, либо сразу на максимум разгоняется.

Также тут задавался вопрос зачем надо энкодер на шпинделе.
Я честно говоря не совсем понимаю как написать простой hal для управления скоростью шпинделя по +-10В без энкодера. Тот файл hal, который у меня, сформировался с помощью .pncconf
Если можно, дайте простой рабочий пример как это можно сделать.
Как сейчас энкодер влияет на поддержание скорости я не знаю. Но я вижу что ЧПУ видит значение энкодера и если оно не соответствует заданному значению - изменяет задание управляющего напряжение на привод.
Также энкодеh мне показывает реальную скорость шпинделя.
Понимаю что в принципе ЧПУ может не следить за энкодером шпинделя, а просто пересчитывать заданное число оборотов в вольты и выдавать заранее установленный сигнал.

Как выглядит hal для управления шпинделем по +- 10Вольт , через пересчет от оборотов, но что бы на ЧПУ показывалась Реальная скорость вращения шпинделя от данный энкодера?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Nick »

Давай последние версии своих hal файлов, так будет проще понять, что надо поменять.
Konstantin_K писал(а):Смотрю на значение hm2_5i20.0.pwmgen.02.value - а оно скачет как кенгуру!
Надо посмотреть, из-за чего оно скачет, что на него подается motion.spindle-speed-out или что-то другое?
Если в названии пина скорости вращения не стоит -rps (rounds per second - об/сек), то скорость в об/мин.

Konstantin_K писал(а):если указываю M3 S5, то hm2_5i20.0.pwmgen.02.value = 5
M3 S100, то hm2_5i20.0.pwmgen.02.value = 100
Менять лучше всего вот эти параметры:
pwmgen.N.scale float rw
pwmgen.N.offset float rw
These parameters provide a scale and offset from the value pin to the actual duty cycle. The duty cycle is calculated according to dc = (value/scale) + offset, with 1.0 meaning 100%.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Serg »

Всё там правильно - всё везде в оборотах. Вольты появляются только на аналоговом выходе из Mesa.
В простейшем случае нужно в pwmgen.N.scale прописать значение, равное максимуму, допустимому в параметре S станка.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

Nick писал(а):Менять лучше всего вот эти параметры:
pwmgen.N.scale float rw
pwmgen.N.offset float rw
These parameters provide a scale and offset from the value pin to the actual duty cycle. The duty cycle is calculated according to dc = (value/scale) + offset, with 1.0 meaning 100%.
Вот вижу что где то тут и можно выполнить : dc = (value/scale)
Замечу что я ничего не меняю. Я задаю значения в EMC скорости шпинделя в оборотах, и параметрт hm2_5i20.0.pwmgen.02.value становится равен тому напряжению , которое подается с выхода задания скорости mesa.
Я так понимаю что в этом случае мне просто надо установить какой то scale , равный 10В/3000 = 0,0033. Только не знаю какой параметр во что установить.

Ниже .ini .hal файлы. (Не ругайте что может быть бардак в них. Там уже как солянка. Добавлял параметры из разных параметров, экспериментировал):

.ini

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

# Generated by PNCconf at Mon Apr 29 18:21:03 2013
# Все изменения в этом файле будут перезаписаны
# overwritten when you run PNCconf again

[EMC]
MACHINE = CNC
DEBUG = 0

[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.200000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/c3640/linuxcnc/nc_files
PYVCP = pyvcp-panel.xml
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 30.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.170000
MAX_ANGULAR_VELOCITY = 60.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000

[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i20

[HAL]
HALUI = halui
HALFILE = CNC.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal

[HALUI]

[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
CYCLE_TIME = 0.010
DEFAULT_VELOCITY = 0.17
MAX_LINEAR_VELOCITY = 30.0

[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100# Generated by PNCconf at Mon Apr 29 18:21:03 2013
# Все изменения в этом файле будут перезаписаны
# overwritten when you run PNCconf again

[EMC]
MACHINE = CNC
DEBUG = 0

[DISPLAY]
DISPLAY = axis
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
MAX_FEED_OVERRIDE = 1.200000
MAX_SPINDLE_OVERRIDE = 1.000000
MIN_SPINDLE_OVERRIDE = 0.500000
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/c3640/linuxcnc/nc_files
PYVCP = pyvcp-panel.xml
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL
DEFAULT_LINEAR_VELOCITY = 0.250000
MAX_LINEAR_VELOCITY = 30.000000
MIN_LINEAR_VELOCITY = 0.010000
DEFAULT_ANGULAR_VELOCITY = 0.170000
MAX_ANGULAR_VELOCITY = 60.000000
MIN_ANGULAR_VELOCITY = 0.010000
EDITOR = gedit
GEOMETRY = xyz

[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python

[TASK]
TASK = milltask
CYCLE_TIME = 0.010

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[EMCMOT]
EMCMOT = motmod
COMM_TIMEOUT = 1.0
COMM_WAIT = 0.010
SERVO_PERIOD = 1000000

[HOSTMOT2]
# **** This is for info only ****
# DRIVER0=hm2_pci
# BOARD0=5i20

[HAL]
HALUI = halui
HALFILE = CNC.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
SHUTDOWN = shutdown.hal
TOOL_TABLE = tool.tbl
TOOLCHANGE_QUILL_UP = 1

#********************
# Axis X
#********************
[AXIS_0]
TYPE = LINEAR
HOME = 0.0
FERROR = 2.0
MIN_FERROR = 0.2
MAX_VELOCITY = 30.0
MAX_ACCELERATION = 60.0
P = 4.0
I = 0.02
D = 0.001
FF0 = 0.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 10.0
ENCODER_SCALE = 2000.0
OUTPUT_SCALE = 10.0
MIN_LIMIT = -640.0
MAX_LIMIT = 640.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -10.0
HOME_LATCH_VEL = -1.0
HOME_FINAL_VEL = 0.5
HOME_USE_INDEX = NO
HOME_SEQUENCE = 1

#********************
# Axis Y
#********************
[AXIS_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 2.0
MIN_FERROR = 0.2
MAX_VELOCITY = 30.0
MAX_ACCELERATION = 60.0
P = 5.0
I = 0.03
D = 0.001
FF0 = 0.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 10.0
ENCODER_SCALE = -1000.0
OUTPUT_SCALE = 10.0
MIN_LIMIT = -400.0
MAX_LIMIT = 400.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = -10.0
HOME_LATCH_VEL = -1.0
HOME_FINAL_VEL = 0.5
HOME_USE_INDEX = NO
HOME_SEQUENCE = 1

#********************
# Axis Z
#********************
[AXIS_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 2.0
MIN_FERROR = 0.2
MAX_VELOCITY = 20.0
MAX_ACCELERATION = 60.0
P = 5.0
I = 0.03
D = 0.001
FF0 = 0.0
FF1 = 0.0
FF2 = 0.0
BIAS = 0.0
DEADBAND = 0.0
MAX_OUTPUT = 10.0
ENCODER_SCALE = -1000.0
OUTPUT_SCALE = -10.0
MIN_LIMIT = -500.0
MAX_LIMIT = 500.0
HOME_OFFSET = 0.000000
HOME_SEARCH_VEL = 10.0
HOME_LATCH_VEL = -1.0
HOME_FINAL_VEL = 0.5
HOME_USE_INDEX = NO
HOME_SEQUENCE = 0

#********************
# Spindle 
#********************
[SPINDLE_9]
ENCODER_SCALE = -16.67
OUTPUT_SCALE = -10.0

MAX_VELOCITY = 50.0
MAX_ACCELERATION = 10.0
#P = 1.0
#I = 1.0
#D = 0.000
#FF0 = 0.5
#FF1 = 0.0
#FF2 = 0.0
#BIAS = 0.0
#DEADBAND = 0.15
#OUTPUT_OFFSET = 0.0
MAX_OUTPUT = 10.0


.hal

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

# Generated by PNCconf at Wed May 29 12:12:11 2013
# Все изменения в этом файле будут перезаписаны
# overwritten when you run PNCconf again

loadrt trivkins
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport
loadrt hostmot2
loadrt hm2_pci config="firmware=hm2/5i20/SVST8_4.BIT num_encoders=4 num_pwmgens=4 num_3pwmgens=0 num_stepgens=0  " 
setp     hm2_5i20.0.pwmgen.pwm_frequency 100000
setp     hm2_5i20.0.pwmgen.pdm_frequency 6000000
setp     hm2_5i20.0.watchdog.timeout_ns 10000000
loadrt pid names=pid.x,pid.y,pid.z,pid.s
loadrt abs names=abs.spindle
loadrt lowpass names=lowpass.spindle
loadrt scale names=scale.spindle
loadrt mux16 names=jogincr,foincr

addf hm2_5i20.0.read servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf pid.x.do-pid-calcs servo-thread
addf pid.y.do-pid-calcs servo-thread
addf pid.z.do-pid-calcs servo-thread
addf pid.s.do-pid-calcs servo-thread
addf jogincr servo-thread
addf foincr servo-thread
addf abs.spindle servo-thread
addf scale.spindle servo-thread
addf lowpass.spindle servo-thread
addf hm2_5i20.0.write         servo-thread
addf hm2_5i20.0.pet_watchdog  servo-thread

# external output signals

# external input signals

# --- PROBE-IN ---
net probe-in     <=  hm2_5i20.0.gpio.024.in_not

# --- SPINDLE-MANUAL-STOP ---
net spindle-manual-stop     <=  hm2_5i20.0.gpio.028.in

# --- CYCLE-START ---
net cycle-start     <=  hm2_5i20.0.gpio.031.in

# --- SPINDLE-MANUAL-CCW ---
net spindle-manual-ccw     <=  hm2_5i20.0.gpio.032.in

# --- ABORT ---
net abort     <=  hm2_5i20.0.gpio.033.in

# --- HOME-X ---
net home-x     <=  hm2_5i20.0.gpio.034.in

# --- SINGLE-STEP ---
net single-step     <=  hm2_5i20.0.gpio.035.in

# --- HOME-Y ---
net home-y     <=  hm2_5i20.0.gpio.036.in

# --- HOME-Z ---
net home-z     <=  hm2_5i20.0.gpio.037.in

# --- SPINDLE-MANUAL-CW ---
net spindle-manual-cw     <=  hm2_5i20.0.gpio.038.in

# --- ESTOP-EXT ---
net estop-ext     <=  hm2_5i20.0.gpio.039.in

# --- JOG-SELECTED-POS ---
net jog-selected-pos     <=  hm2_5i20.0.gpio.048.in

# --- JOG-SELECTED-NEG ---
net jog-selected-neg     <=  hm2_5i20.0.gpio.049.in

# --- JOINT-SELECT-A ---
net joint-select-a     <=  hm2_5i20.0.gpio.050.in

# --- JOINT-SELECT-B ---
net joint-select-b     <=  hm2_5i20.0.gpio.051.in

# --- JOINT-SELECT-C ---
net joint-select-c     <=  hm2_5i20.0.gpio.052.in

# --- JOINT-SELECT-D ---
net joint-select-d     <=  hm2_5i20.0.gpio.053.in

# --- JOG-INCR-A ---
net jog-incr-a     <=  hm2_5i20.0.gpio.054.in

# --- JOG-INCR-B ---
net jog-incr-b     <=  hm2_5i20.0.gpio.055.in

# --- JOG-INCR-C ---
net jog-incr-c     <=  hm2_5i20.0.gpio.056.in

# --- JOG-INCR-D ---
net jog-incr-d     <=  hm2_5i20.0.gpio.057.in

# --- FO-INCR-A ---
net fo-incr-a     <=  hm2_5i20.0.gpio.058.in

# --- FO-INCR-B ---
net fo-incr-b     <=  hm2_5i20.0.gpio.059.in

# --- FO-INCR-C ---
net fo-incr-c     <=  hm2_5i20.0.gpio.060.in

# --- FO-INCR-D ---
net fo-incr-d     <=  hm2_5i20.0.gpio.061.in

#*******************
#  AXIS X
#*******************

setp   pid.x.Pgain     [AXIS_0]P
setp   pid.x.Igain     [AXIS_0]I
setp   pid.x.Dgain     [AXIS_0]D
setp   pid.x.bias      [AXIS_0]BIAS
setp   pid.x.FF0       [AXIS_0]FF0
setp   pid.x.FF1       [AXIS_0]FF1
setp   pid.x.FF2       [AXIS_0]FF2
setp   pid.x.deadband  [AXIS_0]DEADBAND
setp   pid.x.maxoutput [AXIS_0]MAX_OUTPUT

net x-index-enable  <=>  pid.x.index-enable
net x-enable       => pid.x.enable
net x-output       => pid.x.output
net x-pos-cmd      => pid.x.command
net x-vel-fb       => pid.x.command-deriv
net x-pos-fb       => pid.x.feedback

# ---PWM Generator signals/setup---

setp   hm2_5i20.0.pwmgen.01.output-type 1
setp   hm2_5i20.0.pwmgen.01.scale  [AXIS_0]OUTPUT_SCALE

net x-output                             => hm2_5i20.0.pwmgen.01.value
net x-pos-cmd    axis.0.motor-pos-cmd
net x-enable     axis.0.amp-enable-out  => hm2_5i20.0.pwmgen.01.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i20.0.encoder.01.counter-mode 0
setp    hm2_5i20.0.encoder.01.filter 1
setp    hm2_5i20.0.encoder.01.index-invert 0
setp    hm2_5i20.0.encoder.01.index-mask 0
setp    hm2_5i20.0.encoder.01.index-mask-invert 0
setp    hm2_5i20.0.encoder.01.scale  [AXIS_0]ENCODER_SCALE

net x-pos-fb               <=  hm2_5i20.0.encoder.01.position
net x-vel-fb               <=  hm2_5i20.0.encoder.01.velocity
net x-pos-fb               =>  axis.0.motor-pos-fb
net x-index-enable    axis.0.index-enable  <=>  hm2_5i20.0.encoder.01.index-enable
net x-pos-rawcounts        <=  hm2_5i20.0.encoder.01.rawcounts

# ---setup home / limit switch signals---

net home-x     =>  axis.0.home-sw-in
net x-neg-limit     =>  axis.0.neg-lim-sw-in
net x-pos-limit     =>  axis.0.pos-lim-sw-in

#*******************
#  AXIS Y
#*******************

setp   pid.y.Pgain     [AXIS_1]P
setp   pid.y.Igain     [AXIS_1]I
setp   pid.y.Dgain     [AXIS_1]D
setp   pid.y.bias      [AXIS_1]BIAS
setp   pid.y.FF0       [AXIS_1]FF0
setp   pid.y.FF1       [AXIS_1]FF1
setp   pid.y.FF2       [AXIS_1]FF2
setp   pid.y.deadband  [AXIS_1]DEADBAND
setp   pid.y.maxoutput [AXIS_1]MAX_OUTPUT

net y-index-enable  <=>  pid.y.index-enable
net y-enable       => pid.y.enable
net y-output       => pid.y.output
net y-pos-cmd      => pid.y.command
net y-vel-fb       => pid.y.command-deriv
net y-pos-fb       => pid.y.feedback

# ---PWM Generator signals/setup---

setp   hm2_5i20.0.pwmgen.00.output-type 1
setp   hm2_5i20.0.pwmgen.00.scale  [AXIS_1]OUTPUT_SCALE

net y-output                             => hm2_5i20.0.pwmgen.00.value
net y-pos-cmd    axis.1.motor-pos-cmd
net y-enable     axis.1.amp-enable-out  => hm2_5i20.0.pwmgen.00.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i20.0.encoder.00.counter-mode 0
setp    hm2_5i20.0.encoder.00.filter 1
setp    hm2_5i20.0.encoder.00.index-invert 0
setp    hm2_5i20.0.encoder.00.index-mask 0
setp    hm2_5i20.0.encoder.00.index-mask-invert 0
setp    hm2_5i20.0.encoder.00.scale  [AXIS_1]ENCODER_SCALE

net y-pos-fb               <=  hm2_5i20.0.encoder.00.position
net y-vel-fb               <=  hm2_5i20.0.encoder.00.velocity
net y-pos-fb               =>  axis.1.motor-pos-fb
net y-index-enable    axis.1.index-enable  <=>  hm2_5i20.0.encoder.00.index-enable
net y-pos-rawcounts        <=  hm2_5i20.0.encoder.00.rawcounts

# ---setup home / limit switch signals---

net home-y     =>  axis.1.home-sw-in
net y-neg-limit     =>  axis.1.neg-lim-sw-in
net y-pos-limit     =>  axis.1.pos-lim-sw-in

#*******************
#  AXIS Z
#*******************

setp   pid.z.Pgain     [AXIS_2]P
setp   pid.z.Igain     [AXIS_2]I
setp   pid.z.Dgain     [AXIS_2]D
setp   pid.z.bias      [AXIS_2]BIAS
setp   pid.z.FF0       [AXIS_2]FF0
setp   pid.z.FF1       [AXIS_2]FF1
setp   pid.z.FF2       [AXIS_2]FF2
setp   pid.z.deadband  [AXIS_2]DEADBAND
setp   pid.z.maxoutput [AXIS_2]MAX_OUTPUT

net z-index-enable  <=>  pid.z.index-enable
net z-enable       => pid.z.enable
net z-output       => pid.z.output
net z-pos-cmd      => pid.z.command
net z-vel-fb       => pid.z.command-deriv
net z-pos-fb       => pid.z.feedback

# ---PWM Generator signals/setup---

setp   hm2_5i20.0.pwmgen.03.output-type 1
setp   hm2_5i20.0.pwmgen.03.scale  [AXIS_2]OUTPUT_SCALE

net z-output                             => hm2_5i20.0.pwmgen.03.value
net z-pos-cmd    axis.2.motor-pos-cmd
net z-enable     axis.2.amp-enable-out  => hm2_5i20.0.pwmgen.03.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i20.0.encoder.03.counter-mode 0
setp    hm2_5i20.0.encoder.03.filter 1
setp    hm2_5i20.0.encoder.03.index-invert 0
setp    hm2_5i20.0.encoder.03.index-mask 0
setp    hm2_5i20.0.encoder.03.index-mask-invert 0
setp    hm2_5i20.0.encoder.03.scale  [AXIS_2]ENCODER_SCALE

net z-pos-fb               <=  hm2_5i20.0.encoder.03.position
net z-vel-fb               <=  hm2_5i20.0.encoder.03.velocity
net z-pos-fb               =>  axis.2.motor-pos-fb
net z-index-enable    axis.2.index-enable  <=>  hm2_5i20.0.encoder.03.index-enable
net z-pos-rawcounts        <=  hm2_5i20.0.encoder.03.rawcounts

# ---setup home / limit switch signals---

net home-z     =>  axis.2.home-sw-in
net z-neg-limit     =>  axis.2.neg-lim-sw-in
net z-pos-limit     =>  axis.2.pos-lim-sw-in

#*******************
#  SPINDLE S
#*******************

#setp   pid.s.Pgain     [SPINDLE_9]P
#setp   pid.s.Igain     [SPINDLE_9]I
#setp   pid.s.Dgain     [SPINDLE_9]D
#setp   pid.s.bias      [SPINDLE_9]BIAS
#setp   pid.s.FF0       [SPINDLE_9]FF0
#setp   pid.s.FF1       [SPINDLE_9]FF1
#setp   pid.s.FF2       [SPINDLE_9]FF2
#setp   pid.s.deadband  [SPINDLE_9]DEADBAND
#setp   pid.s.maxoutput [SPINDLE_9]MAX_OUTPUT

#net spindle-index-enable  <=>  pid.s.index-enable
net spindle-enable       => pid.s.enable
net spindle-output       => pid.s.output
net spindle-vel-cmd     => pid.s.command
net spindle-vel-fb      => pid.s.feedback


# ---PWM Generator signals/setup---

setp   hm2_5i20.0.pwmgen.02.output-type 1
setp   hm2_5i20.0.pwmgen.02.scale  [SPINDLE_9]OUTPUT_SCALE

#net spindle-output      => hm2_5i20.0.pwmgen.02.value
net spindle-vel-cmd     => hm2_5i20.0.pwmgen.02.value
net spindle-enable      => hm2_5i20.0.pwmgen.02.enable

# ---Encoder feedback signals/setup---

setp    hm2_5i20.0.encoder.02.counter-mode 0
setp    hm2_5i20.0.encoder.02.filter 1
setp    hm2_5i20.0.encoder.02.index-invert 0
setp    hm2_5i20.0.encoder.02.index-mask 0
setp    hm2_5i20.0.encoder.02.index-mask-invert 0
setp    hm2_5i20.0.encoder.02.scale  [SPINDLE_9]ENCODER_SCALE

net spindle-revs              <=  hm2_5i20.0.encoder.02.position
net spindle-vel-fb            <=  hm2_5i20.0.encoder.02.velocity
net spindle-index-enable     <=>  hm2_5i20.0.encoder.02.index-enable

# ---setup spindle control signals---

net spindle-vel-cmd-rps    <=  motion.spindle-speed-out-rps
net spindle-vel-cmd        <=  motion.spindle-speed-out
net spindle-enable         <=  motion.spindle-on
net spindle-cw             <=  motion.spindle-forward
net spindle-ccw            <=  motion.spindle-reverse
net spindle-brake          <=  motion.spindle-brake
net spindle-revs           =>  motion.spindle-revs
net spindle-at-speed       =>  motion.spindle-at-speed
net spindle-vel-fb         =>  motion.spindle-speed-in
net spindle-index-enable  <=>  motion.spindle-index-enable

# ---Setup spindle at speed signals---

sets spindle-at-speed true

#  Use ACTUAL spindle velocity from spindle encoder
#  spindle-velocity bounces around so we filter it with lowpass
#  spindle-velocity is signed so we use absolute component to remove sign
#  ACTUAL velocity is in RPS not RPM so we scale it.

setp     scale.spindle.gain 1
setp     lowpass.spindle.gain 0.0100000
net spindle-vel-fb        =>   lowpass.spindle.in
net spindle-fb-filtered-rps    lowpass.spindle.out      =>   abs.spindle.in
net spindle-fb-filtered-abs-rps    abs.spindle.out      =>   scale.spindle.in
net spindle-fb-filtered-abs-rpm    scale.spindle.out

#******************************
# connect miscellaneous signals
#******************************

#  ---HALUI signals---

net joint-select-a        halui.joint.0.select
net x-is-homed            halui.joint.0.is-homed
net jog-x-pos             halui.jog.0.plus
net jog-x-neg             halui.jog.0.minus
net jog-x-analog          halui.jog.0.analog
net joint-select-b        halui.joint.1.select
net y-is-homed            halui.joint.1.is-homed
net jog-y-pos             halui.jog.1.plus
net jog-y-neg             halui.jog.1.minus
net jog-y-analog          halui.jog.1.analog
net joint-select-c        halui.joint.2.select
net z-is-homed            halui.joint.2.is-homed
net jog-z-pos             halui.jog.2.plus
net jog-z-neg             halui.jog.2.minus
net jog-z-analog          halui.jog.2.analog
net jog-selected-pos      halui.jog.selected.plus
net jog-selected-neg      halui.jog.selected.minus
net spindle-manual-cw     halui.spindle.forward
net spindle-manual-ccw    halui.spindle.reverse
net spindle-manual-stop   halui.spindle.stop
net machine-is-on         halui.machine.is-on
net jog-speed             halui.jog-speed 
net MDI-mode              halui.mode.is-mdi

#  ---coolant signals---

net coolant-mist      <=  iocontrol.0.coolant-mist
net coolant-flood     <=  iocontrol.0.coolant-flood

#  ---probe signal---

net probe-in     =>  motion.probe-input

# connect selectable mpg jog increments 

net jog-incr-a           =>  jogincr.sel0
net jog-incr-b           =>  jogincr.sel1
net jog-incr-c           =>  jogincr.sel2
net jog-incr-d           =>  jogincr.sel3
net selected-jog-incr    <=  jogincr.out-f
    setp jogincr.debounce-time      0.200000
    setp jogincr.use-graycode      False
    setp jogincr.suppress-no-input False
    setp jogincr.in00          0.000000
    setp jogincr.in01          0.000100
    setp jogincr.in02          0.001000
    setp jogincr.in03          0.000000
    setp jogincr.in04          0.010000
    setp jogincr.in05          0.000000
    setp jogincr.in06          0.000000
    setp jogincr.in07          0.000000
    setp jogincr.in08          0.000000
    setp jogincr.in09          0.000000
    setp jogincr.in10          0.000000
    setp jogincr.in11          0.000000
    setp jogincr.in12          0.000000
    setp jogincr.in13          0.000000
    setp jogincr.in14          0.000000
    setp jogincr.in15          0.000000

# connect feed overide increments - switches

    setp halui.feed-override.count-enable true
    setp halui.feed-override.direct-value true
    setp halui.feed-override.scale .01
net feedoverride-incr   =>  halui.feed-override.counts
net fo-incr-a           =>  foincr.sel0
net fo-incr-b           =>  foincr.sel1
net fo-incr-c           =>  foincr.sel2
net fo-incr-d           =>  foincr.sel3
net feedoverride-incr   <=  foincr.out-s
    setp foincr.debounce-time      0.200000
    setp foincr.use-graycode      False
    setp foincr.suppress-no-input False
    setp foincr.in00          0.000000
    setp foincr.in01          5.000000
    setp foincr.in02          10.000000
    setp foincr.in03          25.000000
    setp foincr.in04          50.000000
    setp foincr.in05          75.000000
    setp foincr.in06          90.000000
    setp foincr.in07          100.000000
    setp foincr.in08          110.000000
    setp foincr.in09          125.000000
    setp foincr.in10          140.000000
    setp foincr.in11          150.000000
    setp foincr.in12          165.000000
    setp foincr.in13          180.000000
    setp foincr.in14          190.000000
    setp foincr.in15          200.000000

#  ---motion control signals---

net in-position               <=  motion.in-position
net machine-is-enabled        <=  motion.motion-enabled

#  ---digital in / out signals---

#  ---estop signals---

net estop-out     <=  iocontrol.0.user-enable-out
net estop-ext     =>  iocontrol.0.emc-enable-in

#  ---manual tool change signals---

loadusr -W hal_manualtoolchange
net tool-change-request     iocontrol.0.tool-change       =>  hal_manualtoolchange.change
net tool-change-confirmed   iocontrol.0.tool-changed      <=  hal_manualtoolchange.changed
net tool-number             iocontrol.0.tool-prep-number  =>  hal_manualtoolchange.number
net tool-prepare-loopback   iocontrol.0.tool-prepare      =>  iocontrol.0.tool-prepared
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение nkp »

наверно поставить OUTPUT_SCALE в 1
и рассчитать scale.spindle.gain 1:
(для просмотра содержимого нажмите на ссылку)
loadrt scale count=1
addf scale.0 servo-thread
setp scale.0.gain 0.002
net spindle-speed-scale motion.spindle-speed-out => scale.0.in
net spindle-speed-DAC scale.0.out => <your DAC pin name>
посмотри - вот пример маштабирования шим-генератора:
(для просмотра содержимого нажмите на ссылку)

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

#######
#Spindle uses encoder.02 and pwmgen.02
#######

#spindle scales
addf scale.0 servo-thread
addf scale.1 servo-thread

#10v/3000rpm = 0.003333
setp scale.0.gain -0.003333

setp scale.1.gain 60

#load abs comp make spindle RPM pos
loadrt abs count=3
addf abs.0 servo-thread
addf abs.1 servo-thread
addf abs.2 servo-thread

#spindle speed out limits
loadrt limit1 count=1
addf limit1.0 servo-thread
setp limit1.0.min -3000
setp limit1.0.max 3000

#set scale and pwm
setp hm2_5i20.0.encoder.02.scale -1000
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.output-type 1

net spindle-speed-limit motion.spindle-speed-out => limit1.0.in
net spindle-speed-limit-out limit1.0.out => scale.0.in
net spindle-speed-DAC scale.0.out => hm2_5i20.0.pwmgen.02.value
net spindle-rpm => abs.1.in
net spindle-speed-abs <= abs.1.out

#spindle enable
net spindle-enable-req motion.spindle-on => and2.1.in0
net spindle-brake-sensor hm2_5i20.0.gpio.051.in_not => and2.1.in1
net spindle-enable and2.1.out => hm2_5i20.0.pwmgen.02.enable

# enable spindle drive
net spindle-enable => hm2_5i20.0.gpio.065.out
# force spindle lock pin out
net spindle-enable => hm2_5i20.0.gpio.042.out

# release spindle brake
net spindle-brake-prg not.0.out => or2.2.in0
net spindle-brake-logic motion.spindle-brake => not.0.in
net spindle-brake hm2_5i20.0.gpio.040.out <= or2.2.out

#spindle sync
net spindle-index motion.spindle-index-enable <= hm2_5i20.0.encoder.02.index-enable
net spindle-velocity motion.spindle-speed-in <= hm2_5i20.0.encoder.02.velocity
net spindle-revs motion.spindle-revs <= hm2_5i20.0.encoder.02.position

net spindle-velocity => abs.0.in
net spindle-v-abs abs.0.out => scale.1.in
net spindle-v-abs-out <= scale.1.out

# spindle speed
net spindle-velocity mult2.0.in0
setp mult2.0.in1 60
net spindle-abs abs.2.in mult2.0.out
net spindle-rpm  abs.2.out

# spindle at speed              
setp near.0.difference 0.1        
net spindle-velocity near.0.in1    
net com-spindle-vel near.0.in2 <= motion.spindle-speed-out-rps   
net spindle-at-speed near.0.out => motion.spindle-at-speed       


#######
#end of spindle
######
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Nick »

А pid на шпиндель ты для чего добавил?
В принципе он не нужен, если только шпиндель у тебя не управляется по моменту. Если у тебя тупо вывод с mesa прямо задает скорость - то pid не нужен. Обратная связь в этом случае нужна только для нарезания резьб и контроля того, что обороты соответствуют нужным, для этого будет использоваться motion.spindle-at-speed
Konstantin_K
Новичок
Сообщения: 15
Зарегистрирован: 29 апр 2013, 14:43
Репутация: 0
Контактная информация:

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Konstantin_K »

Nick писал(а):А pid на шпиндель ты для чего добавил?
А это уже следствие экспериментов. Изначально его не было. А потом искал разные варианты почему у меня не получается и пробовал в явнов виде и ПИД.
Nick писал(а):...и контроля того, что обороты соответствуют нужным, для этого будет использоваться motion.spindle-at-speed
А откудава motion.spindle-at-speed будет знать какие обороты? От энкодера?

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

Re: Проблема со скоростью шпинделя на Mesa 5i20 + 7i27TA

Сообщение Nick »

Konstantin_K писал(а):А откудава motion.spindle-at-speed будет знать какие обороты? От энкодера?
Да, при этом лучше все это дело прокинуть через near - т.е. примерное сравнение, как у nkp:
nkp писал(а):net spindle-velocity near.0.in1   
net com-spindle-vel near.0.in2 <= motion.spindle-speed-out-rps   
net spindle-at-speed near.0.out => motion.spindle-at-speed       
Konstantin_K писал(а):Вариант , который предложил nkp - можно пробовать, нет подводных камней?
Не должно быть.

Для начала попробуй просто вывести
nkp писал(а):motion.spindle-speed-out
на pwmgen, настрой scale для pwmgen и добейся стабильной работы движка. Потом уже можно будет делать навороты.
Ответить

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