Vertical Plotter -wiring The Tb6600 - Arduino Forum
Maybe your like
Hello
I am doing a vertical plotter with two tb6600 drivers. It's using the serial to pass the coordinates. I hope i am not overwhelming with so many questions.
I tried to do this project with raspberry and at the end i saw that it will be much better with Arduino. I am newbie.
In the arduino uno code the pins for the tb6600 are defined
#define DirY 7 #define StepY 4 #define EnableY 8 #define DirX 12 #define StepX 9 #define EnableX 6Enable and Dir are for ENA and DIR, Does Step goes to PUL?
in that case is that right? ENA- pin 8, PUL- pin 4 ,DIR- pin 7
ENA+,PUL+ and DIR+ go to 5v pin, no?
I am confuse because of this funcion?
digitalWrite(DirX, HIGH);digitalWrite(StepX, LOW);digitalWrite(EnableX,HIGH);Is the servo motor connected to pin 3?
#include <Servo.h> ... Servo servoPen; ..... servoPen.attach(3);I am attaching a png file with how i am guessing the schematics are.
and the whole code. Thanks in advantage for any help.
#include <Servo.h> long i=0; Servo servoPen; int PosServoUp = 66;//105 int PosServoDown = 54; // 30 float curX,curY,curZ; float tarX,tarY,tarZ; // target xyz position float delayy=80; float AB=635; float CO=490; float L0=sqrt((AB/2)*(AB/2)+CO*CO); float LA_precedente=L0; float LB_precedente=L0; float LA,LB,dlA,dlB; long StepsA,StepsB; long CbStepsA,CbStepsB; /******** mapping xy position to steps ******/ float STEPS_PER_CIRCLE = 3200; float DIAMETER = 13.50; //float STEPS_PER_MM = (STEPS_PER_CIRCLE/PI/DIAMETER); #define DirY 7 #define StepY 4 #define EnableY 8 #define DirX 12 #define StepX 9 #define EnableX 6 void setup(){ Serial.begin(115200); servoPen.attach(3); pinMode(DirX, OUTPUT);pinMode(StepX,OUTPUT);pinMode(EnableX, OUTPUT); pinMode(DirY, OUTPUT);pinMode(StepY,OUTPUT);pinMode(EnableY, OUTPUT); digitalWrite(DirX, HIGH);digitalWrite(StepX, LOW);digitalWrite(EnableX,HIGH); digitalWrite(DirY, HIGH);digitalWrite(StepY, LOW);digitalWrite(EnableY,HIGH); servoPen.write(PosServoUp); digitalWrite(EnableX,HIGH); digitalWrite(EnableY,HIGH); } void prepareMove() { //float dx = tarX - curX; //float dy = tarY - curY; //float distance = sqrt(dx*dx+dy*dy); // map xy to string length LA=sqrt((AB/2+tarX)*(AB/2+tarX)+(CO-tarY)*(CO-tarY)); LB=sqrt((AB/2-tarX)*(AB/2-tarX)+(CO-tarY)*(CO-tarY)); dlA=LA-LA_precedente; dlB=LB-LB_precedente; //en mm ActivDir(dlA,dlB); StepsA=(3200.00*dlA)/(PI*DIAMETER); StepsB=(3200.00*dlB)/(PI*DIAMETER); Rotation(StepsA,StepsB); //Serial.print((3200*dlA)/(PI*DIAMETER));Serial.print(";");Serial.println((3200*dlB)/(PI*DIAMETER)); LA_precedente=LA_precedente+(PI*DIAMETER*float(CbStepsA))/3200.00; LB_precedente=LB_precedente+(PI*DIAMETER*float(CbStepsB))/3200.00; CbStepsA=0; CbStepsB=0; //curX = tarX; //curY = tarY; //Serial.print(curX);Serial.print(";");Serial.println(curY); } void parseCordinate(char * cmd) { char * tmp; char * str; str = strtok_r(cmd, " ", &tmp); while(str!=NULL){ str = strtok_r(0, " ", &tmp); //Serial.printf("%s;",str); if(str[0]=='X'){ tarX = atof(str+1); }else if(str[0]=='Y'){ tarY = atof(str+1); }else if(str[0]=='Z'){ tarZ = atof(str+1); }else if(str[0]=='F'){ //float speed = atof(str+1); //tarSpd = speed/60; // mm/min -> mm/s }else if(str[0]=='A'){ //stepAuxDelay = atol(str+1); } } prepareMove(); } void parsePen(char * cmd) { char * tmp; char * str; str = strtok_r(cmd, " ", &tmp); int pos = atoi(tmp); servoPen.write(pos); } void parseMcode(char * cmd) { int code; code = atoi(cmd); switch(code){ case 1: parsePen(cmd); break; } } void parseGcode(char * cmd) { int code; code = atoi(cmd); switch(code){ case 1: // xyz move parseCordinate(cmd); break; case 28: // home tarX=0; tarY=0; prepareMove(); break; } } void parseCmd(char * cmd) { if(cmd[0]=='G'){ // gcode parseGcode(cmd+1); Serial.println("OK"); }else if(cmd[0]=='M'){ // mcode parseMcode(cmd+1); Serial.println("OK"); } } char buf[64]; char bufindex; void loop(){ if(Serial.available()){ char c = Serial.read(); //Serial.print(c); buf[bufindex++]=c; if(c=='\n'){ parseCmd(buf); memset(buf,0,64); bufindex = 0; } } } void Rotation(long x,long y) { float rx,ry,ax,ay; long m=max(abs(x),abs(y)); ax=0; ay=0; rx=abs(float(x))/float(m); ry=abs(float(y))/float(m); i=0; do{ ax=ax+rx; ay=ay+ry; if(ax>=1){ax--;digitalWrite(StepX,HIGH);digitalWrite(StepX,LOW);if(digitalRead(DirX)==1){CbStepsA=CbStepsA-1;}else{CbStepsA=CbStepsA+1;}} if(ay>=1){ay--;digitalWrite(StepY,HIGH);digitalWrite(StepY,LOW);if(digitalRead(DirY)==1){CbStepsB=CbStepsB+1;}else{CbStepsB=CbStepsB-1;}} i++; delayMicroseconds(delayy); }while(i<m); // StopCond /*Serial.print("Steps A : "); Serial.println(CbStepsA); Serial.print("Steps B : "); Serial.println(CbStepsB);*/ } void ActivDir(float x,float y) { if (x<0)digitalWrite(DirX, HIGH); else digitalWrite(DirX, LOW); if (y<0)digitalWrite(DirY, LOW); else digitalWrite(DirY, HIGH); }
arduinotb6600.png925×736 610 KB
arduinotb6600.png925×736 610 KB
Tag » Arduino Uno Tb6600 Wiring
-
TB6600 And Arduino - Wiring And Demonstration - YouTube
-
TB6600 Stepper Motor Driver With Arduino Tutorial
-
TB6600 Stepper Motor Driver With Arduino Tutorial (3 Examples)
-
Interfacing TB6600 Stepper Motor Driver With Arduino - ElectroPeak
-
Updated TB6600 Stepper Driver Config? - Arduino Forum
-
Arduino Uno And TB-6600 Connection
-
Arduino Uno R3 And TB6600 Connection Diagram
-
Arduino And TB6600 Microcontroller Wiring Schematics
-
Wiring And Running TB6600 Stepper Driver With Arduino - DIY Projects
-
Need Help! TB6600 Wiring Diagram With Arduino Grbl CNC Shield
-
CNC Controller With Arduino, TB6600 And GRBL
-
Nema Stepper Motor 23 With Tb6600 Driver With Arduino Due
-
TB6600 Arduino Stepper Motor Driver - DFRobot