基于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎么切换到vim编辑模式

    pycharm怎么切换到vim编辑模式首先 进行打开一个 pycharm 的编辑的代码的界面当中 进行点击 tools 的菜单 进行点击了 tools 的菜单之后 弹出了下拉菜单选中为 vimemulator 的选项 切换完成之后 的可以鼠标点击会显示了一个黑色块的 需要的 vim 的命令方式来操作的 进行再键盘中按 i 才能输入 可以看到的就输入的信息了 编辑的完成的按 esc 来退出的输入的操作

    2025年7月11日
    3
  • pycharm支持中文吗_代理是怎么做的

    pycharm支持中文吗_代理是怎么做的在代码的开头(import语句之前)添加#coding:utf-8这样就可在代码及注释中包含中文了,并且输出也可以是中文

    2022年8月25日
    7
  • 一文搞定c++多线程同步机制

    一文搞定c++多线程同步机制c 多线程同步机制同步与互斥现代操作系统都是多任务操作系统 通常同一时刻有大量可执行实体 则运行着的大量任务可能需要访问或使用同一资源 或者说这些任务之间具有依赖性 线程同步 线程同步是指线程之间所具有的一种制约关系 一个线程的执行依赖另一个线程的消息 当它没有得到另一个线程的消息时应等待 直到消息到达时才被唤醒 例如 两个线程 A 和 B 在运行过程中协同步调 按预定的先后次序运行 比如 A 任务的运行依赖于 B 任务产生的数据 线程互斥 线程互斥是指对于共享的操作系统资源 在各线程访问时具有排它性

    2025年10月31日
    5
  • Python爬取淘宝商品信息

    Python爬取淘宝商品信息各位同学们 好久没写原创技术文章了 最近有些忙 所以进度很慢 警告 本教程仅用作学习交流 请勿用作商业盈利 违者后果自负 如本文有侵犯任何组织集团公司的隐私或利益 请告知联系猪哥删除 一 淘宝登录复习前面我们已经介绍过了如何使用 requests 库登录淘宝 收到了很多同学的反馈和提问 猪哥感到很欣慰 同时对那些没有及时回复的同学说声抱歉 顺便再提一下这个登录功能 代码是完全没有问题

    2025年7月27日
    7
  • Android自己主动化測试解决方式

    Android自己主动化測试解决方式

    2021年11月15日
    45
  • go语言后端框架2021_go语言编译器

    go语言后端框架2021_go语言编译器点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章最近写了很多Go语言的原创文章,其中Go语言实战系列就有30篇,近15W字,还有最近更新的Go经典库系列、Gin实战系列,不过通过大…

    2022年10月12日
    4

发表回复

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

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