Добрый день.
Делаю перекидные часы. Проблема в том, что никак не могу подобрать шаг двигателя. Дело в том, что количество шагов на оборот (2048) не кратно 60. Написал код ниже, но все равно каждые 10-15 перелистываний скидывает лишнюю пластинку (60 штук на оборот).
Хочу добиться стабильной работы в течении часа.
void Minute_step_1() {
static int stp2 = 0;
int phase2 = 0;
int _step2 = -1; // Если у шага поменять знак на + изменится направление вращения.
bool motorPhases2[4][4] = { // [phase][pin]
//// -------- pins ----------
//// Winding A B A B
//// Motor Pin 1 2 3 4
//// Color Bl Pi Ye Or
{ 1, 1, 0, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 1, 1 },
{ 1, 0, 0, 1 }
};
for (int p2 = 0; p2 < 34; p2++) {
//Serial.println(stp);
stp2++;
phase2 += _step2;
if (phase2 > 3) phase2 = 0;
if (phase2 < 0) phase2 = 3;
for (int f2 = 0; f2 < 4; f2++) {
digitalWrite(pins2[f2], ((motorPhases2[phase2][f2] == 1) ? HIGH : LOW));
delay(5);
}
if (stp2 == 256) {
stp2 = 0;
if (phase2 > 3) phase2 = 0;
if (phase2 < 0) phase2 = 3;
for (int f2 = 0; f2 < 4; f2++) {
digitalWrite(pins2[f2], ((motorPhases2[phase2][f2] == 1) ? HIGH : LOW));
delay(5);
}
}
}
}