我想使用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算法",但我不知道如何使用Pulse实现此算法。
这只是一个概念,我尚未对其进行测试:
用X和Y对制作一个查找表。为了创建这个,空间100左右的值在0和2pi之间,并计算该设置和放置在表格中的罪和cos。
为x创建一个整数索引变量,一个为y创建一个。使用计时器或延迟来建立常规时间间隔。在每个时间间隔中,查看查找表中的下一个位置,并在适当的轴上进行步骤,以使中间的步进索引匹配该时间段的查找表。
示例:表[1] =(1,2)我的当前步进位置是(2,-1)这是该时间步上的任意,我将X步进1步,然后y向前3步。
我认为您需要远离延迟,因为您需要在时间间隔内执行步骤。在一个时间步骤中,您将确定自己的位置和需要的位置,但必须创建几个定时步骤才能到达那里。
我最大的担忧是您的草原可能不够快,而是IDK。最高较高的电流可以使步进速度更快。