基于51单片机的步进电机的控制

基于51单片机的步进电机的控制前面笔者分享过基于51单片机的两种小车制作,我们利用的是L298N驱动控制电机转动,那么接下来,笔者给大家介绍两种利用51单片机控制步进电机的小程序。首先我们要如何使电机转动呢,源程序如下:#include<reg52.h>unsignedcharcodeF_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格,换算成二进制00…

大家好,又见面了,我是你们的朋友全栈君。

前面笔者分享过基于51单片机的两种小车制作,我们利用的是L298N驱动控制电机转动,那么接下来,笔者给大家介绍两种利用51单片机控制步进电机的小程序。
首先我们要如何使电机转动呢,源程序如下:

#include <reg52.h>


unsigned char code F_Rotation[4]={
  
  0x02,0x04,0x08,0x10}; //正转表格,换算成二进制 0000 0010,0000 0100,0000 1000,0001 0000
unsigned char code B_Rotation[4]={
  
  0x10,0x08,0x04,0x02}; //反转表格,换算成二进制 0001 0000,0000 1000,0000 0100,0000 0010
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void Delay(unsigned int i)//延时
{
 while(--i);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{

 unsigned char i;

 while(1)
 {
  for(i=0;i<4;i++)      //4相
     {
     P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
     }
  }
}

接下来,我们要控制电机的正反转,这个程序主要用于4相步进电机的常规驱动,速度不可调的过快,不然就没有力矩的转动了,按s4可控制电机正反转:

#include <reg52.h>

bit Flag;//定义正反转标志位


unsigned char code F_Rotation[4]={
  
  0xf1,0xf2,0xf4,0xf8}; //正转表格
unsigned char code B_Rotation[4]={
  
  0xf8,0xf4,0xf2,0xf1}; //反转表格
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void Delay(unsigned int i)//延时
{
 while(--i);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{

 unsigned char i;


  EX1=1;         //外部中断0开
  IT1=1;         //边沿触发
  EA=1;          //全局中断开

 while(!Flag)            
 {
  P0=0x71;//显示 F 标示正转
  for(i=0;i<4;i++)      //4相
     {
     P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
     }
  }
while(Flag)
 { 
  P0=0x7C;//显示 b 标示反转
  for(i=0;i<4;i++)      //4相
     {
     P1=B_Rotation[i];  //输出对应的相 
     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
     }
  }
}
/******************************************************************/
/* 中断入口函数 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
 Delay(300);

 Flag=!Flag;         //s3按下触发一次,标志位取反

 }

最后介绍一下带停机的步进电机正反转的方法:

#include <reg52.h>

unsigned char Flag;//定义正反转和停止标志位
sbit KEY = P3^3;


unsigned char code F_Rotation[4]={
  
  0xf1,0xf2,0xf4,0xf8}; //正转表格
unsigned char code B_Rotation[4]={
  
  0xf8,0xf4,0xf2,0xf1}; //反转表格
/******************************************************************/
/* 延时函数 */
/******************************************************************/
void Delay(unsigned int i)//延时
{
 while(--i);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{

 unsigned char i;


  EX1=1;         //外部中断0开
  IT1=1;         //边沿触发
  EA=1;          //全局中断开

 while(Flag==0)            
 {
  P0=0x71;//显示 F 标示正转
  for(i=0;i<4;i++)      //4相
     {
     P1=F_Rotation[i];  //输出对应的相 可以自行换成反转表格
     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
     }
  }
while(Flag==1)
 { 
  P0=0x7C;//显示 b 标示反转
  for(i=0;i<4;i++)      //4相
     {
     P1=B_Rotation[i];  //输出对应的相 
     Delay(500);        //改变这个参数可以调整电机转速 ,数字越小,转速越大
     }
  }
while(Flag==2)  //停止
 { 
  P0=0x6D;// 显示 S
  P1=0;
  }
}
/******************************************************************/
/* 中断入口函数 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
 Delay(500);
 if(!KEY)
 {

 Flag++;         //s3按下触发一次
 if(Flag==3)
   Flag=0;
  }
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138248.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令

    cass9.1快捷键怎么设置_cass9.1格式刷快捷键命令在CAD操作中我们常用一些快捷键来代替鼠标操作从而提高绘图效率,以下是小编为大家整理的常用快捷键大全,涵盖图文版、文字版、键盘版。图文版:文字版:一、常用功能键F1:获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对象自动捕捉F4:数字化仪控制F5:等轴测平面切换F6:控制状态行上坐标的显示方式F7:栅格显示模式控制F8:正交模式控制F9:栅格捕捉模式控制F10:极轴模…

    2022年4月19日
  • 宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统[通俗易懂]

    宽度学习(一):宽度学习体系:有效和高效的无需深度架构的增量学习系统[通俗易懂]Motivation深度学习:1,时间长:由于涉及到大量的超参数和复杂的结构,大多数神经网络的训练过程非常耗时。2,重新训练:如果要更改神经网络的结构,或者增加样本,深度学习系统将遇到一个完整的重新训练过程。宽度学习:1,消除了训练过程长的缺点,并且提供了很好的泛化能力。2,如果网络需要扩展,宽度学习网络可以快速重构,无需重新训练过程。Preliminaries1,RVFLNN…

    2022年5月21日
  • python中的 += 与 +

    python中的 += 与 +这一部分首先要理解python内存机制,Python中万物皆对象。对于不可变对象,改变了原来的值,其别名(变量名)绑定到了新值上面,id肯定会改变对于可变对象,+操作改变了值,id肯定会变,而+

    2022年7月3日
  • Django(57)Generic类视图[通俗易懂]

    Django(57)Generic类视图[通俗易懂]前言上篇我们通过mixin可以非常方便的实现一些CURD操作。实际上针对这些mixin,DRF还进一步的进行了封装,放到generics下。有以下generic类视图:generics.ListA

    2022年7月29日
  • mac上的mysql管理工具sequel pro

    mac上的mysql管理工具sequel pro

    2021年10月17日
  • 太厉害了,终于有人能把TCP/IP 协议讲的明明白白了「建议收藏」

    一图看完本文一、计算机网络体系结构分层计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP与OSI在分层模块上稍有区别。OSI参考模型注重“通信协议必要的功能是什么”,而TCP/IP则更强调“在计算机上实现协议应该开发哪种程序”。二、TCP/IP基础1.TCP/IP的具体含义从字面意义上讲,有人可能会认为…

    2022年4月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号