Синхронизация коллекторных моторов

Тема в разделе "Arduino & Shields", создана пользователем Ciphrit, 4 сен 2021.

  1. Ciphrit

    Ciphrit Нуб

    Добрый день )) Подскажите, реально реализовать синхронную работу двигателей при такой схеме? Т.е. родной контролер плоттера считывает данные с энкодера и крутит свой двигатель. Хотелось бы подцепить дополнительно свой контролер и синхронно (с родным двигателем плоттера) крутить второй моторчик. Схемку прикрепил

    Безымянный-11.jpg
     
  2. Un_ka

    Un_ka Гуру

    Подсоединить параллельно не вариант?
    У вас есть:
    Энкодер—>контроллер плоттера ->мотор#1.
    Вы хотите добавить:
    Энкодер—>контроллер не плоттера ->мотор#2.
    Зачем?
     
  3. Ciphrit

    Ciphrit Нуб

    Все двигатели крутятся всегда по разному, при параллельном подключении один из двигателей всегда будет крутиться быстрее ))
     
  4. Un_ka

    Un_ka Гуру

    Энкодер на валу родного двигателя?
     
  5. Ciphrit

    Ciphrit Нуб

    Да
     
  6. Un_ka

    Un_ka Гуру

    То есть вам нужно синхронизировать вращение двух моторов, что на самом деле сводится к синхронизации мощности на валах. Зачем вам это делать? Один мотор не вытягивает по мощности?
     
  7. Ciphrit

    Ciphrit Нуб

    Они в разных местах стоят. И часть функций родного мотора, нужно переложить на второй мотор. Потому и нужна синхронная работа.
     
  8. Un_ka

    Un_ka Гуру

    Насколько я понимаю на их валах закреплены ролики, прокатывающие ленту, поэтому и нужно, чтобы моторы поворачивались на один и тот же угол.
    Тогда arduino должна принимать данные с энкодера родного мотора и данные с энкодера, закреплённого на валу второго мотора, и на их основе выдавать сигнал на мотор.
     
    Ariadna-on-Line нравится это.
  9. Ciphrit

    Ciphrit Нуб

    Вопрос был в другом. Реализовать ту схему, что есть реально или нет? (с шаговым двигателем она работает) но меня интересует именно коллекторный мотор.
     
  10. Un_ka

    Un_ka Гуру

    Это зависит от точности позиционирования вала. Точность позиционирования в свою очередь зависит от люфтов и точности замера положения вала, это уже зависит от энкодера.
    Люфты у мотора изображённого на картинке огромные, да и энкодера хороший стоит дорого. Лучше взять шаговый мотор. Схема может худо-бедно работать будет, механизм (плоттер) нет.
     
  11. Ciphrit

    Ciphrit Нуб

    Причём тут моторы на картинке... это всё просто схематичный рисунок. То что с шаговым двигателем будет работать и не худо бедно, а нормально это мы и так знаем. Интересует синхронизация двух коллекторных моторов на одном из которых на валу есть энкодер ...ни больше ни меньше
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Нет. Без энкодеров на валах ОБОИХ коллекторных моторов - схема работать нормально не будет. Да и с шаговыми движками работать будет до первого "проскока" шаговика (который без энкодера). А это бывает и не редко. Не спроста в устройствах с шаговиками (где нет энкодеров) стоят "концевики" - позиционеры отсчета координат.
     
    Последнее редактирование: 4 сен 2021
  13. parovoZZ

    parovoZZ Гуру

    нет
     
  14. Ciphrit

    Ciphrit Нуб

    Спасибо )) Будем думать тогда, как быть ((
     
  15. Ciphrit

    Ciphrit Нуб

    Вот так не заработает? -
    Код (C++):
    volatile int rotDirection; // Rotation Direction 1, 2 or 0 (no direction)
    volatile int numberOfMarks;
    volatile int numberOfTurns;
    #define MOTORENABLE 11
    #define MOTORDIRA 10
    #define MOTORDIRB 9
    //Optical
    #define OPT_A 2
    #define OPT_B 3
    void stinkyfish () {
    //delay(4); // delay for Debouncing
    int iA=digitalRead(OPT_A);
    int iB=digitalRead(OPT_B);
    if (iA==iB)
    rotDirection= 1;
    else
    rotDirection= 2;
    numberOfMarks++;
    if (numberOfMarks>180)
    {
    numberOfMarks=0;
    numberOfTurns++;
    }
    }
    void setup() {
    //---set pin direction
    pinMode(MOTORENABLE,OUTPUT);
    pinMode(MOTORDIRA,OUTPUT);
    pinMode(MOTORDIRB,OUTPUT);
    //-- Optical
    pinMode(OPT_A,INPUT);
    pinMode(OPT_B,INPUT);
    attachInterrupt(0,stinkyfish,CHANGE);
    Serial.begin(9600);
    Serial.println("Ready");
    //
    digitalWrite(MOTORDIRA,HIGH);
    digitalWrite(MOTORDIRB,LOW);
    }
    void loop() {
    // TEST 1 Test for speed
    int ii=255;
    while (ii>125)
    {
    Serial.print("PWM Speed: "); //~
    Serial.println(ii);
    analogWrite(MOTORENABLE,ii);
    ii-=10;
    delay(2000);
    Serial.print("number of turns:");
    Serial.println(numberOfTurns);
    }
    digitalWrite(MOTORENABLE,LOW); //all done
    Serial.println("Motor stopped");
    delay(10000);
    // TEST 2
    Serial.println("TEST PRECISION");
    for (int iX=1; iX<=10;iX++)
    { Serial.print ("Testing Mark: ");
    Serial.println(iX*10);
    numberOfMarks=0;
    analogWrite(MOTORENABLE,LOW);
    while (numberOfMarks<iX*10)
    {analogWrite(MOTORENABLE,255);
    }
    analogWrite(MOTORENABLE,LOW);
    Serial.println(numberOfMarks);
    delay(3000);
    }
    }
     
    Последнее редактирование: 5 сен 2021
  16. Ciphrit

    Ciphrit Нуб

    Я просто понять никак не могу какая разница ардуине где энкодер. Пусть она думает, что он на втором моторе стоит и управляет им... Разве нет?
     
  17. parovoZZ

    parovoZZ Гуру

    Читай Гордеева "Основы автоматики".
     
    Un_ka нравится это.
  18. Un_ka

    Un_ka Гуру

  19. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Только при "математически" идентичных движках и их нагрузках движки (коллекторные) будут двигаться "математически" одинаково. А такого в жизни не бывает. Вот эту разницу свойств контролируют энкодеры.
     
  20. parovoZZ

    parovoZZ Гуру

    Не сможешь ты засинхронизировать коллекторники. Только жёсткая механическая связь.