0

我想用 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);
}

使用脉冲画圆的任何好方法?

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

4

1 回答 1

0

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

用 x 和 y 对制作一个查找表。为了创建这个,在 0 到 2pi 之间留出 100 个左右的值,然后计算该集合的 sin 和 cos 并放在表中。

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

示例:table[1] = (1,2) 我当前的步进器位置是 (2,-1)这在那个时间步上是任意的,我会将我的 x 步进器向后步进 1 步,我的 y 向前步进 3 步。

我认为您需要避免延迟,因为您需要在时间间隔内执行这些步骤。在一个时间步,您将确定您在哪里以及需要在哪里,但随后必须创建几个定时步骤才能到达那里。

我最大的担心是你的步进器可能不够快,但 idk。更高的电流可以实现更快的步进。

于 2017-08-29T10:58:11.420 回答