【Proteus仿真】51单片机+步进电机驱动

news2024/11/28 4:42:46

【Proteus仿真】51单片机+步进电机驱动


  • 🔖Proteus仿真基础实验-步进电机驱动
  • 🌿Proteus8.12平台

📋步进电机简介

步进电机是一种将电脉冲转换为角位移的开环控制元步进电机。一般地,当步进驱动器接收到脉冲信号时,它将根据设定方向(即步进角)驱动步进电机旋转一定角度。 可以通过控制脉冲量来控制角位移量,从而达到精确定位的目的,同时还可以通过控制脉冲频率来控制电机的转速和加速度,从而达到速度控制的目的。

📑步进电机的分类

  • 永磁体(PM):一般为两相,扭矩和体积均较低,步进角为 7.5 度或 15 度.
  • 反应式(VR):一般为三相,可实现大扭矩输出,步进角度一般为 1.5 度,但噪音和振动相当大.
  • 混合式(HB) : 它结合了永磁体和反应的优点,分为两相和五相:两相步进角为 1.8 度,五相步进角一般为 0.72 度。 这种步进电机使用更广泛。

📓相关技术参数

🏳‍🌈步进电机的静态指标

  • 步距角:
    在每次控制系统发出一个步进脉冲信号,某个永磁步进电机的固定角度为3.75°/ 7.5°(半步驱动值为 3.75°,整步驱动为 7.5°)。步进角可以称为“步进电机的固定角度”,它不一定是工作电机的实际角度,实际角度与驱动器有关。
  • 相数:
    它指的是电机内部的线圈组数。 目前,常用的步进电机是两相,三相,四相和五相电机。 电动机的步进角随相数而变化。通常,两相电动机的步进角为 0.9°/ 1.8°,三相为 0.75°/ 1.5°,五相为 0.36°/ 0.72°。 当没有细分驱动器时,用户主要通过选择不同的相数电机来满足步进角的要求。 如果使用细分驱动程序,相位数的“数字”将变得毫无意义,用户只需要更改细分数量的驱动器,然后可以移动步进角度。
  • 拍数:
    它指的是完成磁场周期性变化所需的脉冲数或导通状态,也可以定义为电机转动一定步进角的脉冲数。让我们以四相电机为例,四相和四拍运行模式,即: AB-BC-CD-DA-AB,四相和八拍运行模式为: A - AB - B - BC - C - CD - D - DA - A

🚩步进电机的动态指标

  • 步进脚精度
    它指的是当电动机转动一定步进角时,实际值与理论值之间的误差。 表示为百分比:角度误差/步进角* 100%。 此值随节拍数量的变化而变化,当电机运行 4 次,应该在 5%以内,8 次在 15%以内
  • 失步
    电机运转时运转的步数,不等于理论上的步数。称之为失步。
  • 失调角
    转子齿轴线偏移定子齿轴线的角度,电机运转必存在失调角,由失调角产生的误差,采用细分驱动是不能解决的。

以步进电机28BYJ-48为例,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。

在这里插入图片描述
在这里插入图片描述

  • 参数
    直径:28mm
    电压:5 v
    步角:5.625 x 1/64
    减速比:1/64
    定位转矩 >300g.cm
    步进电机的空载功耗低于50mA,配备 64 倍减速器,即64 驱动脉冲。如果外部皮带旋转一圈,由于电机中的减速齿轮为1:64,步进电机主轴需要旋转64 圈。
    输出扭矩很大,因此可以驱动重负载,适用于开发板。注意:该步进电机配备 64 倍减速器,与没有减速器的情况相比,转速较慢。为了便于观察,可以在输出轴上粘贴一块纸板。
  • 📚四相步进电机模块资料
链接: https://pan.baidu.com/s/1I6bRHVkl8Wm_xotres0LDA
提取码: aiwc

🛠步进电机的驱动方式

步进电机的驱动模式也称为激励模式,分为全步激励和半步激励。 前者也可分为单相(单拍驱动)和两相激励(全步驱动); 后者也指一相二相激励(一步驱动)

驱动模式步距角功率优点和缺点
单步5.6251P控制简单,耗电量低,但输出扭矩最小,振动较大,步进时易疏离
全步5.6252P功耗最大,输出扭矩大,振动小,步进稳定
半步2.81251.5P在单驱动和驱动步骤之间采取的性能,只有步进角的一半,运行平稳,应用最为广泛

三种驱动模式的时序表:

  • 半步(八拍)
线序/步距Step1Step2Step3Step4Step5Step6Step7Step8
蓝色/A11000001
粉色/B01110100
黄色/C00011100
橙色/D00000111
  • 单步(单四拍)
线序/步距Step1Step2Step3Step4
蓝色/A1000
粉色/B0100
黄色/C0010
橙色/D0001
  • 全步(双四拍)
线序/步距Step1Step2Step3Step4
蓝色/A1001
粉色/B1100
黄色/C0110
橙色/D0011

📝不同驱动模式C51代码实现

  • 单四拍
/**************************************************************************************
实验现象:	下载程序后,连接好五线四相步进电机,可以观察到电机转动。			
接线说明: 	1:STC89单片机-->五线四相步进电机模块
		    P20-->IN1
				P21-->IN2
				P22-->IN3
				P23-->IN4
			2:五线四相步进电机模块输出-->五线四相步进电机	
			
注意事项: 时钟选择11.0592MHZ																				  
***************************************************************************************/

#include <STC89C5xRC.H>
#include "intrins.h"

#define MAIN_Fosc		11059200L	//定义主时钟
#define  uint32   unsigned long 
#define  uint16   unsigned int  
#define  uint8    unsigned char  
 

#define MOTOR_CLOCKWISE       1   //正转 顺时针转动
#define MOTOR_ANTICLOCKWISE   0   //反转 逆时针转动
#define MOTOR_SPEED           3   //转速
/**********************
引脚别名定义
***********************/
sbit DD=P2^3; 	//电机控制口,连接电机驱动板IN4 				
sbit CC=P2^2;	//电机控制口,连接电机驱动板IN3 	
sbit BB=P2^1;   //电机控制口,连接电机驱动板IN2 
sbit AA=P2^0;   //电机控制口,连接电机驱动板IN1 

/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x) 
{  
	uint16 j,i;   
	for(j=0;j<x;j++)   
	{    
		for(i=0;i<112;i++);   
	}  
}

/**************************************
功能描述:步进电机驱动函数
入口参数:X表示正反转;Speed表示转速设置
返回值:无
***************************************/
void MotorStep(uint8 X,uint16 Speed)
{
  if(X==1)   //顺时针转动
	{
		DD=0;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=0;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节
  }
	else       //逆时针转动
	{
		DD=1;CC=0;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节
  }	
}

/**************************************
功能描述:步进电机停止转动
入口参数:无
返回值:无
***************************************/
/*用到时可添加
void MotorStop(void)
{
 DD=0;CC=0;BB=0;AA=0;
}
*/

//主函数
int main()
{	
 	while(1)
 	{
   		//顺时针住。修改输入参数为MOTOR_ANTICLOCKWISE,电机反转。修改MOTOR_SPEED的值即可调整转速
	 	MotorStep(MOTOR_ANTICLOCKWISE,MOTOR_SPEED);    
 	}
}



  • 双四拍
/**************************************************************************************
实验现象:	下载程序后,连接好五线四相步进电机,可以观察到电机转动。
			
接线说明: 	1:STC89单片机-->五线四相步进电机模块
		    	P20-->IN1
				P21-->IN2
				P22-->IN3
				P23-->IN4
			2:五线四相步进电机模块输出-->五线四相步进电机				
注意事项: 时钟选择11.0592MHZ																				  
***************************************************************************************/

#include <STC89C5xRC.H>
#include "intrins.h"

#define MAIN_Fosc		11059200L	//定义主时钟
#define  uint32   unsigned long 
#define  uint16   unsigned int  
#define  uint8    unsigned char  
 

#define MOTOR_CLOCKWISE       1   //正转 顺时针转动
#define MOTOR_ANTICLOCKWISE   0   //反转 逆时针转动
#define MOTOR_SPEED           3   //转速
/**********************
引脚别名定义
***********************/
sbit DD=P2^3; 	//电机控制口,连接电机驱动板IN4 				
sbit CC=P2^2;	//电机控制口,连接电机驱动板IN3 	
sbit BB=P2^1;   //电机控制口,连接电机驱动板IN2 
sbit AA=P2^0;   //电机控制口,连接电机驱动板IN1 

/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x) 
{  
	uint16 j,i;   
	for(j=0;j<x;j++)   
	{    
		for(i=0;i<112;i++);   
	}  
}

/**************************************
功能描述:步进电机驱动函数
入口参数:X表示正反转;Speed表示转速设置
返回值:无
***************************************/
void MotorStep(uint8 X,uint16 Speed)
{
  if(X==1)   //顺时针转动
	{
		DD=0;CC=0;BB=1;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节
  }
	else       //逆时针转动
	{
		DD=1;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=1;	
    delay_ms(Speed);  //转速调节
  }	
}

/**************************************
功能描述:步进电机停止转动
入口参数:无
返回值:无
***************************************/
/*用到时可添加
void MotorStop(void)
{
 DD=0;CC=0;BB=0;AA=0;
}
*/

//主函数
int main()
{
 	while(1)
 	{
   		//顺时针住。修改输入参数为MOTOR_ANTICLOCKWISE,电机反转。修改MOTOR_SPEED的值即可调整转速
		 MotorStep(MOTOR_ANTICLOCKWISE,MOTOR_SPEED);    
 	}	
}



  • 八拍
/**************************************************************************************
实验现象:	下载程序后,连接好五线四相步进电机,可以观察到电机转动。
			
接线说明: 	1:STC89单片机-->五线四相步进电机模块
		    	P20-->IN1
				P21-->IN2
				P22-->IN3
				P23-->IN4
			2:五线四相步进电机模块输出-->五线四相步进电机
	
			
注意事项: C时钟选择11.0592MHZ																				  
***************************************************************************************/

#include <STC89C5xRC.H>
#include "intrins.h"



#define MAIN_Fosc		11059200L	//定义主时钟
#define  uint32   unsigned long 
#define  uint16   unsigned int  
#define  uint8    unsigned char  
 

#define MOTOR_CLOCKWISE       1   //正转 顺时针转动
#define MOTOR_ANTICLOCKWISE   0   //反转 逆时针转动
#define MOTOR_SPEED           3   //转速
/**********************
引脚别名定义
***********************/
sbit DD=P2^3; 	//电机控制口,连接电机驱动板IN4 				
sbit CC=P2^2;	//电机控制口,连接电机驱动板IN3 	
sbit BB=P2^1;   //电机控制口,连接电机驱动板IN2 
sbit AA=P2^0;   //电机控制口,连接电机驱动板IN1 

/**************************************
功能描述:延时函数
入口参数:uint16 x ,该值为1时,延时1ms
返回值:无
***************************************/
void delay_ms(uint16 x) 
{  
	uint16 j,i;   
	for(j=0;j<x;j++)   
	{    
		for(i=0;i<112;i++);   
	}  
}

/**************************************
功能描述:步进电机驱动函数
入口参数:X表示正反转;Speed表示转速设置
返回值:无
***************************************/
void MotorStep(uint8 X,uint16 Speed)
{
  if(X==1)   //顺时针转动
	{
		DD=0;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节
		
		DD=0;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=0;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节
  }
	else       //逆时针转动
	{
		DD=1;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=0;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=1;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=1;BB=0;AA=0;	
    delay_ms(Speed);  //转速调节
		
		DD=0;CC=1;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=0;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=1;AA=1;	
    delay_ms(Speed);  //转速调节

		DD=0;CC=0;BB=0;AA=1;	
    delay_ms(Speed);  //转速调节
  }	
}

/**************************************
功能描述:步进电机停止转动
入口参数:无
返回值:无
***************************************/
/*用到时可添加
void MotorStop(void)
{
 DD=0;CC=0;BB=0;AA=0;
}
*/

//主函数
int main()
{

 	while(1)
 	{
   		//顺时针住。修改输入参数为MOTOR_ANTICLOCKWISE,电机反转。修改MOTOR_SPEED的值即可调整转速
	 	MotorStep(MOTOR_ANTICLOCKWISE,MOTOR_SPEED);    
 	}
}



  • 📚Proteus仿真文件

✨不包含代码工程,自行将上面的代码拷贝到新建工程中编译即可。


链接: https://pan.baidu.com/s/1KB-xVrwADAT3JDsTQ1Mf0A
提取码: vj47

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

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

相关文章

企业邮箱购买指南:分享如何购买适合企业的企业邮箱

如果你想为你的公司设立一个新的公司邮箱帐户&#xff0c;有几种不同的选择可供选择。根据公司的规模和需求&#xff0c;你可以从邮箱托管公司购买一个邮箱地址&#xff0c;购买域名并创建一个自定义邮箱地址&#xff0c;或者与第三方提供商合作。无论您选择哪种方法&#xff0…

服务(第三十四篇)ceph-分布式存储

什么是ceph&#xff1f; ceph 是一种统一的分布式文件系统&#xff0c;具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储&#xff0c;分布式体现在可以动态扩展。在国内一些公司的云环境中&#xff0c;通常会采用 ceph 作为 openstac…

机器学习强基计划10-2:详细推导串行集成AdaBoost算法(附Python实现)

目录 0 写在前面1 串行集成学习2 AdaBoost原理推导3 Python实现3.1 算法流程3.2 核心代码3.3 可视化 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器学习模…

chatgpt赋能python:Python数据处理之去除NaN值

Python 数据处理之去除 NaN 值 作为数据分析和处理领域中的一种高效工具&#xff0c;Python 在数据清理方面表现优异。而 NaN 是数据处理中常见的问题之一&#xff0c;过多的 NaN 值常常会导致分析结果不准确或无法得出结论&#xff0c;因此 Python 提供了多种方法去除 NaN 值…

chatgpt赋能python:Python反转数字的方法

Python反转数字的方法 Python作为一种高级编程语言&#xff0c;拥有着丰富的数学计算、数组处理及字符串操作等功能。在实际开发中&#xff0c;需要进行反转数字的操作时&#xff0c;Python提供了多种方法来完成此项任务。 用Python反转数字 反转数字是指将一个数字从后往前…

SQL语句之DML语言

说明&#xff1a;DML&#xff08;Data Manipulation Language&#xff09;&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。注意&#xff0c;没有查询&#xff0c;数据的查询单独拎出来成DQL&#xff08;Data Query Language&#xff0c;数据查询语言&#xff09;&…

吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--03 Iterative

03 Iterative 本节主要通过代码来讲解如何在迭代中找到合适的prompt。对于初学者来说&#xff0c;第一次使用Prompt不一定得到语气的结果&#xff0c;开发者可以采用下述流程进行迭代优化&#xff1a; 给出清晰、具体的指令如果结果不正确&#xff0c;分析原因调整prompt重复…

ClickHouse的join优化

概要&#xff1a; ClickHouse 最为擅长的领域是一个大宽表来进行查询&#xff0c;多表 JOIN 时Clickhouse 性能表现不佳。 CK执行模式 第一阶段&#xff0c;Coordinator 收到查询后将请求发送给对应的 worker 节点&#xff1b;第二阶段&#xff0c;Coordinator 收到各个 work…

Java内存模型和常见的内存溢出类型及解决方案

Java内存模型与常见的内存溢出 一. Java 运行过程和内存分配1 Java的平台无关性2 Java内存模型2.1Java内存模型图 3 内存结构详解3.1 元空间&#xff08;MetaSpace&#xff09;3.2 堆区&#xff08;Heap&#xff09;新生代老年代 3.3 虚拟机栈&#xff08;VM Stack&#xff09;…

Linux :: vim 编辑器:详解:光标移动定位内容,行间:快速定位至文本:开头 / 结尾;行内:词间跳跃

前言&#xff1a;本篇是 Linux 基本操作篇章的内容&#xff01; 笔者使用的环境是基于腾讯云服务器&#xff1a;CentOS 7.6 64bit。 学习集&#xff1a; C 入门到入土&#xff01;&#xff01;&#xff01;学习合集Linux 从命令到网络再到内核&#xff01;学习合集 前言&#x…

Asana替代方案推荐:盘点2023年8种优质的免费和付费替代工具

Asana是一个项目管理和团队合作软件平台&#xff0c;自2008年成立以来&#xff0c;一直在彻底改变团队合作的方式。Asana以其直观的用户界面而闻名&#xff0c;是项目经理和团队领导的热门选择。然而在快节奏的项目管理世界中&#xff0c;技术发展很快。因此&#xff0c;当涉及…

chatgpt赋能python:Python取余方法介绍

Python取余方法介绍 在Python编程中&#xff0c;取余&#xff08;也称为求模运算或取模运算&#xff09;是计算机程序经常使用的一种基本算术运算。Python提供了两种方法来执行取余运算&#xff1a;使用百分号符号&#xff08;%&#xff09;和divmod()函数。 使用百分号符号&…

揭秘HTTP代理的神奇力量:让你的系统突破内网限制

大家好&#xff0c;我是你们的小米&#xff01;今天&#xff0c;我要和大家聊聊一个技术问题&#xff0c;那就是关于"http代理"的使用。昨日&#xff0c;我刚刚午休睡醒&#xff0c;项目经理杰哥叫我关注下其中一个项目的部署进展情况。而就在这时&#xff0c;客户侧…

15天学会EasyX 第2天:EasyX里的设备坐标与打开关闭绘图窗口

本文为山城瑞宝创作&#xff0c;转载请标注版权&#xff01; 本文里的函数使用都不需要先写明原型&#xff0c;原型就在其对应的库里&#xff08;直接用&#xff09; 目录 1. 设备及其坐标 2. 如何打开与关闭绘图窗口 2.1. initgraph 2.1.1. 没有flag的代码示例 2.1.2. 使用了…

会声会影2023旗舰中文试用版下载安装教程

会声会影2023版(Corel VideoStudio)是一款专业视频制作软件及视频剪辑软件,可以剪辑合并视频,制作视频,屏幕录制,光盘制作,视频后期编辑,添加特效,字幕和配音等操作,界面美观,素材丰富,操作简洁而! 会声会影有多轨道式编辑功能&#xff0c;可以独立处理视频、图片、音频等素材&…

MATLAB笔记总结(1) 东华大学MOOC

循环语句 MATLAB函数句柄 https://zhuanlan.zhihu.com/p/266263265 https://blog.csdn.net/shaozheng0503/article/details/130305984?spm1001.2014.3001.5501 数据和变量 表达式 分号;) 逗号(, ), 省略号(3个英文句点…)。 历史指令调用&#xff1a;用方向键(↑↓) 数据…

离散分类和非离散分类问题中的模型评价

离散分类问题中的模型评价 假设分类目标只有两类&#xff1a;正样本&#xff08;positive&#xff09;和负样本&#xff08;negative&#xff09;。 分类器的分类结果会出现以下四种情况&#xff1a; TP: 若一个实例为正&#xff0c;且被预测为正&#xff0c;即为“真正类”(…

chatgpt赋能python:Python去空格输出:优化您的代码和网站速度

Python去空格输出&#xff1a;优化您的代码和网站速度 Python是一种简单易用的编程语言&#xff0c;广泛用于各种应用和网站开发。然而&#xff0c;Python的代码输出&#xff08;如HTML和CSS&#xff09;中不可避免地包含了空格、制表符和换行符。这些额外的字符可能会影响网站…

模式识别算法的常见评价指标TP/FP/FN/TN,ROC,DET,EER

文章目录 TP/FP/FN/TN&#xff08;TA/FA/FR/TR&#xff09;误报率&#xff08;FAR&#xff09;漏报率&#xff08;FRR&#xff09; ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff0c;受试者特征曲线&#xff09;DET曲线&#xff08;Detection Error Tra…

Maven高级——继承与聚合——版本锁定

在前面的文章已经实现了Maven的继承&#xff0c;初次之外&#xff0c;还可以在父工程当中统一管理依赖的版本。 场景介绍 有一些依赖不是各个模块共有的&#xff0c;则需要到那些子模块当中单独配置了&#xff0c;这时需要到各个模块单独配置了&#xff0c;比如下图有一个模块…