Bresenham算法的计算机图形绘制一条直线最初是用于绘图机控制两个硅镁层的x轴和y轴电机,最近遇到了一个非常类似的步进电机控制载问题,只是用Bresenham算法可以解决这些问题。
问题描述:有大约相同的两个步骤,西玛电机驱动,采用8051单片机控制芯片l297+l298需要同时旋转(在同一时间开始,停止)同时,但以不同的速度。例如在左边的西玛电机180步,同时右侧的硅镁层汽车倒退97步。就像从画的起源点对点线(180-180)。
接口是抽象和西玛电机四个功能:
空白motorleftshrink();//左侧西方寄居于米甸绷紧的绳索
空白motorleftloose();//左侧西方运动放松绳子
空白motorrightshrink();//右侧的西方寄居于米甸绷紧的绳索
空白motorrightloose();//右侧的硅镁层电动机松开绳子
此外,有两个辅助函数,分别对西玛电机控制:
空白motorleftstepint(直接)
{
if (direct == 1)
MotorLeftLoose();
else if (direct == -1)
MotorLeftShrink();
}
空白motorrightstepint(直接)
{
if (direct == 1)
MotorRightLoose();
else if (direct == -1)
MotorRightShrink();
}
现在的任务是编写一个函数movemotor(),有四个参数,分别两步西玛电机转速和方向,让它控制西玛电机同时运行。我使用整数版本的线性bresenham算法,从计算机图形学算法的书。
//参数:absdl,absdr分别对硅镁层电动机???的步骤
//SDL,特别提款权分别对西玛电机旋转方向
空白movemotor3(int,intabsdrintabsdlSDL,intSDR)
S2},{
El+=2*absdl;
而(er和gt;0){
++cntR;
MotorRightStep(sDR);
eR -= 2*steps;
}
Er+=2*absdr;
Wait_ms(15);//等待
}
断言(CNTL==absdl);
断言(容器==absdr);
}
基尔c51编译修改过程后,西玛电机运行状况良好:)
引用:http://tb.blog.csdn.net/trackback.aspx?Postid=488929
西玛电机
西玛电机 西玛电机
供应西玛电机重印▼z系列中型直流电机