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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32控制步進電機源碼 給定不同頻率的脈沖、不同脈沖數達到兩個電機走速不同

  [復制鏈接]
跳轉到指定樓層
樓主
stm32控制步進電機源碼:


stm32單片機源程序:
  1. /*******************************************************************************
  2. * 文件名          : main.c
  3. * 作者            : jackice
  4. * 時間                          :2013/8/10
  5. * 文件描述        : EN:PA.0 CLK:PA.1;DIR:PA.2
  6. ******兩個電機同時走動,可以通過給定不同頻率的脈沖、不同脈沖數達到兩個電機走速不同,走的距離不同************
  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. /* 自定義同義關鍵字    --------------------------------------------------------*/

  24. /* 自定義參數宏        --------------------------------------------------------*/

  25. /* 自定義函數宏        --------------------------------------------------------*/

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

  27. /* 自定義函數聲明      --------------------------------------------------------*/

  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. * 函數名                 : main
  34. * 函數描述       : 無
  35. * 輸入參數       : 無
  36. * 輸出結果       : 無
  37. * 返回值         : 無
  38. *******************************************************************************/

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

  44.           /* 設置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. * 函數名        : RCC_Configuration
  59. * 函數描述  : 設置系統各部分時鐘
  60. * 輸入參數  : 無
  61. * 輸出結果  : 無
  62. * 返回值    : 無
  63. *******************************************************************************/

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

  68.           /* 復位系統時鐘設置*/
  69.           RCC_DeInit();

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

  72.           /* 等待HSE起振并穩定*/
  73.           HSEStartUpStatus = RCC_WaitForHSEStartUp();
  74.        
  75.         /* 判斷HSE起是否振成功,是則進入if()內部 */
  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.             /* 設置FLASH延時周期數為2 */
  86.             FLASH_SetLatency(FLASH_Latency_2);
  87.             /* 使能FLASH預取緩存 */
  88.             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

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

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

  93.             /* 等待PLL輸出穩定 */
  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. * 函數名                  : GPIO_Configuration
  106. * 函數描述            : 設置各GPIO端口功能
  107. * 輸入參數      : 無
  108. * 輸出結果      : 無
  109. * 返回值        : 無
  110. *******************************************************************************/

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

  114.           /* 設置PA4,PA5,PA6,PA7口為推挽輸出,最大翻轉頻率為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. * 函數名                  : delay
  122. * 函數描述            : 簡單延時
  123. * 輸入參數      : i
  124. * 輸出結果      : 無
  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. * 函數名                    : motor_contrl
  135. * 函數描述            : 電機控制,X和Y方向
  136. * 輸入參數      : Xsteps,Xdirection,Xspeed,Ysteps,Ydirection,Yspeed,u32 steps
  137. * 輸出結果      : 無
  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軸電機脈沖數,控制X軸電機走的距離
  163.                                  {
  164.                                                                  clk0_0();
  165.                                                                  delay(Xspeed);             //給脈沖頻率,控制電機轉速,頻率越高速度越快,頻率越低速度越慢
  166.                                                                  clk0_1();
  167.                                                                  delay(Xspeed);          
  168.                                                         for(Ystep=Ysteps;Ystep>0;Ystep--)  //給Y軸電機脈沖數,控制Y軸電機走的距離
  169.                                                                 {
  170.                                                                                  clk1_0();
  171.                                                                                  delay(Yspeed);         //給脈沖頻率,控制電機轉速,頻率越高速度越快,頻率越低速度越慢
  172.                                                                                  clk1_1();
  173.                                                                                  delay(Yspeed);
  174.                                                                 }   

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

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

評分

參與人數 1黑幣 +5 收起 理由
huyin + 5 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:164719 發表于 2017-5-28 17:29 | 只看該作者
不錯 下載學習學習
回復

使用道具 舉報

板凳
ID:163679 發表于 2017-7-3 15:28 | 只看該作者
沒有黑幣怎么辦?有好人分享嗎?
回復

使用道具 舉報

地板
ID:193719 發表于 2017-8-12 05:39 | 只看該作者
謝謝  這對電賽很有幫助
回復

使用道具 舉報

5#
ID:193324 發表于 2017-10-11 17:44 | 只看該作者
正好需要這個。 最近一直在找控制步進電機的程序。
回復

使用道具 舉報

6#
ID:252823 發表于 2017-11-23 20:50 | 只看該作者
正需要這個例程  下載下來研究下
回復

使用道具 舉報

7#
ID:229036 發表于 2018-1-23 13:49 | 只看該作者
沒有黑幣怎么辦?有好人分享嗎?
回復

使用道具 舉報

8#
ID:279769 發表于 2018-2-25 20:14 | 只看該作者
下載學習,謝謝分享!
回復

使用道具 舉報

9#
ID:35312 發表于 2018-3-2 19:36 | 只看該作者
非常不錯
回復

使用道具 舉報

10#
ID:35312 發表于 2018-3-2 19:37 | 只看該作者
正在學習
回復

使用道具 舉報

11#
ID:294631 發表于 2018-3-20 17:49 | 只看該作者
HDX 好東西謝謝分享
回復

使用道具 舉報

12#
ID:294631 發表于 2018-3-20 17:50 | 只看該作者
沒有黑幣怎么辦?有好人分享嗎?
回復

使用道具 舉報

13#
ID:289956 發表于 2018-3-22 17:05 | 只看該作者
在學習控制步進電機,謝謝分享!收下了。
回復

使用道具 舉報

14#
ID:296441 發表于 2018-3-24 17:51 | 只看該作者

下載學習,謝謝分享!
回復

使用道具 舉報

15#
ID:296659 發表于 2018-3-25 11:54 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

16#
ID:243748 發表于 2018-4-6 12:33 來自觸屏版 | 只看該作者
謝謝分享
回復

使用道具 舉報

17#
ID:310610 發表于 2018-4-18 09:14 | 只看該作者
下載學習,謝謝分享!
回復

使用道具 舉報

18#
ID:185372 發表于 2018-6-20 13:22 | 只看該作者
步進電機是老大難啊.參考下,謝謝
回復

使用道具 舉報

19#
ID:340339 發表于 2018-6-25 23:36 | 只看該作者
感謝樓主分享,好好學習一下
回復

使用道具 舉報

20#
ID:384489 發表于 2018-8-9 11:55 | 只看該作者
查詢了一些資料,云里霧里的,學習一下。
回復

使用道具 舉報

21#
ID:228731 發表于 2018-8-9 14:52 | 只看該作者
真好在研究這塊,謝謝分享!
回復

使用道具 舉報

22#
ID:384759 發表于 2018-8-24 23:38 | 只看該作者
謝謝樓主的分享
回復

使用道具 舉報

23#
ID:209739 發表于 2018-9-6 21:56 | 只看該作者
謝謝樓主無私奉獻
回復

使用道具 舉報

24#
ID:138247 發表于 2019-3-27 20:31 | 只看該作者

謝謝樓主分享。。。。。。。。。
回復

使用道具 舉報

25#
ID:316613 發表于 2019-10-10 16:34 | 只看該作者
下載程序不動彈啊...
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级电影在线看 | 综合另类| 精产国产伦理一二三区 | 国产精品av久久久久久毛片 | 精品福利在线 | 激情网站 | 国产一区二区三区视频在线观看 | 国产精品视频一二三区 | 午夜精品久久久久久久星辰影院 | 夜夜草视频 | 久久精品久久久久久 | 欧美看片| 日韩精品久久久 | 成人一区二区三区视频 | 在线第一页 | 一区二区三区四区电影 | 91精品国产91久久综合桃花 | 国产毛片毛片 | 国产乱码高清区二区三区在线 | 成人国产免费观看 | 五月天天丁香婷婷在线中 | 在线成人一区 | 日韩乱码一二三 | 亚洲 欧美 另类 综合 偷拍 | 久久精品中文字幕 | 久久久国产精品 | 亚洲aⅴ| 一区二区免费视频 | 久久精品国产亚洲一区二区三区 | 欧美在线日韩 | 91原创视频在线观看 | 国产69久久精品成人看动漫 | 午夜av影院| 日韩av在线一区二区 | 精品中文字幕一区二区 | 精品久久久久国产 | 国产日韩欧美在线观看 | 国产精品久久久久久久久免费相片 | 国产精品成人一区二区三区 | 精品久久久久久久人人人人传媒 | 亚洲自拍一区在线观看 |