Драйвер 74hc595 + 2 Х uln2003 + 2 Х 28BYJ-48 и shiftOut()
- Войдите на сайт для отправки комментариев
Втр, 30/09/2014 - 15:23
Всем здравствуйте.
Вопрос следующий. Спаял драйвер. Один регистр 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); } }
Заранее спасибо.
Втр, 30/09/2014 - 16:06
#1