当前位置: 首页 > news >正文

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

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

一、 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源码请见某宝,搜索:【皮皮黄步进电机】

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

相关文章:

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

摘要&#xff1a;前面章节主要介绍单个电机控制&#xff0c;本节内容介绍两个电机完成直线插补运动 一、 Bresenham直线算法介绍 Bresenham直线算法由Jack Elton Bresenham于1962年在IBM开发&#xff0c;最初用于计算机显示直线&#xff0c;它确定应该选择的n维光栅的点&#…...

唇形同步视频生成工具:Wav2Lip

一、模型介绍 今天介绍一个唇形同步的工具-Wav2Lip&#xff1b;Wav2Lip是一种用于生成唇形同步&#xff08;lip-sync&#xff09;视频的深度学习算法&#xff0c;它能够根据输入的音频流自动为给定的人脸视频添加准确的口型动作。 &#xff08;Paper&#xff09; Wav2Lip模型…...

旅游管理系统的设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;旅游管理系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#…...

burp常用机漏洞测试理论

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…...

TCP/IP 和 UDP

一、TCP/IP&#xff08;传输控制协议&#xff09; TCP/IP 是一个协议族&#xff0c;它是互联网的基础协议&#xff0c;为网络通信提供了标准化的方法。TCP/IP 分为四个层次&#xff0c;每一层都有特定的功能&#xff1a; 应用层&#xff1a;这是最接近用户的层&#xff0c;包含…...

FastAPI解决跨域报错net::ERR_FAILED 200 (OK)

目录 一、跨域问题的本质 二、FastAPI中的CORS处理 1. 安装FastAPI和CORS中间件 2. 配置CORS中间件 3. 运行FastAPI应用 三、解决跨域报错的步骤 四、案例&#xff1a;解决Vue.js与FastAPI的跨域问题 1. Vue.js前端应用 2. FastAPI后端API 3. 配置CORS中间件 4. 运行…...

git如何新建分支并提交?

1. 检查当前分支 在开始之前&#xff0c;最好确认你当前所在的分支。 git branch 当前分支前面会有一个 *号。 2. 新建分支 使用 git branch 命令创建一个新的分支。假设你要创建一个名为 new-feature 的分支。 git branch new-feature 3. 切换到新分支 使用 git checkou…...

使用 LlamaFactory 结合开源大语言模型实现文本分类:从数据集构建到 LoRA 微调与推理评估

文章目录 背景介绍文本分类数据集Lora 微调模型部署与推理期待模型的输出结果 文本分类评估代码 背景介绍 本文将一步一步地&#xff0c;介绍如何使用llamafactory框架利用开源大语言模型完成文本分类的实验&#xff0c;以 LoRA微调 qwen/Qwen2.5-7B-Instruct 为例。 文本分类…...

Python基础学习总结篇

Python基础学习_01注释、变量、计算、打印 Python基础学习-02转义、输入、函数 Python基础学习-03逻辑分支语句、循环 Python基础学习-04列表List Python基础学习-05元组 tuple Python基础学习-06字典Dict Python基础学习-07不可重复的set集合 Python基础学习-08字符串 …...

8. Debian系统中显示屏免密码自动登录

本文介绍如何在Debian系统上&#xff0c;启动后&#xff0c;自动免密登录&#xff0c;不卡在登录界面。 1. 修改lightDM配置文件 嵌入式Debian系统采用lightDM显示管理器&#xff0c;所以&#xff0c;一般需要修改它的配置文件/etc/lightdm/lightdm.conf&#xff0c;找到[Seat…...

ubuntu安装nginx并设置开机自启动

1、下载nginx相关依赖包 sudo apt-get install gccsudo apt-get install libpcre3 libpcre3-devsudo apt-get install zlib1g zlib1g-devsudo sudo apt-get install opensslsudo apt-get install libssl-devsudo apt install make2、进入想下载安装包位置 cd /usr/local3、通…...

SQLServer中使用ISNULL替换为指定的替换值

ISNULL (Transact-SQL) 适用于&#xff1a; SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics 分析平台系统 (PDW)Microsoft Fabric 中的 SQL 分析端点Microsoft Fabric 中的仓库 NULL替换为指定的替换值。 1、语法 ISNULL ( check_expression , rep…...

深入浅出:PHP函数的定义与使用

文章目录 前言什么是函数定义函数语法示例 调用函数示例 参数传递按值传递示例按引用传递示例默认参数示例可变数量的参数示例 返回值示例 变量作用域全局作用域示例局部作用域示例静态作用域示例 匿名函数示例闭包示例 递归函数示例 内置函数常见内置函数示例 用户自定义函数示…...

C++知识整理day4内存管理——new和delete详解

文章目录 1.C/C内存分布2.C语言中动态内存管理&#xff1a;malloc/realloc/calloc3.C内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型 4.malloc/free和new/delete到底什么区别&#xff1f;4.1 对于自定义类型4.2 对于自定义类型4.3 总结&#xff1a;它们…...

部署项目报错

vue2项目部署后 Error: Cannot find module /views/*** 1.起因 登录页、首页等静态页面可以正常进入&#xff0c;后端访问也正常&#xff0c;可以获取到验证码。 但是登录之后会发现首页空白或者进入不到首页 F12查看有报错信息&#xff1a;Error: Cannot find module ‘/v…...

专业140+总分420+上海交通大学819考研经验上交电子信息与通信工程,真题,大纲,参考书。博睿泽信息通信考研论坛,信息通信考研Jenny

考研结束&#xff0c;专业819信号系统与信号处理140&#xff0c;总分420&#xff0c;终于梦圆交大&#xff0c;高考时敢都不敢想目标&#xff0c;现在已经成为现实&#xff0c;考研后劲很大&#xff0c;这一年的复习经历&#xff0c;还是历历在目&#xff0c;整理一下&#xff…...

电子信息工程自动化 单片机自动门控制系统设计

摘 要 伴随着社会经济的发展进步、科学技术的发展进步以及人民群众日常生活质量的逐渐提升&#xff0c;自动门开始全面进入人民群众的生活&#xff0c;逐渐发展成为了宾馆、大型超市、政府等当代建筑里必须配备的设备&#xff0c;是建筑自动智能化综合水平的主要标准之一。它具…...

T C P

文章目录 基于UDP应用场景 TCP协议TCP 协议段格式确认应答机制16位窗口大小 下定义32位序号和32位确认序号 基于UDP应用场景 UDP&#xff0c;tcp这样的协议根本不是直接谈UDP。tcp的应用场景&#xff0c;一定是上层写了应用层协议&#xff0c;所以才有UDP协议的应用场景。 比…...

PDF与PDF/A的区别及如何使用Python实现它们之间的相互转换

目录 概述 PDF/A 是什么&#xff1f;与 PDF 有何不同&#xff1f; 用于实现 PDF 与 PDF/A 相互转换的 Python 库 Python 实现 PDF 转 PDF/A 将 PDF 转换为 PDF/A-1a 将 PDF 转换为 PDF/A-1b 将 PDF 转换为 PDF/A-2a 将 PDF 转换为 PDF/A-2b 将 PDF 转换为 PDF/A-3a 将…...

【Linux课程学习】: 进程地址空间,小故事理解虚拟地址,野指针

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 Linux学习笔记&#xff1a; https://blog.csdn.net/…...

Perplexity AI认证考试情报解密(2024Q3动态锁频版):仅限内部渠道更新的题库变动预警

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity AI认证考试情报解密&#xff08;2024Q3动态锁频版&#xff09;&#xff1a;仅限内部渠道更新的题库变动预警 核心变动速览 2024年第三季度起&#xff0c;Perplexity AI官方对认证考试实施“…...

从打磨抛光到医疗康复:拆解阻抗控制在机器人实际场景中的选型指南

从打磨抛光到医疗康复&#xff1a;拆解阻抗控制在机器人实际场景中的选型指南 在工业4.0和智能制造的浪潮中&#xff0c;机器人技术正从传统的重复定位作业向更复杂的交互任务演进。无论是汽车制造中的精密装配&#xff0c;还是医疗器械的力控打磨&#xff0c;亦或是康复训练中…...

从开发到上线:UniApp小程序跳转全流程配置指南(含环境区分与版本管理)

UniApp跨小程序跳转工程化实践&#xff1a;多环境配置与版本管理全解析 在移动互联网生态中&#xff0c;小程序间的相互跳转已成为提升用户体验的关键链路。作为技术负责人&#xff0c;我曾亲历过因环境配置错误导致的线上事故——某次紧急更新中&#xff0c;由于跳转参数未区分…...

终极风扇控制解决方案:FanControl让Windows散热管理变得简单高效

终极风扇控制解决方案&#xff1a;FanControl让Windows散热管理变得简单高效 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_T…...

别再手动复制粘贴了!C++20 assign函数让你的容器操作效率翻倍(附vector/deque实战代码)

C20 assign函数&#xff1a;告别低效循环&#xff0c;解锁现代容器操作新范式 在C日常开发中&#xff0c;容器操作占据了大量编码时间。你是否还在为以下场景烦恼&#xff1a;需要将一个vector的部分元素复制到另一个容器时&#xff0c;不得不写冗长的循环&#xff1b;当要重置…...

别光看YOLOv5了!从R-CNN到DETR:手把手带你拆解目标检测算法演进史与代码复现

从R-CNN到DETR&#xff1a;目标检测算法演进的技术考古与实战复现 当计算机视觉领域的研究者第一次看到YOLOv5在COCO数据集上达到60FPS的实时检测速度时&#xff0c;很少有人意识到这背后是长达十年的算法范式革命。目标检测作为计算机视觉的基础任务&#xff0c;其发展轨迹完美…...

第一卷第4章:接口而非实现编程

第一卷第4章:接口而非实现编程 目录介绍 00.先回答上篇思考题 0.1 上篇遗留三道题 0.2 云迁移6万行代码 0.3 五次反转补锅 0.4 灵魂五连问 01.从一个搬迁切入 1.1 上云搬迁案例...

高通机器人RB5平台:从RAM转储分析到安全启动的实战配置指南

1. 高通RB5平台RAM转储分析实战 第一次拿到高通RB5开发板时&#xff0c;遇到系统崩溃完全不知道从何下手。后来发现RAM转储分析就像给机器人做"脑部CT"&#xff0c;能完整记录崩溃瞬间的系统状态。这里分享我摸索出来的完整操作流程。 1.1 环境准备与工具链配置 工欲…...

基于SpringBoot+Vue的旅游景点攻略与门票预订系统毕业设计

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在构建一个基于Spring Boot与Vue框架的旅游景点攻略与门票预订系统以解决传统旅游信息管理中存在的数据孤岛现象服务响应滞后问题以及用户体验单一化等核…...

选择智能体框架:LangChain、AutoGen、CrewAI、Dify对比

去年秋天&#xff0c;我们团队准备上一个新项目&#xff0c;一个可以为客户自动生成月度运营分析报告的智能体。需求不复杂&#xff0c;就是每周从数据库里拉点数据&#xff0c;跑一下趋势分析&#xff0c;最后产出一个带图表和结论的PDF。 我那时候刚花了三个月时间把LangCha…...