Драйвер 74hc595 + 2 Х uln2003 + 2 Х 28BYJ-48 и shiftOut()

Alex_E
Offline
Зарегистрирован: 30.09.2014

Всем здравствуйте.

Вопрос следующий. Спаял драйвер. Один регистр 74hc595.

ноги 0, 1, 2, 3 на первую uln2003

ноги 4, 5, 6, 7 на вторую uln2003

Для uln2003 отдельное питание. На каждой микросхеме по шаговому двигателю 28BYJ-48.

Если управлять ими через digitalWrite, то проблем нет. Крути каждый двигатель как хочешь.

А вот с shiftOut() разобраться не могу. Код ниже.

Какие бы данные не были в массиве "microstep" два двигателя врящаются синхронно.

На сколько я понял смысл shiftOut(), то, например, 0b00000110 должно быть расценено как нули на всех выходных ногах регистра, кроме  5, 6 где будет логическая единица. 


int SER_Pin = 2;   //pin 14 75HC595 DS
int RCLK_Pin = 4;  //pin 12 75HC595 ST_CP
int SRCLK_Pin = 5; //pin 11 75HC595 SH_CP



int microstep[8] = {0b00001000, 0b00001100, 0b00000100, 0b00000110, 0b00000010, 0b00000011, 0b00000001, 0b00001001};

int Stepper1Speed = 0;     //Переменная для хранения скорости привода
int Stepper2Speed = 0;     //Переменная для хранения скорости привода

const int X = 5; 	//снимаем показание с джойстика X
const int Y = 4; 	//снимаем показания с джойстика Y

//////////////////////////////////////////////////////////////////////////////
void setup() {

  Serial.begin(9600);
  
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);
  
}

//////////////////////////////////////////////////////////////////////////////
void loop(){

     ForwardRun();
}

//////////////////////////////////////////////////////////////////////////////
void ForwardRun (){

 WriteRegisters(); 

}

void WriteRegisters(){

  for(int i = 0 ; i <= 7; i++){
    
    digitalWrite(SRCLK_Pin, LOW);
    
    shiftOut(SER_Pin, RCLK_Pin, MSBFIRST, microstep[i]);
    
    digitalWrite(SRCLK_Pin, HIGH); 
    delay(1);   
    
    Serial.println(i);
    Serial.println(microstep[i],BIN);
    
  }

}

Заранее спасибо.

Alex_E
Offline
Зарегистрирован: 30.09.2014
Всё дошло. четыре косяка нашел. Вопрос снят :)

int SER_Pin = 2;   //pin 14 on the 75HC595 DS
int RCLK_Pin = 4;  //pin 12 on the 75HC595 ST_CP
int SRCLK_Pin = 5; //pin 11 on the 75HC595 SH_CP



byte microstep[8] = {0b00001000, 0b00001100, 0b00000100, 0b00000110, 0b00000010, 0b00000011, 0b00000001, 0b00001001};
byte data;

int Stepper1Speed = 0;     //Переменная для хранения скорости привода
int Stepper2Speed = 0;     //Переменная для хранения скорости привода

const int X = 5; 	//снимаем показание с джойстика X
const int Y = 4; 	//снимаем показания с джойстика Y

//////////////////////////////////////////////////////////////////////////////
void setup() {

  Serial.begin(9600);
  
  pinMode(SER_Pin, OUTPUT);
  pinMode(RCLK_Pin, OUTPUT);
  pinMode(SRCLK_Pin, OUTPUT);
  
}

//////////////////////////////////////////////////////////////////////////////
void loop(){

     ForwardRun();
}

//////////////////////////////////////////////////////////////////////////////
void ForwardRun (){

 WriteRegisters(); 

}

void WriteRegisters(){

  for(int i = 0 ; i <= 7; i++){
    
    digitalWrite(RCLK_Pin, 0);
    data = microstep[i];
    
    shiftOut(SER_Pin, SRCLK_Pin, MSBFIRST, data);
    
    digitalWrite(RCLK_Pin, 1); 
    delay(1);   
    
    Serial.println(i);
    Serial.println(microstep[i],BIN);
    
  }

}