Переделка скетча под arduino pro mini 328
- Войдите на сайт для отправки комментариев
Вс, 25/01/2015 - 14:52
Помогите переделать скетч написан под 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;
}
}
//----------------------------------------------------------------------------
В Arduino Pro Mini:
2- Step
3- Dir
4, 5, 6, 7 на L298n
Етот код для Arduino Mega рабочей - проверенный.
Помогите переделать код, ато у меня не выходит.