7-4、S加减速转动实现【51单片机控制步进电机-TB6600系列】

news2024/9/22 23:37:54

摘要:本节介绍实现步进电机S曲线运动的代码

一、目标功能
实现步进电机转动总角度720°,其中加减速各90°
加速段:加速类型:S曲线
  加速角度:角度为90°
  起步速度:30RPM,
  终止速度:500RPM
匀速段:匀速角度:角度为540°
  匀速速度:500RPM
减速段:减速类型:S曲线
  减速角度:角度为90°
  起步速度:500RPM
  终止速度:60RPM
在这里插入图片描述
二、生成器计算
加速参数计算
在这里插入图片描述
匀速参数计算,主要计算电机步数
在这里插入图片描述
减速参数计算
在这里插入图片描述

三、程序代码

//加速、匀速、减速步数
#define step0 100
#define step1 600
#define step2 100

unsigned int n=0;//步数计数变量
unsigned int flag=0;//标志位,0:加速段  1:匀速段   2:减速段

//加速段90°,30RPM-500RPM
const unsigned char code TimeH0[100]={0XEC,0XEC,0XEC,0XED,0XED,0XED,0XEE,0XEE,0XEE,0XEF,0XEF,0XF0,0XF0,0XF1,0XF1,0XF2,0XF2,0XF3,0XF3,0XF4,0XF4,0XF5,0XF5,0XF6,0XF6,0XF7,0XF7,0XF8,0XF8,0XF8,0XF9,0XF9,0XFA,0XFA,0XFA,0XFB,0XFB,0XFB,0XFB,0XFC,0XFC,0XFC,0XFC,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE};
const unsigned char code TimeL0[100]={0X78,0XB4,0XF5,0X3B,0X86,0XD6,0X2A,0X84,0XE4,0X48,0XB1,0X1F,0X92,0X9,0X83,0X1,0X82,0X5,0X8A,0X10,0X96,0X1C,0XA0,0X24,0XA5,0X23,0X9E,0X15,0X88,0XF7,0X61,0XC5,0X25,0X80,0XD5,0X26,0X71,0XB7,0XF9,0X36,0X6E,0XA3,0XD3,0X0,0X29,0X4F,0X71,0X91,0XAE,0XC9,0XE1,0XF8,0XC,0X1F,0X2F,0X3F,0X4D,0X59,0X65,0X6F,0X79,0X82,0X8A,0X91,0X97,0X9D,0XA2,0XA7,0XAB,0XAF,0XB3,0XB6,0XB9,0XBC,0XBE,0XC1,0XC2,0XC4,0XC6,0XC7,0XC9,0XCA,0XCB,0XCC,0XCD,0XCE,0XCE,0XCF,0XD0,0XD0,0XD1,0XD1,0XD2,0XD2,0XD2,0XD3,0XD3,0XD3,0XD3,0XD4};

//减速段90°,500RPM-60RPM
const unsigned char code TimeH2[100]={0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFE,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFD,0XFC,0XFC,0XFC,0XFC,0XFC,0XFB,0XFB,0XFB,0XFB,0XFB,0XFA,0XFA,0XFA,0XFA,0XFA,0XF9,0XF9,0XF9,0XF9,0XF8,0XF8,0XF8,0XF8,0XF8,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF7,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6,0XF6};
const unsigned char code TimeL2[100]={0XD4,0XD3,0XD3,0XD3,0XD3,0XD2,0XD2,0XD2,0XD1,0XD1,0XD0,0XD0,0XCF,0XCE,0XCE,0XCD,0XCC,0XCB,0XCA,0XC8,0XC7,0XC6,0XC4,0XC2,0XC0,0XBE,0XBB,0XB9,0XB6,0XB2,0XAF,0XAB,0XA6,0XA1,0X9C,0X96,0X90,0X88,0X81,0X78,0X6F,0X64,0X59,0X4D,0X3F,0X31,0X21,0XF,0XFD,0XE8,0XD2,0XBA,0XA0,0X84,0X66,0X46,0X24,0X0,0XD9,0XB0,0X85,0X58,0X28,0XF7,0XC4,0X8F,0X59,0X21,0XE8,0XAE,0X74,0X3A,0X0,0XC6,0X8D,0X54,0X1D,0XE7,0XB3,0X81,0X50,0X22,0XF6,0XCB,0XA4,0X7E,0X5A,0X39,0X1A,0XFD,0XE2,0XC9,0XB2,0X9D,0X89,0X77,0X66,0X57,0X48,0X3C};
	
void main()
{	
	while(1)
	{
		
	}
}

//定时器0中断程序
void time0_int() interrupt 1
{
	//产生一个脉冲
	PUL=1;
	_nop_();_nop_();nop_();nop_();
	PUL=0;
	
	n++;//步数加1
	
	switch (flag)//判断运动状态
  {
  	case 0://加速段
		{
			if(n==step0)//加速段完成
			{
				n=0;
				flag=1;
				TH0=TimeH2[0];//装载定时寄存器匀速段初值
				TL0=TimeL2[0];
			}
			else
			{
				TH0=TimeH0[n];//装载定时寄存器加速段初值
				TL0=TimeL0[n];
			}
		}break;
  	case 1://匀速段
		{
			TH0=TimeH2[0];//装载定时寄存器匀速段初值
			TL0=TimeL2[0];
			if(n==step1)//匀速段完成
			{
				n=0;
				flag=2;
				TH0=TimeH2[n];//装载定时寄存器减速段初值
				TL0=TimeL2[n];
			}
		}break;
		case 2://减速段
		{
			if(n==step2)//减速段完成
			{
				n=0;
				flag=0;
				TR0=0;    //电机停止
			}
			else
			{
				TH0=TimeH2[n];//装载定时寄存器减速段初值
				TL0=TimeL2[n];
			}
		}break;
  	default:
  		break;
  }
}

四.总结
通过上述计算,完成S曲线加减速运动。通过调整匀速运动的角度,加减速过程不变,可以实现总转动角度的变化,适用于总转角需要变化且需要较高速度的情况,并且满足总转角应大于加减速转角之和。
对于大多数情况,加减速的过程可以合并,即用S加速的逆过程去实现减速,可以实现代码的简化

五、附件
完整代码工程文件请见微信小程序:
在这里插入图片描述

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

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

相关文章

现在java和大数据选什么?

现在java和大数据选什么? 到底是选择大数据还是JAVA?”相信这个问题困惑着许多转行待定人士和高校专业待选的学生。 在普通人眼里可能会觉得这两个专业或者行业没啥区别,都是IT里的,能有啥大不同。这是第一层。最近很多小伙伴找我…

Linux系统中让$前面显示完整的路径

目录 ■修改前效果 ■修改后效果 ■修改方法 ■修改前效果 ■修改后效果 ■修改方法 step1.找到当前用户下面的配置文件【.bashrc】 step2.使用vi命令编辑文件,在最后一行添加如下内容。 export PS1[\u\h $PWD]$ step3.使修改后的文件立即生效 source .bashrc

叮~程序员,你的专属1024程序员节已到账,请注意查收!

“1024,怎么过?” “???” “呆子。程序员节!” 鲁迅曾说:世界上本没有节日,关注的人多了,便成了节。(hahaha....bushi) 如此小众的节日,外行的人听了好奇&a…

uboot通过图像化界面配置 dns命令

一. 简介 之前文章简单介绍了 uboot图像化配置操作。地址如下: uboot图像化配置操作说明-CSDN博客 本文就以如何使能 dns 命令为例,讲解一下如何通过图形化界面来配置 uboot。 二. uboot 通过图像化界面配置 dns命令 这里所使用的 uboot的源码包&…

M1本地部署Stable Diffusion

下载安装 参考博客: 在Mac上部署Stable Diffusion(超详细,AI 绘画入门保姆级教程) 安装需要的依赖库 brew install cmake protobuf rust python3.10 git wget 可能中途会存在下载报错或者下载卡主的问题,需要切国内源 brew进行替换源: …

小黑子—spring:第一章

spring入门1.0 一 小黑子对spring基础进行概述1.1 spring导论1.2 传统Javaweb开发困惑及解决方法1.3 三大的思想提出1.3.1 IOC入门案例1.3.2 DI入门案例 1.4 框架概念1.5 初识spring1.5.1 Spring Framework 1.6 BeanFactory快速入门1.7 ApplicationContext快速入门1.8 BeanFact…

SpringBoot项目中的测试类,无法注入类,注入类为空

开发中,需要用到测试类来测试接口 我最开始使用的注入方式是Autowired,但是在执行测试时,注入类报空指针异常,一直为null 后来上网查到几种解决方案,最终在通过下述内容解决了: 1.测试类中添加注解 SpringB…

【云上探索实验室-码上学堂】免费学习领好礼!

走过路过,不要错过!上云AI三步走,学着课程奖品有! 亚马逊云科技又放福利了,为了让同学们更快入手Amazon CodeWhisperer,官方推出《云上探索实验室-码上学堂》活动,作为一名Amazon CodeWhisperer…

一种晶圆表面形貌测量方法-无图晶圆几何量测系统

晶圆检测机,又称为半导体芯片自动化检测设备,是用于对半导体芯片的质量进行检验和测试的专用设备。它可以用于硅片、硅晶圆、LED芯片等半导体材料的表面检测,通过对晶圆的表面特征进行全面检测,可以有效降低产品的不良率&#xff…

Z41H-40C明杆闸阀型号解析

Z41H-40C型号字母含义 Z41H-40C型号是德特森阀门常用的明杆闸阀型号字母分别代表的意思是: Z——代表阀门类别《闸阀》 4——代表连接方式《法兰》 1——代表结构形式《明杆》 H——代表密封材质《不锈钢合金》 -《分隔键》 40——代表公称压力《4.0MPA》 C——代表阀体…

MongoDB副本集调整节点

点击上方蓝字关注我 MongoDB的副本集(Replica Set)是一个高可用性、可扩展性和冗余性的数据库解决方案。它能够确保数据库的高可用性,同时保障了数据的安全性。在本文中,我们将探讨如何在一个已经包含三个数据节点的副本集集群中&…

前端(二十四)——轮询与 WebSocket的battle

😃博主:小猫娃来啦 😃文章核心:轮询与 WebSocket的battle 文章目录 前言轮询的原理及实现WebSocket的原理及实现轮询与WebSocket的比较轮询的应用场景WebSocket的应用场景使用场景的对比与选择WebSocket的安全性考虑WebSocket与服…

匝间冲击耐压试验仪

概述 武汉凯迪正大KDYD2835kV匝间冲击耐压试验仪是采用脉冲波形比较法,以高压冲击波对二线圈或绕组进行过电压的模拟检测,并由示波器来判别二绕组波形差异的一种测试仪器。它能迅速、正确地判断线圈或绕组匝间绝缘电晕放电、局部或相间短路、开路、接线嵌线错误、线…

正点原子嵌入式linux驱动开发——Linux I2C驱动

在电子产品硬件设计当中,I2C 是一种很常见的同步、串行、低速、近距离通信接口,用于连接各种IC、传感器等器件,它们都会提供I2C接口与SoC主控相连,比如陀螺仪、加速度计、触摸屏等,其最大优势在于可以在总线上扩展多个…

uniapp开发小程序—根据生日日期计算年龄 周岁

0、需求 在UniApp开发小程序中,将接口返回的出生日期转化为年龄;判断接口返回的年龄是否是周岁 可以使用JavaScript的日期处理方法来实现。 一、第一种方式(示例代码): //javascript // 假设接口返回的年龄为生日的…

源代码转换:Tangible Software Solutions 23.10 Crack

Tangible Software Solutions The Most Accurate and Reliable Source Code Converters Convert between C#, Java, C, Python, & VB, while saving countless hours of painstaking work and valuable time.源代码转换 Key Benefits Saves valuable time Accurate and com…

美摄人像背景抠图SDK

企业对于图像处理的需求越来越高。无论是社交媒体营销、产品展示还是企业内部培训,高质量的图像都是吸引用户和提升品牌形象的关键。然而,传统的图像处理工具往往需要大量的手动操作和专业技巧,耗时耗力。为了满足企业对于高效、精准的图像处…

LVS+keepalived——高可用集群

LVSkeepalived——高可用集群 keppalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。 但是:keepalived不是专门为lvs集群服务的。也可以做其他代理服务器的高可用。 lvs的高可用集群是建立…

Adobe Creative Cloud没有管理应用程序的权限怎么办?

许多Mac用户在Adobe Creative Cloud自动升级之后显示没有管理应用程序的权限,导致很多Adobe软件无法安装,接下来为大家带来解决方法。 1、前往-前往文件夹-输入以下路径 /Library/Application Support/Adobe/OOBE/Configs/ServiceConfig.xml 2、复制Ser…

k8s-----24、亲和力Affinity

1、应用场景 pod和节点间的关系: 某些Pod优先选择有ssdtrue标签的节点,如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上,但是优先部署在ssdtrue的节点上; pod和pod间的关系: 同一个应用的Pod不…