Симуляционно управлять двумя шаговыми двигателями?

Я использую Arduino Mega 2560, драйвер двигателя A4988 для 5 шаговых двигателей. Есть оси X1, X2, Y, Z, A, и если я контролирую Y и Z сразу, это работает. Но когда я просто меняю ось с Y и Z на X1 и X2, вращается только шаговый двигатель X1. X1 и X2 должны двигаться одновременно (одновременно), так как они соединены в одну полосу.

Мой код Arduino IDE:

=============================

const int X2step = 5;

const int X2dir = 4;

const int X1step = 3;

const int X1dir = 2;

void setup() {

    pinMode(X1step,OUTPUT);

    pinMode(X1dir,OUTPUT);

    pinMode(X2step,OUTPUT);

    pinMode(X2dir,OUTPUT);

}

void loop() {

    digitalWrite(X1dir,HIGH);

    digitalWrite(X2dir,HIGH);

    for(int x = 0; x < 4000; x++) {

        digitalWrite(X1step,HIGH);

        delayMicroseconds(2000);

        digitalWrite(X1step,LOW);

        delayMicroseconds(2000);

        digitalWrite(X2step,HIGH);

        delayMicroseconds(2000);

        digitalWrite(X2step,LOW);

        delayMicroseconds(2000);
    }

    delay(1000);

    digitalWrite(X1dir,LOW);

    digitalWrite(X2dir,LOW);

    for(int x = 0; x < 4000; x++) {

        digitalWrite(X1step,HIGH);

        delayMicroseconds(2000);

        digitalWrite(X1step,LOW);

        delayMicroseconds(2000);

        digitalWrite(X2step,HIGH);

        delayMicroseconds(2000);

        digitalWrite(X2step,LOW);

        delayMicroseconds(2000);
    }

    exit(0);

============================================== ==

Любое предложение будет полезно для меня. Спасибо.

, 👍0

Обсуждение

Не могли бы вы удалить пустые строки, может быть. Они просто заставляют код казаться длиннее, чем он должен быть. (Только мое мнение), @Duck Dodgers

И выровняйте код (убедитесь, что блоки { и } имеют правильный отступ, и сделайте отступ для всего кода (используйте ctrl-k после выбора всего кода)., @Michel Keijzers

Работает ли это, когда вы снабжаете оба степпера одной и той же сигнальной линией (подключенной к одному и тому же выходному контакту)?, @chrisl

@Duck Dodgers, Michel Keijzers В Arduino IDE я правильно написал свои коды. Я намеренно поместил пустые строки, чтобы их было легко читать, а также сделал правильный отступ в Arduino IDE., @Yang Kee Won

@chrisl Вы имеете в виду, например, на контакте 2 подключить X1, X2, а на контакте 3 подключить X1, X2 шаг? И спасибо за ваши комментарии Дак Доджерс, Мишель Кейзерс, Крисл, @Yang Kee Won

@YangKeeWon, я могу представить, что вы сделали это правильно в Arduino IDE. А вот Arduino IDE видите только вы. Мы не можем. Мы видим код только в этом посте. И если код не имеет отступа/формата, то его становится сложно разобрать, особенно для тех, кто не знаком с кодом. В любом случае, в вашем коде отсутствует по крайней мере одна закрывающая скобка } для функции loop() (что было бы почти невозможно обнаружить без отступа в коде и т. д.). Извините за педантичность в этом. Просто говорю, что люди могут помочь вам только в том случае, если вы поможете им ясно увидеть вашу проблему.:), @Duck Dodgers

@YangKeeWon Да, просто подключите контакты обоих двигателей к одному и тому же набору контактов. Если это все еще не работает, что-то не так с вашей проводкой или механикой., @chrisl

Всем спасибо за помощь. И это была простая проблема. Во-первых, я не устанавливал противоположное направление, но это не было настоящей проблемой, потому что двигатель X2 все еще не двигался. Я думаю, что проблема была в макетной плате, поэтому я поменял ее, и она заработала. С уважением, ЮК., @Yang Kee Won


1 ответ


1

Вероятно, у вас есть другие проблемы для загрузки, основанные на том, что вы сказали о перемещении только X1, но сначала я предлагаю устранить ошибку в вашем коде. Похоже, у вас есть задержки между цифровыми записями в x1, x2. И установите для них одинаковые направления.

По крайней мере, вы должны писать на шаг X2 каждый раз, когда записываете на шаг X1. Если ваша проводка идентична, а двигатели по существу прикреплены зеркально на противоположных сторонах вала, не забудьте установить противоположные направления перед отправкой шагов. (Если они находятся на противоположных сторонах вала, одно вращение против часовой стрелки означает, что другое вращается по часовой стрелке. Вы также можете поэкспериментировать с проводкой, какая катушка куда и как идет, но идентичность проще.)

digitalWrite(X1dir,HIGH);
digitalWrite(X2dir,LOW);

Или

digitalWrite(X1dir,LOW);
digitalWrite(X2dir,HIGH);

Затем пошагово

digitalWrite(X1step,HIGH);
digitalWrite(X2step,HIGH);

delayMicroseconds(2000);

digitalWrite(X1step,LOW);
digitalWrite(X2step,LOW);

delayMicroseconds(2000);
...
,

Спасибо. Я не знал, что двигатели должны вращаться в противоположном направлении. Проблема заключалась в простой проводке, но после этого ваш комментарий мне очень помог. Спасибо за добрый ответ. С уважением, ЮК., @Yang Kee Won