Управление ШД 42STH60-1206A через Motor-Shield и IskraJS

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Akong, 20 май 2016.

  1. Akong

    Akong Нуб

    Всем привет!

    Пытаюсь запустить сабж, следуя инструкции:
    "Для управления 42STH60-1206A нельзя использовать Драйвер шагового двигателя (Troyka-модуль) , но можно использовать Motor-Shield , на место одного двигателя подключив обмотку одной катушки, на место другого двигателя – обмотку другой катушки, управляя направлением так же как и коллекторными двигателями (на оба пинах направления должен быть одинаковый сигнал), а на пины вращения последовательно подавать напряжение (то на один, то на другой)".

    Середины обмоток висят в воздухе. Пины стандартные - 4,5,6,7.

    Сниппет написал такой:
    Код (Javascript):
    var Motor = require('@amperka/motor');
    var one = Motor.connect({phasePin: P4, pwmPin: P5, freq: 0});
    var two = Motor.connect({phasePin: P7, pwmPin: P6, freq: 0});
    var first = true;

    setInterval(function() {
      if(first) {
        first = false;
        two.write(0);
        one.write(0.7);
      } else {
        first = true;
        one.write(0);
        two.write(0.7);
      }
    }, 100);

    В результате вал ШД перемещается на шаг вперед и шаг назад в бесконечной петле.

    Подскажите, правильно ли я понял фразу "управляя направлением так же как и коллекторными двигателями" и какие тут еще могут быть варианты?
     
  2. Morgan

    Morgan Гик

    Ghbdtn!
    почти все правильно, за исключением одной детали.

    Если бы я был двигателем, по этому коду я бы не понял в какую сторону мне вращаться. По двум состояниям (first = true|false) нельзя определить через какую сторону вращаться: через лево или через право. Вот и получается дергание.

    Чтобы двигатель понимал в какую сторону вращаться, у него есть 4 состояния. Последовательно переключаясь между ними, двигателю объясняют в какую сторону вращаться. Технически это реализовывается включая обмотки не только в одну сторону, но и в другу.

    Вот пример:

    Код (Javascript):
    var Motor = require('@amperka/motor');
    var one = Motor.connect({phasePin: P4, pwmPin: P5, freq: 0});
    var two = Motor.connect({phasePin: P7, pwmPin: P6, freq: 0});
    var phase = 0;

    setInterval(function() {
      switch (phase % 4) {
        case 0:
          two.write(0);
          one.write(-1);
          break;
        case 1:
          two.write(-1);
          one.write(0);
          break;
        case 2:
          two.write(0);
          one.write(1);
          break;
        case 3:
          two.write(1);
          one.write(0);
          break;
      }
      phase++;
    }, 100);
     
  3. Akong

    Akong Нуб

    Большое спасибо, работает как нужно! )
     
  4. O'Kit

    O'Kit Нуб

    А мне эта программка помогла попеременно мигать светодиодами)))
     
  5. parovoZZ

    parovoZZ Гуру

    это прям такое достижение?
     
    O'Kit нравится это.
  6. O'Kit

    O'Kit Нуб

    Орешек знаний твёрд, но всё же мы не привыкли отступать! Нам расколоть его поможет - форум Амперки и, конечно, гуру parovoZZ ;)