步进电机(STM32+28BYJ-48)

news/2024/7/8 5:36:19 标签: 单片机, 电机, 步进电机, stm32, mcu

一、简介

        步进电动机(stepping motor)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备,以及打印机、绘图机和磁盘等装置。

二、工作原理

        步进电机通过一系列离散的步进动作来实现旋转。每个电脉冲信号驱动电机转动一个固定的角度,称为步距角。步进电机的控制通常通过一个驱动器(步进驱动器)来完成,该驱动器接受来自控制器的脉冲信号,并将其转换为步进电机的相位信号,从而驱动电机按预定的步进角度转动。

这里以28BYJ-48为例说明其工作原理:

        当对步进电机施加一系 列连续不断的控制脉冲时,它可以连续不断的转动。每一个脉冲信号对应步进电机的某一组 或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状 态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行, 常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A 循环),双(双相绕组通电)四拍 (AB-BC-CD-DA-AB-循环),八拍(A-AB-B-BC-C-CD-D-DA-A-循环)。 下面为驱动方式四相八拍的通电方式 。

         橙色对应的是 A 相,黄色对应的是 B 相,粉色对应的是 C 相,蓝色对应的 是 D 相。

三、原理图

         对照原理图,A 相对应 STM32 的 PC7,B 相对应 STM32 的 PC6, C 相对应 STM32 的 PC5,D 相对应 STM32 的 PC4,注意他们都是通过 ULN2803A 来驱动 步进电机的,而 ULN2803A 是反相器。

         ULN2803A 的输入为高电平时输出为低电平,输入为低电平时输出为高电平。那如果要 让 A 相通电,由表格可以看出是需要给橙色线低电平的,那么对应的 PC7 应该是高电平, 通过 ULN2803A 反向才能给橙色线低电平,其它的类似。

        因此总结一下,使某相通电,则该相对应的 STM32 引脚需要输出高电平;某相不通电,则需要该相对应的 STM32 引脚输出低电平并且注意在电机处于停止状态时,所有的相都需要不通电的状态,以免过热烧毁电机!!!

四、代码实现

1.IO口宏定义

#define SM28BYJ48_A SM28BYJ48_A_FUN_OUT(SM28BYJ48_A_PIN_ID) //SM28BYJ48_A
#define SM28BYJ48_B SM28BYJ48_B_FUN_OUT(SM28BYJ48_B_PIN_ID) //SM28BYJ48_B
#define SM28BYJ48_C SM28BYJ48_C_FUN_OUT(SM28BYJ48_C_PIN_ID) //SM28BYJ48_C
#define SM28BYJ48_D SM28BYJ48_D_FUN_OUT(SM28BYJ48_D_PIN_ID) //SM28BYJ48_D

2.在步进电机头文件定义一个结构体去设置步进电机的状态,以及步进电机通电导通控 制的宏定义。

/* 定义结构体便于全局变量操作 */
typedef struct
{
    uint8_t ucSpeed; /* 电机速度 */
    uint8_t ucDir; /* 电机方向 0 正转, 1 反转 2 停止 */
    uint8_t ucStop; /* 0 运行, 1 停止 */
}MOTOR_T;
/* 步进电机导通控制定义 */
enum
{
    SM_OFF = 0, /* A B C D 相均不导通 */
    SM_A, /* A 相导通 */
    SM_B, /* B 相导通 */
    SM_C,
    SM_D,
    SM_AB, /* AB 相导通 */
    SM_BC,
    SM_CD,
    SM_DA
};

3.驱动文件要编写的内容

设置一个变量 MOTOR_T g_tMot; /* 定义全局变量 */
注意这个变量在头文件中用 extern 申明一下,以便被其它文件调用
void bsp_InitSM28BYJ48(void)
{
    设置 GPIO 端口的初始化,设置为推挽输出,特别注意,驱动引脚初始电平是要设置为低电平
}
    设置一下通电状态
static void motPowerOn(uint8_t _ucMode)
{
    if (_ucMode == SM_OFF)
    {
        SM28BYJ48_A = 0;
        SM28BYJ48_B = 0;
        SM28BYJ48_C = 0;
        SM28BYJ48_D = 0;
    }
    else if (_ucMode == SM_A)
    {
        SM28BYJ48_A = 1;
        SM28BYJ48_B = 0;
        SM28BYJ48_C = 0;
        SM28BYJ48_D = 0;
    }
//还有其它状态,自行补全,总共 9 个状态呢,对应头文件里步进电机导通控制定义
}

4.电机驱动函数

void motPower(uint8_t _mode,uint8_t _stop)
{	if(_stop)
	{
		motPowerOn(0);
	}
	else
	{
		if(_mode==0)
		{
			if(++g_tMot.ucSpeed==9)g_tMot.ucSpeed=1;
			motPowerOn(g_tMot.ucSpeed);
		}
		else if(_mode==1)
		{
			if(--g_tMot.ucSpeed==1)g_tMot.ucSpeed=9;
			motPowerOn(g_tMot.ucSpeed);
		}
		else if(_mode==2)
		{
			motPowerOn(0);
		}	
	}
		
}

 5.主函数应用

int main(void) 
{
    bsp_InitSM28BYJ48(); /* 电机初始化 */  
    bsp_StartAutoTimer(1,g_tMot.ucSpeed);
	while(1)
	{
		bsp_Idle(); /* CPU 空闲时执行的函数,在 bsp.c */
		if (bsp_CheckTimer(0)) /* 判断定时器超时时间 */ 
		{
			/* 每隔 300ms 进来一次 */ 
			bsp_LedToggle(1); /* 翻转 DS0 的状态 */ 
		}
		if (bsp_CheckTimer(1)) /* 判断定时器超时时间 */ 
		{
			/* 每隔 300ms 进来一次 */ 
			motPower(g_tMot.ucDir,g_tMot.ucStop); 
		}
	}
}

 文中代码只是简单demo,非完整代码,还请读者自行动脑子补全,有问题可随时交流。


http://www.niftyadmin.cn/n/5536520.html

相关文章

STM32 HAL库实现硬件IIC通信

文章目录 一. 前言二. 关于IIC通信三. IIC通信过程四. STM32实现硬件IIC通信五. 关于硬件IIC的Bug 一. 前言 最近正在DIY一款智能电池,需要使用STM32F030F4P6和TI的电池管理芯片BQ40Z50进行SMBUS通信。SMBUS本质上就是IIC通信,项目用到STM32CubeMXHAL库…

ListView 的简单使用及 ArrayAdapter 中参数详解

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD,日常还会涉及Android开发工作。 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起…

记录一次Apache Tomcat 处理返回自定义的404页面

记录工作中遇到处理访问tomcat 不存在的资源,返回自定义的404页面 删除webapps目录下的example、docs、manager、hta-manager目录,只保留 ROOT目录,应用部署在了这个目录 删除 manager、hta-manager 我没有发现有什么异常 制作404.jsp 或者 4…

windows USB 设备驱动开发-USB设备描述符

USB的描述符是USB设备向主机报告状态的重要数据结构,在USB通电后,端点(也称为终结点)0始终处于可用状态,这个默认的端点就是用于主机从设备中读取描述符的。 讨论USB通讯,需要从软件和硬件两方面说起,在软件上&#x…

车牌号查车辆信息-车牌号查车辆信息接口-汽车API接口

接口简介:输入车牌号,返回车辆相关信息(无车主信息)。初始登记日期、上险日期、保险到期时间、车架号、品牌这些数据会返回,其他数据不一定全部返回,,详细参数请查看返回接口文档 一般在新车上险或过户后第…

机器学习复习总结

目录 第一章 机器学习的概念及其应用 1.1机器学习的特点: **1.2机器学习的分类: 1.2.1监督学习: 1.2.2无监督学习: 1.2.3强化学习: 1.2.4三种机器学习的区别 *1.3深度学习 1.3.1深度学习的实质: …

首家!腾讯云数据万象通过中国信通院智能存储专项测试

2024年6月19日,由中国通信标准化协会主办,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)承办的首届“数据智能大会”在京隆重召开。腾讯云存储受邀出席了活动,大会中“可信数据智能”系列评估测试结果正式颁布,经过严苛…

Ubuntu 22.04.1 LTS 离线安装Docker

确定linux版本 cat /etc/lsb-release DISTRIB_IDUbuntuDISTRIB_RELEASE22.04DISTRIB_CODENAMEjammyDISTRIB_DESCRIPTION"Ubuntu 22.04.1 LTS"确定dpkg版本 sudo dpkg --print-architecture amd64下载地址 https://download.docker.com/linux/ubuntu/dists/jamm…