Двигатель 28BYJ-48

Добрый день.

Делаю перекидные часы. Проблема в том, что никак не могу подобрать шаг двигателя. Дело в том, что количество шагов на оборот (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);
      }
    }
  }
}

Тут много вариантов - взять к мотору посчитанный редуктор, сделать быстрый прогон лишних шагов, взять готовый мотор кратный 60.

9 раз на 34 и один на 35 шагов

1 лайк

суммарное количество шагов на оборот не бьется. Суть совета понял.

А механику-числа сами делаете?

Да, сам. В принципе все готово и работает, но из-за фигового редуктора мотора приходится калибровать минутные плашки каждый час, а часовые плашки каждые сутки. У меня там два датчика Холла установлены.

1 лайк