перепрограммировать серву на эл магнит в Ардуино

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
artclonic
Мастер
Сообщения: 565
Зарегистрирован: 07 июн 2014, 12:40
Репутация: 36
Контактная информация:

перепрограммировать серву на эл магнит в Ардуино

Сообщение artclonic »

Добрый день. Построил "рисовалку" состоящую из двух шаговых двигателей и сервопривода для подъема/опускания карандаша. Ардуино мега + рампс. (Полный комплект от 3 Д принтера).Есть прошивка уже написанная. Хотелось бы внести в нее изменения..
В моей конструкции хочу заменить серву на эл. магнит.
Рисовалка работает на G кодах ЧПУ... X Y Z
Серва опускалась при изменении Z. А я хочу конструктивно изменить опускания карандаша - заменив привод на эл. магнит. Т.е. (к примеру) команда G01 Z10 - включит, команда G01 Z0 - выключит.
Эл. магнит желательно запитать от "стола горячего" (это на примере 3Д принтера)
Подскажите как это реализовать?

А может можно использовать пины сервы и настроить как то на их замыкание и размыкание через определенное время!
Уже все завязано с командой по Z! Может можно задать виртуально поворот сервы на некий градус, который бы соответсвовал подачи тока, и наоборот в минус градус - отключилось?
Наверстываем... в электронике...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение nkp »

artclonic писал(а):Т.е. (к примеру) команда G01 Z10 - включит, команда G01 Z0 - выключит.
наверно удобней будут :

G01 Z10 - включить
G01 Z-10 - выключить
пин Dir будет управлять магнитом...
Аватара пользователя
artclonic
Мастер
Сообщения: 565
Зарегистрирован: 07 июн 2014, 12:40
Репутация: 36
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение artclonic »

nkp писал(а):пин Dir будет управлять магнитом...
В прошивке нет управления осью Z Вернее она есть, но как я понял управляется только сервой, установленной на оси Z
Вложения
firmware_Mega.zip
(23.71 КБ) 288 скачиваний
Наверстываем... в электронике...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение aftaev »

artclonic писал(а):настроить как то на их замыкание и размыкание через определенное время!
а это время где должно будет задаваться?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
artclonic
Мастер
Сообщения: 565
Зарегистрирован: 07 июн 2014, 12:40
Репутация: 36
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение artclonic »

Я точно не знаю сам... Наверное знал бы не спрашивал... Советуюсь на форумах ардуино - вообще ни кто не отвечает...
Мож кто нибудь из здешних поможет. Всю электронику и механику собрал... Пробывал на прошивке от 3 Д принтера Марлин -не понравилось
Вот теперь хочу вернуться к софту Микеланджело (офицал) но серву надо на эл магнит заменить... как то...
Наверстываем... в электронике...
Аватара пользователя
artclonic
Мастер
Сообщения: 565
Зарегистрирован: 07 июн 2014, 12:40
Репутация: 36
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение artclonic »

Вот может этот вариант более легко осуществить?
Если в строке кода - "R1", то тогда
digitalWrite(65, HIGH); // включаем эл. магнит.
Если в строке кода - "R0", то тогда
digitalWrite(65, LOW); // выключаем эл. магнит

т.е. на пин номер 65 Рампса его прикрутить.

Только куда это все в код вставить...?


P.S. Еще немного и я наверное механическое реле из сервы сделаю для вкл/выкл соленойда... (но это полная хрень)
Наверстываем... в электронике...
tecnocat
Опытный
Сообщения: 101
Зарегистрирован: 09 июн 2014, 08:07
Репутация: 39
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение tecnocat »

В файле firmware_Mega.ino находишь следующие строки

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

// plotter position.
float posx, posy, posz;  // pen state
float feed_rate=DEFAULT_FEEDRATE;
float acceleration=DEFAULT_ACCELERATION;
Добавляешь

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

float coil = 0;
дальше ищешь

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

  cmd=parsenumber('G',-1);
  switch(cmd) {
  case 0:
  case 1: {  // line
после // line начинается обработчик команды G01

пишешь туда это:

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

  cmd=parsenumber('G',-1);
  switch(cmd) {
  case 0:
  case 1: {  // line
      Vector3 offset=get_end_plus_offset();
      acceleration = min(max(parsenumber('A',acceleration),1),2000);
	  //---- G01 R1 --- Enable coil
	  if (parsenumber('R',coil) = 1){
		digitalWrite(65, HIGH); 		
		break;
	  }
	  //---- G01 R0 --- Disable coil
	  if (parsenumber('R',coil) = 0){
		digitalWrite(65, LOW);		
		break;
	  }
	  // end Coil code
	  line_safe( parsenumber('X',(absolute_mode?offset.x:0)*10)*0.1 + (absolute_mode?0:offset.x),
                 parsenumber('Y',(absolute_mode?offset.y:0)*10)*0.1 + (absolute_mode?0:offset.y),
                 parsenumber('Z',(absolute_mode?offset.z:0)) + (absolute_mode?0:offset.z),
                 parsenumber('F',feed_rate) );
      break;
    }
как то так - код писал в слепую - проверь и скажи - получилось или нет.

еще раскинув мозгами об стенку - подумал что команды G01 R0 и G01 R1 не шибко удобные - решил переделать так

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

  //---- работа как отдельной команды типа M8 или G01
  //---- R1 --- Enable coil
  if (parsenumber('R',coil) = 1){
	digitalWrite(65, HIGH); 		
	break;
  }
  //---- R0 --- Disable coil
  if (parsenumber('R',coil) = 0){
	digitalWrite(65, LOW);		
	break;
  }
  // end Coil code


  cmd=parsenumber('G',-1);
  switch(cmd) {
  case 0:
  case 1: {  // line
      Vector3 offset=get_end_plus_offset();
      acceleration = min(max(parsenumber('A',acceleration),1),2000);
	  line_safe( parsenumber('X',(absolute_mode?offset.x:0)*10)*0.1 + (absolute_mode?0:offset.x),
                 parsenumber('Y',(absolute_mode?offset.y:0)*10)*0.1 + (absolute_mode?0:offset.y),
                 parsenumber('Z',(absolute_mode?offset.z:0)) + (absolute_mode?0:offset.z),
                 parsenumber('F',feed_rate) );
      break;
    }
Аватара пользователя
artclonic
Мастер
Сообщения: 565
Зарегистрирован: 07 июн 2014, 12:40
Репутация: 36
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение artclonic »

Завтра заведу ацкую машинку! Буду пробывать! Есть еще момент... Без времени длительности включения соленойда и времени(паузы) после отключения вся система не будет работать. В первом случае - просто не будет успевать отрабатывать эл магнит, а потом моментально следующая команда... Я это на Марлине понял -долго эксперементировал и эти два времени подбирал. И еще команду "R" на "Z" мне думаю не проблема поменять, правда же?
Наверстываем... в электронике...
tecnocat
Опытный
Сообщения: 101
Зарегистрирован: 09 июн 2014, 08:07
Репутация: 39
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение tecnocat »

А зачем задержка нужна - не понимаю - подал напряжение на ногу контроллера - оно там держится пока не сбросишь.
Таким макаром у меня старинный китайский плоттер работает - там не G-коды,
DM/PL язык попроще:
U 10.00 10.00 // проехать до координат 10.00 10.00 с поднятым пером
D 20.00 20.00 // проехать до координат 20.00 20.00 с опущенным пером
тут будет примерно так же:
G01 X100.00 Y100.00 Z10.00 // проехать до координат 100.00 100.00 с поднятым пером
G01 X200.00 Y200.00 Z0.00 // проехать до координат 200.00 200.00 с опущенным пером

правда код обработчика будет выглядеть так

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

  cmd=parsenumber('G',-1);
  switch(cmd) {
  case 0:
  case 1: {  // line
      Vector3 offset=get_end_plus_offset();
      acceleration = min(max(parsenumber('A',acceleration),1),2000);
     //---- G01 Z10 --- Enable coil
     if (parsenumber('Z',coil) > 9){
      digitalWrite(65, HIGH);       
      break;
     }
     //---- G01 Z0 --- Disable coil
     if (parsenumber('Z',coil) = 0){
      digitalWrite(65, LOW);      
      break;
     }
     // end Coil code
     line_safe( parsenumber('X',(absolute_mode?offset.x:0)*10)*0.1 + (absolute_mode?0:offset.x),
                 parsenumber('Y',(absolute_mode?offset.y:0)*10)*0.1 + (absolute_mode?0:offset.y),
                 parsenumber('Z',(absolute_mode?offset.z:0)) + (absolute_mode?0:offset.z),
                 parsenumber('F',feed_rate) );
      break;
    }
Аватара пользователя
selenur
Почётный участник
Почётный участник
Сообщения: 4605
Зарегистрирован: 21 авг 2013, 19:44
Репутация: 1622
Настоящее имя: Сергей
Откуда: Новый Уренгой
Контактная информация:

Re: перепрограммировать серву на эл магнит в Ардуино

Сообщение selenur »

tecnocat писал(а): ..................
тут будет примерно так же:
G01 X100.00 Y100.00 Z10.00 // проехать до координат 100.00 100.00 с поднятым пером
G01 X200.00 Y200.00 Z0.00 // проехать до координат 200.00 200.00 с опущенным пером
Правильнее так:
G01 X100.00 Y100.00 Z10.00 // проехать до координат 100.00 100.00 с поднятым пером
G01 Z0.00 // <-- вначале нужно опустить перо на высоту реза, без этой команды нож будет в нуле по Z, когда "XY" уже будут равны 200
G01 X200.00 Y200.00 Z0.00 // проехать до координат 200.00 200.00 с опущенным пером
Мой сайт: http://selenur.ru
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/
Ответить

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