51单片机学习笔记 --步进电机驱动说明

文章目录

        • 工作原理
        • 代码编写
        • 驱动方式
          • 全步进驱动
          • 半步进驱动
          • 微步进驱动

工作原理

工作原理简要说明,和单片机一起配合使用的步进电机多为28BYJ28 五线四相步进电机,配合ULN2003驱动板进行控制,如图所示,对于扭矩、精度要求较高的还有42步进电机,86步进电机等,这里以28BYJ28步进电机做说明
在这里插入图片描述
内部结构方面,28BYJ28步进电机具有四个相数,也就是有四套可独立通电的定子电磁线圈。环绕这些线圈的中间是永磁体制成的转子
在这里插入图片描述
28BYJ-48采用1-2相励磁单极驱动方式,即在工作瞬间只能有一相或两相线圈同时通电。通过这种方式,电机可以以一个相对稳定的步距(角度)旋转。拍数设定,所谓的“拍”是指对某相线圈通电的基本操作单位。对于28BYJ-48而言,它可以设置为4拍或8拍运行模式。4拍模式下,每个脉冲使一相励磁;8拍模式下,则进行一相与两相交替通电。不同的拍数会影响电机的运行分辨率(即转动角度)

代码编写

最直接的,在while函数中循环给每个控制引脚输出高电平,例如当IN1输出高电平时,其他引脚输出都为低电平,循环控制的引脚从IN1 - IN4为一个方向转动,从IN4 - IN1为另一个方向的转动

#include <reg51.h>

// 定义步进电机引脚
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;

// 定义延时函数
void delay(unsigned int t)
{
    while(t--);
}

// 主函数
void main()
{
    // 循环控制步进电机转动
    while(1)
    {
        IN1 = 1;
        IN2 = 0;
        IN3 = 0;
        IN4 = 0;
        delay(1000); // 延时一段时间

        IN1 = 0;
        IN2 = 1;
        IN3 = 0;
        IN4 = 0;
        delay(1000); // 延时一段时间

        IN1 = 0;
        IN2 = 0;
        IN3 = 1;
        IN4 = 0;
        delay(1000); // 延时一段时间

        IN1 = 0;
        IN2 = 0;
        IN3 = 0;
        IN4 = 1;
        delay(1000); // 延时一段时间
    }
}

简单驱动代码编写,正反转和停止

#include <reg51.h>

// 定义步进电机引脚
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;

unsigned char phaseccw[4]={0x01,0x02,0x04,0x08};//正转 电机导通相序 IN1-IN2-IN3-IN4
unsigned char phasecw[4] ={0x08,0x04,0x02,0x01};//反转 电机导通相序 IN4-IN3-IN2-IN1

// 定义延时函数
void delay(unsigned int t)
{
    while(t--);
}

void MotorData(uchar dat)
{
  IN1 = 1&(dat>>0);
  IN2 = 1&(dat>>1);
  IN3 = 1&(dat>>2);
  IN4 = 1&(dat>>3);
}

//顺时针转动
void MotorCW(uchar Speed)
{
  uchar i;
  for(i=0;i<4;i++)
  {
    MotorData(phaseccw[i]);
    delay_ms(Speed);//转速调节
  }
}

//停止转动
void MotorStop(void)
{
  MotorData(0x00);
}

//逆时针转动
void MotorCCW(uchar Speed)
{
  uchar i;
  for(i=0;i<4;i++)
  {
    MotorData(phasecw[i]);
    delay_ms(Speed);//转速调节
  }
}

void main()
{
	while(1)
	{
		// 顺时针转动,暂停
		for(i=500;i>0;i--)
			MotorCW(3);
		MotorStop();
		delay_ms(500);
		
		// 逆时针转动,暂停
		for(i=500;i>0;i--)
			MotorCCW(3);
		MotorStop();
		delay_ms(500);
	}
}
驱动方式

步进电机常见的三种驱动方式,包括全步进驱动、半步进驱动和微步进驱动

全步进驱动

全步进驱动是最常见的步进电机驱动方式之一。它通过改变电流的方向和大小来实现步进电机的转动。具体工作原理如下:

  • 单相全步进驱动:在单相全步进驱动中,通过向两个相邻线圈施加电流,使得步进电机转动一个步进角度。该驱动方式简单易实现,但转矩较小
  • 双相全步进驱动:双相全步进驱动是一种更为常见的驱动方式。它通过按照特定的顺序向两个线圈施加电流来实现步进电机的转动。该驱动方式相比单相全步进驱动具有更高的转矩和更稳定的运行

全步进驱动方式简单直观,适用于对转矩要求不高的场合

半步进驱动

半步进驱动是介于全步进驱动和微步进驱动之间的一种驱动方式。在半步进驱动中,通过改变电流的方向和大小来实现步进电机的转动。具体工作原理如下:

  • 与全步进驱动类似,半步进驱动也可以采用单相和双相两种驱动方式。其中,双相半步进驱动是最常见的
  • 在双相半步进驱动中,首先向一个线圈施加电流,使得步进电机转动半个步进角度。然后再向另一个线圈施加电流,使得步进电机再次转动半个步进角度。通过交替改变电流的方向和大小,可以实现精确的定位

半步进驱动方式相比全步进驱动方式,具有更高的分辨率和更平滑的运动。适用于对定位要求较高的场合

微步进驱动

微步进驱动是步进电机中最精细的驱动方式,通过分段控制电流的大小和方向来实现步进电机的转动

  • 微步进驱动将每个步进角度细分为更小的微步角度。通过控制电流的大小和方向,可以使步进电机按照微步角度进行转动。
  • 微步进驱动可以实现更高的分辨率和更平滑的运动。它在定位精度和运动平稳性方面优于全步进和半步进驱动

微步进驱动方式适用于对定位精度要求极高的场合,如高精密仪器、光学设备等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】JAVA+Vue.js实现校园二手交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6 资讯…

2024年第九届信号与图像处理国际会议(ICSIP 2024)

2024第九届信号与图像处理国际会议&#xff08;ICSIP 2024&#xff09;将于2024年7月12-14日在中国南京召开。ICSIP每年召开一次&#xff0c;在过去的七年中吸引了1200多名与会者&#xff0c;是展示信号和图像处理领域最新进展的领先国际会议之一。本次将汇集来自亚太国家、北美…

Multisim14.0仿真(四十三)LM311应用

一、LM311简介&#xff1a; lm311是一款高灵活性的电压比较器&#xff0c;能工作于5V-30V单个电源或正负15V分离电源。 二、LM311主要特性&#xff1a; ★ 快速响应时间&#xff1a;165 ns。 ★ 选通能力。 ★ 最大输入偏置电流&#xff1a;300nA。 ★ 最大输入偏置电流&#…

【LLM KBQA】FlexKBQA:一种结合LLM的KBQA框架

前言 大语言模型&#xff08;LLMs&#xff09;在知识库问答&#xff08;KBQA&#xff09;领域的应用主要集中在包括但不限于以下几个方面&#xff1a; 直接生成答案&#xff1a;一些方法直接利用LLMs生成答案&#xff0c;而不是生成中间的程序&#xff08;如SPARQL查询&#…

iTOP-3A5000开发板支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路VGA等

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA…

C++ pair+map+set+multimap+multiset+AVL树+红黑树(深度剖析)

文章目录 1. 前言2. 关联式容器3. pair——键值对4. 树形结构的关联式容器4.1 set4.1.1 set 的介绍4.1.2 set 的使用 4.2 map4.2.1 map 的介绍4.2.2 map 的使用 4.3 multiset4.3.1 multiset 的介绍4.3.2 multiset 的使用 4.4 multimap4.4.1 multimap 的介绍4.4.2 multimap 的使…

【TCP】四次挥手(终止连接)

前言 TCP&#xff08;传输控制协议&#xff09;是互联网协议&#xff08;IP&#xff09;中的一种重要传输层协议&#xff0c;用于在通信的计算机之间建立可靠的、有序的和错误校验的数据传输。在TCP连接中&#xff0c;数据传输是双向的&#xff0c;因此需要一种机制来开始和结…

【操作宝典】IntelliJ IDEA新建maven项目详细教程

目录 &#x1f33c;1. 配置maven环境 &#x1f33c;2. 创建maven项目 &#x1f33c;3. 创建maven项目完整示例 a. 导入spring boot环境 b. 修改maven配置 c. 下载jar包 d. 创建Java类 &#x1f33c;1. 配置maven环境 【安装指南】maven下载、安装与配置详细教程-CSDN博客…

多层面深度分析【HarmonyOS NEXT】开发者内容

一、IDE工具层面 DevEco Studio作为专门用于开发鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的应用程序的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供一个清晰、直观的用户界面&#xff0c;使得开发人员可以更容易地进行编码、调试和测试我们的应用。新的版…

eduSRC那些事儿-4(未授权漏洞+社会工程学)

点击星标&#xff0c;即时接收最新推文 本文对edusrc挖掘的部分漏洞进行整理&#xff0c;将案例脱敏后输出成文章&#xff0c;不包含0DAY/BYPASS的案例过程&#xff0c;仅对挖掘思路和方法进行相关讲解。 未授权漏洞 一般都出现在内网&#xff0c;也有外网出现的情况&#xff0…

C语言指针的几种用途

先看题目&#xff0c;写一个fun函数&#xff0c;统计一个字符串中某个字符出现的次数&#xff0c;以及这个字符第一次出现的位置。 看起来很简单&#xff0c;似乎几行就可以搞定&#xff0c;但是写出来之后&#xff0c;才发现代码怎么这么长&#xff01;程序里多处使用了指针&…

问题:在电容耦合的放大电路中,耦合电容对输入交流信号应可视为( )。 #微信#媒体#学习方法

问题&#xff1a;在电容耦合的放大电路中&#xff0c;耦合电容对输入交流信号应可视为( )。 A:电流源; B:断路; C:短路; D:电压源 参考答案如图所示

CSS要点总结

一、CSS 快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 快速入门</title><!-- 解读1. 在 head 标签内&#xff0c;出现了 <style type"text/css"></style…

美国纳斯达克大屏怎么投放:投放完成需要多长时间-大舍传媒Dashe Media

陕西大舍广告传媒有限公司&#xff08;Shaanxi Dashe Advertising Media Co., Ltd&#xff09;&#xff0c;简称大舍传媒&#xff08;Dashe Media&#xff09;&#xff0c;是纳斯达克在中国区的总代理&#xff08;China General Agent&#xff09;。与纳斯达克合作已经有八年的…

大数据平台-可视化面板介绍-Echarts

应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。 目录 01-使用技术 02- 案例适配方案 03-基础…

Leetcode206:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1…

拓展欧几里得法求逆元

板子&#xff1a; x即为最终答案&#xff0c;x可能为负数&#xff0c;加模数即可 乘法逆元 - OI Wiki (oi-wiki.org) void exgcd(int a, int b, int& x, int& y) {if (b 0) {x 1, y 0;return;}exgcd(b, a % b, y, x);y - a / b * x; } 使用: exgcd(a, n 1, x,…

nest.js实现登录验证码功能(学习笔记)

安装express-session npm i express-session 引入 注册session import * as session from express-session;import { NestFactory } from nestjs/core; import {DocumentBuilder,SwaggerModule, } from nestjs/swagger;import { AppModule } from ./app.module;async functio…

今天又接到了一个离谱的DEBUG订单

一、BUG程序 #include <iostream> #include <string>class Rectangle { private:int width;int height;public:Rectangle(int w, int h) {width w;height h;}void setWidth(int w) {width w;}void setHeight(int h) {height h;}int getArea() {return width *…

24年2月深度学习

参考&#xff1a; RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL 树结构检索方案。