单片机:步进电机(内含硬件原理及解析,软件编程及注释)

简介: 单片机:步进电机(内含硬件原理及解析,软件编程及注释)

6a12bf0695354f07b120527f2da32dd6.png

f40e7d5ef207415cb956501c011c1d53.png

03abe2801d3644d39e0ff89b35f1b63a.png

改变绕组方向,改变电机转动方向

7488ee27a7e54cfc9f3ff981b63d4ba9.png

图左,公共线处连接VCC,3和4,1和2为同一方向,电流单向

图右,1和2处都可以做VCC和GND,电流方向可更改,是双向

双极性步进电机工作原理:

(改变电流方向,从而改变磁场方向)

图左为单向激励,图右为双向激励:

e6b1960acc184b429acd8b020f4517ac.png

图左(步进角为90°):


1-2-3-4(注:1为高电平,0为低电平)


1图中A+为1,A-为0,B+,B-不工作


2图中B+为1,B-为0,A+,A-不工作,转子旋转90°


3图中A-为1,A+为0,B-,A+不工作,转子旋转90°


4图中B-为1,B+为0,A-,A+不工作,转子旋转90°


图左(步进角为45°):


1-2-3-4


1图中A+为1,B+为1,A-为0,B-为0


2图中A+为0,B+为1,A-为1,B-为0,转子旋转45°


3图中A+为0,B+为0,A-为1,B-为1,转子旋转45°


4图中A+为1,B+为0,A-为0,B-为1,转子旋转45°


单双向激励结合起来为

46052e850c1c4be3b568c06e9d194b0c.png



1图中A+为1,B+为0,A-为0,B-为0,转子旋转0°


2图中A+为1,B+为1,A-为0,B-为0,转子旋转45°


3图中A+为0,B+为1,A-为0,B-为0,转子旋转45°


4图中A+为0,B+为1,A-为1,B-为0,转子旋转45°


5图中A+为0,B+为0,A-为1,B-为0,转子旋转45°


6图中A+为0,B+为0,A-为1,B-为1,转子旋转45°


7图中A+为0,B+为0,A-为0,B-为1,转子旋转45°


8图中A+为1,B+为0,A-为0,B-为1,转子旋转45°


PS:可将A+,B+等的电流大小进行优化,如A+=1,B+=2,偏转角度就不是45°


单极性步进电机工作原理:


(不能改变电流方向改变磁场方向,问问电流方向固定)


图左为单向激励,图右为双向激励:


c73ba43d2c1f437f8131b451b8fa7d5d.png


图左(步进角为90°):


1图中A+为1,B+为0,A-为0,B-为0,转子旋转0°


2图中A+为0,B+为1,A-为0,B-为0,转子旋转90°


3图中A+为0,B+为0,A-为1,B-为0,转子旋转90°


4图中A+为0,B+为0,A-为0,B-为1,转子旋转90°


图右(步进角为45°):


1图中A+为1,B+为1,A-为0,B-为0,转子旋转45°


2图中A+为0,B+为1,A-为1,B-为0,转子旋转90°


3图中A+为0,B+为0,A-为1,B-为1,转子旋转90°


4图中A+为1,B+为0,A-为0,B-为1,转子旋转90°


单双向激励结合起来为:


762dd8933c7c4eb290060e54ff76b31b.png


1图中A+为1,B+为0,A-为0,B-为0,转子旋转0°


2图中A+为1,B+为1,A-为0,B-为0,转子旋转45°


3图中A+为0,B+为1,A-为0,B-为0,转子旋转45°


4图中A+为0,B+为1,A-为1,B-为0,转子旋转45°


5图中A+为0,B+为0,A-为1,B-为0,转子旋转45°


6图中A+为0,B+为0,A-为1,B-为1,转子旋转45°


7图中A+为0,B+为0,A-为0,B-为1,转子旋转45°


8图中A+为1,B+为0,A-为0,B-为1,转子旋转45°


PS:转动角度越小,流畅度越高


7d87681cde9b4367b6c8bdbb1acf5d64.png


45670f8059a44c6590100ffe39d4fa66.png

第1步时,VCC为高电平,D为低电平,右图电流应在VCC-D(水平方向)

第2步时,VCC为高电平,D,C为低电平,右图电流应在VCC--C/D(可解读为逆时针旋转45°)

若让步进电机反向旋转,则从第8步-->第1步

注:VCC连接红色的线

f14aa410d1664f39b5d9dc9cd4aabcf6.png


图左:A2-A4 图右:A5-A7


99885c81ba194aa08234e3f11fd619bb.png


注:VCC连接红色的线


8177622a6f374ed19797c3ce55ead102.png

#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
//定义ULN2003控制步进电机管脚
sbit IN1_A=P1^0;
sbit IN2_B=P1^1;
sbit IN3_C=P1^2;
sbit IN4_D=P1^3;
//定义独立按键控制脚
sbit KEY1=P3^1;
sbit KEY2=P3^0;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
//使用宏定义独立按键按下的键值
#define KEY1_PRESS 1
#define KEY2_PRESS 2
#define KEY3_PRESS 3
#define KEY4_PRESS 4
#define KEY_UNPRESS 0
// 定义步进电机速度,值越小,速度越快
// 最小不能小于1
#define STEPMOTOR_MAXSPEED 1 //最大速度
#define STEPMOTOR_MINSPEED 5 //最小速度
void delay_time(u16 time_delay)
{
u16 i,j;
{
for(i=time_delay;i>0;i--)
for(j=110;j>0;j--)
;
}
}
//独立按键扫描---mode确定是单扫0还是连续扫描1
//按下返回对应键值
//KEY1_PRESS:K1按下
//KEY2_PRESS:K2按下
//KEY3_PRESS:K3按下
//KEY4_PRESS:K4按下
//KEY_UNPRESS:未有按键按下
u8 key_scan(u8 mode)
{
static u8 key=1;
if(mode)key=1;//连续扫描按键
if(key==1&&(KEY1==0||KEY2==0||KEY3==0||KEY4==0))//任意按键按下
{
delay_time(1000);//消抖
key=0;
if(KEY1==0)
return KEY1_PRESS;
else if(KEY2==0)
return KEY2_PRESS;
else if(KEY3==0)
return KEY3_PRESS;
else if(KEY4==0)
return KEY4_PRESS;
}
else if(KEY1==1&&KEY2==1&&KEY3==1&&KEY4==1) //无按键按下
{
key=1;
}
return KEY_UNPRESS;
}
//输出一个数据给ULN2003从而实现向步进电机发送一个脉冲
//完成方向(dir)和步数(step)控制
void step_motor_28BYJ48_send_pulse(u8 step,u8 dir)
{
u8 temp=step;
if(dir==0) //如果为逆时针旋转
temp=7-step;//调换节拍信号.使反向,0-7变为7-0
switch(temp)//8个节拍控制:A->AB->B->BC->C->CD->D->DA
{
case 0: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=0;break;
case 1: IN1_A=1;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 2: IN1_A=0;IN2_B=1;IN3_C=0;IN4_D=0;break;
case 3: IN1_A=0;IN2_B=1;IN3_C=1;IN4_D=0;break;
case 4: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=0;break;
case 5: IN1_A=0;IN2_B=0;IN3_C=1;IN4_D=1;break;
case 6: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=1;break;
case 7: IN1_A=1;IN2_B=0;IN3_C=0;IN4_D=1;break;
default: IN1_A=0;IN2_B=0;IN3_C=0;IN4_D=0;break;//停止相序
}
}
void main()
{
u8 key=0;//接收按键返回值
u8 dir=0;//默认逆时针方向
u8 speed=STEPMOTOR_MAXSPEED;//默认最大速度旋转---定义宏,方便每次修改
u8 step=0;
while(1)
{
key=key_scan(0);
if(key==KEY1_PRESS)//判断KEY1按下,就换向
{
dir=!dir;
}
else if(key==KEY2_PRESS)//判断KEY2按下,状态1,加速
{
if(speed>STEPMOTOR_MAXSPEED)
speed-=1;
}
else if(key==KEY3_PRESS)//判断KEY2按下,状态1,减速
{
if(speed<STEPMOTOR_MINSPEED)
speed+=1;
}
step_motor_28BYJ48_send_pulse(step++,dir);//循环一次,step+1
if(step==8)step=0;//判断如果超过7,就重新从0开始循环
delay_time(speed);
}
}


相关文章
|
7月前
|
域名解析 监控 网络协议
DNS防火墙软件版发布上线
DNS防火墙软件版发布,支持私有化部署,通过实时过滤和监控DNS流量,阻断恶意域名解析请求,从而防止用户或系统访问网络钓鱼网站、恶意软件分发站点等高风险目标。欢迎咨询购买
|
8月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
7月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
524 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
7月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
937 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
8月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
550 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
7月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
499 2
|
7月前
|
监控 算法 安全
基于 C# 的内网行为管理软件入侵检测算法解析
当下数字化办公环境中,内网行为管理软件已成为企业维护网络安全、提高办公效率的关键工具。它宛如一位恪尽职守的网络守护者,持续监控内网中的各类活动,以确保数据安全及网络稳定。在其诸多功能实现的背后,先进的数据结构与算法发挥着至关重要的作用。本文将深入探究一种应用于内网行为管理软件的 C# 算法 —— 基于二叉搜索树的入侵检测算法,并借助具体代码例程予以解析。
124 4
|
8月前
|
Java 数据库 开发者
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
950 12
|
8月前
|
开发框架 监控 JavaScript
解锁鸿蒙装饰器:应用、原理与优势全解析
ArkTS提供了多维度的状态管理机制。在UI开发框架中,与UI相关联的数据可以在组件内使用,也可以在不同组件层级间传递,比如父子组件之间、爷孙组件之间,还可以在应用全局范围内传递或跨设备传递。
196 2
|
8月前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
172 10

热门文章

最新文章

推荐镜像

更多
  • DNS