Интересное предложение

Вход




Статистика



Locations of visitors to this page

prn3d.ru   wsesam.ru

Самодельный лазерный мини-гравер
ЧПУ лазеры

Перед тем, как делать более совершенный и более мощный лазерный гравер, решил испробовать «макетный» вариант.

Лазерный мини-гравер

Для пробы и мелких работ годится. Желающие смогут собрать в течении 2 дней, при наличии комплектующих, или, (как я) в течении месяца, т.к. не все детали были в наличии.

Для начала, поговорим о станине — она является основой для всего станка. Станину делал по многочисленным видео в интернете — на CD-Rom-ах.
Старался выбирать с одинаковыми моторами, но двух одинаковых не смог найти.
К сожалению, не делал фото сборки станины, но если «на пальцах», то необходимо выставить 90 градусов — это главное. Ну и основа под станину — подложка.

Я сделал из нерабочей планшетки. На дно прикрутил резиновые ножки для гашения вибраций при работе станка.
Все болтики, гаечки, уголки и прочее, куплено в ближайшем строительном магазине.
Для вдохновления использовал видео, в котором показан момент сборки станины:

Видео вдохновения


 

Столик под гравируемые предметы сделал из обычного черного пластика 2,5мм.
Оснащение станины — дело вариативное. Делаем из того, что есть). Заготовка на столике(в моем случае) закрепляется полоской канцелярского тонкого двустороннего скотча. В вашем случае может быть и другой метод крепления.

Лазер заказал на 650Nm и 200mw. К нему отдельно заказал

очки
ru.aliexpress.com/item/532nm-Green-405nm-purple-blue-Laser-Safety-Glasses- 400nm-540nm-Laser-beauty-instrument-protective-eyewear-Eye/32795326359.html

для защиты зрения(но я не уверен что они сильно помогают — луч виден, хоть и менее ярко. В комментариях подсказали что я купил не те очки.)

Станок сделан по схеме, которая гуляет по интернету уже не первый год:

Лазерный мини-гравер


Как видим, помимо лазера, нужен транзистор, ардуино нано, драйвер двигателя, пару резисторов.
Транзистор взял IRFZ44N.


Т.к. моторы делают 20 шагов на полный оборот, а шаг ходового винта 3мм, то за один оборот ходового винта, каретка передвинется на 3 мм.

Делим шаг ХВ, на кол-во шагов мотора (при полном обороте) и получаем 0,15 мм на один шаг — наше разрешение. Рабочая часть составляет 40мм*40мм.
А вот для увеличения разрешения я применил драйвер мотора A4988

(который обеспечивает без радиатора до 1А, с радиатором до 2А) с регулируемым ограничителем тока(с возможностью питания мотора намного большим напряжением для увеличения скорости) и поддержкой «микрошага» — программной фишкой.
В этом режиме, стандартный шаг мотора делится на 2\4\8\16(выбирается перемычками на драйвере).

У нас моторы с углом шага 18град., и для полного оборота потребуется 20 шагов.
Я выбрал умножитель 4(смысл брать 8 или 16 нет, т.к. я физически не смогу сфокусировать луч точно, да и время гравировки сильно увеличится)
И теперь у мотора угол шага становится 4,5град. или 80 шагов на оборот, а разрешение 0,0375мм. на шаг.

Но есть и минус: При увеличении разрешения(выбор режима например 16х), увеличивается и время гравировки, и даже увеличение скорости мотора не может нивелировать это положение вещей.

Включение режимов микрошага осуществляется подачей VCC к контактам MS1, MS2, MS3.
В моем случае, я посадил MS2 к плюсу и получил разрешение микрошага в 1/4 шага.
После сборки и включения питания, произвел настройку тока драйвера:

На плате драйвера имеется подстроечный резистор, для настройки используем вольтметр, один из щупов которого(черный), подключен к земле, а второй к отвертке, которой будем тихонько вращать подстроечник, до получения оптимального значения, при котором моторы не перегреваются при работе.

Для начала надо поставить оптимальное для большинства моторов значение, которое высчитываем по формуле: I=Uref/(8*Rs) где:
I=Ток,
Uref=опорное напр. замеряемое нами на подстроечнике,
Rs=сопротивление резисторов S1Х S2Х на плате драйвера.

Для моторов от большинства CD-Rom, ток составляет 500mA. (Кстати, первичные и вторичные обмотки искал методом тыка, на 4 варианте нашел нужное подключение, а проверял ручным управлением в программе).
Резисторы на драйвере стоят на 0.1 Ом(в моем случае, в вашем может быть другие значения).
Соответственно, для начала, нужно установить опорное напряжение в 0,4 вольта.
В дальнейшем, можно будет изменить его основываясь на температуре моторов(не должна превышать 75-80град).

И еще — моторы, даже в режиме удержания шага,(когда все подключено и, например, стоит в положении 0,0) тоже нагреваются.

В программе устанавливаем параметр «задержка между шагами при холостом ходе» методом проб(В режиме ручного управления, добиваемся минимальных значений этого параметра, при котором отсутствуют пропуски шага), я установил 400 микросекунд( в вашем случае может быть другое и это значение нужно править и в скетче перед заливкой в нанку).

Значение скорости порта и в программе и в скетче ставим одинаковое.

Лазерный мини-гравер


 

Станок в сборе и готов к работе:

Лазерный мини-гравер


Видео работы станка(Настройки в программе перед непосредственным стартом видны. В главном окне программы->Лазерная гравировка-> Градации/Картины. Полное время выжигания — ~5минут. Размер получившегося изображения 3,5см в диаметре. Если бы я уменьшил время задержки с 11000 на, например, 5000, то сделалось бы быстрее.):

 

Фото пробников(Лицо(рандомное из сети) гравировалось на уже обшарпанную поверхность(другого материала в наличии не оказалось). Шрифт, в примере с текстом, я выбрал не очень удачный. Рисунок на коже мог бы быть четче, но структура кожи оказалась крупнофактурная. Орнамент отмыт под водой от сажи, выжигание заняло около 30 минут):

Фото пробников
Лазерный мини-гравер

Лазерный мини-гравер

Лазерный мини-гравер

Лазерный мини-гравер

Лазерный мини-гравер
Программа
СКЕТЧ
int motorPins[3][2] = {{8,9},{10,11},{12, 13}}; 
int count; //подключение первого мотора 
int count2[3] = {0,0,0}; //пин STEP на пин ардуины D8 
int delayTime = 150; //пин DIR на пин ардуины D9
int val = 0;
int rot=0; //подключение второго мотора 
int incomingByte = 0; //пин STEP на пин ардуины D10
int sign=1; //пин DIR на пин ардуины D11
int s_p=40; 
void setup() { //Лазер подключается на пин D2
int i;
Serial.begin(57600); //Эта скорость должна совпадать со скоростью в программе
pinMode(2, OUTPUT);
for (i=0; i<3; i++) {
 for (count = 0; count < 2; count++) {
 pinMode(motorPins[i][count], OUTPUT);}} //установка режима работы цифровых pin'ов Ардуино
 delayTime=400;} //задержка между шагами по умолчанию
void moveForward(int sm) {
digitalWrite(motorPins[sm][1], HIGH);
digitalWrite(motorPins[sm][0], HIGH);
digitalWrite(motorPins[sm][0], LOW);}
void moveBackward(int sm) {
digitalWrite(motorPins[sm][1], LOW);
digitalWrite(motorPins[sm][0], HIGH);
digitalWrite(motorPins[sm][0], LOW);}
void delayMicros(long wt){
 unsigned long mls;
 unsigned int mks;
 mls=(unsigned long)(wt / 1000);
 mks=(unsigned int)(wt % 1000);
 if (mls>0) delay(mls);
 if (mks>0) delayMicroseconds(mks);}
void MoveSM(long x, long y, long z) {
 long c[3], c2[3];
 double c1[3], d[3];
 long m, i;
 boolean flg;
 long ms;
 long d1, d2, d3, d4, t, dt;
 c[0] = x;
 c[1] = y;
 c[2] = z;
 m = 1;
 for (i=0; i<2; i++) {
 if (m < abs(c[i])) m = abs(c[i]);}
 for (i=0; i<2; i++) {
 c1[i] = 0;
 d[i] = 1.0 * c[i] / m;
 c2[i] = 0;}
flg = false;
 for (i=0; i<2; i++) {
 if (abs(c1[i]) < abs(c[i])) flg=true;}
 t=m;
 if (z>0 && t>0) {
 if (z>=delayTime) {
 dt=z; d1=s_p; d2=1;
 d3=0;
 if (d1==d2) d4=z/2; else d4=z; 
 } else {
 dt=delayTime;
 d3=dt*s_p*(dt-z)/dt/2;
 d2=d3/dt;
 d1=s_p-d2;
 d3=d3-d2*dt;
 d2=d2+1;
 if (d1==d2) d4=dt/2-d3; else d4=dt-d3;}
 } else {
 dt=delayTime;
 d1=-1; d2=-1; d3=0; d4=0;}
 while (flg) {
 flg=false;
 for (i=0; i<2; i++) {
 if (abs(c1[i]) < abs(c[i]))
 c1[i] += d[i];
 if (abs(c1[i]) - abs(c2[i]) >= 0.5) {
 if (c[i]>0) {
 c2[i]++;
 moveForward(i);
 } else if (c[i]<0) {
 c2[i]--;
 moveBackward(i);}}
 if (abs(c1[i]) < abs(c[i])) flg=true;}
 if (z>0) {
 if (t==d1) {
 delayMicros(d3);
 digitalWrite(2, HIGH);
 delayMicros(d4);}
 if (t==d2) {
 delayMicros(d4);
 digitalWrite(2, LOW);
 delayMicros(d3);}
 if (t!=d1 && t!=d2) {
 delayMicros(dt);}
 } else {
 delayMicros(dt);}
 t--;}}
void loop() {
if (Serial.available() > 0) {
 long c[5]={0,0,0,0,0};
 int i;
 sign=1;
 i=0;
 incomingByte = Serial.read();
 while (incomingByte!=';') {
 if (c[i]==0) {
 if (incomingByte=='-')
 sign=-1;}
 if (incomingByte==',') {
 c[i]*=sign;
 sign=1;
 i++;
 } else if (incomingByte>='0' && incomingByte<='9') {
 c[i]=c[i]*10+incomingByte-'0';}
 while (Serial.available() == 0) {
 delayMicroseconds(1);}
 incomingByte = Serial.read();}
 c[i]*=sign;
 if (c[3]>0) s_p=c[3]; 
 if (c[4]>0) delayTime=c[4]; 
 MoveSM(c[0],c[1],c[2]);
 Serial.println("OK");}
else
 delayMicroseconds(1); } 

Итог: Крайне советую каждому, кто думает собрать свой первый станок ЧПУ на лазере, и думает начать с большого и мощного, сначала попробовать собрать этот.
Дает кучу опыта и понимания механизмов.
Если есть вопросы, по возможности отвечу в комментариях.

автор: Arthurios