久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2179|回復: 0
打印 上一主題 下一主題
收起左側

單片機+L298驅動步進電機運轉不穩定

[復制鏈接]
跳轉到指定樓層
樓主
ID:516452 發表于 2019-5-14 09:15 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
我的步進電機正轉穩定反轉不穩定,老師 說是頻率不對,輸出的波形可能有偏差,讓我改程序,可是我不知道要怎么改程序才能輸出正確的波形,我是用51單片機和 L298驅動模塊控制兩相步進電機,求大神指點

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit RS=P2^0;
  5. sbit RW=P2^1;
  6. sbit E=P2^2;

  7. sbit key1=P3^2;
  8. //sbit key2=P3^3;
  9. //sbit key3=P3^4;

  10. #define RIGHT_RUN 1      //正轉值
  11. #define LEFT_RUN 0       //反轉值

  12. static unsigned int count;
  13. static unsigned int endcount;
  14. uchar flag;
  15. //八拍驅動方式正轉表 A-B---> B- --> B-A --> A --> AB --> B
  16. // --> BA- --> A- --> A-B-
  17. ucharupstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};


  18. char SpeedChar[]="SPEED(n/min):";
  19. char StateChar[]="RUN SET:";
  20. char STATE_CW[]=" FAN ";
  21. char STATE_CCW[]="ZHENG";
  22. char SPEED[3]="999";
  23. uchar RunState=LEFT_RUN;  //運行狀態標志位
  24. //******************************
  25. //     步進電機停止函數
  26. //作用:停止
  27. //******************************
  28. void MotorStop(void)
  29. {
  30.     P1= 0x00;
  31. }


  32. //******************************
  33. //     外部中斷0初始化函數
  34. //作用:初始化外部中斷
  35. //******************************
  36. void Interrupt0_Init()
  37. {
  38.     EA= 1;
  39.     TMOD= 0x11;
  40.     ET0= 1;

  41. //  TH0=0xFF;
  42. //  TL0=0x28;
  43.     TH0=(65536-500)/256;
  44.     TL0=(65536-500)%256;

  45.     TR0=1;
  46. }
  47. //******************************
  48. //
  49. //延時i ms
  50. //******************************
  51. void delay(uint ims)
  52. {
  53.     endcount=ims;
  54.     count=0;
  55.     do{}while(count<endcount);
  56. }

  57. //******************************
  58. //     步進電機驅動函數
  59. //作用:通過變量var控制電動機的轉速高低,通過變量state判斷電動機的正反轉
  60. //         state:0 正轉,state: 1 反轉
  61. //使用8拍能夠實現比較平滑的轉動,使用4拍時電機震動比較大。
  62. //******************************
  63. void MotorSpeedOrDirection(uint var, ucharstate)
  64. {
  65.     uchari=0;
  66.     if(!state)
  67.     {
  68.        for(i=0;i<8; i++)
  69.        {
  70.            P0=upstep8_table[ i];
  71.            delay(var);
  72.        }
  73.     }
  74.     else
  75.     {
  76.        for(i=7;i>0; --i)
  77.        {
  78.            P0=upstep8_table[ i];
  79.            delay(var);
  80.        }
  81.     }
  82. }
  83. //******************************
  84. //     中斷處理函數
  85. //作用:定時器0的中斷處理
  86. //******************************
  87. void timeint(void) interrupt 1
  88. {
  89. //  TH0=0xFF;
  90. //  TL0=0x28;   //216----234us
  91. //  定時器定時1ms
  92.     TH0=(65536-500)/256;
  93.     TL0=(65536-500)%256;
  94.     count++;
  95. }
  96. //液晶
  97. void clock(unsigned int Delay)   //1ms延時程序
  98. {  
  99.     unsignedint i;
  100.   for(;Delay>0;Delay--)
  101.    for(i=0;i<124;i++);     
  102. }
  103. void wcm(unsigned char com)//寫命令
  104. {
  105.     RS=0;
  106.     E=0;
  107.     P1=com;
  108.     clock(5);
  109.     E=1;
  110.     clock(5);
  111.     E=0;
  112. }
  113. void wd(unsigned char date)//寫數據
  114. {
  115.     RS=1;
  116.     E=0;
  117.     P1=date;
  118.     clock(5);
  119.     E=1;
  120.     clock(5);
  121.     E=0;
  122. }
  123. void shuzu(unsigned char *c)
  124. {
  125.     while((*c)!='\0')
  126.     {
  127.       wd(*c);
  128.       c++;
  129.     }
  130. }
  131. void ShowState()    //顯示狀態與速度
  132. {
  133.    if(RunState==RIGHT_RUN)
  134.        {
  135.               wcm(0x80+0x40+9);
  136.               wd('Z');
  137.        }
  138.    else
  139.        {
  140.               wcm(0x80+0x40+9);
  141.               wd('F');
  142.        }
  143. }
  144. void inti_lcd()//初始化
  145. {
  146.     RW=0;
  147.     wcm(0x38);
  148.     wcm(0x0c);
  149.     wcm(0x06);
  150.     wcm(0x01);
  151. }
  152. void main()
  153. {
  154.     unsignedint sum=0;
  155.     P1= 0x00;
  156.     count= 0;
  157.     Interrupt0_Init();
  158.     inti_lcd();      
  159.     wcm(0x80);
  160.        shuzu(SpeedChar);
  161.        wcm(0x80+13);
  162.        shuzu(SPEED);
  163.       wcm(0x80+0x40);
  164.        shuzu(StateChar);
  165.     while(1)
  166.     {
  167.            if(key1==0)
  168.            {
  169.                delay(5);
  170.               if(key1==0)//確認功能鍵被按下
  171.               {  
  172.                   flag++;//功能鍵按下次數記錄
  173.                   while(!key1);//釋放確認
  174.                   if(flag==3)
  175.                      flag=0;
  176.               }
  177.            }
  178.               if(flag==0)
  179.            {
  180.                MotorStop();
  181.            }         
  182.               if(flag==1)
  183.            {
  184.               RunState=RIGHT_RUN;  
  185.               MotorSpeedOrDirection(1,0);
  186.            }            
  187.            if(flag==2)
  188.            {
  189.               RunState=LEFT_RUN;
  190.               MotorSpeedOrDirection(1,1);
  191.            }   
  192.            //ShowState();
  193.     }
  194. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一卡二卡在线观看 | 久草在线高清 | 夜夜爽99久久国产综合精品女不卡 | 欧美日本高清 | 国产日产精品一区二区三区四区 | 久久国产精品久久久久 | 欧美视频网 | 成人免费观看男女羞羞视频 | 国产黄色大片 | 日韩精品成人一区二区三区视频 | 一区二区三区精品在线视频 | 久久亚洲国产精品 | 日本一区二区高清视频 | 久久精品国产免费 | 91婷婷韩国欧美一区二区 | 精品久久久久久久久久久久久久久久久 | 国产一区中文字幕 | 久久久精品综合 | 日本小电影网站 | 日韩欧美亚洲一区 | 免费看黄色小视频 | 在线免费观看毛片 | 成人亚洲综合 | 日本xx视频免费观看 | 久久小视频 | 欧美性网| 桃花av在线 | 日本黄色短片 | 婷婷福利视频导航 | 国产亚洲精品久久情网 | 在线观看国产视频 | 亚洲精品日韩在线 | 青青久久av北条麻妃海外网 | 国产精品一区在线观看 | 精品一区二区三区不卡 | 电影91久久久 | 久久久久久久国产精品视频 | 午夜免费观看网站 | 精品福利在线 | 亚洲一区二区三区免费在线观看 | 亚洲国产成人精品久久 |