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

文章目录

工作原理

工作原理简要说明,和单片机一起配合使用的步进电机多为28BYJ28 五线四相步进电机,配合ULN2003驱动板进行控制,如图所示,对于扭矩、精度要求较高的还有42步进电机,86步进电机等,这里以28BYJ28步进电机做说明

内部结构方面,28BYJ28步进电机具有四个相数,也就是有四套可独立通电的定子电磁线圈。环绕这些线圈的中间是永磁体制成的转子

28BYJ-48采用1-2相励磁单极驱动方式,即在工作瞬间只能有一相或两相线圈同时通电。通过这种方式,电机可以以一个相对稳定的步距(角度)旋转。拍数设定,所谓的"拍"是指对某相线圈通电的基本操作单位。对于28BYJ-48而言,它可以设置为4拍或8拍运行模式。4拍模式下,每个脉冲使一相励磁;8拍模式下,则进行一相与两相交替通电。不同的拍数会影响电机的运行分辨率(即转动角度)

代码编写

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

c 复制代码
#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); // 延时一段时间
    }
}

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

c 复制代码
#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);
	}
}
驱动方式

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

全步进驱动

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

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

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

半步进驱动

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

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

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

微步进驱动

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

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

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

相关推荐
gantengsheng7 小时前
基于51单片机和OLED12864的小游戏《贪吃蛇》
单片机·嵌入式硬件·游戏·51单片机
析木不会编程1 天前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
IT_阿水3 天前
51单片机之RTC电子钟
嵌入式硬件·51单片机·数码管·rtc电子钟
学习噢学个屁4 天前
基于51单片机的交通灯设计—夜间、紧急、复位、可调时间、四个数码管显示
c语言·单片机·嵌入式硬件·51单片机
腾飞的信仰5 天前
51单片机-内部扩展RAM的应用
单片机·嵌入式硬件·51单片机
相醉为友6 天前
实训项目11基于51单片机的门禁监测系统设计
单片机·嵌入式硬件·51单片机
嵌入式大圣6 天前
单片机与MQTT协议
stm32·单片机·嵌入式硬件·物联网·51单片机
析木不会编程6 天前
【小白51单片机专用教程】protues仿真流水灯
单片机·嵌入式硬件·51单片机
陌夏微秋7 天前
STM32单片机芯片与内部19 NVIC-简介-配置中断分组、优先级等标准库 HAL库
stm32·单片机·嵌入式硬件·51单片机·信息与通信
相醉为友7 天前
课设项目十:智能手电筒(使用金沙滩51单片机)
单片机·嵌入式硬件·51单片机