51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

这篇具有很好参考价值的文章主要介绍了51单片机STC15W4K56S4控制步进电机28BYJ-48正反转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

步进电机28BYJ-48(12V)介绍:

      首先,我们看下步进电机28BYJ-48(12V)外观图,如下:

51单片机STC15W4K56S4控制步进电机28BYJ-48正反转51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

       28BYJ-48(12V)含义如下:28表示电机直径28毫米,B表示电机 ,Y表示永磁,J表示带减速箱,48表示四相八拍。

      下面解释下“4 相永磁式”的概念,28BYJ-48 的构造如下图所示。

51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

       先看里圈,它有 6 个齿,辨别标注为 0~5,这个叫做转子,它是要转动的,转子的每一个齿都是一块永磁体,这就是“永磁式”的概念。再看外圈,这个就是定子,它是固定不动的,实践上它是跟电机的外壳固定在一同的,它有 8个齿,而每一个齿上都缠上了一个线圈绕组,正对着的 2 个齿上的绕组又是串联在一同的,也就是说正对着的2 个绕组老是会同时导通或关断的,如此就构成了4相,在图平分别标注为 A-B-C-D,这就是“4 相”的概念。   

      对于电机电机28BYJ-48(12V)是64个脉冲为一圈(注意是电机本身),得到电机28BYJ-48(12V)的步进角是5.625度(注意是电机本身)。而因为这个电机28BYJ-48(12V)是带减速齿轮的,所以最后在输出轴上的步进角是5.625/64=0.08789度(因为减速比是1/64)。最后推导出对于输出轴,是4096个脉冲为一圈(64×64)。电机转64圈,输出轴转1圈。

      对电机施加一系列连续不断的控制脉冲时,它可以连续不断的转动。电机启动和停转平稳,可以精确控制转动角度。步进电机转动是需要按照一定的组合以一定的频率给步进电机的4“相”输入脉冲信号,将4个相分别称为A、B、C、D。在这里我们采用4相8拍的方式控制电机的转动,即A-AB-B-BC-C-CD-D-DA-A。。。。。。

步进电机驱动芯片ULN2003:

      步进电机28BYJ-48(12V)由芯片ULN2003驱动。ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 基极电阻,在5V 工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。ULN2003多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中,可直接驱动继电器等负载。

ULN2003芯片引脚图如下:

51单片机STC15W4K56S4控制步进电机28BYJ-48正反转51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

引脚1:脉冲输入端。    引脚2:脉冲输入端。

引脚3:脉冲输入端。    引脚4:脉冲输入端。

引脚5:脉冲输入端。    引脚6:脉冲输入端。

引脚7:脉冲输入端。    引脚8:接地。

引脚9:该脚是内部7个续流二极管负极公共端,各二极管正极分别接各达林顿管的集电极。用于感性负载时,该脚接负载电源正极,实现续流作用。如果该脚接地,实际上就是达林顿管的集电极对地接通。

引脚10:脉冲信号输出端,对应7脚输入端。

引脚11:脉冲信号输出端,对应6脚输入端。

引脚12:脉冲信号输出端,对应5脚输入端。

引脚13:脉冲信号输出端,对应4脚输入端。

引脚14:脉冲信号输出端,对应3脚输入端。

引脚15:脉冲信号输出端,对应2脚输入端。

引脚16:脉冲信号输出端,对应1脚输入端。

51单片机STC15W4K56S4控制步进电机28BYJ-48实例:

步进电机28BYJ-48(12V)驱动电路如下:

51单片机STC15W4K56S4控制步进电机28BYJ-48正反转

 步进电机28BYJ-48(12V)控制程序源代码如下: 

/******************51单片机步进电机正反转动控制********************    

处理器:STC15W4K56S4

功能:步进电机正转和反转循环进行

烧写程序时,选择单片机内部时钟,频率为22.1184M

单片机型号:STC15W4K56S4。 

**************************************************************************/

#include "stc15.h"                                         //包含头文件stc15.h

#include <intrins.h>                                      //包含头文件intrins.h

#define MOTOR_STOP 0                            //步进电机停转标志

#define MOTOR_ZZ 1                                 //步进电机正转标志                 

#define MOTOR_FZ 2                                 //步进电机反转标志

sbit M_CHENG=P2^6;                                //步进电机橙线

sbit M_HUAN=P2^7;                                   //步进电机黄线

sbit M_FENG=P4^5;                                   //步进电机粉线

sbit M_LANG=P4^6;                                   //步进电机蓝线

void delay(unsigned int t);                          //delay延时函数

void delay_us(unsigned int t);                    //delay_us延时函数

void delay_ms(unsigned int t);                   //delay_ms延时函数

void GPIO_MOTOR_Configuration(void); //步进电机控制IO口初始化

void M_STOP(void);                                  //步进电机停转

void M_PHASE1(void);                             //步进电机相位1

void M_PHASE2(void);                             //步进电机相位2

void M_PHASE3(void);                             //步进电机相位3

void M_PHASE4(void);                             //步进电机相位4

void M_PHASE5(void);                             //步进电机相位5

void M_PHASE6(void);                             //步进电机相位6

void M_PHASE7(void);                             //步进电机相位7

void M_PHASE8(void);                             //步进电机相位8

void Timer0_Init(void);                              //定时器0初始化

unsigned char MOTOR_STATE=0;          //步进电机状态

unsigned char Bj_Counter=1;                  //计数变量

/*******************************延时函数******************************/

void delay(unsigned int t){while(t--);}       //delay延时函数

void delay_us(unsigned int t)                  //delay_us延时函数

{unsigned char i;while(t--){i=3;while(i--)delay(1);}}

void delay_ms(unsigned int t)                 //delay_ms延时函数

{while(t--){delay_us(t);}}

/*************************电机控制相关函数**************************/

void GPIO_MOTOR_Configuration(void)    //步进电机控制IO口初始化

{

 P2M1=P2M1&0x3f;P2M0=P2M0&0x3f;

 P4M1=P4M1&0x9f;P4M0=P4M0&0x9f;

}文章来源地址https://www.toymoban.com/news/detail-416311.html

void M_STOP(void)                                   //步进电机停转

{M_CHENG=0;M_HUAN=0;M_FENG=0;M_LANG=0;}

void M_PHASE1(void)                              //步进电机相位1

{M_CHENG=1;M_HUAN=0;M_FENG=0;M_LANG=0;}

void M_PHASE2(void)                             //步进电机相位2

{M_CHENG=1;M_HUAN=1;M_FENG=0;M_LANG=0;}

void M_PHASE3(void)                             //步进电机相位3

{M_CHENG=0;M_HUAN=1;M_FENG=0;M_LANG=0;}

void M_PHASE4(void)                             //步进电机相位4

{M_CHENG=0;M_HUAN=1;M_FENG=1;M_LANG=0;}

void M_PHASE5(void)                             //步进电机相位5

{M_CHENG=0;M_HUAN=0;M_FENG=1;M_LANG=0;}

void M_PHASE6(void)                             //步进电机相位6

{M_CHENG=0;M_HUAN=0;M_FENG=1;M_LANG=1;}

void M_PHASE7(void)                             //步进电机相位7

{M_CHENG=0;M_HUAN=0;M_FENG=0;M_LANG=1;}

void M_PHASE8(void)                             //步进电机相位8

{M_CHENG=1;M_HUAN=0;M_FENG=0;M_LANG=1;}

/************************定时器0初始化函数*************************/

void Timer0_Init(void)                          //定时器0初始化

{TMOD=0x01;TH0=0xea;TL0=0x66;TR0=1;ET0=1;EA=1;}

//改变定时时间可以改变步进电机转动速度

/********************************主函数*******************************/ 

void main(void)

{

 GPIO_MOTOR_Configuration();                    //步进电机控制IO口初始化

 Timer0_Init();                                                  //定时器0初始化

 while(1)

 {

  MOTOR_STATE=MOTOR_ZZ;                    //步进电机正转

  delay_ms(500);delay_ms(500);                   //delay_ms延时函数

  MOTOR_STATE=MOTOR_STOP;              //步进电机停转

  delay_ms(500);delay_ms(500);                   //delay_ms延时函数

  MOTOR_STATE=MOTOR_FZ;                   //步进电机反转

  delay_ms(500);delay_ms(500);                  //delay_ms延时函数

  MOTOR_STATE=MOTOR_STOP;             //步进电机停转

  delay_ms(500);delay_ms(500);                  //delay_ms延时函数

 }

}

/***********************定时器0中断处理函数***********************/

void timer0()interrupt 1 using 2                  //定时器0中断处理

{

 TH0=0xea;TL0=0x66;                               //3Ms定时     

 switch(MOTOR_STATE)

 {

  case MOTOR_STOP:                              //步进电机停转

  {M_STOP();}break; 

  case MOTOR_ZZ:                                   //步进电机正转

  {    

   if(Bj_Counter==1){M_PHASE1();}          

   else if(Bj_Counter==2){M_PHASE2();}         

   else if(Bj_Counter==3){M_PHASE3();;}        

   else if(Bj_Counter==4){M_PHASE4();}         

   else if(Bj_Counter==5){M_PHASE5();} 

   else if(Bj_Counter==6){M_PHASE6();} 

   else if(Bj_Counter==7){M_PHASE7();}         

   else if(Bj_Counter==8){M_PHASE8();}        

  }break;  

  case MOTOR_FZ:                                   //步进电机反转

  {

   if(Bj_Counter==1){M_PHASE8();}          

   else if(Bj_Counter==2){M_PHASE7();}         

   else if(Bj_Counter==3){M_PHASE6();}         

   else if(Bj_Counter==4){M_PHASE5();}         

   else if(Bj_Counter==5){M_PHASE4();} 

   else if(Bj_Counter==6){M_PHASE3();} 

   else if(Bj_Counter==7){M_PHASE2();}         

   else if(Bj_Counter==8){M_PHASE1();}         

  }break;  

  default:{;}  

 }

 Bj_Counter++;

 if(Bj_Counter==9){Bj_Counter=1;}

}

到了这里,关于51单片机STC15W4K56S4控制步进电机28BYJ-48正反转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STC15单片机】动态数码管

    目录 点亮一位数码管 动态数码管 100s倒计时 动态数码管封装代码 段选:选中哪一位数码管 位选:选中的数码管要显示的内容 这是我对段选位选的理解,就是选中某个位置,赋值字形码,显示想要的图形 如果只想让第一个数码管显示,就只需要让com1 = 1即可,其他comx都=0 如

    2024年02月13日
    浏览(31)
  • 【STC15单片机】简单的矩阵键盘代码

    单片机型号说明:IAP15F2K61S2 新建工程时单片机型号选择 STC15F2K60S2 51单片机矩阵键盘代码 本程序烧写到51单片机应该是正常使用的,手头没有51开发板了,暂时没测试 这个程序烧写到15单片机,前两列按键不能正常使用 只需要在判断第一列按键那部分程序,前面加上P42 = 0;

    2024年02月05日
    浏览(67)
  • 基于STC15系列单片机的智能门锁

    一、项目背景及功能需求 1.1项目背景 智能门锁是一种智能化、高效、安全的门锁,它可以实现密码识别开锁方式,极大地提高了门锁的安全性和便利性。随着人们对安全性的要求越来越高,智能门锁已经成为了现代家庭和企业的必备设备。因此,本项目旨在设计一款基于S

    2024年02月04日
    浏览(49)
  • STC15系列单片机学习6:外部中断

    外部中断,就是通过单片机IO引脚电平的变化触发的中断。 STC15系列单片机的外部中断源一共有5个,分别是外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4);当然不是所有的STC15系列单片机都有着5个外部中断。 中断源 触发行为

    2024年03月12日
    浏览(97)
  • STC15系列单片机学习4:串口通讯

    在使用单片机的串口前,得先知道所使用的单片机有几个串口,再结合你的硬件电路图来使用哪个串口。 以下是STC15各系列单片机的串口数量,STC15W4K32S4系列有4个串口 工作模式0:同步移位寄存器(官方建议初学者不学) 工作模式1:8位串口,波特率可变 工作模式2:9位串口

    2024年04月13日
    浏览(33)
  • STC51单片机解码433M程序说明

    最近需要用到433M的单片机解码,上网搜了一下。大部分的程序都是基于定时器定时检测。感觉逻辑不够严谨。对于新手理解起来也比较困难。 查看EV1527手册 我是用的240K电阻。得到了每个数据宽度是1.29MS,每个数据宽度为16个LCK,每个LCK宽度大约为80us, 可以算出同步位的高

    2024年02月11日
    浏览(32)
  • 51单片机汇编指令表--STC宏晶MCU

    51系列单片机汇编指令表非常庞大,包含了五大类指令,以下是各类指令的一个简要概述和部分示例: 一、数据传送类指令 这些指令用于在寄存器之间、寄存器与存储单元之间以及立即数与寄存器之间的数据传输。 MOV:通用数据传送指令 MOV A,Rn 将工作寄存器Rn的内容传送到

    2024年02月01日
    浏览(33)
  • stc89C51系列单片机介绍

    STC89C51 是一款基于 8051 内核的高性价比单片机,由国内的 STC 微电子公司生产。STC89C51 系列单片机的特点是具有高速运行、丰富的外设接口、广泛的应用领域等优点。本文将从以下几个方面介绍 STC89C51 系列单片机。 STC89C51 系列单片机基于 80C51 内核,具有 1T 和 2T 两种不同的时

    2024年02月01日
    浏览(41)
  • 51单片机(STC8) -- 开发环境搭建(Keil C51)

    STC8H3K系列芯片概述 文章中所用的芯片选型为STC8H3K64S4,后续STC8案例均以该芯片展开 内核 • 超高速 8051 内核(1T),比传统 8051 约快 12 倍以上,指令代码完全兼容传统8051 • 21个中断源,4 级中断优先级 • 支持在线仿真 工作电压 • 1.9V~5.5V 工作温度 • -40℃~85℃ Flash 存储

    2024年01月25日
    浏览(43)
  • STC15F100E单片机模拟串口

    STC15F100系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,新一代8051单片机,指令代码完全兼容传统8051,但是速度快6-12倍。 内部集成R/C时钟,5MHz~35MHz宽范围可设置,可以省掉外部晶振。 内部集成复位电路,可省掉外部复位电路。 6个通用I/O口,支持四种模式:准双

    2024年02月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包