基于51单片机控制步进电机正反转「建议收藏」

基于51单片机控制步进电机正反转「建议收藏」基于51单片机控制步进电机正反转此次采用uln2003模块来链接步进电机;##步进电机工作原理步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、

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

基于51单片机控制步进电机正反转

此次采用uln2003模块来链接步进电机;
## 步进电机工作原理
步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。
步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。

因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、B、C、D 三相轮流通电,电流切换三次,磁场旋转一周,转子向前转过一个齿距角。因此这种通电方式叫做四相单四拍工作方式。

  1. 电机正转代码 unsigned char code tableZ[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
  2. 电机反转代码 unsigned char code tableF[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};

代码如下

#include <reg52.h>
#define uint unsigned int 
#define uchar unsigned char
unsigned char code tableZ[8]={ 
   0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
unsigned char code tableF[8]={ 
   0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//²½½øµç»úzheng
void delay(unsigned int t);
sbit S3=P3^4; //反转
sbit S4=P3^5; //反停
sbit S5=P3^6; // 正停
//正转写入数据
void  motor_z()
 { 
    
   unsigned char i,j;
  
      for (i=0; i<8; i++)  
        { 
   
     if(S5==0){ 
   break;}
     for(j=0;j<8;j++){ 
   
      P1 = tableZ[i]&0x1f;    
          delay(50);
     }
                       
        }
 }
//反转写入数据
void motor_f(){ 
   
 unsigned char i,j;
       for (i=0; i<8; i++)  
        { 
   
     if(S4==0){ 
   break;}
     for(j=0;j<8;j++){ 
   
      P1 = tableF[i]&0x1f;   
          delay(50);
     }
                    
        }
}
void delay(unsigned int t)//延时函数
{ 
                              
   unsigned int k;
   while(t--)
   { 
   
     for(k=0; k<60; k++)
     { 
    }
   }
}

void main()
{ 
   
while(1){ 
   
motor_z();
if(S3 == 0){ 
   
motor_f();
}
}
}

protel仿真图如下

在这里插入图片描述

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/138090.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 反射之动态拼接sql字符串「建议收藏」

    反射之动态拼接sql字符串「建议收藏」反射之动态拼接sql字符串前言自己在学习JDBC连接数据库,不用框架手动实现时,个人觉得反射动态拼接sql的思想很好,当然了大家伙觉得好才是真的好(广州好迪,手动狗头),所以才有了本文对该知识点梳理与总结。分享给大家,下面开始步入文章的正文,亲们不要掉队。正文…

  • kubernetes杂谈(一)清除状态为Evicted的pod

    kubernetes杂谈(一)清除状态为Evicted的pod一现象引入使用’kubectlgetpods–all-namespaces’,发现很多’pod的状态为evicted’原因eviction,即’驱赶的意思’,意思是当节点出现异常时,kubernetes将有’相应的机制驱赶’该节点上的Pod,多见于资源不足时导致的驱赶。注意:即使集群’状态恢复’,eviction状态的pod会’在系统中存在’,需要’手动删除’–>只是影响美观解决方案排查’资源和异常原因’,防止新的驱赶产生–&g..

  • futex简介_fut是什么牌子

    futex简介_fut是什么牌子找到一篇很好的文章,讲得深入浅出;貌似原网站也很不错。转载自http://linuxperf.com/?p=23futex(fastuserspacemutex)是Linux的一个基础构件,可以用来构建各种更高级别的同步机制,比如锁或者信号量等等,POSIX信号量就是基于futex构建的。大多数时候编写应用程序并不需要直接使用futex,一般用基于它所实现的系统库就够了。futex的性能非常优异,它是怎样做到的呢?这要从它的设计思想谈起。传统的SystemVIPC(interproces

  • 【解决方案】“‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件”「建议收藏」

    【解决方案】“‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件”「建议收藏」简述在学着使用Java的命令行来编译java文件的时候,遇到了这个问题Windows操作系统“‘javac’不是内部或外部命令,也不是可运行的程序或批处理文件”下面就讲讲解决方法解决过程根据探究的情况来看,这里其实是没有安装好(或者是安装了之后但是在环境变量上却没有设置好)第一步:在http://www.oracle.com/technetwork/java/ja…

  • 一看你就懂,超详细java中的ClassLoader详解

    一看你就懂,超详细java中的ClassLoader详解本篇文章已授权微信公众号guolin_blog(郭霖)独家发布ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的…

  • linux基本命令iscsiadm,tgtadm和iscsiadm命令的用法

    linux基本命令iscsiadm,tgtadm和iscsiadm命令的用法:关联到指定lun上的后端存储设备,此例为分区-I–initiator-address:指定可以访问Target的IP地址具体用法请mantgtadm二.iscsiadm命令iscsiadm是个模式化的工具,其模式可通过-m或–mode选项指定,常见的模式有discoverydb、node、fw、session、host、iface几个,如果没有额外指定其它选项,则discoveryd…

发表回复

您的电子邮箱地址不会被公开。

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