標題: stm32控制步進電機源碼 給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同 [打印本頁]

作者: jackice1989    時間: 2017-5-2 20:16
標題: stm32控制步進電機源碼 給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同
stm32控制步進電機源碼:


stm32單片機源程序:
  1. /*******************************************************************************
  2. * 文件名          : main.c
  3. * 作者            : jackice
  4. * 時間                          :2013/8/10
  5. * 文件描述        : EN:PA.0 CLK:PA.1;DIR:PA.2
  6. ******兩個電機同時走動,可以通過給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同,走的距離不同************
  7. **********134個脈沖 電機走1mm;1345個脈沖 電機走10mm;13450個脈沖電機走100mm;******
  8. ********************************************************************************/

  9. /* 頭文件    ------------------------------------------------------------------*/

  10. #include "stm32f10x_lib.h"


  11. #define en0_0()   GPIO_ResetBits(GPIOA , GPIO_Pin_0)                  //宏定義
  12. #define en0_1()   GPIO_SetBits(GPIOA , GPIO_Pin_0)                               
  13. #define en1_0()   GPIO_ResetBits(GPIOA , GPIO_Pin_4)                  //宏定義
  14. #define en1_1()   GPIO_SetBits(GPIOA , GPIO_Pin_4)               
  15. #define clk0_0()  GPIO_ResetBits(GPIOA , GPIO_Pin_1)
  16. #define clk0_1()  GPIO_SetBits(GPIOA , GPIO_Pin_1)               
  17. #define clk1_0()  GPIO_ResetBits(GPIOA , GPIO_Pin_5)
  18. #define clk1_1()  GPIO_SetBits(GPIOA , GPIO_Pin_5)               
  19. #define dir0_0()  GPIO_ResetBits(GPIOA , GPIO_Pin_2)                  
  20. #define dir0_1()  GPIO_SetBits(GPIOA , GPIO_Pin_2)                               
  21. #define dir1_0()  GPIO_ResetBits(GPIOA , GPIO_Pin_3)                  
  22. #define dir1_1()  GPIO_SetBits(GPIOA , GPIO_Pin_3)                               



  23. /* 自定義同義關(guān)鍵字    --------------------------------------------------------*/

  24. /* 自定義參數(shù)宏        --------------------------------------------------------*/

  25. /* 自定義函數(shù)宏        --------------------------------------------------------*/

  26. /* 自定義變量          --------------------------------------------------------*/

  27. /* 自定義函數(shù)聲明      --------------------------------------------------------*/

  28. void RCC_Configuration(void);
  29. void GPIO_Configuration(void);
  30. void delay(u32 i);
  31. void motor_contrl(u32 Xsteps,u8 Xdirection,u16 Xspeed,u32 Ysteps,u8 Ydirection,u16 Yspeed,u32 setps);



  32. /*******************************************************************************
  33. * 函數(shù)名                 : main
  34. * 函數(shù)描述       : 無
  35. * 輸入?yún)?shù)       : 無
  36. * 輸出結(jié)果       : 無
  37. * 返回值         : 無
  38. *******************************************************************************/

  39. int main(void)
  40. {
  41.    
  42.           /* 設(shè)置系統(tǒng)時鐘 */
  43.           RCC_Configuration();                       

  44.           /* 設(shè)置GPIO端口 */
  45.           GPIO_Configuration();

  46.                 /*打開使能端*/
  47.           en0_1();
  48.                 en1_1();
  49.           while(1)
  50.                  {
  51.                                  motor_contrl(1,0,3,1,0,3,13450);
  52.                                 delay(100000);
  53.                                 motor_contrl(1,1,3,1,1,3,13450);       
  54.                                 delay(100000);
  55.                  }
  56. }



  57. /*******************************************************************************
  58. * 函數(shù)名        : RCC_Configuration
  59. * 函數(shù)描述  : 設(shè)置系統(tǒng)各部分時鐘
  60. * 輸入?yún)?shù)  : 無
  61. * 輸出結(jié)果  : 無
  62. * 返回值    : 無
  63. *******************************************************************************/

  64. void RCC_Configuration(void)
  65. {
  66.         /* 定義枚舉類型變量 HSEStartUpStatus */
  67.         ErrorStatus HSEStartUpStatus;

  68.           /* 復位系統(tǒng)時鐘設(shè)置*/
  69.           RCC_DeInit();

  70.           /* 開啟HSE*/
  71.           RCC_HSEConfig(RCC_HSE_ON);

  72.           /* 等待HSE起振并穩(wěn)定*/
  73.           HSEStartUpStatus = RCC_WaitForHSEStartUp();
  74.        
  75.         /* 判斷HSE起是否振成功,是則進入if()內(nèi)部 */
  76.           if(HSEStartUpStatus == SUCCESS)
  77.           {
  78.             /* 選擇HCLK(AHB)時鐘源為SYSCLK 1分頻 */
  79.             RCC_HCLKConfig(RCC_SYSCLK_Div1);
  80.   
  81.             /* 選擇PCLK2時鐘源為 HCLK(AHB) 1分頻 */
  82.             RCC_PCLK2Config(RCC_HCLK_Div1);

  83.             /* 選擇PCLK1時鐘源為 HCLK(AHB) 2分頻 */
  84.             RCC_PCLK1Config(RCC_HCLK_Div2);

  85.             /* 設(shè)置FLASH延時周期數(shù)為2 */
  86.             FLASH_SetLatency(FLASH_Latency_2);
  87.             /* 使能FLASH預取緩存 */
  88.             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  89.             /* 選擇鎖相環(huán)(PLL)時鐘源為HSE 1分頻,倍頻數(shù)為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
  90.             RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  91.             /* 使能PLL */
  92.             RCC_PLLCmd(ENABLE);

  93.             /* 等待PLL輸出穩(wěn)定 */
  94.             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

  95.             /* 選擇SYSCLK時鐘源為PLL */
  96.             RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  97.             /* 等待PLL成為SYSCLK時鐘源 */
  98.             while(RCC_GetSYSCLKSource() != 0x08);
  99.           }
  100.    
  101.           /* 打開APB2總線上的GPIOA時鐘*/
  102.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  103. }


  104. /*******************************************************************************
  105. * 函數(shù)名                  : GPIO_Configuration
  106. * 函數(shù)描述            : 設(shè)置各GPIO端口功能
  107. * 輸入?yún)?shù)      : 無
  108. * 輸出結(jié)果      : 無
  109. * 返回值        : 無
  110. *******************************************************************************/

  111. void GPIO_Configuration(void)
  112. {
  113.           GPIO_InitTypeDef GPIO_InitStructure;

  114.           /* 設(shè)置PA4,PA5,PA6,PA7口為推挽輸出,最大翻轉(zhuǎn)頻率為50MHz*/
  115.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  116.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  117.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  118.           GPIO_Init(GPIOA , &GPIO_InitStructure);   
  119. }


  120. /*******************************************************************************
  121. * 函數(shù)名                  : delay
  122. * 函數(shù)描述            : 簡單延時
  123. * 輸入?yún)?shù)      : i
  124. * 輸出結(jié)果      : 無
  125. * 返回值        : 無
  126. *******************************************************************************/

  127. void delay(u32 k)
  128. {
  129.         u32 j,i;
  130.         for(i=k;i>0;i--)
  131.         for(j=300;j>0;j--);
  132. }   

  133. /*******************************************************************************
  134. * 函數(shù)名                    : motor_contrl
  135. * 函數(shù)描述            : 電機控制,X和Y方向
  136. * 輸入?yún)?shù)      : Xsteps,Xdirection,Xspeed,Ysteps,Ydirection,Yspeed,u32 steps
  137. * 輸出結(jié)果      : 無
  138. * 返回值        : 無
  139. *******************************************************************************/
  140. void motor_contrl(u32 Xsteps,u8 Xdirection,u16 Xspeed,u32 Ysteps,u8 Ydirection,u16 Yspeed,u32 steps)
  141. {
  142.     u32 step,Xstep,Ystep;
  143.           if(Xdirection==1)    //判斷向左還是向右
  144.                 {
  145.         dir0_1();        //向右   
  146.     }
  147.                 else
  148.                 {
  149.         dir0_0();        //向左
  150.     }
  151.                   if(Ydirection==1)    //判斷向上還是向下
  152.                 {
  153.         dir1_1();        //向上
  154.     }
  155.                 else
  156.                 {
  157.                                 dir1_0();        //向下
  158.     }
  159.                
  160.         for(step=steps;step>0;step--)       
  161.                 {
  162.                                 for(Xstep=Xsteps;Xstep>0;Xstep--)    //給X軸電機脈沖數(shù),控制X軸電機走的距離
  163.                                  {
  164.                                                                  clk0_0();
  165.                                                                  delay(Xspeed);             //給脈沖頻率,控制電機轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
  166.                                                                  clk0_1();
  167.                                                                  delay(Xspeed);          
  168.                                                         for(Ystep=Ysteps;Ystep>0;Ystep--)  //給Y軸電機脈沖數(shù),控制Y軸電機走的距離
  169.                                                                 {
  170.                                                                                  clk1_0();
  171.                                                                                  delay(Yspeed);         //給脈沖頻率,控制電機轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
  172.                                                                                  clk1_1();
  173.                                                                                  delay(Yspeed);
  174.                                                                 }   

  175. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整源碼下載:
dianji1.rar (391.01 KB, 下載次數(shù): 256)


作者: minlee    時間: 2017-5-28 17:29
不錯 下載學習學習
作者: phil8199    時間: 2017-7-3 15:28
沒有黑幣怎么辦?有好人分享嗎?
作者: 黑boy    時間: 2017-8-12 05:39
謝謝  這對電賽很有幫助
作者: haxiny    時間: 2017-10-11 17:44
正好需要這個。 最近一直在找控制步進電機的程序。
作者: ahai    時間: 2017-11-23 20:50
正需要這個例程  下載下來研究下

作者: pcb_86    時間: 2018-1-23 13:49
沒有黑幣怎么辦?有好人分享嗎?
作者: 風影朔人    時間: 2018-2-25 20:14
下載學習,謝謝分享!
作者: samxly    時間: 2018-3-2 19:36
非常不錯
作者: samxly    時間: 2018-3-2 19:37
正在學習
作者: ljlkl1987    時間: 2018-3-20 17:49
HDX 好東西謝謝分享
作者: ljlkl1987    時間: 2018-3-20 17:50
沒有黑幣怎么辦?有好人分享嗎?
作者: hejianhuan    時間: 2018-3-22 17:05
在學習控制步進電機,謝謝分享!收下了。
作者: tgh520    時間: 2018-3-24 17:51

下載學習,謝謝分享!
作者: wh249507631    時間: 2018-3-25 11:54
謝謝樓主分享
作者: wuxishun    時間: 2018-4-6 12:33
謝謝分享
作者: hiker    時間: 2018-4-18 09:14
下載學習,謝謝分享!
作者: esmember    時間: 2018-6-20 13:22
步進電機是老大難啊.參考下,謝謝
作者: asdfg221111    時間: 2018-6-25 23:36
感謝樓主分享,好好學習一下
作者: onono    時間: 2018-8-9 11:55
查詢了一些資料,云里霧里的,學習一下。
作者: Akon4    時間: 2018-8-9 14:52
真好在研究這塊,謝謝分享!
作者: 39815    時間: 2018-8-24 23:38
謝謝樓主的分享
作者: goyhuan    時間: 2018-9-6 21:56
謝謝樓主無私奉獻
作者: plj213    時間: 2019-3-27 20:31

謝謝樓主分享。。。。。。。。。
作者: QEQWE123    時間: 2019-10-10 16:34
下載程序不動彈啊...




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1