перепрограммировать серву на эл магнит в Ардуино
- artclonic
- Мастер
- Сообщения: 565
- Зарегистрирован: 07 июн 2014, 12:40
- Репутация: 36
- Контактная информация:
перепрограммировать серву на эл магнит в Ардуино
Добрый день. Построил "рисовалку" состоящую из двух шаговых двигателей и сервопривода для подъема/опускания карандаша. Ардуино мега + рампс. (Полный комплект от 3 Д принтера).Есть прошивка уже написанная. Хотелось бы внести в нее изменения..
В моей конструкции хочу заменить серву на эл. магнит.
Рисовалка работает на G кодах ЧПУ... X Y Z
Серва опускалась при изменении Z. А я хочу конструктивно изменить опускания карандаша - заменив привод на эл. магнит. Т.е. (к примеру) команда G01 Z10 - включит, команда G01 Z0 - выключит.
Эл. магнит желательно запитать от "стола горячего" (это на примере 3Д принтера)
Подскажите как это реализовать?
А может можно использовать пины сервы и настроить как то на их замыкание и размыкание через определенное время!
Уже все завязано с командой по Z! Может можно задать виртуально поворот сервы на некий градус, который бы соответсвовал подачи тока, и наоборот в минус градус - отключилось?
В моей конструкции хочу заменить серву на эл. магнит.
Рисовалка работает на G кодах ЧПУ... X Y Z
Серва опускалась при изменении Z. А я хочу конструктивно изменить опускания карандаша - заменив привод на эл. магнит. Т.е. (к примеру) команда G01 Z10 - включит, команда G01 Z0 - выключит.
Эл. магнит желательно запитать от "стола горячего" (это на примере 3Д принтера)
Подскажите как это реализовать?
А может можно использовать пины сервы и настроить как то на их замыкание и размыкание через определенное время!
Уже все завязано с командой по Z! Может можно задать виртуально поворот сервы на некий градус, который бы соответсвовал подачи тока, и наоборот в минус градус - отключилось?
Наверстываем... в электронике...
-
nkp
- Мастер
- Сообщения: 8340
- Зарегистрирован: 28 ноя 2011, 00:25
- Репутация: 1589
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
наверно удобней будут :artclonic писал(а):Т.е. (к примеру) команда G01 Z10 - включит, команда G01 Z0 - выключит.
G01 Z10 - включить
G01 Z-10 - выключить
пин Dir будет управлять магнитом...
- artclonic
- Мастер
- Сообщения: 565
- Зарегистрирован: 07 июн 2014, 12:40
- Репутация: 36
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
В прошивке нет управления осью Z Вернее она есть, но как я понял управляется только сервой, установленной на оси Znkp писал(а):пин Dir будет управлять магнитом...
- Вложения
-
- firmware_Mega.zip
- (23.71 КБ) 288 скачиваний
Наверстываем... в электронике...
-
aftaev
- Зачётный участник

- Сообщения: 34042
- Зарегистрирован: 04 апр 2010, 19:22
- Репутация: 6194
- Откуда: Казахстан.
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
а это время где должно будет задаваться?artclonic писал(а):настроить как то на их замыкание и размыкание через определенное время!
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
- artclonic
- Мастер
- Сообщения: 565
- Зарегистрирован: 07 июн 2014, 12:40
- Репутация: 36
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
Я точно не знаю сам... Наверное знал бы не спрашивал... Советуюсь на форумах ардуино - вообще ни кто не отвечает...
Мож кто нибудь из здешних поможет. Всю электронику и механику собрал... Пробывал на прошивке от 3 Д принтера Марлин -не понравилось
Вот теперь хочу вернуться к софту Микеланджело (офицал) но серву надо на эл магнит заменить... как то...
Мож кто нибудь из здешних поможет. Всю электронику и механику собрал... Пробывал на прошивке от 3 Д принтера Марлин -не понравилось
Вот теперь хочу вернуться к софту Микеланджело (офицал) но серву надо на эл магнит заменить... как то...
Наверстываем... в электронике...
- artclonic
- Мастер
- Сообщения: 565
- Зарегистрирован: 07 июн 2014, 12:40
- Репутация: 36
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
Вот может этот вариант более легко осуществить?
Если в строке кода - "R1", то тогда
digitalWrite(65, HIGH); // включаем эл. магнит.
Если в строке кода - "R0", то тогда
digitalWrite(65, LOW); // выключаем эл. магнит
т.е. на пин номер 65 Рампса его прикрутить.
Только куда это все в код вставить...?
P.S. Еще немного и я наверное механическое реле из сервы сделаю для вкл/выкл соленойда... (но это полная хрень)
Если в строке кода - "R1", то тогда
digitalWrite(65, HIGH); // включаем эл. магнит.
Если в строке кода - "R0", то тогда
digitalWrite(65, LOW); // выключаем эл. магнит
т.е. на пин номер 65 Рампса его прикрутить.
Только куда это все в код вставить...?
P.S. Еще немного и я наверное механическое реле из сервы сделаю для вкл/выкл соленойда... (но это полная хрень)
Наверстываем... в электронике...
-
tecnocat
- Опытный
- Сообщения: 101
- Зарегистрирован: 09 июн 2014, 08:07
- Репутация: 39
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
В файле firmware_Mega.ino находишь следующие строки
Добавляешь
дальше ищешь
после // line начинается обработчик команды G01
пишешь туда это:
как то так - код писал в слепую - проверь и скажи - получилось или нет.
еще раскинув мозгами об стенку - подумал что команды G01 R0 и G01 R1 не шибко удобные - решил переделать так
Код: Выделить всё
// 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
пишешь туда это:
Код: Выделить всё
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: перепрограммировать серву на эл магнит в Ардуино
Завтра заведу ацкую машинку! Буду пробывать! Есть еще момент... Без времени длительности включения соленойда и времени(паузы) после отключения вся система не будет работать. В первом случае - просто не будет успевать отрабатывать эл магнит, а потом моментально следующая команда... Я это на Марлине понял -долго эксперементировал и эти два времени подбирал. И еще команду "R" на "Z" мне думаю не проблема поменять, правда же?
Наверстываем... в электронике...
-
tecnocat
- Опытный
- Сообщения: 101
- Зарегистрирован: 09 июн 2014, 08:07
- Репутация: 39
- Контактная информация:
Re: перепрограммировать серву на эл магнит в Ардуино
А зачем задержка нужна - не понимаю - подал напряжение на ногу контроллера - оно там держится пока не сбросишь.
Таким макаром у меня старинный китайский плоттер работает - там не 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 с опущенным пером
правда код обработчика будет выглядеть так
Таким макаром у меня старинный китайский плоттер работает - там не 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: перепрограммировать серву на эл магнит в Ардуино
Правильнее так: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/
Исходники моих программ: https://github.com/selenur
Instagram https://www.instagram.com/zheigurov/