Переделка скетча под arduino pro mini 328

palagnyukvovan
Offline
Зарегистрирован: 12.11.2013

Помогите переделать скетч написан под Arduino Mega 2560 для трех двигателей ЧПУ.

Мне надо только для одного двигателя для Arduino Pro Mini atmega 328p

Код:

/*MP4401 FETモジュールを利用したMACH3用自作基板のArdunio用デコードプログラム
 Dsub25Pinからのstep/dia信号をArduinoで受信し、MP4401のゲートに出力する。
 ステッピングモータはユニポーラ、XYZ軸用の3つを接続。
 0~5はSTEP/dia×3個の入力、6~17はゲート制御(4PIN*3=12PIN),18&19は空き 
 本プログラムはx軸とy軸に外部割り込み処理をしているためパルスの取りこぼしは無いはず。
 z軸はloopによる高速トレースで信号を読むため、取りこぼしの可能性がある。machのパルス幅は大きめに設定すること
*/ 
#define X1 17//モータの接続ポート
#define Y1 14
#define lX1 16
#define lY1 15
#define X2 13
#define Y2 10
#define lX2 12
#define lY2 11
#define X3 9
#define Y3 6
#define lX3 8
#define lY3 7

#define X_step 3
#define X_dia 4
#define Y_step 2
#define Y_dia 5
#define Z_step 0
#define Z_dia 1
//---------------------------------------------------------------------------------------------------------*/

//setup------------------------------------------------------------------------
void setup()
{
  pinMode(X1,OUTPUT);
  pinMode(lX1,OUTPUT);
  pinMode(Y1,OUTPUT);
  pinMode(lY1,OUTPUT);
  pinMode(X2,OUTPUT);
  pinMode(lX2,OUTPUT);
  pinMode(Y2,OUTPUT);
  pinMode(lY2,OUTPUT);
  pinMode(X3,OUTPUT);
  pinMode(lX3,OUTPUT);
  pinMode(Y3,OUTPUT);
  pinMode(lY3,OUTPUT);
  pinMode(18,INPUT);
  pinMode(19,INPUT);


  pinMode(X_dia,INPUT_PULLUP);
  pinMode(X_step,INPUT_PULLUP);
  pinMode(Y_dia,INPUT_PULLUP);
  pinMode(Y_step,INPUT_PULLUP);
  pinMode(Z_dia,INPUT_PULLUP);
  pinMode(Z_step,INPUT_PULLUP); 

//全軸動作テスト
  driveXp();
  driveYp();
  driveZp();
  delay(1000);
  driveXp();
  driveYp();
  driveZp();
  delay(1000);
  driveXp();
  driveYp();
  driveZp();
  delay(1000);
  driveXp();
  driveYp();
  driveZp();
  delay(1000);

//外部割込み開始
  attachInterrupt(1, X_FALLING, FALLING);
  attachInterrupt(0, Y_FALLING, FALLING);
}

void X_FALLING(){
  if(digitalRead(X_dia))driveXp();
  else driveXm();
}
void Y_FALLING(){
  if(digitalRead(Y_dia))driveYm();
  else driveYp();
}
//main-------------------------------------------------------------------------
void loop(){
  /* if(!digitalRead(Z_step)){//LOWなら
   if(digitalRead(Z_dia)){
   driveZp();
   }
   else{
   driveZm();
   }
   while(!digitalRead(Z_step)){
   }
   }
   */
}

byte t1=1; //x軸の回転ステップ位置の保持
byte t2=1;//y軸の回転ステップ位置の保持
byte t3=1;//z軸の回転ステップ位置の保持

//2層励磁------------
void driveXp(){//pはプラスの意味
  switch(t1){//2相励磁
  case 1:
    digitalWrite(lY1,LOW);
    digitalWrite(X1,HIGH);
    t1=2;
    break;
  case 2:
    digitalWrite(X1,LOW);
    digitalWrite(Y1,HIGH);
    t1=3;
    break;
  case 3:
    digitalWrite(Y1,LOW);
    digitalWrite(lX1,HIGH);
    t1=4;
    break;
  case 4:
    digitalWrite(lX1,LOW);
    digitalWrite(lY1,HIGH);
    t1=1;
    break;
  }
}
void driveXm(){//mはマイナスの意味
  switch(t1){
  case 1:
    digitalWrite(lY1,LOW );
    digitalWrite(lX1,HIGH);
    t1=4;
    break;
  case 2:
    digitalWrite(X1,LOW);
    digitalWrite(lY1,HIGH);
    t1=1;
    break;
  case 3:
    digitalWrite(Y1,LOW);
    digitalWrite(X1,HIGH);
    t1=2;
    break;
  case 4:
    digitalWrite(lX1,LOW);
    digitalWrite(Y1,HIGH);
    t1=3;
    break;
  }
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
void driveYp(){
  switch(t2){
  case 1:
    digitalWrite(lX2,LOW);
    digitalWrite(X2,HIGH);
    t2=2;
    break;
  case 2:
    digitalWrite(lY2,LOW);
    digitalWrite(Y2,HIGH);
    t2=3;
    break;
  case 3:
    digitalWrite(X2,LOW);
    digitalWrite(lX2,HIGH);
    t2=4;
    break;
  case 4:
    digitalWrite(Y2,LOW);
    digitalWrite(lY2,HIGH);
    t2=1;
    break;
  }
}

void driveYm(){
  switch(t2){
  case 1:
    digitalWrite(lY2,LOW );
    digitalWrite(Y2,HIGH);
    t2=4;
    break;
  case 2:
    digitalWrite(X2,LOW);
    digitalWrite(lX2,HIGH);
    t2=1;
    break;
  case 3:
    digitalWrite(Y2,LOW);
    digitalWrite(lY2,HIGH);
    t2=2;
    break;
  case 4:
    digitalWrite(lX2,LOW);
    digitalWrite(X2,HIGH);
    t2=3;
    break;
  }
}

void driveZp(){
  switch(t3){
  case 1:
    digitalWrite(X3,HIGH);
    digitalWrite(lY3,LOW);
    t3=2;
    break;
  case 2:
    digitalWrite(Y3,HIGH);
    digitalWrite(X3,LOW);
    t3=3;
    break;
  case 3:
    digitalWrite(lX3,HIGH);
    digitalWrite(Y3,LOW);
    t3=4;
    break;
  case 4:
    digitalWrite(lY3,HIGH);
    digitalWrite(lX3,LOW);
    t3=1;
    break;
  }
}
void driveZm(){
  switch(t3){
  case 1:
    digitalWrite(lX3,HIGH);
    digitalWrite(lY3,LOW);
    t3=4;
    break;
  case 2:
    digitalWrite(lY3,HIGH);
    digitalWrite(X3,LOW);
    t3=1;
    break;
  case 3:
    digitalWrite(X3,HIGH);
    digitalWrite(Y3,LOW);
    t3=2;
    break;
  case 4:
    digitalWrite(Y3,HIGH);
    digitalWrite(lX3,LOW);
    t3=3;
    break;
  }
}
//----------------------------------------------------------------------------

 

palagnyukvovan
Offline
Зарегистрирован: 12.11.2013

В Arduino Pro Mini:

2- Step

3- Dir

4, 5, 6, 7 на L298n

Етот код для Arduino Mega рабочей - проверенный.

Помогите переделать код, ато у меня не выходит.