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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3900|回復(fù): 9
收起左側(cè)

STM32步進、伺服電機驅(qū)動 不開源 只提供.LIB和.H文件

  [復(fù)制鏈接]
ID:487396 發(fā)表于 2021-8-23 15:53 | 顯示全部樓層 |閱讀模式
此電機驅(qū)動函數(shù),只需開一個定時器,即可控制最大9路電機,已在項目中多次驗證OK。只需在自己工程中添加點LIB和點H文件,按下面功能描述驅(qū)動即可。

一、電機驅(qū)動函數(shù)定義
1. 電機相關(guān)參數(shù)初始化
函數(shù)名:void MotorInit(u8 motorNum,u8dirReset,u8 stepReset)
參數(shù):motorNum:控制板需控制電機總個數(shù)最大為10軸;dirReset:電機方向信號復(fù)位電平,即電機停止運行時方向腳電平,可設(shè)置NPNSensor或PNPSensor;stepReset:電機脈沖信號復(fù)位電平,即電機停止運行時脈沖腳電平,可設(shè)置NPNSensor或PNPSensor;
返回:無

2. 電機相關(guān)參數(shù)加載
函數(shù)名    :void AxisParaLoad(u8 index,MotorParaStruct mStruct)
參數(shù):index:軸號 0至9;mStruct:電機參數(shù)結(jié)構(gòu)體,包含驅(qū)動器撥碼、絲杠導程、原點及極限極性、原點與極性引腳、最大軟限位
返回:無

3. 電機運動到指定點位
函數(shù)名:u8 MotorMoveToPosi(u8 index,MotorModelmModel,u16 accT,u16 decT,float runS,float distance)
參數(shù):index:軸號 0至9;mModel:電機運行模式,Uniform_Model勻速運行、T_Model 梯形加減速、S_Model  S型加減速;accT:加速時間(ms) 至針點梯形加減速有效,如100為100ms,為0時切換為勻速運動;decT:減速時間(ms) 至針點梯形加減速有效,如100為100ms,為0時切換為勻速運動;runS:運行速度,加減速完成后的速度;distance:目標位置,需運動到的點位
返回:0:運動中  1:正常運動結(jié)束 2:碰到正限位運動結(jié)束  3:碰到負限位運動結(jié)束

4. 電機回原點處理
函數(shù)名    :u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,floatspeedH,float speedL,u8 homeMode,u8 homeDir)
參數(shù):index:軸號 0至9;mModel:電機運行模式,Uniform_Model勻速運行、T_Model 梯形加減速、S_Model  S型加減速;accT:加速時間(ms) 至針點梯形加減速有效,如100為100ms,為0時切換為勻速運動;decT:減速時間(ms) 至針點梯形加減速有效,如100為100ms,為0時切換為勻速運動;speedH:回零高速速度,加減速完成后的速度;speedL:回零低速速度,加減速完成后的速度;distance:目標位置,需運動到的點位;homeMode:回零方式,0為一次回零,即電機碰到原點立即停止;1為一次回零加反找,電機向原點運動感應(yīng)到原點減速停止,然后再反向找原點,直到未感應(yīng)到原點停止停止;2為兩次回零,在一次回零加反找未感應(yīng)到原點后減速停止,然后再找原點立即停止;homeDir:回零方向,0為往負方向回零,1為往正方向回零
返回:0:運動中  1:正常運動結(jié)束 2:碰到正限位運動結(jié)束  3:碰到負限位運動結(jié)束

5. 獲取電機當前位置
函數(shù)名:double MotorGetPosi(u8 index)
參數(shù):index:軸號 0至9;
返回:該軸電機當前位置

6. 設(shè)置電機當前位置
函數(shù)名:u8 MotorSetPosi(u8 index,int posi)
參數(shù):index:軸號 0至9;posi:待設(shè)定的位置
返回:0:設(shè)置失敗  1:設(shè)置成功

7. 電機運動完成結(jié)果檢測
函數(shù)名:u8 MotorCheckDone(u8 index)
參數(shù):index:軸號 0至9
返回:0為電機還在運動中,1為運動結(jié)束

8. 電機運動停止
函數(shù)名:void MotorStop(u8 index)
參數(shù):index:軸號 0至9
返回:無

  1. #ifndef __MOTOR_H
  2. #define __MOTOR_H
  3. #include "sys.h"

  4. #define NPNSENSOR       0          //NPN型信號
  5. #define PNPSENSOR       1                //PNP型信號

  6. typedef enum
  7. {
  8.         Uniform_Model = 0,                                //勻速模式
  9.         T_Model,                                                      //梯形加減速模式
  10.         S_Model                                                                                //S型加減速模式
  11. }MotorModel;

  12. typedef struct
  13. {
  14.         float MaxPosi;                                                //行程上限
  15.         float CycleRange;                                        //電機運轉(zhuǎn)一圈的距離或者度數(shù) 絲桿導程
  16.         u32 MotorPluse;                                                //驅(qū)動器撥碼
  17.         u8 OrgPolar;                                                        //電機原點信號極性
  18.         u8 ElPolar;                                                                //電機極限信號極性
  19.         u8 DirSwitch;             //電機方向切換
  20.         uint32_t *StepPin;                                //電機脈沖引腳
  21.         uint32_t *DirPin;         //電機方向引腳
  22.         uint32_t *OrgPin;         //電機原點引腳
  23.         uint32_t *ElPPin;                                        //電機正極限引腳
  24.         uint32_t *ElNPin;                                        //電機負極限引腳
  25. }MotorParaStruct;

  26. /*******************************************************************************
  27. * 函數(shù)名                :MotorGpioInit
  28. * 描述                        :電機GPIO口初始化  只需構(gòu)造 驅(qū)動會自行調(diào)用
  29. * 參數(shù)                        :無
  30. * 返回                        :無
  31. *******************************************************************************/
  32. void MotorGpioInit(void);        
  33. /*******************************************************************************
  34. * 函數(shù)名                :MotorTimerPro
  35. * 描述                        :電機定時器開啟/關(guān)閉 頻率切換   只需構(gòu)造 驅(qū)動會自行調(diào)用
  36. * 參數(shù)                        :timerEnable:定時器開啟/關(guān)閉 freq:切換的頻率
  37. * 返回                        :無
  38. *******************************************************************************/
  39. void MotorTimerPro(u8 timerEnable,u32 freq);

  40. /*******************************************************************************
  41. * 函數(shù)名                :MotorInit
  42. * 描述                        :電機相關(guān)參數(shù)初始化
  43. * 參數(shù)                        :motorNum:軸數(shù)  dirReset:電機方向信號復(fù)位電平
  44. * 參數(shù)                        :stepReset:電機脈沖信號復(fù)位電平
  45. * 返回                        :無
  46. *******************************************************************************/
  47. void MotorInit(u8 motorNum,u8 dirReset,u8 stepReset);        
  48. /*******************************************************************************
  49. * 函數(shù)名                :AxisParaLoad
  50. * 描述                        :電機相關(guān)參數(shù)加載
  51. * 參數(shù)                        :index:軸號  mStruct 電機參數(shù)結(jié)構(gòu)體
  52. * 返回                        :無
  53. *******************************************************************************/
  54. void AxisParaLoad(u8 index,MotorParaStruct mStruct);        
  55. /*******************************************************************************
  56. * 函數(shù)名                :MotorMoveHome
  57. * 描述                        :電機回原點處理
  58. * 參數(shù)                        :index:軸號  mModel電機運行模式 0 無加減速 1 梯形加減速 2 S型加減速
  59. * 參數(shù)                        :accT:加速時間(ms) decT:減速時間(ms) speedH:高速速度  speedL:低速速度
  60. * 參數(shù)                        :homeMode: 0 一次回零 即電機反向運動,碰到原點立即停止,適合短距離回零
  61. * 參數(shù)                        :homeMode: 1 一次回零加反找 電機向原點運動感應(yīng)到原點后減速停止
  62. * 參數(shù)                        :然后再正向找到未感應(yīng)到原點位置結(jié)束
  63. * 參數(shù)                        :homeMode: 2 兩次回零
  64. * 參數(shù)                        :homeDir: 0 負方向回零  1 正方向回零
  65. * 返回                        :0電機還在復(fù)位 1電機復(fù)位完成 2碰到正限位停止 3碰到負限位停止
  66. *******************************************************************************/
  67. u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,float speedH,float speedL,u8 homeMode,u8 homeDir);
  68. /*******************************************************************************
  69. * 函數(shù)名                :MotorMoveToPosi
  70. * 描述                        :電機運動到指定點位
  71. * 參數(shù)                        :index:軸號  mModel電機運行模式 0 無加減速 1 梯形加減速 2 S型加減速
  72. * 參數(shù)                        :accT:加速時間(ms) decT:減速時間(ms) runS:運行速度  distance:目標位置
  73. *******************************************************************************/
  74. u8 MotorMoveToPosi(u8 index,MotorModel mModel,u16 accT,u16 decT,float runS,float distance);
  75. /*******************************************************************************
  76. * 函數(shù)名                :MotorCheckDone
  77. * 描述                        :電機運動完成結(jié)果檢測
  78. * 參數(shù)                        :index:軸號
  79. * 返回                        :0電機還在運動中,1為運動結(jié)束
  80. *******************************************************************************/
  81. u8 MotorCheckDone(u8 index);
  82. /*******************************************************************************
  83. * 函數(shù)名                :MotorStop
  84. * 描述                        :電機運動停止
  85. * 參數(shù)                        :index:軸號
  86. * 返回                        :無
  87. *******************************************************************************/
  88. void MotorStop(u8 index);                                                         
  89. /*******************************************************************************
  90. * 函數(shù)名                :MotorPlusePro
  91. * 描述                        :電機脈沖控制   定時器中斷需要調(diào)用
  92. * 參數(shù)                        :無
  93. * 返回                        :無
  94. *******************************************************************************/
  95. void MotorPlusePro(void);                                                               
  96. /*******************************************************************************
  97. * 函數(shù)名                :MotorGetPosi
  98. * 描述                        :獲取電機當前位置
  99. * 參數(shù)                        :index:軸號
  100. * 返回                        :無
  101. *******************************************************************************/
  102. float MotorGetPosi(u8 index);                          
  103. /*******************************************************************************
  104. * 函數(shù)名                :MotorSetPosi
  105. * 描述                        :設(shè)置電機位置
  106. * 參數(shù)                        :index:軸號
  107. * 返回                        :0未設(shè)定成功 1設(shè)定成功
  108. *******************************************************************************/
  109. u8 MotorSetPosi(u8 index,float posi);
  110. #endif
復(fù)制代碼

沒有源碼 只提供.LIB和點.文件: Motor.zip (81.47 KB, 下載次數(shù): 52)
回復(fù)

使用道具 舉報

ID:487396 發(fā)表于 2021-8-23 15:55 | 顯示全部樓層
項目中使用的是STM32F103VET6,GD32F103VCT6
回復(fù)

使用道具 舉報

ID:319585 發(fā)表于 2021-8-23 19:24 來自手機 | 顯示全部樓層
有個楊工開源的步進電機的項目,全部開源的,如果有興趣的可以考慮下載看看。不過樓主這個雖然沒有開源,但感覺功能還是很強大了,不錯,這也是分享,挺好。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:584195 發(fā)表于 2021-8-24 22:58 | 顯示全部樓層
留個標簽,希望以后能用得著。
回復(fù)

使用道具 舉報

ID:487396 發(fā)表于 2021-9-1 23:14 | 顯示全部樓層
liesnake 發(fā)表于 2021-8-23 19:24
有個楊工開源的步進電機的項目,全部開源的,如果有興趣的可以考慮下載看看。不過樓主這個雖然沒有開源,但 ...

好的,哪個楊工,可以給一下他主頁,直接去看帖子嗎
回復(fù)

使用道具 舉報

ID:602498 發(fā)表于 2021-9-8 17:22 | 顯示全部樓層
用原子的模板程序調(diào)用提示 L6218E: Undefined symbol MotorTimerPro (referred from main.o).
                                       Not enough information to list image symbols.
回復(fù)

使用道具 舉報

ID:487396 發(fā)表于 2022-3-15 19:34 | 顯示全部樓層
171821203 發(fā)表于 2021-9-8 17:22
用原子的模板程序調(diào)用提示 L6218E: Undefined symbol MotorTimerPro (referred from main.o).
            ...

main里面調(diào)用MotorTimePro,但你沒有定義,把我給的文檔看仔細。就懂其中的奧妙了
回復(fù)

使用道具 舉報

ID:137243 發(fā)表于 2022-7-16 18:34 | 顯示全部樓層
wzlxhtzy 發(fā)表于 2022-3-15 19:34
main里面調(diào)用MotorTimePro,但你沒有定義,把我給的文檔看仔細。就懂其中的奧妙了

那這個定時器怎么定義呢,需要中斷嗎?
void MotorTimerPro(u8 timerEnable,u32 freq)
{
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
       
        TIM_TimeBaseStructure.TIM_Period = 72-1;
        TIM_TimeBaseStructure.TIM_Prescaler =1;
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );

        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);  
       
  TIM_Cmd(TIM3, timerEnable);                
}
回復(fù)

使用道具 舉報

ID:25103 發(fā)表于 2022-9-2 18:24 | 顯示全部樓層
樓主,控制伺服最高頻率是多少?
回復(fù)

使用道具 舉報

ID:970790 發(fā)表于 2022-9-3 12:34 | 顯示全部樓層
wzlxhtzy 發(fā)表于 2021-9-1 23:14
好的,哪個楊工,可以給一下他主頁,直接去看帖子嗎

你去某1個寶搜  楊工的小店
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91精品中文字幕一区二区三区 | 国产成人精品免费 | 国产成人免费视频 | 日日噜噜噜夜夜爽爽狠狠视频, | 国产视频日韩 | 久久国产免费 | 国产视频三级 | 欧美一级二级三级 | 一区二区三区在线免费 | 亚洲九九精品 | 天天看天天操 | 日韩视频在线播放 | 久久久久久免费免费 | 蜜桃精品视频在线 | 成人免费在线 | 日韩av在线一区 | 国产高清无av久久 | 亚洲一区二区在线视频 | www.夜夜草| 国产综合精品 | 久久中文字幕一区 | 三级成人片 | 成人av播放| 国产精品国产三级国产a | 欧美黄 片免费观看 | 久久免费小视频 | 91精品国产综合久久精品 | 天堂av中文在线 | 久久久久久久av | 亚洲精品在线免费 | 成人不卡 | 欧洲成人午夜免费大片 | 亚洲国产精品区 | 欧美天堂 | 美女在线观看av | 天天爽网站 | 欧美亚洲网站 | 久久99精品久久久久久 | 久久久91精品国产一区二区三区 | 99久久久无码国产精品 | 一区二区三区av |