极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13185|回复: 0

还有人玩2D激光雕刻机吗?功能大全,软硬件通吃(三) grbl步进电机调试程序

[复制链接]
发表于 2018-5-17 21:51:04 | 显示全部楼层 |阅读模式
本帖最后由 风雪独步人 于 2018-5-18 23:20 编辑

大家用arduino把下列程序写入主机328P,然后用任何com调试程序打开端口,就可以用简单的命令移动XYZ坐标了,如X100 ,发送x轴正向100个脉冲,这时可以用尺子量一下X方向移动距离mm,然后可以求出X方向每mm需要多少脉冲,就可以设定到GRBL中去了。如:z-50 z轴移动-50脉冲,还可以增加s值,如y200S1000   要求y发送200个移动脉冲,但是每个脉冲之间间隔1000毫秒(1S),这样就可以看看在y方向每个脉冲是否形成有效的移动。
当然如果你的步进电机转向角,齿轮传动比已知的情况下,可以直接计算出各方向的参数(脉冲/mm),但我嫌他太麻烦,直接发送多少脉冲,测量一下实际移动长度就可以了。


#define EN        8       //步进电机使能端,低电平有效
#define X_DIR     5       //X轴 步进电机方向控制
#define Y_DIR     6       //y轴 步进电机方向控制
#define Z_DIR     7       //z轴 步进电机方向控制
#define X_STP     2       //x轴 步进控制
#define Y_STP     3       //y轴 步进控制
#define Z_STP     4       //z轴 步进控制
#define Lmain      10     //主激光强度口

void setup() {
  // put your setup code here, to run once:
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
pinMode(Lmain , OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN,LOW);//digitalWrite(EN, HIGH);
digitalWrite(Lmain , LOW);
Serial.begin(9600);
}

void loop() {
  String  STi="";
  while (Serial.available() > 0) {STi += char(Serial.read());delay(2);}
  if(STi!=""){  STi.toUpperCase();  step( STi );  }
  delay(2000);
}

void step( String  ST)
{  int X=0;int Y=0;int Z=0;int X_dir;int Y_dir;int Z_dir;int index;int L=0; int S=3;
  Serial.println(ST);
  index=ST.indexOf("X");if(index>=0){ X=ST.substring(index+1,ST.length()).toInt();  Serial.println( " X=");  }
  index=ST.indexOf("Y");if(index>=0){ Y=ST.substring(index+1,ST.length()).toInt();  Serial.println(" Y=");  }
  index=ST.indexOf("Z");if(index>=0){ Z=ST.substring(index+1,ST.length()).toInt();  Serial.println(" Z=");  }
  index=ST.indexOf("S");if(index>=0){ S=ST.substring(index+1,ST.length()).toInt();  }
  index=ST.indexOf("L");if(index>=0){ L=ST.substring(index+1,ST.length()).toInt(); if(L<0){L=0;};if(L>255){L=255;}  Serial.println(" L=");  }
  if( X>0){ X_dir=1;} else{ X_dir=0;X=-X; }
  if( Y>0){ Y_dir=1;} else{ Y_dir=0;Y=-Y; }
  if( Z>0){ Z_dir=1;} else{ Z_dir=0;Z=-Z; }
  digitalWrite(5, X_dir);
  digitalWrite(6, Y_dir);
  digitalWrite(7, Z_dir);
  analogWrite(Lmain ,L);
  delay(50);
while ((X+Y+Z)>0){
if(X>0){ X--; digitalWrite(2, HIGH);}
if(Y>0){ Y--; digitalWrite(3, HIGH);}
if(Z>0){ Z--; digitalWrite(4, HIGH);}  
delay(3);
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  delay(S);
}}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 13:45 , Processed in 0.038935 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表