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

news2025/1/19 11:16:58

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

一、 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 = Y 2 − Y 1 X 2 − X 1 = Δ Y Δ X k=\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 = k x = Δ Y Δ X ∗ 1 = Δ Y Δ X Y=kx=\frac{\Delta Y}{\Delta X} *1=\frac{\Delta Y}{\Delta X} Y=kx=ΔXΔY1=ΔXΔY
  • M i d d l e = 0.5 Middle=0.5 Middle=0.5
  • I N T X = 0 INTX=0 INTX=0
  • I N T Y = 0 INTY=0 INTY=0

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

  • Y = 2 △ Y Y=2△Y Y=2△Y
  • M i d d l e = △ X Middle=△X Middle=X

③ 循环判断
如果 Y ≥ M i d d l e 成立 如果Y≥Middle成立 如果YMiddle成立

  • M i d d l e = M i d d l e + 2 △ X Middle= Middle+2△X Middle=Middle+2△X
  • I N T Y = I N T Y + 1 INTY=INTY+1 INTY=INTY+1

④ 更新参数

  • I N T X = I N T X + 1 INTX=INTX+1 INTX=INTX+1
  • Y = Y + 2 △ Y Y = Y +2△Y Y=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),单位:步
请添加图片描述
在这里插入图片描述在这里插入图片描述

五、功能扩展
扩展1:(实测视频见文末百度网盘)
① 增加4个按键,控制电机启动、终点坐标
② 增加数码管,显示信息

扩展2:(实测视频见文末百度网盘)
① 增加4个按键,控制电机启动、终点坐标
② 增加1602LCD,显示信息

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

六、附件
Hex测试程序+测试视频请见百度网盘
链接: https://pan.baidu.com/s/1xGd9jeEvoAkZ_PkHIywRjg
提取码: 1gvx

Keil源码请见某宝,搜索:【皮皮黄步进电机】

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用数据层进行数据生命周期管理

作者&#xff1a;来自 Elastic Stef Nestor Elasticsearch 7.10 使配置数据生命周期变得不再那么复杂。在这篇博文中&#xff0c;我将介绍一些变化、如何使用它们以及一些最佳实践。 数据生命周期可以包含很多阶段&#xff0c;因此我们将涉及&#xff1a; 将集群划分为层&…

大数据-244 离线数仓 - 电商核心交易 ODS层 数据库结构 数据加载 DataX

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

【RK3562J开发笔记】MCP2518FD外部CAN-FD控制器的调试方法

“SPI转CAN-FD”是嵌入式开发领域的常用方法&#xff0c;它极大地促进了不同通信接口之间的无缝连接&#xff0c;并显著降低了系统设计的复杂性。飞凌嵌入式依托瑞芯微RK3562J处理器打造的OK3562J-C开发板因为内置了SPI转CAN-FD驱动&#xff0c;从而原生支持这一功能。该开发板…

OpenCV 图像基本操作

OpenCV快速通关 第一章&#xff1a;OpenCV 简介与环境搭建 第二章&#xff1a;OpenCV 图像基本操作 OpenCV 图像基本操作 OpenCV快速通关第二章&#xff1a;OpenCV 图像基本操作一、相关结构体与函数介绍&#xff08;一&#xff09;cv::Mat 结构体&#xff08;二&#xff09;c…

QT通过在线安装器安装【详细】

在线安装器地址&#xff1a; 官方在线安装器&#xff1a;Index of /official_releases/online_installers (qt.io) 通过命令行启动安装页面 直接双击qt安装程序&#xff0c;在线安装会非常慢&#xff0c;甚至安装失败&#xff0c;所以通过命令行页面启动安装页面。点击wind…

保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码

一、获取二维码 uni.request({url: https://api.weixin.qq.com/wxa/getwxacode?access_token${getStorage("token")},responseType: "arraybuffer",method: "POST",data: {path: "/pages/index/index"},success(res) {// 转换为 Uint…

基于stm23的智慧宿舍系统 (DAY10)_小程序

好久没记录开发进度了&#xff0c;今天小程序差不多开发完了&#xff0c;UI这块算是比较常见了&#xff0c;主要功能是能连接onenet查看设备上传的数据&#xff0c;同时也能对设备进行一些控制下面是几个主要的函数&#xff0c;功能比较简单 wx.request({url: ${apiBaseUrl}/t…

dockerfile部署前后端(vue+springboot)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言0.环境说明和准备1.前端多环境打包1.1前端多环境设置1.2打包 2.后端项目多环境配置以及打包2.1后端多环境配置2.2项目打包 3.文件上传4.后端镜像制作4.1dockerf…

Tomcat使用教程

下载地址&#xff1a;https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…

vim实用命令整理(常用的命令)

本章教程,总结自己平时使用vim过程中,经常使用的命令,分享给大家。 一、高频使用 i:进入插入模式(光标处插入) a:进入插入模式(光标后插入) esc:返回普通模式 ::进入命令模式 :w:保存 :q:退出 :wq:保存并退出 :q!:强制退出不保存 :e filename:打开文件 :set n…

UiPath API接口说明

Swagger网址 私有云网址&#xff08;企业版&#xff09; https://企业/swagger/index.html 公有云网址&#xff08;社区版&#xff09; https://cloud.uipath.com/linan/LinanZhang/orchestrator_/swagger/index.html#/ 常见问题 Swagger页面测试请求时报错“You are not a…

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…

【解决pycharm下site-packages文件标记为红色的问题】

怎么解决pycharm下site-packages文件标记为红色的问题 这是一个pycharm无法识别本地site-packages问题答案解释器设置路径如下&#xff1a; 这是一个pycharm无法识别本地site-packages问题 最近正在搭建一个python3requestsunittestHTMLTestRunner接口测试框架&#xff0c;发现…

高中数学:计数原理-排列组合

文章目录 一、排列排列数例题 二、组合组合数例题 三、使用方法总结 一、排列 排列数 例题 二、组合 组合数 例题 三、使用方法总结 组合&#xff1a;从n个元素中抽取m个元素&#xff0c;不排序&#xff0c;则用组合计算 排列&#xff1a;从n个元素中抽取m个元素&#xff0c;再…

软件设计师下午题知识点

下午题一&#xff1a;数据流图DFD 数据流图平衡原则 此题注意两个平衡&#xff1a; 1、父图与子图的平衡&#xff08;顶层图、0层图&#xff09;&#xff1b;2、子图内平衡&#xff09;遵循自顶向下&#xff0c;从抽象到具体 结构化分析 在结构化分析方法中&#xff0c;数…

C++哈希(一)

1.底层结构 顺序结构以及平衡中&#xff0c;元素关键码与其存储位置之间没有相对应的关系&#xff0c;因此在查找一个元素时&#xff0c;要经过关键码的多次比较。顺序查找的时间复杂度为O(N)。 理想的搜索方法&#xff1a;可以不经过比较&#xff0c;依次直接从表中直接搜索…

Open-webui:本地化管理AI大模型

Open WebUI 是一个开源的用户界面工具&#xff0c;用于运行和管理大语言模型 (LLM) 及其他人工智能功能。它的主要目的是简化人工智能模型的本地部署和操作&#xff0c;让用户能够方便地通过浏览器界面与各种 AI 模型进行交互。 官方地址&#xff1a;https://github.com/open-…

1 数据库(上):MySQL的概述和安装、SQL简介、IDEA连接数据库使用图形化界面

文章目录 前言一、数据库相关的概念二、MySQL概述1 MySQL的安装和配置2 MySQL登录、退出&#xff08;1&#xff09;mysql -uroot -p1234 或者mysql -uroot -p ---- 登录&#xff08;2&#xff09;exit或者quit ---- 退出 3 远程登录服务器上的MySQL命令mysql -hip地址 -P3306 -…

Elasticsearch:使用硬件加速的 SIMD 指令实现超快 BBQ

作者&#xff1a;来自 Elastic Chris Hegarty 我们如何使用硬件加速 SIMD&#xff08;Single Instruction Multiple Data - 单指令多数据&#xff09;指令优化 BBQ 中的向量比较。 随着我们继续致力于让 Elasticsearch 和 Apache Lucene 成为存储和搜索向量数据的最佳场所&…

面经自测——死锁/死锁的必要条件/死锁的预防/进程通信的方式

前言 本文是作者专门用来自测Java后端相关面试题的&#xff0c;所有问题都是在牛客、知识星球或网上找到的最近最新的面试题&#xff0c;全文回答都是作者按自己的真实水平仿照真实环境的回答&#xff0c;所以答案不一定真实&#xff08;但回答一定真诚&#x1f923;&#xff0…