第八节、Bresenham直线插补运动【51单片机-L298N-步进电机教程】

摘要:前面章节主要介绍单个电机控制,本节内容介绍两个电机完成直线插补运动

一、 Bresenham直线算法介绍
Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发,最初用于计算机显示直线,它确定应该选择的n维光栅的点,以便形成两点之间的直线的近似。因为它仅使用整数加法,减法和位移,非常适合单片机系统

二、算法推导
关于该算法的视频推导教程非常多,推荐B站洛阳鸿卓课工场-白洋老师的Bresenham算法教程,讲解十分详细,链接如下:
https://www.bilibili.com/video/BV1eE411p7tn/?spm_id_from=333.337.search-card.all.click&vd_source=cbda27af6174dc53fd338dba3ab7dc66

三、算法移植
根据单片机步进电机系统的特点,将bresenham算法移植到单片机系统,与上述视频教程方式有区别,单片机系统适合整数处理,将坐标原点移动至左下角,即整个可移动区域为第一象限
在这里插入图片描述
第一种情况:直线在第一象限前半区(0<θ≤45)
1、计算斜率k
k=Y2−Y1X2−X1=ΔYΔXk=\frac{Y_{2}-Y_{1}}{X_{2}-X_{1}}=\frac{\Delta Y}{\Delta X} k=X2X1Y2Y1=ΔXΔY

2、判断主方向
ΔX≥ΔY,主方向为X\Delta X\ge \Delta Y,主方向为XΔXΔY,主方向为X

3、比较Y与Middle大小
Y:直线实际值
Middle:中点值

① 赋初值

  • Y=kx=ΔYΔX∗1=ΔYΔXY=kx=\frac{\Delta Y}{\Delta X} *1=\frac{\Delta Y}{\Delta X}Y=kx=ΔXΔY1=ΔXΔY
  • Middle=0.5Middle=0.5Middle=0.5
  • INTX=0INTX=0INTX=0
  • INTY=0INTY=0INTY=0

② 判别式整数化,乘公倍数2△X

  • Y=2△YY=2△YY=2△Y
  • Middle=△XMiddle=△XMiddle=X

③ 循环判断
如果Y≥Middle成立如果Y≥Middle成立如果YMiddle成立

  • Middle=Middle+2△XMiddle= Middle+2△XMiddle=Middle+2△X
  • INTY=INTY+1INTY=INTY+1INTY=INTY+1

④ 更新参数

  • INTX=INTX+1INTX=INTX+1INTX=INTX+1
  • Y=Y+2△YY = Y +2△YY=Y+2△Y

4、取坐标(INTX,INTY)为结果

第二种情况:直线在其他位置
在这里插入图片描述

统一转换到第1区处理,处理流程如下:
第1步判断直线方向
通过直线起点坐标P1(X1,Y1),终点坐标P2(X2,Y2),可以判断向量P1 P2 位于哪个方位

第2步判断主轴与电机方向
1/4/5/8四个方位主轴为X,副轴为Y,其中1/8主轴电机方向为正,4/5主轴电机方向为负
2/3/6/7四个方位主轴为Y,副轴为X,其中2/3主轴电机方向为正,6/7主轴电机方向为负

第3步根据Bresenham算法判断是否有副轴移动
让主轴匀速移动,根据Bresenham的算法,判断移动主轴的每一步,是否需要移动副轴,最终实现直线插值运动

四、实测
烧录hex文件后,单片机上电,步进电机直线插补运动,从起点(0,0)直线插补到终点(1000,2000),单位:步
请添加图片描述
Proteus仿真
请添加图片描述
在这里插入图片描述
五、功能扩展
扩展1:
① 增加4个按键,控制电机启动、终点坐标
② 增加数码管,显示信息
请添加图片描述

扩展2:
① 增加4个按键,控制电机启动、终点坐标
② 增加1602LCD,显示信息
请添加图片描述

扩展3:
① 连续绘制模式,绘制一个正五角星
在这里插入图片描述
请添加图片描述
请添加图片描述

六、附件(网盘内keil源码为付费资源,提供答疑,Proteus免费)
链接: https://pan.baidu.com/s/1anUuH0-IYHlZZ12a2SDgNw
提取码: jku6

↓↓↓点击下方目录,查看L298N系列全部文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值