【51单片机】程序实验910.直流电机-步进电机

主要参考学习资料:B站【普中官方】51单片机手把手教学视频

前置知识:C语言

单片机套装:普中STC51单片机开发板A4标准版套餐7

码字不易,求点赞收藏加关注(´•ω•̥`)

有问题欢迎评论区讨论~

目录

  • 程序实验9&10.直流电机-步进电机
    • 直流电机
      • 直流电机介绍
      • ULN2003芯片介绍
      • 硬件设计
      • 实验9 直流电机
    • 步进电机
      • 步进电机介绍
        • 步进电机的工作原理
        • 步进电机的极性
          • 双极性步进电机驱动原理
          • 单极性步进电机驱动原理
          • 细分驱动原理
        • 步进电机的技术指标
        • 28BYJ-48步进电机简介
      • 硬件设计
      • 实验10 步进电机

程序实验9&10.直流电机-步进电机

直流电机

直流电机介绍

直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能(直流发电机)的旋转电机。

直流电机没有正负极之分,在电机两端加上直流电即可工作,不同的正负极接法决定电机的旋转方向。直流电机有额定电压和额定功率,无法长时间超额工作。

ULN2003芯片介绍

ULN2003是一种用于驱动大功率器件的芯片,如果直接用单片机的GPIO管脚驱动大功率器件则芯片会烧坏或无法驱动。

ULN2003芯片是高耐压、大电流复合晶体管阵列,由七对npn的达林顿管组成,可以驱动电机、继电器、灯等器件。单个独立达林顿管的集电极电流为500mA,在关态时能承受50V的电压,输出可以在高负载电流并行运行。

ULN2003芯片有七对输入输出引脚,GND脚接地,COM脚接达林顿管的公共端电源。由于ULN2003为漏极开路电路,在没有上拉电阻的情况下输出端处于高阻态无法输出高电平,因此电机需通过一端接在VCC电源,另一端接在低电平输出端实现驱动。如果有上拉电阻则可以通过一端输出高电平一端输出低电平驱动电机。

硬件设计

普中A2-A4开发板中ULN2003芯片前五个输入管脚与单片机连接,一个输出管脚控制蜂鸣器,四个输出管脚和电源管脚通过排针引出,以便于连接电机。电机接线如下:

实验9 直流电机

实现功能:直流电机工作约5s后停止

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

//电机连接哪个输出脚则定义哪个为电机控制口
sbit DC_Motor = P1^0;

//以毫秒为单位的延时函数
void delay_ms(u16 ms)
{
	u16 i, j;
	for(i = ms;i > 0;i--)
		for(j = 110;j > 0;j--);
}

void main()
{
    //ULN2003芯片内部相当于非门,输入高电平则输出低电平
	DC_Motor = 1;
    //延时5秒
	delay_ms(5000);
    //输入低电平,输出高阻态
	DC_Motor = 0;
}

冷启动烧录程序时,先烧录再连接外接设备。

步进电机

步进电机介绍

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件,电机的转速和停止位置取决于脉冲信号的频率和脉冲数,一个脉冲信号使步进电机旋转一个步距角。

步进电机的工作原理

步进电机的转子通常为永磁体,当电流流过定子会产生矢量磁场带动转子旋转一定的角度使转子的方向与磁场的方向保持一致,电流的方向决定旋转的方向。

步进电机的极性

上图左侧为单极性步进电机,右侧为双极性步进电机。单双极性是指一个步进电机里面有几种电流流向

双极性步进电机驱动原理

上图中,A+A-、B+B-各自控制两个方向的磁极。根据右手螺旋定定则可得,高电平一端为S极,低电平一端为N极。左侧1234通过单相激励(一对磁极工作另一对磁极不工作)实现水平和竖直的四个方向的旋转,右侧1234通过双相激励(两对磁极同时工作)实现四个45°斜方向的旋转。两者结合后可以实现步距角45°的控制。

单极性步进电机驱动原理

单极性有一个公共端VCC和四根相线,电流方向是固定的。公共端是一直通电的,四根相线对每一根通电都可以得到该方向上的S极磁场。左侧为单向激励,右侧为双向激励,两者结合后可以实现步距角45°的控制。公共端为高电平,对哪一相通电则将哪一相输入低电平,其余相输入高电平。

细分驱动原理

如果要进一步缩小步距角,可以在双相激励时分别控制两相的电流大小进而实现磁场的细微变化,哪一相电流更强则转子更偏向哪一相。该方面控制由电机中的一种专门的驱动器执行。

步进电机的技术指标

静态技术指标

相数:步进电机线圈的组数。

拍数:完成一个磁场周期变化所需要的脉冲数。

步距角:一个脉冲信号引起电机旋转的角度。

定位转矩:电机在不通电状态下转轴的锁定力矩。

静转矩:电机在额定静态电压工作下不作旋转运动时转轴的锁定力矩。

动态技术指标

步距角精度:步距角实际值和理论值之间的误差百分比。

失步:电机旋转步数小于理论步数,一般由负载过大或频率过快引起。

失调角:转子磁轴与定子磁轴之间的角度。

最大空载起动频率:电机在不加负载的条件下能够直接起动的最大频率。

最大空载运行频率:电机在不加负载的条件下最高的转速频率。

运行转矩特性:电机运行转矩取决于平均电流而不是静态电流,平均电流越大运行转矩越大。

电机正反转控制:通过改变线圈通电方向改变电机的正反转。

28BYJ-48步进电机简介

本实验用到的步进电机为28BYJ-48步进电机,为五线四相单极性步进电机。

工作通电顺序(GND即设为低电平):

导线颜色第1步第2步第3步第4步第5步第6步第7步第8步
VCC 红5V5V5V5V5V5V5V5V
D 橙GNDGNDGND
C 黄GNDGNDGND
B 粉GNDGNDGND
A 蓝GNDGNDGND

电机指标:

电机型号电压(V)相数相电阻(Ω)步进角度减速比100PPS起动转矩(g·cm)起动频率(PPS)定位转矩(g·cm)绝缘耐压(VAC/s)
28BYJ48543005.625/641:64≥300≥500≥300600

硬件设计

步进电机硬件控制部分与直流电机相同,红线接在VCC针,其余四线接在四个输出针。

实验10 步进电机

实现功能:通过ULN2003驱动模块控制28BYJ48步进电机运行方向及速度,当按下KEY1键可调节电机旋转方向,当按下KEY2键电机加速,当按下KEY3键电机减速。

#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;

//定义步进电机的四个输入端口
sbit IN1_D = P1^0;
sbit IN1_C = P1^1;
sbit IN1_B = P1^2;
sbit IN1_A = P1^3;

//定义四个独立按键
sbit KEY1 = P3^1;
sbit KEY2 = P3^0;
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;

//宏定义步进电机的速度范围(速度实际为脉冲延时长度,故值越大越慢)
#define STEPMOTOR_MAXSPEED 1
#define STEPMOTOR_MINSPEED 5

//毫秒延时函数
void delay_ms(u16 ms)
{
	u16 i, j;
	for(i = ms;i > 0;i--)
		for(j = 110;j > 0;j--);
}

//按键扫描函数(见实验3)
u8 key_scan(u8 mode)
{
	static u8 key = 1;
	if(mode)
		key = 1;
	if(key == 1 && (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0))
	{
		key = 0;
		delay_ms(20);
		if(KEY1 == 0)
			return 1;
		else if(KEY2 == 0)
			return 2;
		else if(KEY3 == 0)
			return 3;
		else if(KEY4 == 0)
			return 4;
	}
	else if(KEY1 == 1 && KEY2 == 1 && KEY3 == 1 && KEY4 == 1)
	{
		key = 1;
	}
	return 0;
}

//步进电机脉冲发送函数,第一个参数为步数序号,第二个参数控制旋转方向,1顺时针0逆时针
void step_motor_28BYJ48_send_pulse(u8 step, u8 dir)
{
    //存储步数序号的变量
	u8 temp = step;
    
    //如果为逆时针则
	if(dir == 0)
		temp = 7 - step;
    
    //根据步数序号控制相应端口的电平(参照工作通电顺序表),由于ULN芯片非门作用故取反
	switch(temp)
	{
		case 0: IN1_A = 0;IN1_B = 0;IN1_C = 0;IN1_D = 1;break;
		case 1: IN1_A = 0;IN1_B = 0;IN1_C = 1;IN1_D = 1;break;
		case 2: IN1_A = 0;IN1_B = 0;IN1_C = 1;IN1_D = 0;break;
		case 3: IN1_A = 0;IN1_B = 1;IN1_C = 1;IN1_D = 0;break;
		case 4: IN1_A = 0;IN1_B = 1;IN1_C = 0;IN1_D = 0;break;
		case 5: IN1_A = 1;IN1_B = 1;IN1_C = 0;IN1_D = 0;break;
		case 6: IN1_A = 1;IN1_B = 0;IN1_C = 0;IN1_D = 0;break;
		case 7: IN1_A = 1;IN1_B = 0;IN1_C = 0;IN1_D = 1;break;
	}
}

void main()
{
    
	u8 key = 0; //存储按键值变量
	u8 dir = 0; //转动方向控制变量
	u8 step = 0; //步数序号控制变量
	u8 speed = 1; //速度控制变量
	while(1)
	{
		key = key_scan(0); //扫描按键
		if(key == 1)
		{
			dir = !dir; //KEY1对转动方向取反
		}
		else if(key == 2)
		{
            //KEY2加速
			if(speed > STEPMOTOR_MAXSPEED)speed--;
		}
		else if(key == 3)
		{
            //KEY3减速
			if(speed < STEPMOTOR_MINSPEED)speed++;
		}
        //输出脉冲信号,step++先传入step参数再对step加一
		step_motor_28BYJ48_send_pulse(step++, dir);
        //执行一个周期后重置步数序号
		if(step == 8)step = 0;
        //延时控制转速
		delay_ms(speed);
	}
}

本篇完

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

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

相关文章

Qt支持RKMPP硬解的视频监控系统/性能卓越界面精美/实时性好延迟低/录像存储和回放/云台控制

一、前言 之前做的监控系统&#xff0c;已经实现了在windows上硬解码比如dxva2和d3d11va&#xff0c;后续又增加了linux上的硬解vdpau的支持&#xff0c;这几种方式都是跨系统的硬解实现方案&#xff0c;也是就是如果都是windows系统&#xff0c;无论X86还是ARM都通用&#xf…

Web API基本认知

作用和分类 作用&#xff1a;就是使用JS去操作html和浏览器 分类&#xff1a;DOM&#xff08;文档对象模型&#xff09;、BOM&#xff08;浏览器对象模型&#xff09; 什么是DOM DOM&#xff08;Document Object Model ——文档对象模型&#xff09;是用来呈现以及与任意 HTM…

Linux——自定义简单shell

shell 自定义shell目标普通命令和内建命令&#xff08;补充&#xff09; shell实现实现原理实现代码 自定义shell 目标 能处理普通命令能处理内建命令要能帮助我们理解内建命令/本地变量/环境变量这些概念理解shell的运行 普通命令和内建命令&#xff08;补充&#xff09; …

智能桥梁安全运行监测系统守护桥梁安全卫士

一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分&#xff0c;其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道&#xff0c;更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行&#xff0c;桥梁安…

【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息

目录 1.抓包工具查看网站信息2.代码实现3.运行结果 1.抓包工具查看网站信息 请求路径 url:https://movie.douban.com/typerank请求参数 页面往下拉&#xff0c;出现新的请求结果&#xff0c;参数start更新&#xff0c;每次刷新出20条新的电影数据 2.代码实现 # 使用网络爬…

新质驱动·科东软件受邀出席2024智能网联+低空经济暨第二届湾区汽车T9+N闭门会议

为推进广东省加快发展新质生产力&#xff0c;贯彻落实“百县千镇万村高质量发展工程”&#xff0c;推动韶关市新丰县智能网联新能源汽车、低空经济与数字技术的创新与发展&#xff0c;充分发挥湾区汽车产业链头部企业的带动作用。韶关市指导、珠三角湾区智能网联新能源汽车产业…

C#使用ExcelDataReader读取Xlsx文件为DataTable对象

创建控制台项目 在NuGet中安装ExcelDataReader.DataSet 3.7.0 创建一个xlsx文件 测试代码 读取xlsx文件内容&#xff0c;为一个DataTable对象。 读取xlsx时&#xff0c;xlsx文件不能被其他软件打开&#xff0c;否则会报“进程无法访问此文件”的错。 using ExcelDataRead…

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…

智慧银行反欺诈大数据管控平台方案(一)

智慧银行反欺诈大数据管控平台建设方案的核心在于通过整合先进的大数据技术和深度学习算法&#xff0c;打造一个全面、智能且实时的反欺诈系统&#xff0c;以有效识别、预防和应对各类金融欺诈行为。该方案涵盖数据采集、存储、处理和分析的全流程&#xff0c;利用多元化的数据…

基于 JNI + Rust 实现一种高性能 Excel 导出方案(上篇)

每个不曾起舞的日子,都是对生命的辜负。 ——尼采 一、背景:Web 导出 Excel 的场景 Web 导出 Excel 功能在数据处理、分析和共享方面提供了极大的便利,是许多 Web 应用程序中的重要功能。以下是一些典型的场景: 数据报表导出:在企业管理系统(如ERP、CRM)中,用户经常需…

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件

使用 Tkinter 创建一个简单的 GUI 应用程序来合并视频和音频文件 Python 是一门强大的编程语言&#xff0c;它不仅可以用于数据处理、自动化脚本&#xff0c;还可以用于创建图形用户界面 (GUI) 应用程序。在本教程中&#xff0c;我们将使用 Python 的标准库模块 tkinter 创建一…

「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历

本篇将带你实现一个简易日历应用&#xff0c;显示当前月份的日期&#xff0c;并支持选择特定日期的功能。用户可以通过点击日期高亮选中&#xff0c;还可以切换上下月份&#xff0c;体验动态界面的交互效果。 关键词 UI互动应用简易日历动态界面状态管理用户交互 一、功能说明…

江协科技最新OLED保姆级移植hal库

江协科技最新OLED移植到hal库保姆级步骤 源码工程存档 工程和源码下载(密码 1i8y) 原因 江协科技的开源OLED封装的非常完美, 可以满足我们日常的大部分开发, 如果可以用在hal库 ,将是如虎添翼, 为我们开发调试又增加一个新的瑞士军刀, 所以我们接下来手把手的去官网移植源码…

NLTK工具包

NLTK工具包 NLTK工具包安装 非常实用的文本处理工具&#xff0c;主要用于英文数据&#xff0c;历史悠久~ 安装命令&#xff1a; pip install nltk import nltk # nltk.download() # nltk.download(punkt) # nltk.download(stopwords) # nltk.download(maxent_ne_chunker) nl…

HarmonyOS:使用Emitter进行线程间通信

Emitter主要提供线程间发送和处理事件的能力&#xff0c;包括对持续订阅事件或单次订阅事件的处理、取消订阅事件、发送事件到事件队列等。 一、Emitter的开发步骤如下&#xff1a; 订阅事件 import { emitter } from kit.BasicServicesKit; import { promptAction } from kit.…

Unity之一键创建自定义Package包

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之一键创建自定义Package包 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; …

【html网页页面007】html+css制作旅游主题内蒙古网页制作含注册表单(4页面附效果及源码)

旅游家乡主题网页制作 &#x1f964;1、写在前面&#x1f367;2、涉及知识&#x1f333;3、网页效果&#x1f308;4、网页源码4.1 html4.2 CSS4.3 源码获取 &#x1f40b;5、作者寄语 &#x1f964;1、写在前面 家乡网站主题内蒙古的网页 一共4个页面 网页使用htmlcss制作页面…

Ardupilot开源无人机之Geek SDK讨论

Ardupilot开源无人机之Geek SDK讨论 1. 源由2. 假设3. 思考3.1 结构构型3.2 有限资源3.3 软硬件构架 4.Ardupilot构架 - 2024kaga Update5. 讨论5.1 话题1&#xff1a;工作模式5.2 话题2&#xff1a;关键要点5.3 话题3&#xff1a;产品设计 6. Geek SDK - OpenFire6.1 开源技术…

JavaWeb——Maven高级

11.1. 分模块设计与开发 将项目按照功能拆分成若干个子模块&#xff0c;方便项目的管理维护、扩展&#xff0c;也方便模块之间的互相调用&#xff0c;资源共享。 11.2. 继承与聚合 11.2.1. 继承 父工程的的打包方式必须为pom 实现步骤 11.2.2. 版本锁定 dependencyManagemen…

Python中的实用工具JSON解析

对于Python不熟悉的同学&#xff0c;建议从本专栏第一篇开始观看 https://blog.csdn.net/qq_20330595/category_12844705.html 先上效果图 代码 import threading import tkinter as tk import json from tkinter import scrolledtext import tkinter.filedialog as filedialo…