找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

基于51单片机ULN2003a驱动的步进电机控制实验(含代码,接线图,代码详解)

查看数: 27248 | 评论数: 28 | 收藏 32
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-12-31 23:03

正文摘要:

实验的仿真题图

回复

ID:1028260 发表于 2022-5-23 20:30

我是刚学51的,对我很有用,谢谢
ID:262 发表于 2022-2-3 07:03
lgjmjx 发表于 2022-2-2 14:44
能下载吗?只见扣黑币,下哪里了??

可以下载我刚下载成功了,你换一个浏览器试试
ID:1003965 发表于 2022-2-2 14:44
能下载吗?只见扣黑币,下哪里了??
ID:1003125 发表于 2022-1-22 20:41
很好,请问这个芯片可以用来驱动24V的步进电机吗、
ID:1003125 发表于 2022-1-22 20:39
我是刚学51的,对我很有用,谢谢。
ID:1002669 发表于 2022-1-22 17:25
为何按照你的线路图和代码,仿真就直接动到了135度,不再动了呢,
ID:877522 发表于 2021-8-17 10:59
你好,非常感谢你的分享,但是速度调节,我不知道你是怎么控制的?所以我改了一下,代码,如附件,帮忙指点一下,谢谢!


  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define MotorData P1                    //步进电机控制接口定义
  5. uchar phasecw[8] ={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};//正转 电机导通相序 D-C-B-A
  6. uchar phaseccw[8] ={0x03,0x01,0x09,0x08,0x0c,0x04,0x06,0x02};//反转 电机导通相序 A-B-C-D
  7. void key();
  8. void key1();
  9. uchar num,num1;  
  10. uint  speed=200;//速度调节
  11. sbit K1=P3^0;
  12. sbit K2=P3^1;
  13. sbit K3=P3^2;
  14. sbit K4=P3^3;


  15. //ms延时函数
  16. void Delay_ms(uint x)
  17. {
  18. uint i,j;
  19. for(i=0;i<x;i++)
  20.   for(j=0;j<112;j++);
  21. }
  22. //顺时针转动
  23. void MotorCW(void)
  24. {

  25.             if(!K1)
  26.             {
  27.              uchar i;
  28.              for(i=0;i<8;i++)
  29.               {
  30.                MotorData=phasecw[i];
  31.                Delay_ms(speed);//转速调节
  32.                key1();
  33.               }  
  34.               
  35.           }
  36.                               
  37. }
  38. //逆时针转动
  39. void MotorCCW(void)
  40. {
  41.         
  42.             if(!K2)
  43.             {
  44.              uchar i;
  45.              for(i=0;i<8;i++)
  46.               {
  47.                MotorData=phaseccw[i];
  48.                Delay_ms(speed);//转速调节
  49.                 key1();
  50.               }      
  51.           }
  52.                     
  53. }

  54. void main(void)
  55. {

  56. while(1)
  57. {
  58.         key();
  59.    
  60. }
  61.          
  62. }



  63. void key()   
  64. {

  65.    if(K1==0)      //顺时针 启动
  66.         {
  67.                 Delay_ms(5);          
  68.                 if(K1==0)       
  69.                 {
  70.              
  71.                         while(!K1)
  72.             {
  73.                         MotorCW();
  74.                         }
  75.                  
  76.         }
  77.     }

  78.    
  79.    if(K2==0)     //逆时针 启动
  80.         {
  81.                 Delay_ms(5);          
  82.                 if(K2==0)       
  83.                 {
  84.              
  85.                         while(!K2)
  86.             {
  87.                         MotorCCW();
  88.                         }
  89.                  
  90.         }
  91.     }     
  92.      
  93. }



  94. void key1()    //速度调节
  95. {

  96.    
  97.     if(K3==0)     //速度调节
  98.         {
  99.                 Delay_ms(5);          
  100.                 if(K3==0)       
  101.                 {
  102.                         num++;             
  103.                         while(!K3);               
  104.                         if(num==1)         
  105.                         {
  106.                         speed=100;
  107.                         }
  108.             
  109.             if(num==2)         
  110.                         {         
  111.                         speed=50;
  112.                         }
  113.            if(num==3)         
  114.                         {
  115.             num=0;
  116.                         speed=20;
  117.                         }
  118.                        
  119.         }
  120.     }
  121.    
  122.      
  123. }

  124. // 控制步进电机,K1 顺时针  ,K2 逆时针 ,K3 速度调节



复制代码
ID:877522 发表于 2021-8-16 15:38
仿真时  怎么不转 按下K2 怎么不转
ID:891154 发表于 2021-7-27 10:46
你是怎么调速的啊
ID:891154 发表于 2021-7-27 09:35
speed是干嘛的啊
ID:93341 发表于 2021-7-18 10:28
谢谢。学习。可以用。
ID:901179 发表于 2021-5-5 23:40
有程序框图嘛
ID:875327 发表于 2021-1-23 10:58
你好,您现在的转速大概多少?
ID:375592 发表于 2020-10-23 15:46
谢谢楼主分享,讲解很仔细
ID:757310 发表于 2020-6-5 16:05
有驱动器了 还要考虑相序吗
ID:757780 发表于 2020-5-28 11:43
楼主,电机的正反转不是很灵敏,时灵是不灵的,照程序的逻辑来说应该是按一次正反转按钮,转动的方向就可以反转了,但是实测后有时多次按下正反转按钮仍然没有反转,有时一按下正反转按钮就反转,不是很稳定。
ID:761802 发表于 2020-5-27 13:32

可以分享 一下吗?
ID:750010 发表于 2020-5-26 11:21
按键K4检测最后写错了吧?不应该是while(!K3)........
ID:759813 发表于 2020-5-24 14:57
你好,直接用开发板上上的步进电机模块的5个引脚可以控制吗?
ID:741030 发表于 2020-4-29 16:25
我想用交流电动机 怎么改控制电路能实现?
ID:635597 发表于 2020-4-28 17:01
请问这个步进电机和uln2003驱动板可以实现每次转动想要的角度吗?  
ID:582255 发表于 2020-4-24 21:28
讲解详细,我喜欢,适合我这样的新手
ID:727398 发表于 2020-4-24 12:46

2相的步进电机在控制系统设计上还是和4相的原理图一样吗
ID:341098 发表于 2020-4-24 10:42
xingfengyym 发表于 2020-4-10 15:36
您好,我想再让电机转快点可以吗,我的电机时28byj的。还有就是我想把转速显示到lcd上怎么弄

把延迟减小就可以提速了(注意物理限制,这个步进电机转不快),转速是自己算出来的(根据延迟以及相数),当然也可以增加测试传感器进行测量
ID:341098 发表于 2020-4-24 10:37
zzzz1999 发表于 2020-4-24 10:12
2相步进电机可以用ULN2003A来控制吗

可以的
ID:727398 发表于 2020-4-24 10:12
2相步进电机可以用ULN2003A来控制吗
ID:65237 发表于 2020-4-10 20:50
谢谢分享收下了
ID:707623 发表于 2020-4-10 15:36
您好,我想再让电机转快点可以吗,我的电机时28byj的。还有就是我想把转速显示到lcd上怎么弄

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表