使用2个步进电机(Arduino)画一个圆圈

时间:2017-08-29 03:27:45

标签: arduino geometry bresenham motordriver stepper

我想使用2个步进电机(42H48)和2个驱动器(TB6560)画一个圆圈。

硬件是这样的:

   (y-axis motor)
       |
       |
--—--- |-------- (x-axis motor)
       |
       |

现在,我只能控制这些电机像菱形一样画出来。

// 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);
}

使用脉冲绘制圆圈的任何好方法?

我用谷歌搜索了“bresenham算法”,但我不知道如何使用脉冲来实现这个算法。

1 个答案:

答案 0 :(得分:0)

这只是一个概念,我还没有测试过:

创建一个包含x和y对的查找表。要创建它,请在0到2pi之间设置大约100个值,并计算该组的sin和cos并将其放置在表中。

为x创建一个整数索引变量,为y创建一个。使用计时器或延迟来建立常规时间间隔。在每个时间间隔上,查看查找表中的下一个位置,并在相应的轴上执行步骤,以使中间的步进索引与该时间步的查找表匹配。

示例:table [1] =(1,2)我当前的步进位置是(2,-1)这是任意的在那个时间步上我会把我的x步进器退回到1步和我的你前进3步。

我认为你需要远离延迟,因为你需要在时间间隔内执行这些步骤。在一个时间步,您将确定您的位置和需要,但随后将需要创建几个定时步骤来实现目标。

我最担心的是你的踏步机可能不够快,但是idk。高达一点可以实现更快的步进。