标题: 28BYJ-48步进电机测试程序 [打印本页]

作者: angelayang    时间: 2017-6-8 21:19
标题: 28BYJ-48步进电机测试程序
51单片机驱动28BYJ-48型号的步进电机测试程序:



单片机源程序如下:
  1. //******************************************************************************************//
  2. //        程序名称:28BYJ-48步进电机测试程序
  3. //        功能描述:步进电机分别以单四拍、双四拍、八拍驱动方式驱动,正反转各360度
  4. //        单片机:  AT89S52,FOSC=12MHz
  5. //        硬件连接:P1.0----INA
  6. //            P1.1----INB
  7. //            P1.2----INC
  8. //            P1.3----IND
  9. //            驱动板的驱动电压和芯片逻辑供电电压均为5V;         
  10. //            步进电机红线接+5V驱动电压,橙黄粉蓝分别接OUT1、OUT2、OUT3、OUT4,
  11. //            注意外接电源要与单片机共地。
  12. //        维护记录:2012.11.2 双龙电子科技
  13. //*****************************************************************************************//
  14. #include<reg52.h>
  15. #define uint unsigned int
  16. #define uchar unsigned char
  17. uint i,j,k;
  18. uint N=128;//主轴旋转度数设置,度数D=N*45/减速比,采用1:16减速比的步进电机,旋转度数即为D=128*45/16=360度

  19. uchar code single_pos[4]={0x07,0x0b,0x0d,0x0e};//单四拍驱动方式正转表 D-C-B-A
  20. uchar code single_rev[4]={0x0e,0x0d,0x0b,0x07};//单四拍驱动方式反转表 A-B-C-D
  21. uchar code double_pos[4]={0x06,0x03,0x09,0x0c};//双四拍驱动方式正转表 AD-DC-CB-BA
  22. uchar code double_rev[4]={0x0c,0x09,0x03,0x06};//双四拍驱动方式反转表 AB-BC-CD-DA
  23. uchar code eight_pos[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};//八拍驱动方式正转表 AD-D-DC-C-CB-B-BA-A
  24. uchar code eight_rev[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};//八拍驱动方式反转表 A-AB-B-BC-C-CD-D-DA

  25. void delay(uint z);
  26. void m_single_pos();
  27. void m_single_rev();
  28. void m_double_pos();
  29. void m_double_rev();
  30. void m_eight_pos();
  31. void m_eight_rev();
  32. void main()                       
  33. {       
  34.         while(1)
  35.         {
  36.                 m_single_pos();//单四拍驱动方式正转360度
  37.                 delay(200);
  38.                 m_single_rev();//单四拍驱动方式反转360度
  39.                 delay(200);
  40.                 m_double_pos();//双四拍驱动方式正转360度
  41.                 delay(200);
  42.                 m_double_rev();//双四拍驱动方式反转360度
  43.                 delay(200);
  44.                 m_eight_pos();//八拍驱动方式正转360度
  45.                 delay(200);
  46.                 m_eight_rev();//八拍驱动方式反转360度       
  47.                 delay(200);
  48.         }               
  49. }
  50. /********************延时z毫秒**************************************/
  51. void delay(uint z)
  52. {
  53.         uint x,y;
  54.         for(x=z;x>0;x--)
  55.                 for(y=110;y>0;y--);
  56. }
  57. /*******************单四拍驱动正转(N*45/16)度***********************/
  58. void m_single_pos()
  59. {
  60.         for(k=0;k<N;k++)
  61.         {
  62.                 j=0;
  63.                 for(i=0;i<4;i++)//在单四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  64.                 {
  65.                         P1=single_pos[j];
  66.                         delay(5);//适当延时,保证转子转动时间,延时过短会丢拍
  67.                         j++;
  68.                 }
  69.         }
  70. }

  71. /*******************单四拍驱动反转(N*45/16度)***********************/
  72. void m_single_rev()
  73. {
  74.         for(k=0;k<N;k++)
  75.         {
  76.                 j=0;
  77.                 for(i=0;i<4;i++)//在单四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  78.                 {
  79.                         P1=single_rev[j];
  80.                         delay(5);
  81.                         j++;
  82.                 }
  83.         }
  84. }

  85. /*******************双四拍驱动正转(N*45/16)度***********************/
  86. void m_double_pos()
  87. {
  88.         for(k=0;k<N;k++)
  89.         {
  90.                 j=0;
  91.                 for(i=0;i<4;i++)//在双四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  92.                 {
  93.                         P1=double_pos[j];
  94.                         delay(8);
  95.                         j++;
  96.                 }
  97.         }
  98. }
  99. /*******************双四拍驱动反转(N*45/16)度***********************/
  100. void m_double_rev()
  101. {
  102.         for(k=0;k<N;k++)
  103.         {
  104.                 j=0;
  105.                 for(i=0;i<4;i++)//在双四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  106.                 {
  107.                         P1=double_rev[j];
  108.                         delay(8);
  109.                         j++;
  110.                 }
  111.         }
  112. }
  113. /*******************八拍驱动正转(N*45/16)度***********************/
  114. void m_eight_pos()
  115. {
  116.         for(k=0;k<N;k++)
  117.         {
  118.                 j=0;
  119.                 for(i=0;i<8;i++)//在八拍工作方式下,一个脉冲转子转动角度为5.625度,八拍共45度
  120.                 {
  121.                         P1=eight_pos[j];
  122.                         delay(2);
  123.                         j++;
  124.                 }
  125. ……………………

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

所有资料51hei提供下载:
28BYJ-48步进电机测试程序.zip (19.71 KB, 下载次数: 326)





作者: wandoy    时间: 2018-5-10 23:54
谢谢分享呀~
作者: 99312312    时间: 2018-6-17 19:26
xiexie 分享  初学者在此谢过
作者: 王云龙    时间: 2018-12-5 10:13
非常感谢
作者: 天骑兵团    时间: 2019-1-16 18:36
学习一下看看内容
作者: NO.0132    时间: 2019-4-24 08:53
谢谢谢谢,下来看看,希望有用
作者: fnh02    时间: 2019-7-11 16:00
非常感谢,正常找资料。
作者: 2454347030    时间: 2019-7-25 11:35
谢谢楼主分享
作者: 545812516    时间: 2019-7-25 13:57
感谢楼主分享,正需要这个资料
作者: dpj01    时间: 2019-7-25 14:58

谢谢分享呀~
作者: 孤狼行动    时间: 2020-1-26 12:47
谢谢分享
作者: 伯虎点蚊香    时间: 2020-2-19 15:04
最快可以达到每分钟多少转
作者: BrianWaring    时间: 2020-4-29 16:15
感谢分享,有你更精彩
作者: llliiihmm    时间: 2020-5-6 22:01
为啥我的电机在震动,不转呢?




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