找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8103|回复: 19
打印 上一主题 下一主题
收起左侧

51单片机实现三相六拍的步进电机控制(正反转、加减速、挡位显示)

  [复制链接]
跳转到指定楼层
楼主
ID:234521 发表于 2017-9-20 23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己写的,不规范还望包含,keil和protues文件


单片机源程序如下:
  1. #include <reg52.h>      
  2.    
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. uint speed = 100;                                                //初始转速
  6. uint max = 200;                                                        //最慢转速
  7. uint min = 20;                                                        //最快转速

  8. sbit swich = P2^0;                                           //总开关
  9. sbit dir = P2^1;                                        //电机旋转方向
  10. sbit le1=P2^6;
  11. sbit le2=P2^7;
  12. sbit speedadd=P3^2;
  13. sbit speedsub=P3^3;                                  

  14. unsigned char uca_MotorStep[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};    //励磁电流数组。
  15.                                                                                                              

  16. uchar leddata[]={

  17.                 0x3F,  //"0"
  18.                 0x06,  //"1"
  19.                 0x5B,  //"2"
  20.                 0x4F,  //"3"
  21.                 0x66,  //"4"
  22.                 0x6D,  //"5"
  23.                 0x7D,  //"6"
  24.                 0x07,  //"7"
  25.                 0x7F,  //"8"
  26.                 0x6F,  //"9"
  27.                 0x40,  //"-"
  28.                 0x00,  //熄灭
  29.                          };


  30. void delay1ms(void)   //误差 0us
  31. {
  32.     unsigned char a,b,c;
  33.     for(c=1;c>0;c--)
  34.         for(b=142;b>0;b--)
  35.             for(a=2;a>0;a--);
  36. }

  37. void delay(uint x )                          //多功能毫秒延时
  38. {
  39.     uint i;
  40.         for(i=0;i<x;i++)
  41.         {
  42.           delay1ms();
  43.         }
  44. }



  45. void display(void)
  46. {       
  47.   if(swich==1)
  48.   {
  49.                    P0=        leddata[11];
  50.                 delay(1);
  51.                 le2=1;
  52.                 le1=1;
  53.                 delay(1);
  54.                 le2=0;               
  55.                 le1=0;

  56.   }       
  57.   else
  58.   {
  59.   if(dir==1)
  60.                 {
  61.                 P0=        leddata[11];
  62.                 delay(1);
  63.                 le2=1;
  64.                 delay(1);
  65.                 le2=0;
  66.                 }
  67.         else
  68.             {
  69.                 P0 =leddata[10];
  70.                 delay(1);
  71.                 le2=1;
  72.                 delay(1);
  73.                 le2=0;
  74.                 }  

  75.         P0=leddata[9-(speed-20)/20];
  76.         delay(30);
  77.         le1=1;
  78.         delay(5);
  79.         le1=0;
  80.                   
  81. }       
  82. }


  83. void Init_INT0()
  84. {
  85. EX0=1;    //开启外部中断 0
  86. IT0=1;          //设置成低电平触发,1为下降沿触发
  87. EX1=1;    //开启外部中断 1
  88. IT1=1;          //设置成低电平触发,1为下降沿触发
  89. EA=1;   //开启总中断
  90. }

  91. void Interrupt0_handler() interrupt 0
  92. {
  93.     EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰
  94.     delay(20); //同样是为了消除抖动而产生新的中断
  95.     if(speed>min)
  96.        {speed=speed-20;}        //限制最快转速
  97.         else
  98.                 {speed=min;}
  99.         while(speedadd==0);
  100.     EA=1;            //恢复中断
  101. }


  102. void Interrupt1_handler() interrupt 2
  103. {
  104.     EA=0;   //首先关闭总中断,以消除按键出现的抖动所产生的干扰
  105.     delay(20); //同样是为了消除抖动而产生新的中断
  106.     if(speed<max)
  107.        {speed=speed+20;}
  108.         else
  109.                 {speed=max;}         //限制最慢转速
  110.         while(speedsub==0);
  111.     EA=1;            //恢复中断
  112. }

  113. void main()
  114. {
  115. int i;                                   //初始化
  116. dir=1;
  117. le1=0;
  118. le2=0;


  119. start:
  120. if(swich==0)
  121.      {Init_INT0();}                  //总开关开启,初始化中断,开始转动
  122.    else
  123.          {display(); goto start;        }


  124.         if(dir==1)
  125.   seq:
  126.         {
  127.           while(1)
  128.           {         
  129.              display();
  130.                  for (i=0; i<8; i++)   
  131.                 {
  132.                   P1 = uca_MotorStep[i];         //取数据
  133.                   delay(speed);            //调节转速
  134.                 }
  135.                  if(dir==0)                                                         //是否换向
  136.                     {
  137.                         delay(5);                                                 //        换向延时
  138.                         goto oppo;                                                 //换向
  139.                         }
  140.                 if(swich==1)                                                 //总开关运行中关闭
  141.                    goto start;                                                 //等待开启
  142.          
  143.           }
  144.          
  145.         }
  146.         else
  147.         oppo:
  148. ……………………

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

所有资料51hei提供下载:
abc.zip (116.04 KB, 下载次数: 208)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏8 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:269211 发表于 2018-1-27 10:11 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:280881 发表于 2018-1-30 14:06 | 只看该作者
感谢分享
回复

使用道具 举报

地板
ID:280909 发表于 2018-1-30 14:50 | 只看该作者

感谢分享
回复

使用道具 举报

5#
ID:260785 发表于 2018-1-31 08:26 | 只看该作者
感谢分享
回复

使用道具 举报

6#
ID:313702 发表于 2018-4-27 10:16 | 只看该作者
谢谢分享
回复

使用道具 举报

7#
ID:454493 发表于 2018-12-25 15:30 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

8#
ID:162757 发表于 2018-12-26 19:11 | 只看该作者
来干货了
回复

使用道具 举报

9#
ID:456297 发表于 2018-12-27 12:13 | 只看该作者
谢谢分享
回复

使用道具 举报

10#
ID:537456 发表于 2019-5-13 21:58 | 只看该作者
学习学习谢谢
回复

使用道具 举报

11#
ID:47652 发表于 2019-5-25 14:32 | 只看该作者
正需要,谢谢
回复

使用道具 举报

12#
ID:353314 发表于 2019-5-31 11:32 | 只看该作者
不错,................
回复

使用道具 举报

13#
ID:582011 发表于 2019-7-11 01:33 | 只看该作者
原理图.doc (56.5 KB, 下载次数: 12)
回复

使用道具 举报

14#
ID:576358 发表于 2019-7-12 08:42 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:580629 发表于 2019-7-12 10:14 | 只看该作者
感谢分享,下载来学习下
回复

使用道具 举报

16#
ID:512857 发表于 2019-11-18 17:50 | 只看该作者
感谢分享,要是有四相的就好了,其实也差多,哈哈,反正谢谢了。
回复

使用道具 举报

17#
ID:475402 发表于 2019-11-18 21:18 | 只看该作者
谢谢分享!
回复

使用道具 举报

18#
ID:631508 发表于 2019-11-22 10:20 | 只看该作者
感谢楼主
回复

使用道具 举报

19#
ID:744210 发表于 2020-5-5 06:14 来自手机 | 只看该作者
chaoself 发表于 2018-1-27 10:11
谢谢分享

这是三相的?看着好像两相四线的
回复

使用道具 举报

20#
ID:921105 发表于 2021-5-14 11:23 来自手机 | 只看该作者
不明白电机的六根线代表什么意思啊?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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