标题: 基于51单片机的步进电机控制系统 仿真 程序 原理图 [打印本页]

作者: qqlan666    时间: 2016-6-6 15:18
标题: 基于51单片机的步进电机控制系统 仿真 程序 原理图



所有资料下载:
5、基于51单片机的步进电机控制系统.rar (4.19 MB, 下载次数: 575)


元件清单:
步进电机控制系统元件清单
名称
注释
数量
51单片机
AT89C52
1
液晶显示屏
LCD12864
1
步进电机
1
排阻
10K
1
电机驱动芯片
ULN2003A
1
电位器
10K
1
晶振
12M
1
电容
33P
2
按键
5









  1. #define TARGET_GLOBAL 1
  2. #include "target.h"
  3. #include "dot.h"
  4. void timer0_init(void)
  5. {
  6.    TMOD|=0x01;    //MODEL1,timer
  7.    TH0=0xDC;          //定时10ms
  8.    TL0=0x00;
  9.    ET0=1;             //中断使能
  10.    TR0=1;                 //关闭定时器0
  11. }
  12. void target_init(void)
  13. {
  14.   timer0_init();
  15.   Lcd_Initial();
  16. }
  17. /************************************************
  18. *函数名称:display_head(void)
  19. *函数功能:显示“步进电机运行状态”字样
  20. *函数入口:无
  21. *函数出口:无
  22. ************************************************/
  23. void display_head(void)
  24. {
  25.   uchar i,temp;
  26.   temp=0x00;
  27.   for(i=0;i<8;i++)
  28.   {
  29.     Lcd_Character_16X16(1,10,temp,MOTER_HEAD[i]);
  30.         temp+=16;
  31.   }
  32.   
  33. }
  34. /************************************************
  35. *函数名称:display_state(state)
  36. *函数功能:显示电机状态“停止”,“正转”,“反转”
  37. *函数入口:state,电机状态
  38. *函数出口:无
  39. *说明:state:0x01,停止;0x02,正转;0x03,反转
  40. ************************************************/
  41. void display_state(state)
  42. {
  43.   switch(state)
  44.   {  
  45.     case 0x01:   //显示“停止”
  46.         {
  47.           Lcd_Character_16X16(1,60,0,MOTER_STATE[0]); //停
  48.           Lcd_Character_16X16(1,60,16,MOTER_STATE[1]);//止
  49.           break;
  50.         }
  51.         case 0x02:         //显示“正转”
  52.         {
  53.           Lcd_Character_16X16(1,60,0,MOTER_STATE[2]); //正
  54.           break;
  55.         }
  56.         case 0x03:         //显示“反转”
  57.         {
  58.           Lcd_Character_16X16(1,60,0,MOTER_STATE[3]); //反
  59.           break;
  60.         }
  61.         default:
  62.           break;
  63.   }
  64.   if((state==0x02)||(state==0x03))
  65.     Lcd_Character_16X16(1,60,16,MOTER_STATE[4]); //转
  66. }
  67. /************************************************
  68. *函数名称:display_speed(speed)
  69. *函数功能:显示电机速度状态
  70. *函数入口:speed,电机速度状态
  71. *函数出口:无
  72. *说明:speed:0x01,正常;0x02,低速;0x03,加速;
  73.              0x04,减速
  74. ************************************************/
  75. void display_speed(speed)
  76. {
  77.    switch(speed)
  78.    {
  79.      case 0x01:
  80.          {
  81.            Lcd_Character_16X16(1,60,32,SPEED_STATE[4]); //正
  82.            Lcd_Character_16X16(1,60,48,SPEED_STATE[5]); //常
  83.            break;
  84.          }
  85.          case 0x02:
  86.          {
  87.            Lcd_Character_16X16(1,60,32,SPEED_STATE[2]); //低
  88.            break;
  89.          }
  90.          case 0x03:
  91.          {
  92.            Lcd_Character_16X16(1,60,32,SPEED_STATE[0]); //加
  93.            break;
  94.          }
  95.          case 0x04:
  96.          {
  97.            Lcd_Character_16X16(1,60,32,SPEED_STATE[1]); //减
  98.            break;
  99.          }
  100.          default:
  101.            break;
  102.    }
  103.    if((speed==0x02)||(speed==0x03)||(speed==0x04))
  104.      Lcd_Character_16X16(1,60,48,SPEED_STATE[3]);   //速
  105. }
  106. /*************************************************
  107. *函数名称:moter_state_display(uchar moterState)
  108. *函数功能:实现步进电机状态显示
  109. *函数入口:moterState,电机运行状态
  110. *函数出口:无
  111. *说明:moterState:0x01,停止;0x02,正转加速运行;
  112. 0x03,正转减速运行;0x04,正转正常运行;
  113. 0x05,正转低速运行;0x06,反转加速运行;
  114. 0x07,反转减速运行;0x08,反转正常运行;
  115. 0x09,反转低速运行
  116. *************************************************/
  117. void moter_state_display(uchar moterState)
  118. {
  119.   Lcd_Clear();
  120.   display_head();
  121.   switch(moterState)
  122.   {
  123.     case MOTER_STOP:  //停止
  124.         {
  125.           display_state(0x01);
  126.           break;
  127.         }
  128.         case MOTER_FRONT_ADD:        //正转加速运行
  129.         {
  130.           display_state(0x02);
  131.           display_speed(0x03);
  132.           break;
  133.         }
  134.         case MOTER_FRONT_REDUCE:  //正转减速运行
  135.         {
  136.           display_state(0x02);
  137.           display_speed(0x04);
  138.           break;
  139.         }
  140.         case MOTER_FRONT_NORMAL:        //正转正常运行
  141.         {
  142.           display_state(0x02);
  143.           display_speed(0x01);
  144.           break;
  145.         }
  146.         case MOTER_FRONT_LOWER:        //正转低速运行
  147.         {
  148.           display_state(0x02);
  149.           display_speed(0x02);
  150.           break;
  151.         }
  152.         case MOTER_QUEEN_ADD:        //反转加速运行
  153.         {
  154.           display_state(0x03);
  155.           display_speed(0x03);
  156.           break;
  157.         }
  158.         case MOTER_QUEEN_REDUCE: //反转减速运行
  159.         {
  160.           display_state(0x03);
  161.           display_speed(0x04);
  162.           break;
  163.         }
  164.         case MOTER_QUEEN_NOMAL: //反转正常运行
  165.         {
  166.           display_state(0x03);
  167.           display_speed(0x01);
  168.           break;
  169.         }
  170.         case MOTER_QUEEN_LOWER: //反转低速运行
  171.         {
  172.           display_state(0x03);
  173.           display_speed(0x02);
  174.           break;
  175.         }
  176.         default:
  177.           break;
  178.   }
  179.   if(moterState!=MOTER_STOP)
  180.   {
  181.     Lcd_Character_16X16(1,60,64,SPEED_STATE[6]); //运
  182.         Lcd_Character_16X16(1,60,80,SPEED_STATE[7]); //行
  183.   }

  184. }
  185. /*******************************************************
  186. *函数名称:ground(step)
  187. *函数功能:给电机的四个相极送信号
  188. *函数入口:step,电机相位的第几步
  189. *函数出口:无
  190. *说明:步进电机转步数,分八步
  191. *******************************************************/
  192. void ground(step)
  193. {
  194.   switch(step)
  195.   {
  196.     case 0x00:
  197.         {
  198.           MOTER_M1= 1;
  199.           MOTER_M2= 0;
  200.           MOTER_M3= 0;
  201.           MOTER_M4= 0;
  202.           break;
  203.         }
  204.         case 0x01:
  205.         {
  206.       MOTER_M1= 1;
  207.           MOTER_M2= 1;
  208.           MOTER_M3= 0;
  209.           MOTER_M4= 0;
  210.           break;          
  211.         }
  212.         case 0x02:
  213.         {
  214.           MOTER_M1= 0;
  215.           MOTER_M2= 1;
  216.           MOTER_M3= 0;
  217.           MOTER_M4= 0;
  218.           break;
  219.         }
  220.         case 0x03:
  221.         {
  222.           MOTER_M1= 0;
  223.           MOTER_M2= 1;
  224.           MOTER_M3= 1;
  225.           MOTER_M4= 0;
  226.           break;
  227.         }
  228.         case 0x04:
  229.         {
  230.           MOTER_M1= 0;
  231.           MOTER_M2= 0;
  232.           MOTER_M3= 1;
  233.           MOTER_M4= 0;
  234.           break;
  235.         }
  236.         case 0x05:
  237.         {
  238.           MOTER_M1= 0;
  239.           MOTER_M2= 0;
  240.           MOTER_M3= 1;
  241.           MOTER_M4= 1;
  242.           break;
  243.         }
  244.         case 0x06:
  245.         {
  246.           MOTER_M1= 0;
  247.           MOTER_M2= 0;
  248.           MOTER_M3= 0;
  249.           MOTER_M4= 1;
  250.           break;
  251.         }
  252.         case 0x07:
  253.         {
  254.           MOTER_M1= 0;
  255.           MOTER_M2= 0;
  256.           MOTER_M3= 0;
  257.           MOTER_M4= 1;
  258.           break;
  259.         }
  260.         default:
  261.            break;
  262.   }
  263. }
复制代码




作者: Angrobot    时间: 2016-6-7 21:01
下来看看
作者: Angrobot    时间: 2016-6-7 21:01
下下来看看
作者: 123456thx    时间: 2016-12-18 14:45
不错,值得学习
作者: lizhendong    时间: 2017-2-7 22:26
太好了,谢谢了
作者: 15248969153    时间: 2017-3-2 16:43
j就喜欢这楼主这样的人

作者: 冰块冰块    时间: 2017-3-3 14:29
谢谢,学习了。

作者: gdatgb    时间: 2017-3-16 21:16

谢谢,下来学习一下!!!
作者: 赛赛同学    时间: 2017-4-9 19:41
看到步进电机来学习下
作者: 帅哥广    时间: 2017-5-4 10:10
下来看看,好不好用
作者: 业火红莲    时间: 2017-6-7 21:04
收下来看看

作者: 115116    时间: 2017-6-17 21:42
有错误
作者: jhczy    时间: 2017-7-13 09:57
下来学习,谢谢楼主分享
作者: With_commands    时间: 2017-7-19 01:06
谢谢LZ设计图,搬走了
作者: 单单单片机就好    时间: 2017-7-30 10:20
厉害啦 楼主
作者: repluser    时间: 2017-10-8 09:14
谢谢楼主,很需要
作者: 先黑    时间: 2017-10-12 10:10
仿真图看的不是很懂  希望有更详细的讲解
作者: highsolitude    时间: 2017-12-27 20:15
有控制两个电机的帖子吗
作者: 陶悦楼蓝    时间: 2018-1-6 11:09
谢谢,学习中

作者: zyt@0121    时间: 2018-1-6 13:26
太好了,我正需要这样的程序框架
作者: karl596    时间: 2018-2-23 18:38
好东西,看看啊
作者: karl596    时间: 2018-2-23 18:38
太谢谢楼主啦,毕业设计要用到
作者: 海南椰风少    时间: 2018-3-19 22:06
谢谢 老铁的奉献
作者: 7782731    时间: 2018-3-26 11:14
这个可以控制伺服电机么?
作者: 橙子123456    时间: 2018-4-12 22:58
妥妥的
作者: a117672    时间: 2018-6-13 15:55
非常不错
作者: 王得发    时间: 2018-6-21 18:36
还差点黑币下载   希望能得几个
作者: 無洺    时间: 2018-11-26 16:02
谢谢LZ很及时
作者: 971049088    时间: 2018-12-10 12:33
非常感谢你的分享
作者: 735159014    时间: 2019-3-27 15:48
请问电位器在哪里?仿真图上没显示啊?
作者: gchq521    时间: 2019-3-27 16:08
这个是个好东西!!
作者: 六哈    时间: 2019-6-13 14:49
代码给的很完整
作者: TE星辰    时间: 2019-6-28 23:39
感谢还不错,赞一个
作者: qwe123456111111    时间: 2019-7-4 14:47
请问分别控制两个怎么做呢
作者: qwe123456111111    时间: 2019-7-4 14:48
highsolitude 发表于 2017-12-27 20:15
**** 作者被禁止或删除 内容自动屏蔽 ****

我也在找呢,请问你做出来了吗
作者: szzxl10    时间: 2019-7-12 18:24
谢谢,学习了。
作者: huizi123    时间: 2019-7-24 11:18
谢谢楼主
作者: shenkaipi    时间: 2020-5-26 12:42
赞一个!看起来不错
作者: shenkaipi    时间: 2020-5-26 16:37
好东西
赞一个
作者: lss9310    时间: 2020-6-3 09:43
不错的资料
作者: lqmouse    时间: 2020-6-3 17:21
非常好的资料,当年初学单片机的时候能有这样详细的资料就好啦
作者: 评选    时间: 2020-6-4 02:52
请手下我的膝盖
作者: 评选    时间: 2020-6-4 02:54
不错的教程
作者: jmfss    时间: 2020-6-29 11:30
程序有三个警告,能不能改完了再发出来啊,不改可以吗? 测试功能运行是正常的 没有问题

作者: ethanb    时间: 2020-6-30 08:55
资料全面,内容详细,质量上乘,感谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1