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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9805|回復: 6
收起左側

STC15F2K60S2+esp8266+步進電機,app控制步進電機正反轉及加減速

[復制鏈接]
ID:355489 發表于 2018-7-22 18:29 | 顯示全部樓層 |閱讀模式
在前一篇貼子在基礎上,進一步學習控制步進電機。

準備材料:
步進電機:28byj48+ULN2003驅動板

接線圖:

2018072201

2018072201

調試過程中主要有以下問題:
1、步進電機的連接  2 、步進電機的速度控制,如何調整角速度。

步驟:
1、按前一篇,貼子連接好app wifi 控制單片機
2、按上圖連接好步進電機
3、拷貝如下C++代碼, 燒錄到單片機中
4、利用app手機控制步進電機前進,倒退,停止,加速,減速。

app1

app1


代碼如下:

  1. #include <reg52.h>                       //包含頭文件
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define RELOAD_COUNT 0xFA         //宏定義波特率發生器的載入值
  5. #define MAIN_Fosc                22118400L        //定義主時鐘        
  6. #define        BaudRate1                115200UL        //選擇波特率
  7. #define receive_max 20          //串口接收緩沖長度   
  8. #define        Timer1_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))                //Timer 1 重裝值, 對應300KHZ
  9. #define        Timer2_Reload        (65536UL -(MAIN_Fosc / 4 / BaudRate1))        //Timer 2 重裝值, 對應300KHZ
  10. typedef  unsigned char u8;

  11. /*****************LED燈對應P0口的1個端口*************/
  12. sbit LED0=P3^7;
  13. /************波特率發生器相關功能寄存器的定義****************/
  14. sfr AUXR=0x8E;
  15. sfr BRT=0x9C;
  16. sfr AUXR1=0xA2;
  17. sfr P_SW1 = 0xA2;
  18. /*****************相關變量**************/
  19. uchar Recive_table[receive_max];        //用于接收wifi模塊反饋到MCU上的數據
  20. u8 receive_count=0; //接受數據的個數
  21. /*******************************************************************
  22. 名稱:延時函數
  23. 作用:毫秒級延時,微妙級延時函數,為數據收發完成作等待.......
  24. ********************************************************************/
  25. void ms_delay(uint t)
  26. {
  27.     uint i,j;
  28.     for(i=t; i>0; i--)
  29.         for(j=112; j>0; j--);
  30. }


  31. /********************************************************************
  32. 名稱:波特率發生器函數
  33. 作用:波特率發生器可以是T1定時器實現,也可以是MCU內部獨立的波特率發生器,
  34. 各自不同的載入值計算式,具體根據寄存器相關設置來參考計算,以實現
  35. 異步串行通訊。(經測試,兩種設置方式均可用,可任選一種。)
  36. ********************************************************************/
  37. void Uart_Init()//使用定時器1作為波特率發生器
  38. {
  39.     SCON |= 0x40;               //8位數據
  40.     P_SW1 &=  ~0xc0;       //UART1 使用P30 P31口  默認
  41.     TR1 = 0;                    //關閉定時器
  42.     TR1 = 0;                        //波特率使用Timer1產生
  43.     AUXR &= ~0x01;                //S1 BRT Use Timer1;
  44.     TMOD &= ~(1<<6);   //Timer1 set As Timer
  45.     TMOD &= ~0x30;     //Timer1_16bitAutoReload;2
  46.     AUXR |=  (1<<6);        //Timer1 set as 1T mode
  47.     TH1 = (u8)(Timer1_Reload >> 8);
  48.     TL1 = (u8)Timer1_Reload;
  49.     TR1  = 1;

  50.     PS = 1; //高優先級中斷
  51.     REN = 1;        //允許接收
  52.     ES  = 1;        //允許中斷
  53.     EA = 1;                //允許全局中斷


  54. }

  55. //發送一字節
  56. void sendByte(uchar b)
  57. {   ES=0;
  58.     SBUF = b;
  59.     while(!TI);
  60.     TI=0;
  61.     ES=1;
  62. }

  63. //發送字符串
  64. void sendString(uchar *s)
  65. {
  66.     while(*s != '\0') //字符串默認結尾'\0',以此來判斷字符串的結束
  67.     {
  68.         sendByte(*s++);
  69.     }
  70. }

  71. /********************************************************************
  72. 名稱:WIFI模塊設置函數
  73. 作用: 啟動模塊,以便可以實現無線接入和控制
  74. ********************************************************************/
  75. void ESP8266_Set(uchar *puf) // 數組指針*puf指向字符串數組
  76. {
  77.     sendString(puf);
  78.     ms_delay(10);
  79.     sendString("\r\n");//回車
  80. }
  81. /****************************************************
  82. 名稱:ESP8266發送數據函數
  83. 功能:用于與wifi模塊相連的終端發送數據
  84. *****************************************************/
  85. void ESP8266_Sent(uchar *puf)      // 數組指針*puf指向字符串數組
  86. {
  87.     ESP8266_Set("AT+CIPSEND=0,50");
  88.     sendString(puf);
  89.     ms_delay(10);
  90.     sendString("\r\n");   //回車
  91. }


  92. /***


  93. 步進電機

  94. **/
  95. #define MotorData P0
  96. unsigned char curKeyval;
  97. //步進電機控制接口定義
  98. uchar phasecw[4] = {0x08,0x04,0x02,0x01}; //正轉 電機導通相序 D-C-B-A
  99. uchar phaseccw[4]= {0x01,0x02,0x04,0x08}; //反轉 電機導通相序 A-B-C-D
  100. int speedMax = 14;
  101. int speedMin = 50;
  102. int curSpeed = 50;
  103. //順時針轉動
  104. void MotorCW(void)
  105. {
  106.     uchar i;
  107.     for(i=0; i<4; i++)
  108.     {
  109.         MotorData=phasecw;
  110.         ms_delay(curSpeed);
  111.     }
  112. }
  113. //逆時針轉動
  114. void MotorCCW(void)
  115. {
  116.     uchar i;
  117.     for(i=0; i<4; i++)
  118.     {
  119.         MotorData=phaseccw;
  120.         ms_delay(curSpeed);//轉速調節
  121.     }
  122. }
  123. //停止轉動
  124. void MotorStop(void)
  125. {
  126.     MotorData=0x00;
  127. }

  128. void speedUp(void){

  129.         curSpeed = curSpeed+3;
  130. }

  131. void speedDown(void){

  132.         curSpeed = curSpeed-3;
  133. }

  134. /********************************************************************
  135. 名稱:主函數
  136. 作用:程序的執行入口
  137. ********************************************************************/
  138. void main()
  139. {
  140.     ms_delay(50000);
  141.     LED0=0;//關閉LED燈
  142.     Uart_Init();//使用獨立的波特率發生器
  143.     ms_delay(500);
  144.     LED0=!LED0;
  145.     ms_delay(500);
  146.     LED0=!LED0;
  147.     ESP8266_Set("AT+CIPMUX=1"); //啟動多連接
  148.     ms_delay(500);
  149.     LED0=!LED0;
  150.     ESP8266_Set("AT+CIPSERVER=1,333");//建立server,端口為333
  151.     ms_delay(500);
  152.     LED0=!LED0;
  153.     //允許串口中斷
  154.     while(1)
  155.     {

  156.         if(receive_count > 0)//如果接受到數據
  157.         {
  158.             ms_delay(500);
  159.             receive_count = 0;//接收計數清0

  160.             if(Recive_table[9]=='0')
  161.             {
  162.                 LED0=!LED0;//0 燈滅
  163.                 ms_delay(500);
  164.                 ESP8266_Sent("close");
  165.                 //  ms_delay(500);
  166.                 //        ESP8266_Sent(Recive_table);
  167.                 //         ms_delay(500);
  168.                 curKeyval  =1;
  169.                 ms_delay(50);
  170.             }
  171.             if(Recive_table[9]=='1')
  172.             {
  173.                 LED0=!LED0;//0 燈滅
  174.                 ms_delay(500);
  175.                 ESP8266_Sent("open");
  176.                 //  ms_delay(500);
  177.                 //        ESP8266_Sent(Recive_table);
  178.                 //         ms_delay(500);
  179.                 curKeyval  =2;
  180.                 ms_delay(50);
  181.             }
  182.             if(Recive_table[9]=='2')
  183.             {
  184.                 LED0=!LED0;//0 燈滅
  185.                 ms_delay(500);
  186.                 ESP8266_Sent("open");
  187.                 //  ms_delay(500);
  188.                 //        ESP8266_Sent(Recive_table);
  189.                 //         ms_delay(500);

  190.                 curKeyval  =3;
  191.                 ms_delay(50);
  192.             }
  193.                          if(Recive_table[9]=='3')
  194.             {
  195.                  speedUp();
  196.             }
  197.                          if(Recive_table[9]=='4')
  198.             {
  199.                   speedDown();
  200.             }
  201.             receive_count = 0;//接收計數清0

  202.         }


  203.         switch(curKeyval)
  204.         {
  205.         case 1:
  206.             MotorCW();
  207.             break;
  208.         case 2:
  209.             MotorCCW();
  210.             break;
  211.         case 3:
  212.             MotorStop();
  213.             break;

  214.         }

  215.     }

  216. }

  217. void UART1_int (void) interrupt 4
  218. {
  219.     if(RI)
  220.     {
  221.         RI = 0;//清除接受標志
  222.         Recive_table[receive_count] = SBUF;//將數據存入數組
  223.         if(++receive_count > receive_max) {
  224.             receive_count = 0;//避免溢出
  225.         }
  226.         if((Recive_table[receive_count-1]=='\n'))
  227.             receive_count=0;
  228.     }
  229.     if(TI)
  230.     {}
  231. }
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:480682 發表于 2019-3-7 10:40 | 顯示全部樓層
有問題呀,為什么我不能執行呀
回復

使用道具 舉報

ID:510566 發表于 2019-4-12 15:53 | 顯示全部樓層
這套東西單片機可以用52嗎
回復

使用道具 舉報

ID:510566 發表于 2019-4-12 16:01 | 顯示全部樓層
單片機改成52的話程序改動大嗎
回復

使用道具 舉報

ID:308173 發表于 2019-4-13 09:33 | 顯示全部樓層
兄弟你把代碼打包一下讓我下載呀
回復

使用道具 舉報

ID:355489 發表于 2019-4-27 19:20 | 顯示全部樓層
miaoxiaobaiqaq 發表于 2019-4-13 09:33
兄弟你把代碼打包一下讓我下載呀

你直接復制代碼就可以了,這就是所有代碼
回復

使用道具 舉報

ID:355489 發表于 2019-4-29 20:41 | 顯示全部樓層
hjx820 發表于 2019-4-27 19:20
你直接復制代碼就可以了,這就是所有代碼

sorry, 附件請到        STC15F2K60S2單片機+ESP8266+NTC傳輸到網絡并訪問 這個貼子里下載,我這里所有貼子的除了main.c不一樣,其它都是一樣的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕 国产 | jizz在线看片 | 午夜99 | 黄色片在线看 | 日韩精品久久一区二区三区 | 国产精品视频一区二区三区四区国 | 精品中文在线 | 欧美日本韩国一区二区 | 天天澡天天狠天天天做 | 亚洲欧美综合精品另类天天更新 | 久久精品av麻豆的观看方式 | 国产精品久久国产精品久久 | 精品久久久久国产免费第一页 | 成人午夜 | 性欧美hd | 国产成人精品一区二区三区视频 | www.伊人.com| 亚洲午夜精品一区二区三区 | 黑人精品 | 风间由美一区二区三区在线观看 | 久久久久99 | 中文字幕av一区二区三区 | 精品成人一区 | 欧美精品久久一区 | 天堂一区二区三区 | 日日日操 | 天天色图 | 亚洲精品一二三区 | 最新国产视频 | 国产精品久久久久久久久久免费看 | 一区二区在线免费播放 | 国产精品一区二区三区四区 | 中文字幕在线免费观看 | 日韩欧美在线观看一区 | 国产午夜三级一区二区三 | 久久69精品久久久久久久电影好 | 日韩手机视频 | av av在线| 午夜国产在线 | 久久久久久免费精品一区二区三区 | 欧美综合一区 |