计算机图形学中绘制直线的Bresenham算法原本是用在绘图仪上控制X轴方向和Y轴方向的两部电机的,最近遇到一个十分类似的步进电机控制问题,用Bresenham算法恰好能解决。
问题描述:有左右两个相同的步进电机,用8051单片机控制L297 + L298芯片驱动,需要它们同时转动(同时启动,同时停止),但转速不同。例如左侧电机正转180步,同时右侧电机反转97步。这就好比从原点出发画一条到点(180, -97)的直线。
与电机的接口已抽象为四个函数:
void MotorLeftShrink(); // 左侧电机收紧绳索
void MotorLeftLoose(); // 左侧电机放松绳索
void MotorRightShrink(); // 右侧电机收紧绳索
void MotorRightLoose(); // 右侧电机放松绳索
另外有两个辅助函数,分别控制左右电机:
void MotorLeftStep(int direct)
{
if (direct == 1)
MotorLeftLoose();
else if (direct == -1)
MotorLeftShrink();
}
void MotorRightStep(int direct)
{
if (direct == 1)
MotorRightLoose();
else if (direct == -1