我想使用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算法”,但我不知道如何使用脉冲来实现这个算法。
答案 0 :(得分:0)
这只是一个概念,我还没有测试过:
创建一个包含x和y对的查找表。要创建它,请在0到2pi之间设置大约100个值,并计算该组的sin和cos并将其放置在表中。
为x创建一个整数索引变量,为y创建一个。使用计时器或延迟来建立常规时间间隔。在每个时间间隔上,查看查找表中的下一个位置,并在相应的轴上执行步骤,以使中间的步进索引与该时间步的查找表匹配。
示例:table [1] =(1,2)我当前的步进位置是(2,-1)这是任意的在那个时间步上我会把我的x步进器退回到1步和我的你前进3步。
我认为你需要远离延迟,因为你需要在时间间隔内执行这些步骤。在一个时间步,您将确定您的位置和需要,但随后将需要创建几个定时步骤来实现目标。
我最担心的是你的踏步机可能不够快,但是idk。高达一点可以实现更快的步进。