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


相关推荐

  • jvm jstat_预处理命令是什么意思

    jvm jstat_预处理命令是什么意思作用JVMstatisticsMonitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。使用依旧先看一下使用帮助~ᐅjstat-helpUsage:jstat-help|-optionsjstat-<option>[-t][-h<lines&…

    2022年9月11日
    0
  • full connection layer(inconnected)

    我的机器学习教程「美团」算法工程师带你入门机器学习已经开始更新了,欢迎大家订阅~任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~定义…

    2022年4月16日
    43
  • Java中&、|、&&、||详解

    Java中&、|、&&、||详解1、Java中&amp;叫做按位与,&amp;&amp;叫做短路与,它们的区别是:&amp;既是位运算符又是逻辑运算符,&amp;的两侧可以是int,也可以是boolean表达式,当&amp;两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&amp;&amp;)的两侧要求必须是布尔表达式。举例如下:12&amp;5的值是多少?答:12转成二进制数是1100(前四…

    2022年7月7日
    19
  • platform_device与platform_driver

    platform_device与platform_driver

    2021年12月4日
    43
  • Java Calendar 日历类的时间操作 Timestamp Date Calendar 相互转换

    Java Calendar 日历类的时间操作 Timestamp Date Calendar 相互转换JavaCalendar日历类的时间操作,这也许是Java环境下创建和管理日历及操作时间最简单的一个方案了,示范代码也很简单。演示了获取时间,日期时间的累加和累减,以及日期时间的比较。原文地址:blog.csdn.net/joyous/article/details/9630893注意事项:Calendar的month从0开始,也就是全年12个月由0~1…

    2022年4月26日
    51
  • 计算机cpu后面字母代表什么意思,CPU后缀含义是什么意思 AMD/intel处理器后缀字母代表什么涵义…[通俗易懂]

    计算机cpu后面字母代表什么意思,CPU后缀含义是什么意思 AMD/intel处理器后缀字母代表什么涵义…[通俗易懂]CPU分为intel与AMD两大品牌(平台),两者不但型号众多,而且型号后缀命名也非常之多,那么AMD/intel处理器后缀字母代表什么涵义?下面装机之家帮助广大电脑爱好者科普一下。CPU后缀往往会让用户困惑不已,如果您不查阅资料的话,你就不会知道i7-6820HK与i7-6820HQ的区别什么,也不知道i5-4200M与i5-4200U的性能差距有多大!因此,关于CPU后缀字母的科普是有必要的。…

    2022年5月22日
    45

发表回复

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

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