CNC-Fräse: Unterschied zwischen den Versionen

Aus FabLab Rothenburg
Zur Navigation springen Zur Suche springen
PaulFreund (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zoadian (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 75: Zeile 75:


<code>
<code>
    To be included
 
int pin_refX = 11;
int pin_dirX = 12;//low == vom motor wech
int pin_clkX = 13;
 
int pin_refY = 8;
int pin_dirY = 9;//low == zum motor hi // we switch this in our program to match the others!
int pin_clkY = 10;
 
int pin_refZ = 5;
int pin_dirZ = 6;//low == vom motor wech
int pin_clkZ = 7;
 
int pin_refT = 2;
int pin_dirT = 3;//low == vom motor ausgehend gesehen im uhrzeigersin
int pin_clkT = 4;
 
int pin_anaX = 0;
int pin_anaY = 1;
int pin_anaZ = 2;
int pin_anaT = 3;
 
void setup() {
  pinMode(pin_refX, INPUT_PULLUP);
  pinMode(pin_refY, INPUT_PULLUP);
  pinMode(pin_refZ, INPUT_PULLUP);
  pinMode(pin_refT, INPUT_PULLUP);
 
  pinMode(pin_dirX, OUTPUT);
  pinMode(pin_dirY, OUTPUT);
  pinMode(pin_dirZ, OUTPUT);
  pinMode(pin_dirT, OUTPUT);
 
  pinMode(pin_clkX, OUTPUT);
  pinMode(pin_clkY, OUTPUT);
  pinMode(pin_clkZ, OUTPUT);
  pinMode(pin_clkT, OUTPUT);
}
 
void driveX(int dir) {
  digitalWrite(pin_dirX, dir);
  digitalWrite(pin_clkX, HIGH);
  delayMicroseconds(1);
  digitalWrite(pin_clkX, LOW);
}
 
void driveY(int dir) {
  digitalWrite(pin_dirY, dir);
  digitalWrite(pin_clkY, HIGH);
  delayMicroseconds(1);
  digitalWrite(pin_clkY, LOW);
}
 
void driveZ(int dir) {
  digitalWrite(pin_dirZ, !dir); //NOT
  digitalWrite(pin_clkZ, HIGH);
  delayMicroseconds(1);
  digitalWrite(pin_clkZ, LOW);
}
 
void driveT(int dir) {
  digitalWrite(pin_dirT, dir);
  digitalWrite(pin_clkT, HIGH);
  delayMicroseconds(1);
  digitalWrite(pin_clkT, LOW);
}
 
void loop() {
  analogReference(DEFAULT);
  int anaX = analogRead(pin_anaX);
  int anaY = analogRead(pin_anaY);
  int anaZ = analogRead(pin_anaZ);
  int anaT = analogRead(pin_anaT);
 
 
 
//  Serial.println(anaX);
//  Serial.println(anaY);
//  Serial.println(anaZ);
//  Serial.println(anaT);
//  Serial.println("-------------------");
//  delay(1000);
  if(anaX < 340) { driveX( LOW); } else if(anaX > 680) { driveX(HIGH); }
  if(anaY < 340) { driveY( LOW); } else if(anaY > 680) { driveY(HIGH); }
  if(anaZ < 340) { driveZ( LOW); } else if(anaZ > 680) { driveZ(HIGH); }
  if(anaT < 340) { driveT(HIGH); } else if(anaT > 680) { driveT( LOW); }
       
  delayMicroseconds(50); //1000 is not too fast but moving
}
</code>
</code>

Version vom 5. April 2014, 10:58 Uhr

Originalzustand

Software

Die Steuerhardware und Software stammt von Burkhard Lewetz - Ing.Büro für technische Software-Entwicklungen (http://www.lewetz.de/). Original wurde die software WinPC-NC über eine serielle Verbindung genutzt. Die Original-Steuerung wurde inzwischen von der Leistungselektronik getrennt und soll durch eine eigene Ansteuerung basierend auf einem BeagleBone Black ersetzt werden.

Hardware

Die CNC-Fräse ist eine CUT2000 der Firma Haase (http://www.team-haase.de/).

Leistungselektronik

Die Ansteuerung der Schrittmotoren basiert auf vier Toshiba TA8435H Treibern.

Leistungselektronik hinten
Leistungselektronik vorne

Verbindung CNC 25-Pol DSUB Stecker

Typen

   Ref[]       - Zuleitung für Referenzschalter 1-1 Verbindung mit RefOut bei gedrücktem Schalter
   RefOut      - Ableitung für Referenzschalter
   direction[] - CNC-Input um Richtung einzustellen, [3.5V, 5V],  High vom Motor weg, Low zum Motor hin
   clock[]     - CNC-Input um Motoren anzusteuern, Geschwindigkeit des Flankenwechsels regelt Drehgeschwindigkeit 

Breite Reihe

   01 - None
   
   02 - directionX
   03 - clockX
   
   04 - directionY
   05 - clockY
   
   06 - directionZ
   07 - clockZ
   
   08 - directionT
   09 - clockT
   
   10 - RefX
   11 - RefY
   12 - RefZ
   13 - RefT

Schmale Reihe

   14 - None
   15 - None
   16 - None
   17 - None
   18 - RefOut ( 24 bei 37-Pol Adapter ) 
   19 - RefOut ( 24 bei 37-Pol Adapter ) 
   20 - RefOut ( 24 bei 37-Pol Adapter ) 
   21 - RefOut ( 24 bei 37-Pol Adapter ) 
   22 - RefOut ( 24 bei 37-Pol Adapter ) 
   23 - RefOut ( 24 bei 37-Pol Adapter ) 
   24 - RefOut ( 24 bei 37-Pol Adapter ) 
   25 - RefOut ( 24 bei 37-Pol Adapter ) 

Experimentelle Ansteuerung

CNC mit Arduino ansteuern

Um die Ansteuerung der Leistungselektronik zu testen wurde folgende neben der notwendigen Verkabelung folgender Code verwendet:

int pin_refX = 11; int pin_dirX = 12;//low == vom motor wech int pin_clkX = 13;

int pin_refY = 8; int pin_dirY = 9;//low == zum motor hi // we switch this in our program to match the others! int pin_clkY = 10;

int pin_refZ = 5; int pin_dirZ = 6;//low == vom motor wech int pin_clkZ = 7;

int pin_refT = 2; int pin_dirT = 3;//low == vom motor ausgehend gesehen im uhrzeigersin int pin_clkT = 4;

int pin_anaX = 0; int pin_anaY = 1; int pin_anaZ = 2; int pin_anaT = 3;

void setup() {

 pinMode(pin_refX, INPUT_PULLUP);
 pinMode(pin_refY, INPUT_PULLUP);
 pinMode(pin_refZ, INPUT_PULLUP);
 pinMode(pin_refT, INPUT_PULLUP);
 
 pinMode(pin_dirX, OUTPUT);
 pinMode(pin_dirY, OUTPUT);
 pinMode(pin_dirZ, OUTPUT);
 pinMode(pin_dirT, OUTPUT);
 
 pinMode(pin_clkX, OUTPUT);
 pinMode(pin_clkY, OUTPUT);
 pinMode(pin_clkZ, OUTPUT);
 pinMode(pin_clkT, OUTPUT);

}

void driveX(int dir) {

 digitalWrite(pin_dirX, dir);
 digitalWrite(pin_clkX, HIGH);
 delayMicroseconds(1);
 digitalWrite(pin_clkX, LOW);

}

void driveY(int dir) {

 digitalWrite(pin_dirY, dir);
 digitalWrite(pin_clkY, HIGH);
 delayMicroseconds(1);
 digitalWrite(pin_clkY, LOW);

}

void driveZ(int dir) {

 digitalWrite(pin_dirZ, !dir); //NOT
 digitalWrite(pin_clkZ, HIGH);
 delayMicroseconds(1);
 digitalWrite(pin_clkZ, LOW);

}

void driveT(int dir) {

 digitalWrite(pin_dirT, dir);
 digitalWrite(pin_clkT, HIGH);
 delayMicroseconds(1);
 digitalWrite(pin_clkT, LOW);

}

void loop() {

 analogReference(DEFAULT);
 int anaX = analogRead(pin_anaX);
 int anaY = analogRead(pin_anaY);
 int anaZ = analogRead(pin_anaZ);
 int anaT = analogRead(pin_anaT);
 
 
 

// Serial.println(anaX); // Serial.println(anaY); // Serial.println(anaZ); // Serial.println(anaT); // Serial.println("-------------------"); // delay(1000);

 if(anaX < 340) { driveX( LOW); } else if(anaX > 680) { driveX(HIGH); }
 if(anaY < 340) { driveY( LOW); } else if(anaY > 680) { driveY(HIGH); }
 if(anaZ < 340) { driveZ( LOW); } else if(anaZ > 680) { driveZ(HIGH); }
 if(anaT < 340) { driveT(HIGH); } else if(anaT > 680) { driveT( LOW); }
       
 delayMicroseconds(50); //1000 is not too fast but moving

}