ЧПУ пульты

Контроллеры, драйверы, датчики, управляющие устройства.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Impartial писал(а):А вот если задержки в микросекундах, то это серьезные для шаговика скорости (~200 - 20000) шагов,полушагов,микрошагов (смотря какой драйвер).
Разгоняется плавно(мож конечно не с нуля) и примерно до 200 об/мин.
Драйвера обычно покупаю такие: http://www.ebay.com/sch/i.html?_from=R4 ... Categories

Вот с разгоном у меня засада.
Надо попробовать на STM32 написать управление шаговым. Подключить построечный резистор(джостик) и чтоб от него крутило шаговик.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

aftaev писал(а):Вот с разгоном у меня засада.
Не пойму что ты подразумеваешь под разгоном.
Разгон/торможение это и есть ускорения со знаком плюс или минус. А ускорение это изменение скорости в единицу времени.
Если будешь использовать резисторный джойстик, то это будет автоматически.
Если хочешь состыковать это с ЕМС или Мачем, то в ручном режиме все равно нет смысла вычислять ускорения. Ускорение будет зависеть от того, с какой скоростью будешь перемещать ручку джойстика. В ЕМС ускорения расчитываются даже не в ХАЛе а в мотион подсистеме самой ЕМС. Параметры задаются в начале запуска и в процессе работы поменять их нельзя.
Поэтому управлять джойстиком станком через ЕМС можно только на уровне ХАЛ передав параметр скорости в, например, компонент степген, ну или ПИД, не забыв при этом переключать входа ХАЛ компонентов с ЕМС на пульт. Задача в общем не сложная, но попотеть придется.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЧПУ пульты

Сообщение Nick »

Насколько я понимаю Aftaev хочет сделать пульт который сможет управлять станков без EMC/Mach.
Ускорения и скорость надо как-то задавать в настройках контроллера.

Афтаев, вопрос к тебе такой, как ты хочешь управлять шаговиком с пульта, в режиме скорости или в режиме положения? Т.е. едем пока крутим колесо (оттянули джойстик), или открутили колесо на 100 единиц - уехали на 100мм (с джойстиком это не совсем совместимо).
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Impartial писал(а):Ускорение будет зависеть от того, с какой скоростью будешь перемещать ручку джойстика.
Допустим максимальная скорость станка 15м/мин с нелегким порталом . Если джойстиком резко шевельнуть, думаю пропуски шагов и неприятный звук из шаговго обеспечен.
Impartial писал(а):Параметры задаются в начале запуска и в процессе работы поменять их нельзя.
Не нужно их менять в ходе работы. В настройках один раз задали:
1. сколько импульсов/мм
2. максимальное ускорение станка
3. максимальная скорость.
Джойстик не управляет ускорением, управляет только скоростью перемещения F.
Приведу пример на частотнике для асинхронного двига. В частотнике задаем разгон(ускорение) двигателя в параметрах. Когда работает частотник их не поменять. Включаем частотник и построечным резистором меняем частоту(обороты двигателя). Как быстро не крути подстроечник разгон будет тот что прописан в параметрах.

То есть отклонили джойстик влево на 10% скорость 100м/мин, отклонили еще на 30% скорость 300м/мин. Резко отклонили джойстик шаговый ускоряется, потом выходит на заданную скорость.
Отпустили джойстик он встал в ноль скорость сбрасывается плавно до 0. Ведь если резко сбросить скорость шаговику это не понравиться.
Это хорошо видно в Маче например когда ускорение стоит небольшое. Нажали кнопку влево портал медленно разгоняется(ускоряется), потом выходит на заданную скорость. Кнопку отпускаем портал не колом останавливается, а плавно останавливается.
Все это видно в настройках Мача в графике:
Мач разгон.JPG (2549 просмотров) <a class='original' href='./download/file.php?id=5143&mode=view' target=_blank>Загрузить оригинал (54.17 КБ)</a>
Nick писал(а):Насколько я понимаю Aftaev хочет сделать пульт который сможет управлять станков без EMC/Mach.
Правильно и не совсем!
Можно сделать так чтоб пульт мог выдавать степ/дир для управления станком без ЕМС/Мач и выдавать сигналы для "общения" с Мач/ЕМС.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Nick то что ты спрашиваешь интересно. Попробую объяснить :)
Nick писал(а):Афтаев, вопрос к тебе такой, как ты хочешь управлять шаговиком с пульта, в режиме скорости или в режиме положения? Т.е. едем пока крутим колесо (оттянули джойстик),
Имеем несколько режимов(режимы переключаем на экране:
1. Режим постоянного перемещения. То есть чем сильнее отклоняем джойстик тем быстрее едим. Это нужно чтоб примерно подъехать туды куды нужно.
2. Режим постоянной скорости.Пока держим джойстик ось едит. Неважно на сколько отклоняем джойстик скорость будет та что задана на экране в параметра F. Это нужно например чтоб прорезать фрезой линию.
3. Режим степ. Работает как триггер, отклонили джойстик ось проехала и стоит, пока джойстик не вернем в ноль. То есть чтоб ехать в режиме степ нужно дергать джойстик. Получается будем шагать с заданным шагом.
Имеет несколько режимов.
а. 10мм отклонили джойстик ось проедите на 10мм со скоростью F
b. 1мм отклонили джойстик ось проедите на 1мм со скоростью F
c. 0,1мм отклонили джойстик ось проедите на 0,1мм со скоростью F
d ...

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

Re: ЧПУ пульты

Сообщение Nick »

aftaev писал(а):Nick писал(а):или открутили колесо на 100 единиц - уехали на 100мм (с джойстиком это не совсем совместимо).
а с какой скоростью ?
С максимальной или F. Т.е. чтобы крутилка была как лимб на станке.

-----
В принципе, все понятно... не понятно, только откуда у тебя
"Вот с разгоном у меня засада." :)
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Nick писал(а):С максимальной или F
большой разницы нет пусть будет со скоростью F
Nick писал(а):"Вот с разгоном у меня засада."
когда в школе проходили разгон(ускорение) шаговых я наверно прогуливал :)

Можно сделать по проще. Есть у меня станочек для испытаний с одной осью. Пришли джойстики. Есть СТМ32.
Если написать программку: чем сильнее отклоняем джойстик тем быстрее едим чтоб крутить шаговик. Тогда покажу на видео что получается :) А дальше по ходу пьесы будет понятно о чем я толкую :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Шаг №1

Нужна программа для СТМ32 чтоб выдавала на какой нибудь пин степ/дир. Крутим ось примерно 10 сек в одну сторону, потом крутим 10 сек в другую сторону. Я подключу к СТМ32 драйвер и шаговик и посмотрим что будет :) Выложу в виде видео.

Кусочек кода:
//поморгаем светодиодом
GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_2); //PB2 beep
GPIO_ResetBits(GPIOF,GPIO_Pin_7 | GPIO_Pin_9);
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

aftaev писал(а):Nick писал(а):
или открутили колесо на 100 единиц - уехали на 100мм (с джойстиком это не совсем совместимо).

а с какой скоростью ?
Абсолютно точное замечание! Ни один выходной драйвер, предназначенный для применения с ЕМС или Мач не управляется положением.
Все управляются только параметром "скорость", которая задается либо частотой степ, либо напряжением, либо скважностью ШИМ.
Для примера начальное положение Х=0,Y=0;
В первом кадре программы в Г коде X=100,Y=100.
Что делает ЕМС?
Первое - отдает задание интерполятору нарисовать линию из точки X=0,Y=0 до точки X=100,Y=100. Получим массив промежуточных точек.
Второе - этот массив отдается планировщику траектории. Вот тут и строится второй массив - массив скоростей от предыдущей точки к следующей, уже привязанный к заданным интервалам сервоцикла, максимальным скоростям и ускорениям.
Вот этот второй массив скоростей и есть постоянные скорости на периоде сервоцикла (1мс).
Дальше один раз в сервоцикл даем задание скорости(просто выводим элементы второго массива) на драйвера ( под драйверами подразумевается внутренние либо внешние компоненты степген или ПИД).
Для того чтобы заставить все это работать нужно подавать с пульта команды в Г коде и заставить ЕМС их глотать, отключившись от основной программы.
Очень занятная канитель, если попытаться реализовать.
Допустим максимальная скорость станка 15м/мин с нелегким порталом . Если джойстиком резко шевельнуть, думаю пропуски шагов и неприятный звук из шаговго обеспечен.
Самый простой вариант - резко не шевелить :)
Посложнее - написать что то типа планировщика траектории.
Нужна программа для СТМ32 чтоб выдавала на какой нибудь пин степ/дир.
Попробуй запустить то, что я выше написал, только пины поставь свои, не так как там, от балды :)
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Impartial писал(а):Очень занятная канитель, если попытаться реализовать.
Мы начали понимать друг друга :)
Impartial писал(а):Самый простой вариант - резко не шевелить
Забыл, как там у программистов говориться. Нужно писать программу так чтоб предвидеть все что может вытворить юзер :) А первое что он сделает это резко шевельнет :)
Impartial писал(а):Попробуй запустить то, что я выше написал, только пины поставь свои, не так как там, от балды
Выше это в каком посту?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: ЧПУ пульты

Сообщение aftaev »

Impartial писал(а):Что делает ЕМС?
Первое - отдает задание интерполятору нарисовать линию из точки X=0,Y=0 до точки X=100,Y=100. Получим массив промежуточных точек.
А как он делает такое: нажали стрелку влево ось ускоряется, выходит на нужную скорость. Отрастили кнопку ось замедляется. Ведь ЕМС не знает сколько ему нужно проехать!
Вот такое бы реализовать. Джойстик резко отклонили ось ускоряется выходит на скорость 100%, отпустили замедляется.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЧПУ пульты

Сообщение Nick »

Давайте залезем в дебри математики, и выведем формулы и напишем планировщик :):

итак, у нас есть:
max_a - максимальное ускорение, max_vel - максимальная скорость, pos_cmd - команда на положение, vel_cmd - команда на скорость, pos_fb - обратная связь по положению, vel - текущая скорость = выход скорости на генератор шагов, dt - время прошедшее с предыдущего цикла.

Предположим мы отклонили джойстик с командой на скорость:

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

if (vel_cmd != 0){
	// делаем проверку пределов скорости	
	if (vel_cmd>max_vel) {vel_cmd = max_vel;}
	if (vel_cmd<-max_vel) {vel_cmd = -max_vel;}


	if (vel<vel_cmd) { 
		vel += max_a*dt; 
		if (vel>vel_cmd) {vel = vel_cmd;}
	}
	else {
		vel -= max_a*dt; 
		if (vel<vel_cmd) {vel = vel_cmd;}
	}
	
	// маженький hack - если мы в режиме скорости, забываем команду положения 
	pos_cmd = 0;
}
else if (pos_cmd != 0 and ! ( pos_cmd_flag and pos_cmd+(fb-last_fb)==0  )  ) {
	// vel_cmd == 0 смотрим, что там с командой положения 
	// pos_cmd - относительное положение

	if (pos_cmd_flag)
	{pos_cmd = pos_cmd + (fb-last_fb);}

	// пытаемся максимально ускорится
	if (pos_cmd>0) {
	 	vel += max_a*dt; 
		if (vel>max_vel) {vel = max_vel;}
	}
	else {
		vel -= max_a*dt; 
		if (vel<-max_vel) {vel = -max_vel;}
	}
 
	// теперь ограничиваем сокрость, чтобы не проехать мимо: 
	// максимальная скорсть сближения  s = vt-at^2/2    t = v/a  
	// s = v^2/a - (v^2/a^2)*a/2 = v^2/a , т.е. v^2 = 2as
	// итак имеем:
	if( pos_cmd*vel>0 // проверяем, что едем в нужную сторону
		and 
		vel^2 > abs(pos_cmd*2*max_a) {
		// нужно начинать замедляться, поэтому ограничиваем скорсоть 
		if (vel > 0) {vel = sqrt( abs(pos_cmd*2*max_a) );}
		else {vel = -sqrt( abs(pos_cmd*2*max_a) );}
	}
	// наконец запоминаем последнее значение fb и устанавливаем флаг перемещения по положению
	last_fb = fb;
	pos_cmd_flag = true;
}
else { // мы уже приехали 
	pos_cmd_flag = false;
}
вроде просто. только есть одно вычисление корня при управлении положением.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

Nick писал(а):// маженький hack - если мы в режиме скорости, забываем команду положения
С положением нельзя так обращаться. Положение есть результат воздействия скорости.
Мы задаем скорость а получаем положение системы, фактически путь. Эти полученные отрезки пути и есть параметр по которому ЕМС определяет отсутствие или наличие ошибки позиционирования. Причем она их никак не обрабатывает - просто уходит в ошибку.
А как он делает такое: нажали стрелку влево ось ускоряется, выходит на нужную скорость. Отрастили кнопку ось замедляется. Ведь ЕМС не знает сколько ему нужно проехать!
Вот такое бы реализовать. Джойстик резко отклонили ось ускоряется выходит на скорость 100%, отпустили замедляется.
А как он такое делает? :)
Скорее всего такой трюк возможен только с одной выбранной осью.
Значит есть где то возможность, просто надо ее найти.
В любом случае надо сначала определиться как связать пульт и ЕМС.
Многие вопросы сами отвалятся.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЧПУ пульты

Сообщение Nick »

Impartial писал(а):С положением нельзя так обращаться. Положение есть результат воздействия скорости.Мы задаем скорость а получаем положение системы, фактически путь. Эти полученные отрезки пути и есть параметр по которому ЕМС определяет отсутствие или наличие ошибки позиционирования. Причем она их никак не обрабатывает - просто уходит в ошибку.
Этот хак нужен только для того, случая, когда мы едем в режиме положения и вдруг получили команду на скорость, в этом случае мы решаем, что команда на скорость более важная и считаем, что про команду на положение можно забыть.
Impartial писал(а):А как он такое делает? Скорее всего такой трюк возможен только с одной выбранной осью.Значит есть где то возможность, просто надо ее найти.
Не, все очень просто, нажал кнопку на оси появилась команда скорости vel=v, от пустил кнопку, на оси команда v=0, а ось постоянно следит за командой. Получается как только отпустили кнопку, текущая скорость v, нужная 0 => начинаем замедляться.
Все вроде просто. Или я не правильно понял, о чем вы говорите :)...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

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

Re: ЧПУ пульты

Сообщение Nick »

эммм на пульте, в emc или где? :)

Если делать через emc2, то нет никакого смысла писать прошивку в пульте, которая будет сама генерировать шаги, проще от пульта "сказать" отскроллить на столько-то.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

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

Re: ЧПУ пульты

Сообщение Nick »

вот сколько для этого пинов предусмотрено:
halui.jog.deadband float in - pin for setting jog analog deadband (jog analog inputs smaller/slower than this are ignored)
halui.jog-speed float in - pin for setting jog speed for plus/minus jogging.
halui.jog.N.analog float in - pin for jogging the axis N using an float value (e.g. joystick)
halui.jog.N.increment float in - pin for setting the jog increment for axis N when using increment-plus/minus
halui.jog.N.increment-minus float in - a rising edge will will make axis N jog in the negative direction by the increment amount
halui.jog.N.increment-plus float in - a rising edge will will make axis N jog in the positive direction by the increment amount
halui.jog.N.minus bit in - pin for jogging axis N in negative direction at the halui.jog-speed velocity
halui.jog.N.plus bit in - pin for jogging axis N in positive direction at the halui.jog-speed velocity
halui.jog.selected.increment float in - pin for setting the jog increment for the selected axis when using increment-plus/minus
halui.jog.selected.increment-minus float in - a rising edge will will make the selected axis jog in the negative direction by the increment amount
halui.jog.selected.increment-plus float in - a rising edge will will make the selected axis jog in the positive direction by the increment amount
halui.jog.selected.minus bit in - pin for jogging the selected axis in negative direction at the halui.jog-speed velocity
halui.jog.selected.plus - pin for jogging the selected axis bit in in positive direction at the halui.jog-speed velocity
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: ЧПУ пульты

Сообщение Impartial »

Nick писал(а):вот сколько для этого пинов предусмотрено:
halui.jog.deadband float in - pin for setting jog analog deadband (jog analog inputs smaller/slower than this are ignored)
Nick не издевайся :)
Лучше дорисуй цепочку (пульт->USB(Com)->???
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: ЧПУ пульты

Сообщение Nick »

пульт->USB(Com)->(python|c|whatever)->hal

пример на питоне: читаем из com скриптом, и потом этом же скрипте создаем компонент pult и пины

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

import hal, time 
h = hal.component("pult")
h.newpin("button", hal.HAL_BIT, hal.HAL_OUT)
и потом цикл

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

try:
	while 1:
		### read - сюда надо написать чтение из usb
		h["button"] = read["button"]
except KeyboardInterrupt:
	raise SystemExit
все :)
Ответить

Вернуться в «Электроника»