Нарисуйте круг, используя 2 шаговых двигателя (Arduino)

Я хочу нарисовать круг, используя 2 шаговых двигателя (42H48) и 2 драйвера (TB6560).

Аппаратные средства такие:

   (двигатель по оси Y)
       |
       |
--—--- |-------- (двигатель по оси X)
       |
       |

Теперь я могу управлять только этими моторами так, чтобы они рисовали как ромбовидную форму.

// 1
digitalWrite(xAxisMotorDirection, HIGH);
digitalWrite(yAxisMotorDirection , HIGH);
for(i=0; i<12000; i++)
{
    digitalWrite( xAxisMotorPulse, HIGH);
    digitalWrite( yAxisMotorPulse , HIGH);
    delay(1);
    digitalWrite( xAxisMotorPulse , LOW);
    digitalWrite( yAxisMotorPulse , LOW);
    delay(1);
}

// 2
digitalWrite(xAxisMotorDirection, HIGH);
digitalWrite(yAxisMotorDirection , LOW);
for(i=0; i<12000; i++)
{
    digitalWrite( xAxisMotorPulse, HIGH);
    digitalWrite( yAxisMotorPulse , HIGH);
    delay(1);
    digitalWrite( xAxisMotorPulse , LOW);
    digitalWrite( yAxisMotorPulse , LOW);
    delay(1);
}

// 3
digitalWrite(xAxisMotorDirection, LOW);
digitalWrite(yAxisMotorDirection , LOW);
for(i=0; i<12000; i++)
{
    digitalWrite( xAxisMotorPulse, HIGH);
    digitalWrite( yAxisMotorPulse , HIGH);
    delay(1);
    digitalWrite( xAxisMotorPulse , LOW);
    digitalWrite( yAxisMotorPulse , LOW);
    delay(1);
}

// 4
digitalWrite(xAxisMotorDirection, LOW);
digitalWrite(yAxisMotorDirection , HIGH);
for(i=0; i<12000; i++)
{
    digitalWrite( xAxisMotorPulse, HIGH);
    digitalWrite( yAxisMotorPulse , HIGH);
    delay(1);
    digitalWrite( xAxisMotorPulse , LOW);
    digitalWrite( yAxisMotorPulse , LOW);
    delay(1);
}

Любой хороший подход, чтобы нарисовать круг, используя пульс?

Я погуглил "алгоритм Брезенхэма", но я понятия не имею, как реализовать этот алгоритм с использованием импульса.

1 ответ

Это просто концепция, я не проверял это:

Составьте таблицу поиска с парами x и y. Чтобы создать это, поместите 100 или около того значений между 0 и 2pi и вычислите sin и cos этого набора и поместите в таблицу.

Создайте целочисленную индексную переменную для x и одну для y. Используйте таймер или задержку, чтобы установить регулярный интервал времени. На каждом временном интервале смотрите следующую позицию в таблице поиска и делайте шаги по соответствующим осям, чтобы индекс шага по центру совпадал с таблицей поиска на этом временном шаге.

Пример: table[1] = (1,2) Мои текущие позиции шагового регулятора (2,-1), это произвольно на этом временном шаге. Я бы шагнул назад на x шагового шага назад, а на y вперед на 3 шага.

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

Моя самая большая проблема в том, что ваши степперы могут быть недостаточно быстрыми для этого, но идем. До более высокого значения тока можно включить более быстрый шаг.

Другие вопросы по тегам