找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6175|回复: 4
收起左侧

单片机+L298控制两个步进电机 仿真电路图+程序

[复制链接]
ID:191473 发表于 2017-5-31 03:41 | 显示全部楼层 |阅读模式
51单片机和L298芯片组成的电路控制2个步进电机的仿真原理图如下(proteus工程文件可到附件中下载):
单片机控制两步进电机.png 0.png

单片机源程序如下:
  1. #include <reg52.h>
  2. sbit A1=P0^0; //定义步进电机连接端口
  3. sbit B1=P0^1;
  4. sbit C1=P0^2;
  5. sbit D1=P0^3;

  6. sbit A2=P1^0; //定义步进电机连接端口
  7. sbit B2=P1^1;
  8. sbit C2=P1^2;
  9. sbit D2=P1^3;

  10. sbit up=P2^0;
  11. sbit down=P2^1;
  12. sbit left=P2^2;
  13. sbit right=P2^3;

  14. #define   uint unsigned int
  15. #define   uchar unsigned char

  16. #define Coil_A1 {A1=0;B1=1;C1=0;D1=0;}//A相通电,其他相断电
  17. #define Coil_B1 {A1=0;B1=0;C1=1;D1=0;}//B相通电,其他相断电
  18. #define Coil_C1 {A1=1;B1=0;C1=0;D1=0;}//C相通电,其他相断电
  19. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
  20. #define Coil_A2 {A2=0;B2=1;C2=0;D2=0;}//A相通电,其他相断电
  21. #define Coil_B2 {A2=0;B2=0;C2=1;D2=0;}//B相通电,其他相断电
  22. #define Coil_C2 {A2=1;B2=0;C2=0;D2=0;}//C相通电,其他相断电
  23. #define Coil_D2 {A2=0;B2=0;C2=0;D2=1;}//D相通电,其他相断电
  24. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;A2=0;B2=0;C2=0;D2=0;}//全部断电       

  25. uchar speed=200;

  26. void delay_ms (uint ms)            //带参数函数
  27. {  
  28.           uchar a,b,c;
  29.     while(ms--)
  30.                 {
  31.    
  32.     for(c=1;c>0;c--)
  33.         for(b=142;b>0;b--)
  34.             for(a=2;a>0;a--);
  35.     }
  36. }

  37. void x_zheng()//x轴正转
  38. {
  39.   while(!up)
  40.   {
  41.      Coil_A1
  42.          delay_ms(speed);
  43.      Coil_B1
  44.          delay_ms(speed);
  45.          Coil_C1
  46.          delay_ms(speed);
  47.          Coil_D1
  48.          delay_ms(speed);  
  49.   }
  50. P0=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
  51. }
  52. void x_fan()//x轴反转
  53. {
  54.   while(!down)
  55.   {
  56.      Coil_D1
  57.          delay_ms(speed);
  58.      Coil_C1
  59.          delay_ms(speed);
  60.          Coil_B1
  61.          delay_ms(speed);
  62.          Coil_A1
  63.          delay_ms(speed);  
  64.   }
  65. P0=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
  66. }
  67. void y_fan()//x轴反转
  68. {
  69.   while(!left)
  70.   {
  71.      Coil_D2
  72.          delay_ms(speed);
  73.      Coil_C2
  74.          delay_ms(speed);
  75.          Coil_B2
  76.          delay_ms(speed);
  77.          Coil_A2
  78.          delay_ms(speed);  
  79.   }
  80. P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
  81. }
  82. void y_zheng()//x轴正转
  83. {
  84.   while(!right)
  85.   {
  86.      Coil_A2
  87.          delay_ms(speed);
  88.      Coil_B2
  89.          delay_ms(speed);
  90.          Coil_C2
  91.          delay_ms(speed);
  92.          Coil_D2
  93.          delay_ms(speed);  
  94.   }
  95. P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
  96. }

  97. void main()
  98. {
  99.   Coil_OFF;
  100.   while(1)
  101.   {
  102.     if(up==0)
  103.         {
  104.           delay_ms(20);
  105.           if(up==0)
  106.           {
  107.             x_zheng();
  108.           }
  109.         }
  110.         if(down==0)
  111.         {
  112.           delay_ms(20);
  113.           if(down==0)
  114.           {
  115.             x_fan();
  116.           }
  117.         }
  118.         if(left==0)
  119.         {
  120. ……………………

  121. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
单片机控制两步进电机.rar (46.67 KB, 下载次数: 124)
回复

使用道具 举报

ID:1 发表于 2017-5-31 03:49 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:89286 发表于 2017-5-31 07:28 | 显示全部楼层
thanks for sharing
回复

使用道具 举报

ID:225356 发表于 2017-8-7 09:01 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:477881 发表于 2019-5-23 20:04 | 显示全部楼层
谢谢分享哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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