Ввод в эксплуатацию ЧПУ системы на основе контроллера Kflop.

KFlop, KStep, KAnalog, KMotion...

Имеете ли вы контроллер Kflop? :-)

Можно выбрать до 1 варианта ответа

 
 
Результаты голосования

Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Ввод в эксплуатацию ЧПУ системы на основе контроллера Kflop.

Сообщение ukr-sasha »

Сайт производителя: http://dynomotion.com/KFLOP.html
Сначала несколько понятий и тезисов.
- Контроллер Kflop или, как некоторые его называют Кфлоп, это полноценный внешний автономный контроллер управления двигателями. Он самостоятельно выполняет расчеты своим DSP процессором. Формирование импульсов управления двигателями у него так же происходит аппаратно, т.е. без участия компьютера. С компьютером связывается через интерфейс USB.
KFLOP_perspective1_400.jpg (49281 просмотр) <a class='original' href='./download/file.php?id=32223&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (77.93 КБ)</a>
Из этого следует важный вывод: стабильность выходящего сигнала не зависит от вашего компьютера, т.е. это может быть современый или не очень стационарный компьютер, ноутбук, неттоп, нетбук и возможно планшет с Windows8 (этот вариант не проверял)(проверено - работает!!).
- Кфлоп по сути, это специализированный компьютер, т.е. он знает КАК выполнять, но еще не знает ЧТО выполнять, пока вы ему это не напишите. Звучит страшно, но на самом деле есть в комплекте много примеров, особенно на стандартные для ЧПУ действия.
Вывод: все действия Кфлопа нужно прописывать в файлах конфигурации, которые должны быть в него загружены.
- Станок с Кфлопом может управляться через программу Mach3, но есть родная программа KmotionCNC, которая более стабильная. Её освоение я бы и рекомендовал.

Кфлоп может выдавать управляющий сигна по Степ/Дир шаговыми и сервоприводами, по +/-10В сервоприводами, а так же ШИМ ТТЛ и напрямую силовыми ключами с коллекторными и бесколлекторными двигателями. Для 99% случаев нам интересны только первые два варианта. :)
Тех.задание:
Вариант №1 (С/Д) - подключение и настройка станка с приводами управляемыми по Степ/Дир (шаговые или сервы);
Вариант №2 (10В)- подключение и настройка станка с приводами управляемыми по +/-10В (сервы);
Отличия в настройках и подключении несущественные, потому буду описывать в одной теме.

1. Комплектация
Для С/Д варианта достаточно самого Кфлопа. Но это не очень удобно и безопасно, так как на плате нет опторазвязанных входов/выходов и удобных клемм. Лучше докупить такую терминальную плату: http://dynomotion.com/Konnect.html.
Konnect_perspective1_400.jpg (49267 просмотров) <a class='original' href='./download/file.php?id=32224&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (88.64 КБ)</a>
16 выходов и 32 входа должно хватить для обычного станка. Сюда подсоединяются реле для включения приводов, шпинделя насоса, пылесоса и т.д., заводятся датчики и концевики.
Кто умеет и хочет сэкономить можно не покупать, а самому паять платки с оптронами, реле и т.д. или покупать на иБей китайские терминалки и их приспосабливать. В общем вариантов много. :)
Для варианта 10В нужно дополнительно к Кфлопу купить плату Kanalog: http://dynomotion.com/Kanalog.html .
Kanalog_perspective1_400.jpg (49267 просмотров) <a class='original' href='./download/file.php?id=32225&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (97.92 КБ)</a>
На ней распаяны цифровые ЦАП, которые выдают сигнал управления +/-10В. Помимо этого в нее встроены оптоизолированные входы/выходы, выходы на реле, аналоговые входы и диф.входы для энкодеров или оптических линеек. Хотя в качестве датчиков ОС можно использовать и резольверы, если есть у кого. ;)

Продолжение будет...
П.С. В этой теме собираюсь поделиться накопленным опытом по Кфлопу. Быстро это не будет - по частям. Просьба, пока не закончу, не пишите в теме. Если будут у вас замечания или предложения, то пишите в личку. Обязательно учту.
Последний раз редактировалось ukr-sasha 02 июн 2015, 23:23, всего редактировалось 6 раз.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

2. Подключение.
Схемы подключений буду делать на примере всеми любимых сервоприводов Yaskawa SGDA. :D Для устройств других фирм производителей подключение будет аналогичным, разве что названия контактов будут отличаться.
Для запуска Кфлопа необходимо напряжение питания +5В. Можно взять прямо от USB, но ток потребления с подключенными приводами и датчиками будет выше нагрузочной способности порта компьютера. Такой вариант только для "голого" подключения, чтобы отладить код.
Для работы я бы рекомендовал БП от компьютера, тем более, что на Кфлопе распаян стандартный разъем MOLEX. Хотя можно и другие имеющиеся БП использовать.
Минимально необходимое подключение одного привода для варианта С/Д выглядит так:
step-dir.jpg (49320 просмотров) <a class='original' href='./download/file.php?id=32229&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (206.8 КБ)</a>
В данном случае привод подключен к каналу №0 Кфлопа.
На входах привода, как правило, стоят оптроны. Поэтому для питания оптронов берем 3,3В (красный провод). Сигнал Степ подсоединяем к 15-му контакту, а Дир к 16-му.
В приводе нужно отключить (пока что) сигнал S-On (Enable и т.д.). В шаговых приводах это сделано по умолчанию.

Для варианта 10В схема чуть другая:
10v.jpg (49310 просмотров) <a class='original' href='./download/file.php?id=32233&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (336.45 КБ)</a>
Тут подсоединяем к выходам канала №0 (не путать с каналом №0 Степ/Дир) +/-10В и ко входам канал №0 сигналы А+/А- и В+/В- энкодера.

На этом отличия в подключении Степ/Дир и +/-10В заканчиваются. ;)
Будут небольшие отличия в настройках.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

3. Настройка.
Настройка и использование контроллера Кфлоп описана в разделе помощь на сайте производителя: http://dynomotion.com/Help/index.htm.
Первым делом нужно скачать пакет программ для Кфлопа.
Это можно сделать на сайте производителя по ссылке: http://dynomotion.com/Software/Download.html
Я сам пользуюсь альфа версиями, в которых реализовано больше функций и в них быстрее исправлются баги. Проблем со стабильностью у меня не было. Взять можно здесь: http://dynomotion.com/Software/?M=D .
В этой теме буду описывать использование только родного софта для управления станком. Для эстетов желающих управлять Кфлопом из под Mach3 есть тема в разделе помощь.
После того, как вы установите программное обеспечение и драйвер для Кфлопа (ставится автоматически), можно подключать плату к компьютеру. :)

На этом этапе у вас приводы в комплекте с моторами должны быть уже отстроены и при включении питания становиться в режим удержания. А у сервопривода не должно быть дребезга и срыва мотора.

Нам нужны две программы: Kmotion для настройки контроллера и KmotionCNC для управления станком.
Сначала запускаем Kmotion, и в ней нажимаем на вкладки 1.
kmotion1.jpg (49238 просмотров) <a class='original' href='./download/file.php?id=32344&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (443 КБ)</a>
Как я уже писал ранее, в комплекте с программой есть шаблоны/примеры готовых файлов конфигурации для выполнения разных задач. Для первоначальных настроек контроллера, нам нужен файл конфигурации InitStepDir3Axis.c для варианта С/Д и файл Init3Analog.c соответственно для варианта 10В. Эти файлы нужно выбрать в окне C programs через стандартный диалог открытия файла в верхней части окна 2. Советую сразу пересохранить этот файл, с добавление названия вашего станка в отдельный каталог, чтобы не портить стандартный шаблон и не путаться.
После выбора шаблона настроек осей, нужно изменить их для ваших условий.
Для варианта С/Д:
- 3 - выбор оси, которая настраивается: 0 - это ось Х, 1 - ось Y, и т.д.;
Тут следует сделать оговорку: в зависимости от номера порта, задается его режим работы. (подсказал michael-yurov - за что ему отдельное спасибо!)
Задавая номер порта 0-7, выход будет работать, как открытый коллектор (см. схему подключения), который можно использовать для подключения к оптовходам рассчитанным на 5 В.
Если к номеру выхода добавить 8 - он будет работать, как LVTTL 3,3 В (обычный выход на 3,3 В).
Например, введя в поле «output chanel» число «11» вы настроите выход сигнала step/dir с генератора номер 3 в режиме LVTTL 3,3 В.
Если же добавить 16 - генератор будет работать не в режиме Step/Dir, а в квадратурном режиме.
Режим открытый коллектор гарантированно будет работать с оптовходами рассчитанными на 5В.
Режим 3,3 В - менее подвержен влиянию помех и способен работать на более высоких частотах.
Output Mode.png (49218 просмотров) <a class='original' href='./download/file.php?id=32346&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (95.46 КБ)</a>
- 4 - прочитать из файла-шаблона настройки для выбранной оси;
- 5 - вид датчика обратной связи, выбрать No Input. Хотя никто нам не запрещает поставить энкодер или оптическую линейку и будет ОС с шаговиками. ;) Но это я чуть вперед забегаю.;
- 6 - вид исходящего сигнала для управления моторами. Нам нужен Step Dir.;
- 7 - оставвляете без изменений, т.к. датчика ОС нет;
- 8 - выбираете номер канала исходящих сигналов к которому подключен привод. В нашем случае это канал №0. Второе окошко - это усиление сигнала, оставляете равным 1. Если двигатель крутится не в ту сторону, которую нужно, то меняете знак и пишете -1. Оффсет не трогаете.
- 9 - произведенные изменения записываете/экспортируте в уже ваш файл настройки.

Для варианта 10В выполняются те же шаги, только следующие параметры отличаются:
- 5 - выбираете Encoder;
- 6 - выбираете DAC Servo;
- 7 - нужно выбрать номер канала входящих сигналов для датчика ОС, в нашем случае это канал №0. Параметр Gain отвечает за усиление входящего сигнала - оставьте 1. Если перепутаны фазы энкодера при подключении к плате, и серва при включении набирает обороты, а не становится в удержание, то поменяйте у этого параметра знак на противоположный.

После экспорта настроек в ваш файл, не забудте его сохранить, нажав кнопку в верхней части окна.
На будущее, запомните: все произведенные в программе Kmotion настройки НЕ ПРИМЕНЯЮТСЯ АВТОМАТИЧЕСКИ - ИХ НУЖНО СОХРАНЯТЬ. И вновь инициализировать в контроллер. Запомните - сэкономите много времени и нервов. :hehehe:

Далее, опять идем в окно C programs, где открыт файл настроек.

Небольшие пояснения к настройкам:
ch0->InputMode=ENCODER_MODE; // режим ОС по энкодеру
ch0->OutputMode=DAC_SERVO_MODE; // вывод сигнала задания в ЦАП, т.е. +/-10В
ch0->Vel=132000; // максимальная скорость двигателя в импульсах
ch0->Accel=300000; // максимальное ускорение
ch0->Jerk=1e+006; /. максимальный толчок
ch0->P=0.01; // пропорциональная составляющая ПИД
ch0->I=0; // интегральная составляющая
ch0->D=0; // диф. составляющая
ch0->FFAccel=0; // ускорение предзадания, или добавка в сигнал
ch0->FFVel=0; // скорость предзадания
ch0->MaxI=2047; // максимальная величина обработки сигнала
ch0->MaxErr=3e+009; // максимальная ошибка рассогласования позиции
ch0->MaxOutput=2047; // максимальный уровень сигнала
ch0->DeadBandGain=1; // усиление мертвой зоны
ch0->DeadBandRange=0; // величина мертвой зоны в импульсах
ch0->InputChan0=0; // канал №0 входящих сигналов от датчика ОС
ch0->InputChan1=1; // второй канал для датчика ОС, резольвера например
ch0->OutputChan0=0; // канал №0 для выходящих сигналов, в нашем случае +/-10В
ch0->OutputChan1=1; // канал для подчиненной оси
ch0->MasterAxis=-1; // включение/выкл. подчиненной оси
ch0->LimitSwitchOptions=0x88890003; // режим работы концевиков
ch0->SoftLimitPos=1e+009; // софтлимит положит. в импульсах
ch0->SoftLimitNeg=-1e+009; // софтлимит отриц. в импульсах
ch0->InputGain0=1; // усиление входящего сигнала
ch0->InputGain1=1; //усиление входящего сигнала
ch0->InputOffset0=0; // смещение входящего сигнала
ch0->InputOffset1=0; // смещение входящего сигнала
ch0->OutputGain=1; // усиление выходящего сигнала
ch0->OutputOffset=0; // смещение выходящего сигнала
ch0->SlaveGain=1; // усиление сигнала подчиненной оси
ch0->BacklashMode=BACKLASH_OFF; // вкл/откл режима компенсации люфта
ch0->BacklashAmount=0; // скорость компенсации люфта
ch0->BacklashRate=0; //величина в имп. компенсации люфта
ch0->invDistPerCycle=1;
ch0->Lead=0;
ch0->MaxFollowingError=10000000;
ch0->StepperAmplitude=250;

ch0->iir[0].B0=1;
ch0->iir[0].B1=0;
ch0->iir[0].B2=0;
ch0->iir[0].A1=0;
ch0->iir[0].A2=0;

ch0->iir[1].B0=0.003522;
ch0->iir[1].B1=0.003522;
ch0->iir[1].B2=0;
ch0->iir[1].A1=0.992956;
ch0->iir[1].A2=0;

ch0->iir[2].B0=1;
ch0->iir[2].B1=0;
ch0->iir[2].B2=0;
ch0->iir[2].A1=0;
ch0->iir[2].A2=0;
EnableAxisDest(0,ch0->Dest); // активация оси

DefineCoordSystem(0,-1,-1,-1); // конфигурирование системы координат - осей
Тут нужно поправить несколько параметров:
- нужно посчитать максимальное значение параметра ch0->Vel.
Например серводвигатель может вращаться с оборотами 3000 об/мин, а энкодер на нем 1024 имп/об, тогда:
ch0->Vel = 3000 об/мин * 1024 имп/об * 4 = 12288000 имп/мин = 204800 имп/сек
ch0->Vel = 204800
Если это шаговик с максимальными оборотами 1200 об/мин, 200 шаг/об и деление шага выставлено в 1/8, то значение параметра будет:
ch0->Vel = 1200 об/мин * 200 шаг/об * 8 = 192000 шаг/мин = 3200 шаг/сек.
- значения ch0->Accel и ch0->Jerk для начала можно поставить равными максимальной скорости двигателя, т.е. ch0->Vel. Скорее всего с таким значением двигатель будет набирать и сбрасывать скорость очень плавно. Но тут уже каждый должен подбирать значения под свои приводы и механику.
Эти три параметра действуют только для режима Jog, т.е. быстрых перемещений или по G0. И являются верхней ограничивающей планкой для перемещений по G1.
- параметр пропорциональной составляющей коэф. ПИД ch0->P для варианта С/Д нужно выставить равным 1, т.е. ch0->P=1, а для варианта 10В - для начала ch0->P=0,01. Причем если серва будет дрожать при включении, его нужно уменьшать. Затем покажу, как более точно подобрать коэф ПИД.

Теперь можно запускать программу KmotionCNC.
В главном окне нужно нажать на кнопку Tool Setup, чтобы ее настроить.
kmotion2.jpg (49155 просмотров) <a class='original' href='./download/file.php?id=32356&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (417.26 КБ)</a>
Выбираем вкладку User Buttons, и в качестве события на нажатие пользовательской кнопки INIT пишем выполнение ранее отредактированного файла настройки осей InitStepDir3Axis.c для варианта С/Д и файл Init3Analog.c соответственно для варианта 10В. Параметры Thread=1 и VAR=0.
kmotion3.jpg (49155 просмотров) <a class='original' href='./download/file.php?id=32357&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (386.17 КБ)</a>
Далее на вкладке Trajectory Planner прописываем параметры движения осей станка:
- количество импульсов на дюйм Cnts/Inch. Пусть мотор соединен напрямую через муфту к винту с шагом 5мм. Тогда значение параметра для выбранной оси будет равняться 25,4 мм/дюйм * 1024 имп/об * 4 / 5мм = 20807,68 имп/дюйм. Это для серводвигателя.
Или для шаговика: 25,4 мм/дюйм * 200 шаг/об * 8 / 5мм = 8128 имп/дюйм.
- максимальная скорость перемещения оси в режиме G1 это параметр Vel in/sec. Например, мы хотим, чтобы максимальная рабочая подача была в 2 раза ниже, чем скорость холостых перемещений, тогда этот параметр будет равняться: 204800 имп/сек / (20807,68 имп/дюйм *2) = 4,92 дюйм/сек.
Или для шаговика: 3200 шаг/сек / (8128 имп/дюйм *2) = 0,19 дюйм/сек.
- ускорение оси Accel in/sec2 поставьте для начала равным скорости, если будет мало - всегда сможете увеличить.
- скорость холостых перемещений по G0, то же самое, что и в файле инициализации осей, только тут в дймах в секунду. Для нашего случая: 204800 имп/сек / 20807,68 имп/дюйм = 9,84 дюйм/сек. Можно поставить меньше, если механика не выдерживает. :hehehe:
kmotion4.jpg (49155 просмотров) <a class='original' href='./download/file.php?id=32358&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (458.5 КБ)</a>
После всех этих непонятных действий :hehehe: :thinking: , можно подвигать осями.
В главном окне нажимаете кнопку INIT, файл конфигурации при этом заливается в контроллер. И теперь, если всё сделали правильно и я нигде не ошибся :hehehe: , при нажатии стрелок в программе, оси должны двигаться. ;)
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

3.1 Настройка сервоприводов.
Пока владельцы станков с приводами в варианте С/Д находятся в состоянии эйфории и уже во всю пилят деревяшки и пластик :hehehe: , менее многочисленная группа пользователей приводов варианта 10В нервно кусают ногти в ожидании... :D
Но уверен, что их ожидания будут оправданы более качественным результатом работы станка. :)
Для полноценной работы серв необходимо качественно их настроить.
К этому моменту, сами приводы должны уже быть настроены под ваши моторы и все предыдущие подключения и настройки Кфлопа вы уже сделали. Моторы двигаются с команд программы KmotionCNC.
Должен упомянуть, что все настройки этого сообщения будут действительны для тех условий эксплуатации приводов в которых они настраивались. Т.е. если вы их настраиваете на столе, то при монтаже на станок, всё нужно будет проделать сначала.
На этом этапе мы должны определить оптимальные значения ускорения, толчка, коэф. ПИД, для того, чтобы передвижение оси было максимально близко к заданному значению позиции. Максимально близко - это с ошибкой, которая гарантированно не будет превышать требуемого значения. Честно сказать, для меня самого, этот этап, как магия, на уровне интуиции. :hehehe: :thinking: Предупреждаю, образования по дисциплине АСУ у меня нет, и все, что я буду здесь писать, это обрывки знаний из интернета, прошедшие через кривую призму моего сознания. Так, что за последствия я не отвечаю. И т.д. и т.п. :D :lol:
Для настройки приводов с обратной связью, а это могут быть и шаговики, в программе Kmotion есть специальный инструмент, который вызывается при нажатии кнопки Step Response.
kmotion5.jpg (49073 просмотра) <a class='original' href='./download/file.php?id=32471&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (123.16 КБ)</a>
Еще раз повторюсь: все значения настроек, которые здесь будут найдены/выставлены сами в файл конфигурации не попадают. Их нужно будет запомнить/выписать и вручную вставить в файл инициализации осей, и сохранить!!!
Откроется окно:
kmotion6.jpg (49073 просмотра) <a class='original' href='./download/file.php?id=32472&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (206.89 КБ)</a>
.
Нужно сделать следующее:
1. - выбрать ось, которую требуется настроить;
2. - output = 2047 - максимальный выходящий сигнал весь диапозон 10В;
3. - integrator=2047 - максимальное значение интегральной составляющей тоже весь диапозон;
4. - error= 10^9 или еще больше - это предел ошибки рассогласования позиции. На начальном этапе делать побольше, чтобы ось не отключалась. Когда всё будет настроено, то можно будет выставить какое то разумное значение, скажем 1мм только в импульсах, и тогда если вдруг по какой то причине, авария например, рассогласование будет больше, то ось выключится. Полезная вещь.
5. - V оно же ch0->Vel с файла настроек. С примера предыдущих сообщений = 204 800;
6. - ускорение A=ch0->Accel=2 048 000;
7. - толчок J=ch0->Jerk=20 480 000;
Ускорение и толчок возможно придется корректировать. Это начальные значения.
8. - ширина мертвой зоны ch0->DeadBandRange = 0. Если мотор в режиме удержания не удается стабилизировать в силу конструкции оси, то можно это параметр задать в 2-10 импульсов. Но увлекаться не стоит, так как этот параметр задает ГАРАНТИРОВАННУЮ ошибку позиционирования на величину мертвой зоны.;
9. - усиление сигнала в пределах мертвой зоны ch0->DeadBandGain. Можно задавать от 0 до 1. Значение 0, это значит, что в пределах мертвой зоны корректировка сигнала не производится;
Далее страшные коеф. ПИД. :D
10. - пропорциональная составляющая корректировки сигнала ch0->P=0,01 для начала уже выставляли;
11.- интегральная составляющая корректировки сигнала ch0->I=0;
12. - дифференциальная составляющая корректировки сигнала ch0->D=0;
На этом этапе обязательно прочитайте две страницы информации, что же такое ПИД и как его быстро и просто настроить. :)
pid.pdf
(144.55 КБ) 3628 скачиваний
Только троим читателям нужно знать, как ПИД настраивается, судя по количеству скачавших файл. :)
Кстати сказать, я пытался вычислять коэф. ПИД по методике Зиглера и Никольса, ноу меня она ни разу не сработала. :) Возможно, что то делал не так :) , но реальный результат показал метод описанный в файле. Им сейчас и пользуюсь.

13. - время движения оси во время теста, для начала 3 сек;
14. - количество имп., т.е. растояние на которое должен провернуться двигатель. Пусть будет 1 оборот, т.е. 4096 имп.
15. - запуск теста.
После вреащения двигателя в одну сторону и обратно, строится график, который показывает заданную позицию, которую должен пройти двигатель - Command, синий график.И реальную, измеренную по энкодеру - Position, красный. На зеленый можно не обращать внимания - это корректировка исходящего сигнала +/-10В.
CL-off.JPG (49018 просмотров) <a class='original' href='./download/file.php?id=32482&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (119.36 КБ)</a>
Нужно постараться совместить эти графики. Они, в данном случае, показывают, что реальное положение оси запаздывает от заданной.
Далее, нажимаете 17 , чтобы сбросить ошибку позиционирования, изменяете коэф. ПИД, как описано в приложенной статье, и снова запускаете тест. И так по кругу, пока результат не удовлетворит вашим требованиям к точности.
Если двигатель вошел в незатухающий колебательный процесс, то нужно отключить ось, нажав 16. А затем опять ее включить, нажав 18. Тут есть один неприятный момент, пока не отрисуется график, программа не реагирует на нажатие кнопок. Поэтому, если амплитуда колебаний становится опасной для станка, то выключайте ось физически!!!
Но есть и хорошие новости :D , если изменять коэф. ПИД на маленькие величины, а не пытаться сэкономить время, то коллебательный процес будет сначала затухающий и незначительный по амплитуде.
За величиной ошибки позиционирования удобно наблюдать, выбрав такое отображение графика:
CL-off-error.JPG (49018 просмотров) <a class='original' href='./download/file.php?id=32483&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (115.4 КБ)</a>
По горизонтали координата времени теста, а по вертикали - ошибка в импульсах. В данном случае при движении вперед максимальная ошибка 50 импульсов, а при движении назад 70 имп.
Если никак не удается уменьшить ошибку позиционирования до приемлемых значений, и ось постоянно перелетает позицию, то скорее всего двигателю не хватает момента, чтобы ее двигать с заданным ускорением и толчком! Значит нужно уменьшать их значения.
Если найденные значения ускорения и толчка, не удовлетворяют требованиям, то можно попробовать их увеличить, а запаздывание оси компенсировать предварительной добавкой в сигнал - настроить коэф. Feed Forvard 19. Это те же скорость и ускорение, только они добавляются в сигнал ДО появления ошибки позиционирования.
После многочасовых :) манипуляций, у вас должно получиться наподобие такого:
CL-on-1.JPG (49018 просмотров) <a class='original' href='./download/file.php?id=32484&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (120.71 КБ)</a>
Теперь, можно выписать найденные значения параметров на листик и положить в сейф. :) Конечно, если вы не хотите еще раз испытать острые незабываемые ощущения. :D
Переносите значения коэф. в файл инициализации, и сохраняете его.
Всё, теперь можно быть уверенными, что оси вашего станка ГАРАНТИРОВАННО двигаются согласно программе. :)
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

4. Подключение сигнала активации приводов S-On/Enable.
Поздравляю, если вы добрались до подключения датчиков, кнопок, концевиков, то самый сложный этап пройден. ИМХО. :)
Задача: необходимо выполнить активацию приводов при инициализации осей.
Нужно подключить, как на схеме дополнительный БП на 24В. Для варианта С/Д все точно так же - нужно подключиться к любому свободному оптоизолированному выходу. В данном случае это выход OptoOUT 0 Pin 144. Эти выходы работают, как обычные тумблеры, т.е. просто замыкают контакты.
Вот здесь можно посмотреть: http://dynomotion.com/Help/DigitalIOScr ... Screen.htm и http://dynomotion.com/Help/SchematicsKa ... analog.htm .
s-on.jpg (49008 просмотров) <a class='original' href='./download/file.php?id=32492&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (282.48 КБ)</a>
Далее, в файл инициализации перед командой return 0, нужно добавить код:

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

SetBitDirection(144,1);
     	for (;;)  //loop forever
	{
		 WaitNextTimeSlice();
			if (ch0->Enable &&  ch1->Enable  && ch2->Enable)		   
			SetBit(144); 			 
			else
		   ClearBit(144);
    }
Который означает:
- устанавливаем пин 144, как выход;
- постоянно, каждый сервоцикл;
- проверяем условие: если все оси активированы, то
- пин 144 включен
- иначе пин 144 выключен.
Таким образом если хоть одна ось отключится програмно, по разным причинам (тут вспоминаем предельную ошибку позиционирования :) или кнопка Стоп в программе), то сигнал активации приводов пропадает.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

5. Подключение концевых выключателей.
Из моего небогатого опыта сделал один вывод: настройка и эксплуатация станка без концевых датчиков - это прямой путь к убыткам, а в худшем случае к увечьям. :shock:
Потому, крайне рекомендую их устанавливать!!! :attention:
Тут я опишу, как их подключить к Кфлопу и настроить его. Но такая схема должна быть одним из барьеров безопасности: в идеале, нужно концевики включить в схему работы аварийной кнопки-грибка и завести сигналы с концевиков на приводы!!! :attention:
В данном аспекте, концевик - это АВАРИЙНЫЙ ВЫКЛЮЧАТЕЛЬ. Если уже ось на него наехала, то все должно отключаться и останавливаться!!! :attention:
Подключение концевиков и их настройка довольно проста.
limit.jpg (48854 просмотра) <a class='original' href='./download/file.php?id=32856&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (248.89 КБ)</a>
Показано подключение одного концевика к оптоизолированному входу №0 пин 136. Остальные соответственно подключаются к следующим входам №1, №2 и т.д. Эти входы позволяют подавать на них сигналы с напряжением от 5В до 24В. Если датчик позволяет, то лучше использовать 24В - выше помехозащищенность (если неправ, то поправьте). :)
Далее, в программе Кмоушн, делаеете следующее:
1. Галочка активации концевиков, для направления "-" и "+" соответственно;
2. Срабатывает если пропал сигнал на концевике, это наш случай. Ставим галочку;
3. Номер пина, куда подключен концевик - 136 в примере.
4. Алгоритм отработки нажатия концевика: полная блокировка приводов, с возможностью отвода оси в противоположную сторону и просто остановка. Выберете, который вам больше понравиться. :)
Экспортируете внесенные настройки в файл инициализации и сохраняете.
Вот собственно и всё. ;)
П.С. Внимательный читатель может спросить про софт-лимиты - они сейчас не актуальны, т.к. станок еще не знает своих машинных координат. А это тема главы про датчики НОМЕ. :)
Вложения
limit2.jpg (48854 просмотра) <a class='original' href='./download/file.php?id=32857&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (222.13 КБ)</a>
Аватара пользователя
Hanter
Мастер
Сообщения: 5414
Зарегистрирован: 27 янв 2012, 14:52
Репутация: 4338
Настоящее имя: Алексей
Откуда: Питер
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Hanter »

Саш, все хорошо, все замечательно, непонятно тока почему ты "Enable" заводишь через JP13 ???? только ради оптопары ? дык у усилков обычно она на входе сидит. а на JP8 есть специально отведенный под это пин.. так и обзываица "Enable All". пин номер 9. работает на уровне железа. при включении платы, усилки погашены. как тока мозги загрузились он их автоматом активирует.
Опыт - это когда на смену вопросам: "Что? Где? Когда? Как? Почему?" Приходит единственный вопрос: "Нахрена?"
==========================================
фрезерная и токарная обработка на станках с чпу.
Резка, гибка, сварка и порошковая окраса.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Hanter писал(а):на JP8 есть специально отведенный под это пин.. так и обзываица "Enable All". пин номер 9. работает на уровне железа. при включении платы, усилки погашены. как тока мозги загрузились он их автоматом активирует.
Ценное замечание! Честно говоря не знал. :oops:
Но, может кому то удобнее будет вручную контролировать активацию усилков? ;)
П.С. Я всегда готов выслушивать замечания и советы. Только давайте в личку. Пусть тема остается легкой для новичков. ;)
П.П.С. Леша, жду еще твоих советов. :D
П.П.П.С. :attention: В шапку добавил опросник. Не поленитесь - поставьте галки. :D
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Добавлю еще не совсем очевидную информацию:
- настройки моторов в файле инициализации (скорость, ускорение и толчок) действуют глобально, но при быстрых перемещениях Jog по G0 или стрелками добавляется ограничение скорости, обозначенное на картинке;
- далее при движении по программе по G1, G2, G3 действуют свои ограничения скорости и ускорения (на той же картинке Axis Parameters),которые накладываются на глобальные, и уже здесь толчок (Jerk) не учитывается.
jog.jpg (48730 просмотров) <a class='original' href='./download/file.php?id=32977&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (252.32 КБ)</a>
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

6.Нахождение машинного нуля по датчику НОМЕ.
Чем мне нравится Кфлоп, так это тем, что при необходимости можно значительно нарастить его функциональность. У него практически неограниченные возможности, нужно только разобраться с логикой работы и научиться программировать на Си. :) Но и те примеры, что я здесь описываю, вполне работоспособны и для 90% применений достаточны.
Итак...
В самом простом случае, если концевые выключатели были подключены только к Кфлопу, и в силовую схему не включены, то их можно использовать в качестве датчиков НОМЕ.
Пусть они подключены следующим образом:
- Х+ - оптовход №0 пин 136;
- Х- - пин 137;
- Y+ - пин 138;
- Y- - пин 139;
- Z+ - пин 140;
- Z- - пин 141;
Создаём Си-файл с произвольным названием, у меня Home-KMotionCNC.c, и пишем в него код. Комментарии, думаю, помогут разобраться с алгоритмом:
(для просмотра содержимого нажмите на ссылку)

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

#include "KMotionDef.h"

int DoPC(int cmd);
int DoPCInt(int cmd, int i);
#define GATH_OFF 0  // define the offset into the Gather buffer where strings are passed

main()
{
      // поиск НОМЕ по Z
                       ch2->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Z, чтобы не блокировалась ось
            Jog(2,-20480);                            // перемещение оси Z в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(141)) ;               // ожидание срабатывания датчика по Z- пин 141
            Zero(2);                                    // обнуление координаты оси Z
            Jog(2,0);                              // остановка оси Z
            MoveAtVel(2,819, 20480);          // перемещение оси Z с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(2)) ;             // ожидание окончания движения оси Z
                                Jog(2,-10240);                           // повторное перемещение оси Z в отрицательном направлении на скорости 5% от максимальной 204800 имп/сек
            while (ReadBit(141)) ;               // ожидание срабатывания датчика по Z- пин 141
            Zero(2);                                    // обнуление координаты оси Z
            Jog(2,0);                              // остановка оси Z
            MoveAtVel(2,819, 20480);          // перемещение оси Z с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(2)) ;             // ожидание окончания движения оси Z
                                ch2->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Z,
            
            
         
      // поиск НОМЕ по Х      
                       ch0->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Х, чтобы не блокировалась ось
            Jog(0,-20480);                            // перемещение оси Х в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(137)) ;               // ожидание срабатывания датчика по Z-  пин 137
            Zero(0);                                    // обнуление координаты оси Х
            Jog(0,0);                              // остановка оси Х
            MoveAtVel(0,819, 20480);          // перемещение оси Х с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(0)) ;             // ожидание окончания движения оси Х
                                Jog(0,-10240);                            // повторное перемещение оси Х в отрицательном направлении на скорости 5% от максимальной 204800 имп/сек
            while (ReadBit(137)) ;               // ожидание срабатывания датчика по Z- пин 137
            Zero(0);                                    // обнуление координаты оси Х
            Jog(0,0);                              // остановка оси Х
            MoveAtVel(0,819, 20480);          // перемещение оси Х с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(0)) ;             // ожидание окончания движения оси Х
                                ch0->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Х,
            
            
                 // поиск НОМЕ по Y      
                       ch1->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Y, чтобы не блокировалась ось
            Jog(1,-20480);                            // перемещение оси Y в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(139)) ;                // ожидание срабатывания датчика по Y- пин 139
            Zero(1);                                    // обнуление координаты оси Y
            Jog(1,0);                              // остановка оси Y
            MoveAtVel(1,819, 20480);          // перемещение оси Y с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(1)) ;             // ожидание окончания движения оси Y
                                Jog(1,-10240);                            // повторное перемещение оси Y в отрицательном направлении на скорости 5% от максимальной 204800 имп/сек
            while (ReadBit(139)) ;               // ожидание срабатывания датчика по Y- пин 139
            Zero(1);                                    // обнуление координаты оси Y
            Jog(1,0);                              // остановка оси Y
            MoveAtVel(1,819, 20480);          // перемещение оси Y с датчика в позицию 819 имп (это примерно 1мм для примера выше) на скорости 20480имп/сек
            while (!CheckDone(1)) ;             // ожидание окончания движения оси Y
                                ch1->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Y,

            

            MDI("G92.1");  // очистка всех действующих оффсетов
}

//далее код обеспечивающий ввод команды в MDI

// put the MDI string (Manual Data Input - GCode) in the 
// gather buffer and tell the App where it is
int MDI(char *s)
{
   char *p=(char *)gather_buffer+GATH_OFF*sizeof(int);
   int i;
   
   do // copy to gather buffer w offset 0
   {
      *p++ = *s++;
   }while (s[-1]);
   
   // issue the command an wait till it is complete
   // (or an error - such as busy)
   return DoPCInt(PC_COMM_MDI,GATH_OFF);
}


// Put an integer as a parameter and pass the command to the App
int DoPCInt(int cmd, int i)
{
   int result;
   persist.UserData[PC_COMM_PERSIST+1] = i;
   return DoPC(cmd);
}

// Pass a command to the PC and wait for it to handshake
// that it was received by either clearing the command
// or changing it to a negative error code
int DoPC(int cmd)
{
   int result;
   
   persist.UserData[PC_COMM_PERSIST]=cmd;
   
   do
   {
      WaitNextTimeSlice();   
   }while (result=persist.UserData[PC_COMM_PERSIST]>0);
   
   return result;
   }
Далее, нужно в программе КмоушнСНС создать кнопку, например НОМЕ :D , как ранее была создана INIT, и на нее назначить выполнение Си-файла Home-KMotionCNC.c.

Для более точного позиционирования, можно и нужно использовать индексные метки с энкодеров, они же сигналы РСО/*РСО.
Заведены на каналы:
- Xi - 36
- Yi - 37
- Zi - 38
home.jpg (48657 просмотров) <a class='original' href='./download/file.php?id=33092&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (328.26 КБ)</a>
Тогда код немного измениться:
(для просмотра содержимого нажмите на ссылку)

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

#include "KMotionDef.h"

int DoPC(int cmd);
int DoPCInt(int cmd, int i);
#define GATH_OFF 0  // define the offset into the Gather buffer where strings are passed

main()
{

//определяем пины для индексных меток, как ВХОД

SetBitDirection(36,0); // для оси Х
SetBitDirection(37,0); // для оси Y
SetBitDirection(38,0); // для оси Z

      // поиск НОМЕ по Z
                       ch2->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Z, чтобы не блокировалась ось
            Jog(2,-20480);                            // перемещение оси Z в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(141)) ;               // ожидание срабатывания датчика по Z-  пин 141 - пропадание сигнала
            Zero(2);                                    // обнуление координаты оси Z
            Jog(2,0);                              // остановка оси Z
            Jog(2,10240);                            // перемещение оси Z в положительном направлении на скорости 5% от максимальной 204800 имп/сек
            while (!ReadBit(38)) ;               // ожидание срабатывания индексной метки по Z-  пин 38 - появление сигнала
            Zero(2);                                    // обнуление координаты оси Z
            Jog(2,0);                              // остановка оси Z
                                ch2->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Z,
            
            
         
      // поиск НОМЕ по Х      
                       ch0->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Х, чтобы не блокировалась ось
            Jog(0,-20480);                            // перемещение оси Х в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(137)) ;               // ожидание срабатывания датчика по Z-  пин 137  - пропадание сигнала
            Zero(0);                                    // обнуление координаты оси Х
            Jog(0,0);                              // остановка оси Х
            Jog(0,10240);                            // перемещение оси Х в положительном направлении на скорости 5% от максимальной 204800 имп/сек
            while (!ReadBit(36)) ;                 // ожидание срабатывания индексной метки по Х-  пин 36 - появление сигнала
            Zero(0);                                    // обнуление координаты оси Х
            Jog(0,0);                              // остановка оси Х
                                ch0->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Х,
            
            
                 // поиск НОМЕ по Y      
                       ch1->LimitSwitchOptions=0x100; // отключение обработки концевого датчика на оси Y, чтобы не блокировалась ось
            Jog(1,-20480);                            // перемещение оси Y в отрицательном направлении на скорости 10% от максимальной 204800 имп/сек
            while (ReadBit(139)) ;               // ожидание срабатывания датчика по Y- пин 139
            Zero(1);                                    // обнуление координаты оси Y
            Jog(1,0);                              // остановка оси Y
            Jog(1,10240);                            // перемещение оси Y в положительном направлении на скорости 5% от максимальной 204800 имп/сек
            while (!ReadBit(37)) ;                 // ожидание срабатывания индексной метки по Y-  пин 37 - появление сигнала
            Zero(1);                                    // обнуление координаты оси Y
            Jog(1,0);                              // остановка оси Y
                                ch1->LimitSwitchOptions=0x103;// включение обработки концевого датчика на оси Y,

            

            MDI("G92.1");  // очистка всех действующих оффсетов
}

//далее код обеспечивающий ввод команды в MDI

// put the MDI string (Manual Data Input - GCode) in the 
// gather buffer and tell the App where it is
int MDI(char *s)
{
   char *p=(char *)gather_buffer+GATH_OFF*sizeof(int);
   int i;
   
   do // copy to gather buffer w offset 0
   {
      *p++ = *s++;
   }while (s[-1]);
   
   // issue the command an wait till it is complete
   // (or an error - such as busy)
   return DoPCInt(PC_COMM_MDI,GATH_OFF);
}


// Put an integer as a parameter and pass the command to the App
int DoPCInt(int cmd, int i)
{
   int result;
   persist.UserData[PC_COMM_PERSIST+1] = i;
   return DoPC(cmd);
}

// Pass a command to the PC and wait for it to handshake
// that it was received by either clearing the command
// or changing it to a negative error code
int DoPC(int cmd)
{
   int result;
   
   persist.UserData[PC_COMM_PERSIST]=cmd;
   
   do
   {
      WaitNextTimeSlice();   
   }while (result=persist.UserData[PC_COMM_PERSIST]>0);
   
   return result;
   }
Если концевики включены в силовую схему, то для НОМЕ нужно дополнительно ставить 3 датчика возле отрицательных лимитов. Но в таком случае, нужно будет сделать или купить платку с оптоизолированными входами, т.к. у Каналога их всего 8шт. :) Думаю, что для того, кто сможет разобраться с подключением концевиков в силовой схеме, это не будет препятствием.
Код будет такой же, как в последнем случае с индексными метками, только номера пинов нужно изменить.
Впрочем, при желании, можно поизвращаться, :hehehe: и сделать алгоритм поиска НОМЕ совсем интересным, например, можно искать индексную метку с разных направлений и вычислять среднее. Или несколько раз наезжать на метку и вычислять среднее, или ещё какое. :hehehe: Всё зависит от вашей фантазии или потребностей. ;)
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

7. Управление шпинделем.
Станок уже двигает осями, знает свои координаты и более-менее безопасный. Осталось переложить на него еще одну свою работу - включение шпинделя и регулировку его оборотов. :hehehe:
На самом деле, для широко распространенных асинхронных мотор-шпинделей под управлением частотником, всё довольно просто.
Сразу оговорюсь, в примере частотник Текорп - для вашего случая могут быть отличия, но принцип тот же.
На частотник подаем аналоговый сигнал регулировки оборотов 10В, канал DAC7, и для его включения используем оптоизолированный выход №1 пин 145, который замыкает входы частотника Старт и Вперед на землю.
spindle.jpg (48641 просмотр) <a class='original' href='./download/file.php?id=33094&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (280.26 КБ)</a>
В программе КмоушнСНС прописываем действия на коды М3 (вкл. шпинделя по часовой стрелке), М5 (откл. шпинделя) и S (скорость вращения шпинделя):
1. - включить шпиндель замкнув выход 145;
2. -выключить шпиндель разомкнув выход 145;
3. - диапозон регулировки оборотов от 0 до 2047, т.е. от 0 до 10В, с шагом 2047/24 000 = 0,085. Это если макс. обороты шпинделя 24 000 об/мин.
spindle1.jpg (48641 просмотр) <a class='original' href='./download/file.php?id=33096&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (295.04 КБ)</a>
Всё, теперь шпиндель будет управляться по G-кодам и кнопками на панели программы. ;)
Не помешает добавить код безопасности: в случае если хоть одна ось будет отключена, то и шпиндель выключиться. Для этого в файл инициализации добавляем пару строк в код отключения приводов:

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

SetBitDirection(144,1);
        for (;;)  //loop forever
   {
       WaitNextTimeSlice();
         if (ch0->Enable &&  ch1->Enable  && ch2->Enable)         
         SetBit(144);           
         else
         ClearBit(144);
         DAC(7,0); // остановить шпиндель, установив напряжение в 0
         ClearBit(145); // отключить шпиндель, разомкнув выход 145
    }
По такому же принципу делается включение СОЖ, пылесоса и т.д. Плюс к этому, можно создавать свои М-коды от М100 до М119, с разными способами их реализации.
M-code.jpg (48641 просмотр) <a class='original' href='./download/file.php?id=33097&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (455.26 КБ)</a>
На этом экспресс настройку можно считать законченной. :)
Теперь я не против ваших комментариев и предложений в теме. Наиболее интересные примеры буду оформлять, как главы. Глядишь, так сообща и реализуем полноценную ЧПУ стойку. ;)
Аватара пользователя
tooshka
Почётный участник
Почётный участник
Сообщения: 1803
Зарегистрирован: 24 окт 2012, 14:26
Репутация: 209
Настоящее имя: Андрей
Откуда: Нижний Новгород
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение tooshka »

Отличная статья!!!
Милая, ты услышь меня
под окном стою со своим я ЧПУ! (Протяжно; с надрывом; форте)
Внимание!!! Чрезмерное увлечение ЧПУ приводит к проблемам в семейных отношениях!
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

8. Обработка сигнала ошибки привода Alm.

Если привод по каким либо причинам уходит в ошибку, то правильно будет, чтобы контроллер её фиксировал и обрабатывал (как было замечено выше). ;)
Всё довольно просто. Выход привода Alm действует, как переключатель. Т.е. в рабочем состоянии выводы Alm и Alm-Sg между собой замкнуты, а при ошибке привода разомкнуты.
Соединяется всё по такой схеме. Для нескольких приводов выводы Alm и Alm-Sg соединяются последовательно.
alarm.jpg (48523 просмотра) <a class='original' href='./download/file.php?id=33240&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (287.06 КБ)</a>
Далее, в файле инициализации в бесконечном цикле for (;;) , нужно добавить код:

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

		if (!ReadBit(137))  // если пропадет сигнал (знак !) на пине 137
		{
			StopCoordinatedMotion();  //встать на паузу
		}
При таком способе координаты не должны сбиваться.
konstantinshr писал(а):как завести сигнал аларм с усилка на каналог. По совету фуромчан концевики запитал на усилки. И тепер кфлоп останавливается при достижении предельной ошибки. А хотелось бы чтобы он вставал на паузу (чтобы можно было отвести вручную ось и не сбивались координаты.)
Отпишитесь о результатах. Раньше не делал так, самому интересно. :hehehe:
П.С. Хотелось бы, чтобы пользователи, которые сами добавили себе какую либо функциональность, не освещенную мной, отписывались бы в этой теме. Для пользы остальных участников форума.
konstantinshr
Мастер
Сообщения: 226
Зарегистрирован: 04 авг 2013, 17:05
Репутация: 43
Откуда: Новороссийск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение konstantinshr »

При поиске дома по индексной метке обнуляются и станочные и рабочие координаты. Как сделать чтобы обнулялись только станочные.
И в схеме подключения анейбл по моему перепутаны провода минус с плюсом.
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

konstantinshr писал(а):И в схеме подключения анейбл по моему перепутаны провода минус с плюсом.
Верно замечено! :hehehe: Сразу видно, человек своими руками схему прощупал.
konstantinshr писал(а):При поиске дома по индексной метке обнуляются и станочные и рабочие координаты. Как сделать чтобы обнулялись только станочные.
Честно говоря не знаю.
А смысл? Не могу представить себе, чтобы это понадобилось. :thinking: :wik:
Дмитро
Почётный участник
Почётный участник
Сообщения: 1060
Зарегистрирован: 14 сен 2013, 01:20
Репутация: 1139
Настоящее имя: Дмитрий
Откуда: Киев

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение Дмитро »

konstantinshr писал(а):Как сделать чтобы обнулялись только станочные.
В 0 заготовки (детали) нужно нажать set в fixture offset (предварительно выбрав нужную систему координат G54-G59), а не zero. И желательно сохранить, кнопочка save в fixture offset.
А также задавать в начале программы G54-G59
Если ошибаюсь, поправьте.

fixture offset_1.jpg (48115 просмотров) <a class='original' href='./download/file.php?id=34063&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (441.35 КБ)</a>
fixture offset_2.jpg (48115 просмотров) <a class='original' href='./download/file.php?id=34064&sid=42662039d94bf00437a6f3c5b2313a1c&mode=view' target=_blank>Загрузить оригинал (128.07 КБ)</a>
Аватара пользователя
mycnc
Мастер
Сообщения: 913
Зарегистрирован: 03 июл 2011, 02:01
Репутация: 623
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение mycnc »

ukr-sasha писал(а):
konstantinshr писал(а):При поиске дома по индексной метке обнуляются и станочные и рабочие координаты. Как сделать чтобы обнулялись только станочные.
Честно говоря не знаю.
А смысл? Не могу представить себе, чтобы это понадобилось. :thinking: :wik:
Представьте сбой машины на середине программы и последующий хоуминг.
- если сохранились оффсеты между рабочими и машинными координатами, то есть шанс продолжить резку и доделать деталь.
- если программные координаты сбросились - деталь почти наверняка в брак.
konstantinshr
Мастер
Сообщения: 226
Зарегистрирован: 04 авг 2013, 17:05
Репутация: 43
Откуда: Новороссийск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение konstantinshr »

mycnc писал(а):
ukr-sasha писал(а): Представьте сбой машины на середине программы и последующий хоуминг.
- если сохранились оффсеты между рабочими и машинными координатами, то есть шанс продолжить резку и доделать деталь.
- если программные координаты сбросились - деталь почти наверняка в брак.
Я тоже это имел ввиду. Привык что в Маче рабочие координаты не обнуляются и при сбое можно после хоуминга продолжить работу. Попробую разобраться с офсетеми.
И как с ними работать при сбое. Мне надо отправить станок в рабочий ноль после сбоя и как это сделать. :thinking: Кстати у флопа есть такая кнопка go to zero?
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение ukr-sasha »

Shishio Makoto писал(а):В 0 заготовки (детали) нужно нажать set в fixture offset (предварительно выбрав нужную систему координат G54-G59), а не zero. И желательно сохранить, кнопочка save в fixture offset.
А также задавать в начале программы G54-G59
Думаю это правильный путь. Спасибо. :good:
konstantinshr писал(а):Мне надо отправить станок в рабочий ноль после сбоя и как это сделать. Кстати у флопа есть такая кнопка go to zero?
Нужно её написать. :)
konstantinshr
Мастер
Сообщения: 226
Зарегистрирован: 04 авг 2013, 17:05
Репутация: 43
Откуда: Новороссийск
Контактная информация:

Re: Ввод в эксплуатацию ЧПУ системы на основе контроллера Kf

Сообщение konstantinshr »

Попробовал с offset. Оказывается если записать координаты в offset то при обнулении рабочие координаты не обнуляются!!!
Еще одно чтобы с панели заработали кнопки М3 и М5 надо еще дополнительно перейти в Tool Setup затем на вкладке User Buttons прописать эти кнопки так же как и в вкладке Мкодов.
Последний раз редактировалось konstantinshr 30 сен 2014, 17:05, всего редактировалось 1 раз.
Ответить

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