拓展模块使用教程和心得(三):ULN2003模块与28BYJ48步进电机(测试平台:STC8A8K,STM32F103)

2023-05-16

成就更好的自己

关于ULN2003模块和对应的28BYJ48步进电机,网上现有的资料与教程对于初学者有点不太友好,造成的现象是仅仅只能让步进电机转起来,但是没有对于控制转速和转角的实践分析,本文的所有内容博主都经过了实物及程序的验证和计算,并以最言简意赅的方式记录下来。(测试平台:STC8A8K,STM32F103)

目录

ULN2003模块电路

28BYJ48步进电机

细枝末节的知识

 

ULN2003模块电路

先上实物图:

左边7PIN的排针是连到单片机IO口上的,中间偏下插着短接帽的4PIN排针是供电给模块和步进电机(有时候是单独供电,但是要共地),偏右边白色的5PIN插槽是五线四相步进电机专用接口,最右边的的7PIN排针是控制其他多项电机(低于七项)用的。

ULN2003本质很简单

除了8.9俩电源引脚之外,其他引脚(7*2)都是相互对应的(以上图为例,1~16,2~15以此类推),具体是什么原理呢,咱不用知道那么多,咱只用知道ULN2003内部用的是高耐压、大电流复合晶体管阵列,是让单片机IO口驱动大电流用的(因为咱们用的步进电机内部其实还是线圈,所以用到了ULN2003),多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。由于单片机采用的是灌电流驱动方式(这种驱动方式驱动能力强,但是容易烧),因此控制步进电机的IO口0为有效电平,1为无效电平

步进电机,ULN2003,单片机的前后连接原理图如下:

 

 

28BYJ48步进电机

所有资料都写的是步进电机靠脉冲驱动的,一个脉冲对应转过一个步距角,这句话会有部分理解上的问题的,下面我会一一分析的。

现在给大家区分一个概念,上图中能直接看到的绑个弹簧的那个轴是输出轴,在这个步进电机内部有个真正的步进马达转子每一个脉冲(或者下文所谓的“拍”)能使这个真正的转子转动5.625°,看下图的数据表格中的减速比是1:64,意思是这个真正的步进马达转子转动64周才能让输出轴转动1周(这个术语叫做步进马达的细分),因此下图的表格中步距角度才写的是5.625°/64,表明的意思是一个脉冲可以让输出轴转动5.625°/64的角度

脉冲的意思,必须由低电平变高电平,说白了这玩意看上升沿的,持续一段时间然后拉低即可,这段持续的时间直接决定了电机的转速,据说这废物最快14转每分钟。

下面详细说一下通电方式(或者叫励磁方式)

首先,脉冲(或拍)的数量决定转动的角度,单位时间内脉冲(或拍)的数量决定转动的速度

常见的通电方式有:

  • 一相励磁:单(单相绕组通电)四拍(A-B-C-D-A。。。)
  • 二相励磁:双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。)
  • 一二相励磁:八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

其中,经过博主的对比试验和资料查找,一相励磁和二相励磁一个脉冲转动两个步距角,一二相励磁一次脉冲只转一个步距角(测试平台STC8A8K,STM32F103)

举个简单例子,这里博主为了朋友们便于理解,没有采用网上的相序表(数组法因接口而异):

单(单相绕组通电)四拍(A-B-C-D-A。。。)

void main()		//一相励磁的例程					
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*2(一相励磁一拍走2个步距角)*4拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN2=~IN2;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN3=~IN3;

		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN4=~IN4;
	}
	IN1=IN2=IN3=IN4=1;
	while(1);
}

双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。)

void main()		//二相励磁的例程
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*2(二相励磁一拍走2个步距角)*4拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;	
		IN2=~IN2;	

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		IN3=~IN3;   //控制C相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN2=~IN2;
		IN3=~IN3;	

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第三拍
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN3=~IN3;
		IN4=~IN4;	
		
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第四拍
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN4=~IN4;
		IN1=~IN1;
	}
	IN1=IN2=IN3=IN4=1;
	while(1);
}

八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

void main()			//一二相励磁的例程
{
	uint16 num;
	IN1=IN2=IN3=IN4=1;
	for(num=640;num>0;num--)  //640个循环,5.625/64步距角*1(一二相励磁一拍走1个步距角)*8拍*640次循环=450度
	{
		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第一拍
		delay(speed);
		IN1=~IN1;

		IN1=~IN1;	//控制A相的IO口非运算后的电平变化产生一个脉冲,第二拍
		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第二拍
		delay(speed);
		IN1=~IN1;
		IN2=~IN2;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第三拍
		delay(speed);
		IN2=~IN2;

		IN2=~IN2;	//控制B相的IO口非运算后的电平变化产生一个脉冲,第四拍
		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第四拍
		delay(speed);
		IN2=~IN2;
		IN3=~IN3;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第五拍
		delay(speed);
		IN3=~IN3;

		IN3=~IN3;	//控制C相的IO口非运算后的电平变化产生一个脉冲,第六拍
		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第六拍
		delay(speed);
		IN3=~IN3;
		IN4=~IN4;

		IN4=~IN4;	//控制D相的IO口非运算后的电平变化产生一个脉冲,第七拍
		delay(speed);
		IN4=~IN4;

		IN4=~IN4;   //控制D相的IO口非运算后的电平变化产生一个脉冲,第八拍
		IN1=~IN1;   //控制A相的IO口非运算后的电平变化产生一个脉冲,第八拍
		delay(speed);
		IN4=~IN4;
		IN1=~IN1;
	}
	IN4=IN1=IN2=IN3=1;
	while(1);
}

关于控制线的脉冲有严格顺序,通脉冲的顺序影响转向(顺向逆向),负载能力,电机发热程度等。

这里博主给出了使用手册上的标准脉冲流程,如果想反转的话只用颠倒给脉冲的顺序即可,但是不要打乱顺序,否则也可能会转但是会造成各种问题。

 

细枝末节的知识

  • 这个步进电机最快转速据说14转每分钟(博主实测10转,可能延时有点慢),不能贪图速度,延时一定要延够,否则只会震动不会转动,至于慢的话,没有那个耐心测出他最慢有多慢。。。
  • 至于转角的话,只用算出他需要转几个脉冲然后循环就行了。
  • 在停止转动后,记得将所有控制线拉高,不然电机时间长了会很热,一般内部热度超过130度就会对内部的永磁体造成不可逆转的退磁现象,电机的步距角就会不准确。
  • 觉得驱动力矩不够的可以加到12v,记得与ULN2003共地。
  • 博主在初期调试的时候,一相和二相励磁时,实际转角一直是理论计算的两倍,后期查资料才知道,这两种励磁方式一脉冲转的是两个步距角,这个问题网上提到的人很少,也发现有朋友遇到过类似问题,但是我毕竟不是机械专业的,只能根据网友的结论和自己实际的情况下定论,如果发现有误或者知道原理的朋友欢迎评论或私信,共同进步,谢谢。
  • 还有一种励磁方式是以PWM脉冲调制取代单一高低电平作为上文中的3种励磁方式的输入,这种新的励磁方式有很大优点,但是因为实现起来相当复杂,一般是用不到的,有兴趣的朋友们可以自行百度一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拓展模块使用教程和心得(三):ULN2003模块与28BYJ48步进电机(测试平台:STC8A8K,STM32F103) 的相关文章

  • stm32f103 hal库中timer使用

    stm32f103 hal库中timer使用 使用步骤1 初始化定时器2 HAL TIM Base Init amp htim2 基本参数配置3 重写void HAL TIM Base MspInit TIM HandleTypeDef t
  • 基于STM32F103入门1——点亮LED灯

    今天学习了STM32固件库点灯程序 点灯也可以玩过很多好玩的东西 xff0c 在这里做一下总结 STM32点灯程序合集 1 xff1a 新建固件库工程文件1 1找到一个固件库模板1 2 xff1a 打开KEIL5新建工程1 3 xff1a
  • STM32F103 舵机控制控制程序PWM配置

    上一篇博文我讲了如何按自己想的配置PWM定时器 下来发现会不会有同学根本不想用重映像 xff0c 原本的引脚就可以 xff0c xff1a xff09 xff0c 所以在开始这篇之前 xff0c 先把TIM2定时器的设置程序发一下 xff1
  • STM32F103 72MHz时钟设置

    将系统时钟初始化到72MHz的函数 根据数据手册和库函数 xff0c 设置STM32时钟为72MHz 这是 c文件 span class token macro property span class token directive key
  • STM32F103系列PWM波

    话不多说 xff0c 直接上我能跑通的代码 pwm h span class token macro property span class token directive hash span span class token direct
  • Matlab代码导入STM32F103流程

    文章目录 软件准备STM32CubeMX简介配置STM32CUBEMX配置SIMULINKSIMULINK对STM32F103进行点灯试验一般算法导入到STM32问题故障解决参考 软件准备 安装MATLAB2019a xff0c 64位 下
  • STM32f103时钟系统简介

    主要是讲解怎么看懂这个图 一 内置RC振荡器 xff08 HSI RC xff09 频率是约为8MHz xff0c 因为其频率不是很稳定 其可作为系统时钟的一个选项 二 晶振振荡器 xff08 HSE OSC xff09 从图中可以看到其是
  • Keil 模拟器 STM32F103 上手指南

    一般嵌入式操作系统因为它的特殊性 xff0c 往往和硬件平台密切相关连 xff0c 具体的嵌入式操作系统往往只能在特定的硬件上运行 对于刚接触 RT Thread 操作系统的读者并不容易马上就获得一个和 RT Thread 操作系统相配套的
  • STM32F103 USART1串口重映射功能的实现

    STM32F103 USART1串口重映射实现方法代码 转载请注明出处 xff1a https blog csdn net qq 43400642 article details 84838405 我们知道 xff0c F103的usart
  • STM32F103最小系统板引脚定义

    STM32F103最小系统原理图 本人初学stm32 若有误解之处 还望大佬们指正改进 感谢 STM32F103各引脚定义 可前往 STM32F103xCDE 数据手册 英文 的第三章 Pinouts and pin description
  • STM32F103最小系统图例

    一 STM32F103最小系统 1 最小系统的构成2 连接图3 电源电路4 复位电路5 时钟电路6 程序下载电路7 启动配置电路 1 最小系统的构成 单片机芯片 供电电路 时钟电路 复位电路 程序下载电路 启动配置电路 2 连接图 3 电源
  • STM32F103 CAN总线配置总结

    stm32的can总线的配置如下 xff1a CAN InitStructure CAN TTCM 61 DISABLE 禁止时间触发通信模式 CAN InitStructure CAN ABOM 61 DISABLE CAN InitSt
  • RT-Thread Stm32f103开启UART2(中断接收及轮询发送) 使用RT-Thread Studio

    RT Thread Stm32f103开启UART2 使用RT Thread Studio 1 使用RT Thread Studio新建RT Thread项目 2 修改dricer gt doard h 增加UART2的宏定义设置gpio接
  • IMX6ULL与STM32F103的CAN通信实现

    IMX6ULL与STM32F103的CAN通信实现 硬件连接驱动层实现IMX6ULLSTM32F103ZET6 应用层实现IMX6ULLSTM32F103ZET6 结果 在上一篇博文中 xff0c 我们利用USBCAN设备及其上位机软件 x
  • 拓展模块使用教程和心得(7):3irobotix杉川Delta-1A激光雷达的STM32F407HAL驱动

    成就更好的自己 随着现代智能化设备程度的提高 xff0c 激光雷达已经是在智能控制与检测领域的极其常用的智能化传感器 xff0c 今天就来介绍一下3irobotix公司的Delta 1A激光雷达 Delta 1A激光雷达是一款低成本中等性能
  • STM32F103控制PCA9685产生16路PWM波控制SG90舵机

    STM32控制PCA9685产生16路PWM波控制SG90舵机 如果你能点开这篇文章 xff0c 说明你已经知道PCA9685是多么强大 xff0c NXP公司原本做这片芯片是为了提供给LED使用 xff0c 在其官方文档里也能看到所有PW
  • STM32 系统(SysTick)定时器实验

    目录 SysTick 简介 SysTick 寄存器介绍 SysTick 定时时间计算 SysTick 定时实验 实验结果 SysTick 简介 SysTick 系统定时器是属于 CM3 内核中的一个外设 内嵌在 NVIC 中 系统定时器是一
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • 如何根据芯片手册时序图编写驱动程序

    如何根据芯片手册时序图编写驱动程序 对于电子开发者来说 刚刚拿到一个芯片 常用的芯片可以参考网上的例程来做深入了解 对于一个不常用的芯片来说 Datasheet几乎是使用芯片的唯一的资料 所以根据Datasheet时序图写出对应的驱动程序就
  • STM32CUBEMX F103 HAL库开发 两路定时器的Encoder编码器模式

    机器人开发过程中 对于直流电机来说 编码器至关重要 它不仅可以使我们对电极进行精确的速度闭环 位置闭环 还可以通过时间积分 根据运动学关系 获得速度 位置等信息 STM32的定时器有编码器模式 大大的方便我们的开发 使用STM32cubeM

随机推荐

  • solidworks实体显示线框

    sw有段时间没使用 xff0c 今天打开突然发现打开的sw窗口数超过1 xff0c 那么从第二个窗口以后的模型都显示成以下样子 xff08 无论是之前的文件还是新建的都不行 xff09 如上是一个圆盘 xff0c 明明是实体 xff0c 却
  • vscode使用虚拟环境

    我的conda没有添加入path xff0c 每次打开总是报错 一 选择对应虚拟环境的解释器 1 点击vscode的右下角这里 2 点击后可能会在vscode上方出现下图样子 xff0c 如果出现下图 xff0c 则点击第二项Select
  • TabError: inconsistent use of tabs and spaces in indentation

    错误原因是tab制表符和空格混用了 从其他地方复制源码容易出现此错误 解决办法 xff1a 把处于同级缩进的所有缩进修改统一 比较流行的几个编辑器都能标识tab和空格 xff0c 比如我用的vscode 用鼠标框选 不知道是tab还是空格的
  • 关于深度学习的问题笔记

    感谢沐神教我深度学习 x1f64f 损失为什么要平均 xff1f 平均即除以batch size xff0c 若不除 xff0c 则批越大梯度越大 xff0c 梯度下降的步长就越大 除以batch size可使梯度与批大小无关 也可以不在损
  • 简单(炫酷)的单链表快速排序写法

    昨天在复习快排的时候 在B站看到一个小哥哥说某大厂的面试让写一个单链表的快速排序 我们见的最多的快排写法都是从两端向中间扫描 这种写法在单链表上不能实现 哥们分析道 快排的核心思想是每次扫描后 所有pivot左侧的元素都比pivot小 右侧
  • char* char[]

    C 43 43 判断char 的指向 char a 61 34 Peter 34 char b 61 34 Peter 34 char c 61 new char 6 strcpy s c 6 34 Peter 34 这里a指向常量区 b指
  • HTTP 基本认证 HttpBasic

    HTTP 的认证机制 基本认证 摘要认证 一 基本认证 用BASE64 算法加密后的字符串放在HTTP Request中的Header Authorization中发送给服务端 xff0c 这种方式叫HTTP基本认证 Basic Authe
  • libcurl异步调用

    span class token keyword int span span class token function main span span class token punctuation span span class token
  • 标准c++库、stl库,boost库,qt库

    C 43 43 标准库 C C xff0b xff0b 标准库主要包含3部分 xff1a STL IO流及本地化 C的函数库 标准库不是STL STL是标准模板库 是标准库的一个子集 它是一个可复用的组件库 xff0c 其中包含了很多实用的
  • 生成2023年节假日/工作日维表

    项目中有一张维表 xff0c 维护的是历史节假日工作日的信息 xff0c 估计在很多场合都有类似的需求 到了新年 xff0c 需要生成新一年的数据 xff0c 下面看看如何在维表中插入新一年的数据 1 查询节假日 根据国务院发布的休假信息
  • C++智能指针

    参考 xff1a 头文件auto ptr使用示例 unique ptr类模板声明示例 shared ptr模板声明通过辅助类模拟实现 shared ptrshared ptr使用示例 weaked ptrweak ptr 用法weak pt
  • 使用SiftGPU对两幅图像进行特征点匹配

    前言 继上一篇博客中谈到使用Changchang Wu的SiftGPU xff0c 使用GLSL语言在Windows系统下的编译方法http blog csdn net qq 36007951 article details 7847234
  • CAN通信学习笔记(一)

    1 CAN通信的基本原理 1 1 基本概念 CAN 是 Controller Area Network 的缩写 xff08 以下称为 CAN xff09 xff0c 是 ISO 国际标准化的串行通信协议 在北美和西欧 xff0c CAN 总
  • DSP28335 SCI FIFO深度设置

    SCI工作在FIFO模式下一般是因为所传输的信息并不是以一个字节为单位 xff0c 而是以多个字节组成的一个包为单位的 如果一包数据包括10个字节 xff0c 可以设置FIFO接收中断为10个字节时产生中断 设置以后 xff0c 每接收到1
  • Serial Studio简单使用说明

    Serial Studio简介 Serial Studio是一个跨平台的软件 xff0c 支持将串口 xff0c TCP UDP xff0c MQTT等协议传输数据 xff0c 并将数据可视化显示 xff0c 方便嵌入式开发人员实现数据的可
  • YOLOV1个人理解总结

    YOLO是著名的端到端目标检测框架 xff0c 最大的特点是检测快 xff0c 亲自试验YOLOv3 v5 v5在jeston Xavier NX上可以达到15FPS左右 xff0c 检测精度也相当可观 xff0c 可以达到实时检测 xff
  • STM32HAL库-USART-调试串口(大小端测试)

    概述 本篇文章介绍如何使用STM32HAL库 xff0c USART 调试串口 xff08 大小端测试 xff09 示例 硬件 xff1a STM32F103CBT6最小系统板 软件 xff1a Keil 5 29 43 STM32Cube
  • Windows下实现C语言Socket通讯TCP传送结构体信息

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 Windows下实现C语言Socket通讯 lt TCP传送结构体信息 gt 首先socket通信的步骤 xff1a 三次握手协议 三次握手协议 代码 服务器端 i
  • #STC8A8K# #STC8F1K# #STC8G1K# #STC8H1K# ——STC8系列单片机整体评价

    成就更好的自己 声明 xff1a 这不是广告 xff0c 只是发表看法和吐槽 xff0c 不吹不擂 xff1b 本文以STC8A8K64S4A12 为例 xff0c 简要分析一下STC8系列 xff1b STC 宏晶科技 公司作为国内的一家
  • 拓展模块使用教程和心得(三):ULN2003模块与28BYJ48步进电机(测试平台:STC8A8K,STM32F103)

    成就更好的自己 关于ULN2003模块和对应的28BYJ48步进电机 xff0c 网上现有的资料与教程对于初学者有点不太友好 xff0c 造成的现象是仅仅只能让步进电机转起来 xff0c 但是没有对于控制转速和转角的实践分析 xff0c 本