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

news2025/1/14 7:37:50

主要参考学习资料: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);
	}
}

本篇完

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

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

相关文章

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环&#xff0c;网络上也有很多 UI 自动化相关的知识或资料&#xff0c;具体到 windows 端的 UI 自动化&#xff0c;我们需要从以下几个方面考虑&#xff1a; 开发语言 毋庸置疑&#xff0c;在 UI 自动化测试领域&am…

我不是挂王-用python实现燕双鹰小游戏

一.准备工作 1.前言提要 作为程序员在浩瀚的数字宇宙中&#xff0c;常常感觉现实世界是一台精密运作的虚拟机&#xff0c;其底层的物理逻辑如同铁律般难以撼动。然而我们拥有在虚拟世界中自由驰骋、创造无限可能的独特力量。突发奇我想用Python写出燕双鹰的小游戏,这样想想就很…

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办&#xff0c;作为紫光展锐年度盛会&#xff0c;吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年&#xff0c;共同面向5G、AI和卫星通信为代表的前沿科技&#xff0c;聚焦技术…

3. STM32_串口

数据通信的基础概念 什么是串行/并行通信&#xff1a; 串行通信就是数据逐位按顺序依次传输 并行通信就是数据各位通过多条线同时传输。 什么是单工/半双工/全双工通信&#xff1a; 单工通信&#xff1a;数据只能沿一个方向传输 半双工通信&#xff1a;数据可以沿两个方向…

RPC与HTTP调用模式的架构差异

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用是两种常见的通信模式&#xff0c;它们在架构上有以下一些主要差异&#xff1a; 协议层面 RPC&#xff1a;通常使用自定义的二进制协议&#xff0c;对数据进行高效的序列化和反序列化&am…

Microsoft Excel如何插入多行

1.打开要编辑的excel表&#xff0c;在指定位置&#xff0c;鼠标右键点击“插入”一行 2.按住shift键&#xff0c;鼠标的光标箭头会变化成如下图所示 3.一直按住shift键和鼠标左键&#xff0c;往下拖动&#xff0c;直至到插入足够的行

【python】图像、音频、视频等文件数据采集

【python】图像、音频、视频等文件数据采集 先安装所需要的工具一、Tesseract-OCRTesseract-OCR环境变量设置验证是否配置成功示例语言包下载失败 二、ffmpeg验证是否安装成功示例 先安装所需要的工具 一、Tesseract-OCR Tesseract是一个 由HP实验室开发 由Google维护的开源的…

虚拟机docker记录

最近看了一个up的这个视频&#xff0c;感觉docker真的挺不错的&#xff0c;遂也想来搞一下&#xff1a; https://www.bilibili.com/video/BV1QC4y1A7Xi/?spm_id_from333.337.search-card.all.click&vd_sourcef5fd730321bc0e9ca497d98869046942 这里我用的是vmware安装ubu…

C++STL之vector(超详细)

CSTL之vector 1.vector基本介绍2.vector重要接口2.1.构造函数2.2.迭代器2.3.空间2.3.1.resize2.3.2.capacity 2.4.增删查找 3.迭代器失效4.迭代器分类 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f68…

深度学习实验十三 卷积神经网络(4)——使用预训练resnet18实现CIFAR-10分类

目录 一、数据加载 二、数据集类构建 三、模型构建 四、模型训练 五、模型评价及预测 附完整可运行代码&#xff1a; 实验大体步骤&#xff1a; 注&#xff1a; 在自己电脑的CPU跑代码 连接远程服务器跑代码√ 本次实验由于数据量巨大&#xff0c;我的笔记本上还没有…

【Maven Helper】分析依赖冲突案例

目录 Maven Helper实际案例java文件pom.xml文件运行抛出异常分析 参考资料 《咏鹅》骆宾王 鹅&#xff0c;鹅&#xff0c;鹅&#xff0c;曲项向天歌。 白毛浮绿水&#xff0c;红掌拨清波。 骆宾王是在自己7岁的时候就写下了这首杂言 Maven Helper A must have plugin for wor…

Android 桌面窗口新功能推进,聊一聊 Android 桌面化的未来

Android 桌面化支持可以说是 Android 15 里被多次提及的 new features&#xff0c;例如在 Android 15 QPR1 Beta 2 里就提到为 Pixel 平板引入了桌面窗口支持&#xff0c;桌面窗口允许用户在自由窗口同时运行多个应用&#xff0c;同时可以像在传统 PC 平台上一样调整这些窗口的…

【深度学习】四大图像分类网络之VGGNet

2014年&#xff0c;牛津大学计算机视觉组&#xff08;Visual Geometry Group&#xff09;和Google DeepMind公司一起研发了新的卷积神经网络&#xff0c;并命名为VGGNet。VGGNet是比AlexNet更深的深度卷积神经网络&#xff0c;该模型获得了2014年ILSVRC竞赛的第二名&#xff0c…

Pytest框架学习20--conftest.py

conftest.py作用 正常情况下&#xff0c;如果多个py文件之间需要共享数据&#xff0c;如一个变量&#xff0c;或者调用一个方法 需要先在一个新文件中编写函数等&#xff0c;然后在使用的文件中导入&#xff0c;然后使用 pytest中定义个conftest.py来实现数据&#xff0c;参…

【力扣】389.找不同

问题描述 思路解析 只有小写字母&#xff0c;这种设计参数小的&#xff0c;直接桶排序我最开始的想法是使用两个不同的数组&#xff0c;分别存入他们单个字符转换后的值&#xff0c;然后比较是否相同。也确实通过了 看了题解后&#xff0c;发现可以优化&#xff0c;首先因为t相…

HarmonyOS4+NEXT星河版入门与项目实战(23)------组件转场动画

文章目录 1、控件图解2、案例实现1、代码实现2、代码解释3、实现效果4、总结1、控件图解 这里我们用一张完整的图来汇整 组件转场动画的用法格式、属性和事件,如下所示: 2、案例实现 这里我们对上一节小鱼游戏进行改造,让小鱼在游戏开始的时候增加一个转场动画,让小鱼自…

Wireshark常用功能使用说明

此处用于记录下本人所使用 wireshark 所可能用到的小技巧。Wireshark是一款强大的数据包分析工具&#xff0c;此处仅介绍常用功能。 Wireshark常用功能使用说明 1.相关介绍1.1.工具栏功能介绍1.1.1.时间戳/分组列表概况等设置 1.2.Windows抓包 2.wireshark过滤器规则2.1.wiresh…

Vue3 开源UI 框架推荐 (大全)

一 、前言 &#x1f4a5;这篇文章主要推荐了支持 Vue3 的开源 UI 框架&#xff0c;包括 web 端和移动端的多个框架&#xff0c;如 Element-Plus、Ant Design Vue 等 web 端框架&#xff0c;以及 Vant、NutUI 等移动端框架&#xff0c;并分别介绍了它们的特性和资源地址。&#…

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍&#xff1a;为何选择WordCloud&#xff1f;2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍&#xff1a;为何选择Wo…

Kali Linux系统一键汉化中文版及基础使用详细教程

Kali Linux系统一键汉化中文版及基础使用详细教程 引言 Kali Linux是一款基于Debian的Linux发行版&#xff0c;专为渗透测试和网络安全而设计。由于其强大的功能和丰富的工具&#xff0c;Kali Linux在安全领域得到了广泛应用。然而&#xff0c;许多用户在使用Kali Linux时会遇…