找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1173|回复: 7
收起左侧

51单片机控制步进马达程序问题

[复制链接]
ID:143767 发表于 2023-3-9 14:12 | 显示全部楼层 |阅读模式
请教一下,我这个单片机程序是想让步进马达正转45度,反转45度,重复三次然后停止,但是现在一直循环不停,不知问题出在哪里,请大家指教,谢谢!
  1. /******************************28BYJ-48步进电机测试程序*************************************
  2. ;FOSC = 12MHz

  3. ; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!
  4. ; 本步进电机步进角为 5.625*2度 半步5.625度, 减速比为64. 一圈 360 度 , 需要512 个脉冲完成!!!  360=N*45/64
  5. ;---------------------------------------------------------------------------------
  6. ; A 组线圈对应 P3.2
  7. ; B 组线圈对应 P3.3
  8. ; C 组线圈对应 P3.4
  9. ; D 组线圈对应 P3.5

  10. ;----------------------------------------------------------------------------------
  11. **********************************************************************************/
  12. #include <reg52.h>      
  13. #include <intrins.h>
  14. #define uint unsigned int
  15. #define uchar unsigned char
  16. uint i,j,k,m;
  17. uint N=128;    //角度范围调节,对应于45度,512对应于360度

  18. uchar code single_rev[4]={0x20,0x10,0x08,0x04};  /*单四拍反转表*/
  19. uchar code single_pos[4]={0x04,0x08,0x10,0x20};  /*单四拍正转表*/

  20. void delay(uint z);
  21. void m_single_pos();
  22. void m_single_rev();

  23. void main()
  24. {
  25.    // while(1)
  26. for(m=0;m<3;m++);         
  27.         {
  28.      m_single_rev(); //单四拍反转360度
  29.           delay(25);
  30.          m_single_pos(); //单四拍正转360度
  31.           delay(25);
  32.         }
  33. }
  34.         
  35. void delay(uint z) /*延时z毫秒*/
  36. {
  37.     uint x,y;
  38.         for(x=z;x>0;x--)
  39.            for(y=350;y>0;y--) ;         //转速调节,数值越大马达越慢
  40. }



  41.             
  42. /******************************单四拍驱动正转(N*45/16)*************************************/  
  43. void m_single_pos()
  44. {
  45.    for(k=0;k<N;k++)            
  46.     {  
  47.          for(i=0;i<4;i++)                                //单四拍一个脉冲转子转动5.625*2=11.625度,四拍共45度
  48.             {
  49.                   P3=single_pos[i] ;
  50.                   delay(5) ;                //适当延时,保证转子转动时间,延时过短会丢拍
  51.                  }
  52.          }
  53. }


  54. /******************************单四拍驱动反转(N*45/16)*************************************/  
  55. void m_single_rev()
  56. {
  57.    for(k=0;k<N;k++)                        
  58.     {  
  59.          for(i=0;i<4;i++)             //单四拍一个脉冲转子转动5.625*2=11.625度,四拍共45度
  60.             {
  61.                   P3=single_rev[i] ;
  62.                   delay(5) ;            //适当延时,保证转子转动时间,延时过短会丢拍
  63.                  }                        
  64.          }               
  65. }
复制代码


回复

使用道具 举报

ID:495500 发表于 2023-3-9 15:15 | 显示全部楼层
void main()
{
   // while(1)
  {
    for(m=0;m<3;m++);         
        {
     m_single_rev(); //单四拍反转360度
          delay(25);
         m_single_pos(); //单四拍正转360度
          delay(25);
        }
  }
}
回复

使用道具 举报

ID:1063163 发表于 2023-3-9 15:18 | 显示全部楼层
Опечатка "за"!
После скобок не должно быть точки с запятой.
Буфер обмена01.jpg


回复

使用道具 举报

ID:1063163 发表于 2023-3-9 15:23 | 显示全部楼层
“为”拼写错误!
括号后不应该有分号。


Буфер обмена01.jpg

回复

使用道具 举报

ID:1034262 发表于 2023-3-9 15:34 | 显示全部楼层
main函数没有大循环,当然会如此。
回复

使用道具 举报

ID:97678 发表于 2023-3-9 16:07 | 显示全部楼层
我的步进电机工作的时候,一会卡顿一下。 不知道怎么回事。 有人知道吗?
回复

使用道具 举报

ID:161164 发表于 2023-3-9 17:24 来自手机 | 显示全部楼层
把while(1)放到最后
1.jpg
回复

使用道具 举报

ID:883242 发表于 2023-3-10 10:31 | 显示全部楼层
这么低级的错误用indent或astyle格式化一下代码一眼就能看出来。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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