8-3、T型加减速单片机程序【51单片机控制步进电机-TB6600系列】

news2024/11/26 1:56:48

摘要:根据前两节内容,已完成所有计算工作,本节内容介绍具体单片机程序流程及代码

一、程序流程图
根据前两节文章内容可知,T型加减速的关键内容是运动类型的判断以及定时器初值的计算,在输出运动参数后即可判断出运动类型,再根据运动类型在主循环程序中计算定时器初值,在定时器中断中判断各运动阶段是否完成,最终实现T型加减速过程,程序流程图如下所示
在这里插入图片描述
二、误差分析
在动态计算的过程中,由于51单片机没有硬件乘、除法器,下述定时器初值的递推计算耗时最多,为尽量提升性能,将此步计算放入了主循环中,以节省定时器中断计算量
在这里插入图片描述
在12Mhz,12T模式下,STC89C52RC单片机实测控制最高转速约为200RPM,最大的瓶颈在于51单片机的主频速度实太慢,此处可以勾选STC单片机特有的6T双倍速模式,电机的转速上限会有明显的提升
在这里插入图片描述

三、关键程序代码

void cal_init()//预计算
{
	K1=sqrt(a*X);
	tn=4056000/K1;//计算t1
	
	cn=65536-tn;  //计算c1 
		TH0=cn/256;//装定时寄存器初值
		TL0=cn%256;
	
	angle_step=angle*X/18; //计算总步数
	
	K2=10*w*w/a;
	K3=10*X*w*w/(36*a);
}

void cal_cn()//计算cn
{
	if(ready_flag)
		{
			ready_flag=0;
			
			if(flag==2)
			{
				tn=tn-2*tn/(4*n+1);
			}
			else if(flag==4)
			{
				tn=tn+2*tn/(4*n-1);
			}
			
			cn=65536-tn;
		}
}

void cal_motion()//计算运动模式
{
	if(angle_step==1) flag=1;       //转一步
	else                            //转多步
	{
		if(angle>K2)                  //有匀速过程
		{
			motion_flag=1;
			angle2_step=K3;
			angle3_step=angle_step-2*K3;
			angle4_step=K3;
		}
		else                          //无匀速过程
		{
			motion_flag=0;
			angle2_step=angle_step/2;
			angle4_step=angle_step-angle2_step;
		}
	}
}

void main()
{
	device_init();
	TR0=1;//开步进电机
	
	while(1)
	{
		cal_cn();
	}
}

void time0_int() interrupt 1
{
	TH0=cn/256;//装定时寄存器初值
	TL0=cn%256;
	PUL=1;_nop_();_nop_();nop_();nop_();PUL=0;//上升沿产生脉冲
	
	switch (flag)
	{
		case 1:                  //转1步
			TR0=0; 
			break;
		case 2:			           //加速阶段
			n++;
			if(n==angle2_step)    //加速结束
			{
				if(motion_flag)    //有匀速
				{
					flag=3;          
					n=0;
				}
				else               //无匀速
				{
					flag=4;          
					n=angle4_step;
				}
			}break;
		case 3:                //匀速阶段
			n++;
			if(n==angle3_step)
			{
				flag=4;
				n=angle4_step;
			}break;
		case 4:               //减速阶段
			n--;
			if(n==0)
			{
				TR0=0;        //关步进电机
			}break;
		default:
			break;
	}
	
	ready_flag=1;
}

四、总结
上述代码实现了步进电机采用T型加减速的方式转动5圈,输入参数有驱动器细分值,转动角度,加速度、最大角速度。其中转动角度的单位是0.1°,例如输入100,实际代表转动10°。此种控制方式相对于S曲线加减速灵活性更高,可以实现加减速大小的实时调节,灵活性较好,同时可以大幅节省data资源

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

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

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

相关文章

前端代码优化小技巧

导读 今天分享一下开测前端代码的一些优化,及使用的一些小技巧,来优化我们的网站,前端开发中最常见的问题就是很少使用ES6方法导致代码冗余,不够清晰,定时器和闭包导致内存溢出及泄露,网站中css导致排版错乱&#xff…

C++基础——对于C语言缺点的补充(2)

上篇文章中说到,为了解决C语言会出现人为定义的函数和库函数出现重定义的错误,C引入了一个新的概念,即命名空间,通过认为定义命名空间,来解决上述问题。 在本篇文章中,将继续介绍C相对于C语言不足来进行的补…

linux之信号

Linux之信号 什么是信号信号的产生方式signalsignactionkill信号集信号屏蔽 什么是信号 信号机制是一种使用信号来进行进程之间传递消息的方法,信号的全称为软中断信号,简称软中断。 信号的本质是软件层次上对中断的一种模拟(软中断&#xff…

Hello Qt!

目录 1. 什么是Qt 2. Qt中的模块 3. 下载安装 4. QtCreator 4. Hello Qt 解释 .pro 解释 main.cpp 解释 mainwindow.ui 解释 mainwindow.h 解释 mainwindow.cpp 5. Qt 中的窗口类 5.1 基础窗口类 5.2 窗口的显示 6. Qt 的坐标体系 7. 内存回收 1. 什么是Qt 是一…

✔ ★【备战实习(面经+项目+算法)】 11.6 学习

✔ ★【备战实习(面经项目算法)】 坚持完成每天必做如何找到好工作1. 科学的学习方法(专注!效率!记忆!心流!)2. 每天认真完成必做项,踏实学习技术 认真完成每天必做&…

【斗破年番】萧炎给彩鳞承诺遭删,熏儿限时返场,古河沦为打工人

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料,在斗破年番69话的最新剧情中,一场感人至深的情感戏份被删减了。在原著中,萧炎曾向美杜莎承诺,他会集齐材料,为她炼制出天雁九行翼。然而&a…

简单2招GET模型参数量计算和输入尺寸随卷积大小变化推导

本文将介绍两种简单且实用的方法,用于计算深度学习模型的参数量,并推导了输入尺寸随卷积大小的变化过程。这些方法可以帮助读者更好地理解模型的复杂度和输入尺寸的变化,为模型设计和优化提供指导。 比如论文中,通常会比较几种模…

机器学习概论

一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术 2…

龙迅LT6911UXC替换LT6911UXE 支持单PORT 4K60HZ 带HDCP

LT6911UXC 描述: 龙迅LT6911UXC是一个高性能的HDMI2.0到MIPI DSI/CSI & LVDS转换器。HDMI2.0输入支持高达6Gbps的数据速率,这为60Hz的视频提供了足够的带宽。同时,还支持使用HDCP2.2来进行数据解密。对于MIPI DSI/CSI输出,LT…

【二进制转换和与其有关的操作符详解】

文章目录 1.二进制与进制转换2. 2进制转8、10、16进制2.1 2进制转10进制2.2 2进制转8进制2.3 2进制转16进制 3. 8、10、16进制转2进制3.1 10进制转2进制3.2 8进制转2进制3.3 16进制转2进制 4.原码、反码、补码5.移位操作符&#xff08;<< >>&#xff09;5.1左移操作…

英飞凌TLF35584规格书中文

官网&#xff1a; 英飞凌TLF35584QVVS2 TLF35584_SPI&#xff1a; 1 Overview2 Block Diagram3 Pin Configuration3.1 Pin Assignment - PG-VQFN-48 4 General Product Characteristics4.1 Absolute Maximum Ratings 绝对最大额定值4.2 Functional Range4.3 Thermal Resistance…

制造业企业设备管理常见的三个问题及对应的解决方案

当今的市场如同茫茫大海&#xff0c;既充满机遇&#xff0c;也伴随着波动的风险。在现代制造业中&#xff0c;企业常常面临着各种挑战&#xff0c;这些挑战可能妨碍其发展和竞争力。但制造企业往往具备能够解决挑战的能力&#xff0c;借助软件工具的力量&#xff0c;可以更好地…

vue3中router和route的区别(使用场景)

1.router router是用来对路由进行操作的&#xff1b; 多用于路由跳转、路由守卫、页面刷新、给路由文件添加路由路径或者移除路由路径等等 2.route route是用来获取路由信息的&#xff1b; 多用于获取路由路径、路由传参数据、路由文件配置的属性信息等等

2000-2022年“宽带Z国“试点城市名单匹配数据

2000-2022年“宽带Z国“试点城市名单匹配数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;行政区划代码、年份、地区、所属省份、所属地域、试点城市、最早试点年份、DID 3、来源&#xff1a;来自工信部和国家发改委在2014年、2015年和2016年分别遴选的“宽带中国”…

x86汇编代码学习-计算机工作原理2

文章目录 前言1.mov2.内存分段3.调试5.注释6.标号7.add sub8.inc dec自增&#xff0c;自减9.adc sbb10 乘法栈11 栈寄存器push pop12 jz jnz13 section 16字节对齐14 CALL15 逻辑运算16 启动MBR以外的程序174. 前言 视频教程 x86汇编代码学习-计算机工作原理1 1.mov 因为ah是…

C++ 信息学奥赛 2048:【例5.18】串排序

#include<bits/stdc.h> using namespace std; int main() {string s[25];//string类数组 int n;cin >> n;for(int i 1; i < n; i)cin >> s[i];sort(s1, s1n);//默认升序 调用函数默认排序 for(int i 1; i < n; i)cout << s[i] << endl;…

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换 前言前提条件相关介绍实验环境Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换convert_labelme_json_to_txtjsons/000000000009.json代码实现输出结果labels/000000000009.txt convert_txt_to_labelme_…

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark&#xff0c;本想着先把 Kafka、Flume 这些工具先学完的&#xff0c;但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈&#xff0c;偷偷立个 flag&#xff0c;反正也没人看&#xff0c;明年的今天来这里还愿哈&#xff0c…

C语言100~200中不能整除3的数

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {int n;for (n 100; n < 200; n){if (n%3 0){continue;}printf("%d\n",n);}}