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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機程序編譯沒有問題,燒錄后控制不了步進電機

[復制鏈接]
跳轉到指定樓層
樓主
ID:428161 發表于 2018-11-17 13:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1黑幣
  1. #include "reg52.h"

  2. void delay(unsigned int t);

  3. //Motor
  4. sbit F1 = P1^0;
  5. sbit F2 = P1^1;
  6. sbit F3 = P1^2;
  7. sbit F4 = P1^3;
  8. sbit k1 =P3^0;
  9. sbit k2=P3^1;
  10. sbit RX=P0^6;                //                       
  11. sbit TX=P0^7;

  12. sbit shuidi=P0^3;
  13. sbit hongyai=P0^0;
  14. sbit yali=P0^2;
  15. bit flag1=0;
  16. bit flag2=0;
  17. signed int  time=0;
  18. unsigned int  timer=0;
  19. unsigned long S=0;
  20. unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉
  21. unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe}; //正轉
  22. void Conut(void)
  23. {
  24.         time=TH0*256+TL0;
  25.         TH0=0;
  26.         TL0=0;
  27.         
  28.         S= (long)(time*0.17);     //算出來是CM

  29.         if((S>=4000)||flag1==1)   //
  30.         {         
  31.           flag1=0;
  32.         }         
  33. }

  34. void zd0() interrupt 1                  //T0中斷用來計數器溢出,超過測距范圍
  35. {
  36.     flag1=1;                                         //中斷溢出標志
  37.   }
  38. void panduan()

  39. {
  40.                    TMOD=0x11;                   //設T0為方式1,GATE=1;
  41.         TH0=0;
  42.         TL0=0;         
  43.         TH1=0xf8;                   //2MS定時
  44.         TL1=0x30;
  45.         ET0=1;             //允許T0中斷
  46.         ET1=1;                           //允許T1中斷
  47.         TR1=1;                           //開啟定時器
  48.         EA=1;                           //總中斷


  49.         {



  50.          while(!RX);                //當RX為零時等待
  51.          TR0=1;                            //開啟計數
  52.          while(RX);                        //當RX為1計數并等待
  53.          TR0=0;                                //關閉計數
  54.      Conut();                        //計算  
  55.          if(S<80)         
  56.           flag2=0;      
  57.         else         
  58.         flag2=0;         
  59.                   }
  60.                                   //調節轉速
  61.         }

  62. void motor_FFW()
  63.           {
  64.    unsigned char i;      
  65.     {
  66.       for (i=0; i<8; i++)  


  67.         {
  68.           if(hongyai==0) P1 = FFW[i]&0x1f;   //調取數據
  69.                   if(k2==0) P1 = FFW[i]&0x1f;
  70.           if(yali==0) P1 = FFW[i]&0x1f;
  71.                   if(flag2==0)P1 = FFW[i]&0x1f;
  72.         


  73.           delay(1);  
  74.          }
  75.          }
  76. }
  77. void  motor_FFZ()
  78. {
  79.    unsigned char i;      
  80.     {
  81.       for (i=0; i<8; i++)      
  82.         {
  83.                   if(k1==0) P1 = FFZ[i]&0x1f;
  84.                    if(shuidi==0) P1 = FFZ[i]&0x1f;
  85.                  
  86.                                                 
  87.                   delay(1);                   //調節轉速
  88.         }
  89.      }
  90. }
  91. void         main()
  92. {
  93.     while(1)
  94.         {
  95.          if(flag2==0)
  96.     motor_FFW();
  97.         
  98.          if(shuidi==0)
  99.          motor_FFZ();
  100.          if(hongyai==0)
  101.          motor_FFW();
  102.          if(yali==0)
  103.          motor_FFW();
  104. }
  105. }
復制代碼

編譯沒有問題,程序燒錄后控制不了五線四相步進電機
求大神解決!

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

使用道具 舉報

沙發
ID:155507 發表于 2018-11-17 21:23 | 只看該作者
你的程序有缺陷,我給你來個程序試試

  1. /*-----------------------------------------------
  2.   名稱:步進電機
  3.   內容:本程序用于測試4相步進電機常規驅動
  4.         使用1-2相勵磁
  5.         1-2相激勵功率增倍,步進角度減半,抖動減少
  6.         順序如下 a-ab-b-bc-c-cd-d-da   又稱4相8拍
  7. ------------------------------------------------*/

  8. #include <reg52.h>



  9. sbit A1=P1^0; //定義步進電機連接端口
  10. sbit B1=P1^1;
  11. sbit C1=P1^2;
  12. sbit D1=P1^3;


  13. #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
  14. #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
  15. #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
  16. #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  17. #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通電,其他相斷電
  18. #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通電,其他相斷電
  19. #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通電,其他相斷電
  20. #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
  21. #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電

  22. unsigned char Speed;
  23. bit Flag;
  24. /*------------------------------------------------
  25. uS延時函數,含有輸入參數 unsigned char t,無返回值
  26. unsigned char 是定義無符號字符變量,其值的范圍是
  27. 0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
  28. 長度如下 T=tx2+5 uS
  29. ------------------------------------------------*/
  30. void DelayUs2x(unsigned char t)
  31. {   
  32. while(--t);
  33. }
  34. /*------------------------------------------------
  35. mS延時函數,含有輸入參數 unsigned char t,無返回值
  36. unsigned char 是定義無符號字符變量,其值的范圍是
  37. 0~255 這里使用晶振12M,精確延時請使用匯編
  38. ------------------------------------------------*/
  39. void DelayMs(unsigned char t)
  40. {
  41.      
  42. while(t--)
  43. {
  44.      //大致延時1mS
  45.      DelayUs2x(245);
  46.          DelayUs2x(245);
  47. }
  48. }
  49. /*------------------------------------------------
  50.                     主函數
  51. ------------------------------------------------*/
  52. main()
  53. {
  54. unsigned int i=512;//旋轉一周時間

  55. EA=1;          //全局中斷開
  56. EX0=1;         //外部中斷0開
  57. IT0=1;         //1表示邊沿觸發

  58. Speed=10;
  59. while(1){
  60. Coil_OFF
  61. while((i--)&&Flag)  //正向
  62.   {  Coil_A1      
  63.      DelayMs(Speed);
  64.      Coil_AB1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  65.      DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,
  66.                              //數字越小,轉速越大,力矩越小
  67.          Coil_B1      
  68.      DelayMs(Speed);
  69.      Coil_BC1
  70.      DelayMs(Speed);
  71.          Coil_C1      
  72.      DelayMs(Speed);
  73.      Coil_CD1
  74.      DelayMs(Speed);
  75.          Coil_D1      
  76.      DelayMs(Speed);
  77.      Coil_DA1
  78.      DelayMs(Speed);
  79.   }
  80.   Coil_OFF
  81.   i=512;
  82.   while((i--)&&(!Flag))//反向
  83.   {  
  84.      Coil_A1      
  85.      DelayMs(Speed);
  86.      Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  87.      DelayMs(Speed);         //改變這個參數可以調整電機轉速 ,
  88.                              //數字越小,轉速越大,力矩越小
  89.          Coil_D1      
  90.      DelayMs(Speed);
  91.      Coil_CD1
  92.      DelayMs(Speed);
  93.          Coil_C1      
  94.      DelayMs(Speed);
  95.      Coil_BC1
  96.      DelayMs(Speed);
  97.          Coil_B1      
  98.      DelayMs(Speed);
  99.      Coil_AB1
  100.      DelayMs(Speed);
  101.   }
  102. }
  103. }

  104. /*------------------------------------------------
  105.                  外部中斷程序
  106. ------------------------------------------------*/
  107. void ISR_INT0(void) interrupt 0
  108. {

  109. if(!INT0)
  110.    {
  111.    DelayMs(10);//在此處可以添加去抖動程序,防止按鍵抖動造成錯誤
  112.    if(!INT0)
  113.    //while(!INT1);//等待按鍵釋放
  114.      {
  115.      Flag=!Flag;   
  116.      }
  117.    }
  118. }
復制代碼



回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: chinese中国真实乱对白 | 日本高清在线一区 | 一区二区三区在线观看视频 | 午夜三级在线观看 | 国产高清精品一区二区三区 | 免费一区在线观看 | aaa天堂| 久久久精品一区 | 麻豆va | 精品在线免费看 | 黄色在线免费观看视频 | 欧美国产精品一区二区三区 | 久久久性色精品国产免费观看 | 久久国产精品免费 | 99re视频在线免费观看 | 视频一区二区中文字幕 | 久久精片 | 国产黄色免费网站 | 999久久精品| 黄色一级电影免费观看 | 精品一区二区三区在线观看 | 亚洲国产一区二区在线 | 怡红院免费的全部视频 | 欧美性生交大片免费 | 亚洲欧洲一区二区 | 国产伦精品一区二区三区在线 | 在线看一区二区 | 亚洲一区视频在线 | 国产伦精品一区二区三区精品视频 | 在线播放国产一区二区三区 | 久久精品免费观看 | 狠狠操天天操 | 另类a v| 久久99精品国产 | 中文字幕一区二区三区乱码图片 | 成人一级毛片 | 日韩三级在线 | 九九久久精品 | 久久国产精品视频 | 国产精品乱码一区二区三区 | 国产精品亚洲一区二区三区在线 |