Нарисуйте круг, используя 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 шага.
Я думаю, что вам нужно будет держаться подальше от задержки, так как вам нужно будет выполнять шаги в течение интервала времени. В какой-то момент времени вы определите, где вы находитесь и должны быть, но затем вам нужно будет создать несколько временных шагов, чтобы добраться туда.
Моя самая большая проблема в том, что ваши степперы могут быть недостаточно быстрыми для этого, но идем. До более высокого значения тока можно включить более быстрый шаг.