此電機驅(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
返回:無
- #ifndef __MOTOR_H
- #define __MOTOR_H
- #include "sys.h"
- #define NPNSENSOR 0 //NPN型信號
- #define PNPSENSOR 1 //PNP型信號
- typedef enum
- {
- Uniform_Model = 0, //勻速模式
- T_Model, //梯形加減速模式
- S_Model //S型加減速模式
- }MotorModel;
- typedef struct
- {
- float MaxPosi; //行程上限
- float CycleRange; //電機運轉(zhuǎn)一圈的距離或者度數(shù) 絲桿導程
- u32 MotorPluse; //驅(qū)動器撥碼
- u8 OrgPolar; //電機原點信號極性
- u8 ElPolar; //電機極限信號極性
- u8 DirSwitch; //電機方向切換
- uint32_t *StepPin; //電機脈沖引腳
- uint32_t *DirPin; //電機方向引腳
- uint32_t *OrgPin; //電機原點引腳
- uint32_t *ElPPin; //電機正極限引腳
- uint32_t *ElNPin; //電機負極限引腳
- }MotorParaStruct;
- /*******************************************************************************
- * 函數(shù)名 :MotorGpioInit
- * 描述 :電機GPIO口初始化 只需構(gòu)造 驅(qū)動會自行調(diào)用
- * 參數(shù) :無
- * 返回 :無
- *******************************************************************************/
- void MotorGpioInit(void);
- /*******************************************************************************
- * 函數(shù)名 :MotorTimerPro
- * 描述 :電機定時器開啟/關(guān)閉 頻率切換 只需構(gòu)造 驅(qū)動會自行調(diào)用
- * 參數(shù) :timerEnable:定時器開啟/關(guān)閉 freq:切換的頻率
- * 返回 :無
- *******************************************************************************/
- void MotorTimerPro(u8 timerEnable,u32 freq);
- /*******************************************************************************
- * 函數(shù)名 :MotorInit
- * 描述 :電機相關(guān)參數(shù)初始化
- * 參數(shù) :motorNum:軸數(shù) dirReset:電機方向信號復(fù)位電平
- * 參數(shù) :stepReset:電機脈沖信號復(fù)位電平
- * 返回 :無
- *******************************************************************************/
- void MotorInit(u8 motorNum,u8 dirReset,u8 stepReset);
- /*******************************************************************************
- * 函數(shù)名 :AxisParaLoad
- * 描述 :電機相關(guān)參數(shù)加載
- * 參數(shù) :index:軸號 mStruct 電機參數(shù)結(jié)構(gòu)體
- * 返回 :無
- *******************************************************************************/
- void AxisParaLoad(u8 index,MotorParaStruct mStruct);
- /*******************************************************************************
- * 函數(shù)名 :MotorMoveHome
- * 描述 :電機回原點處理
- * 參數(shù) :index:軸號 mModel電機運行模式 0 無加減速 1 梯形加減速 2 S型加減速
- * 參數(shù) :accT:加速時間(ms) decT:減速時間(ms) speedH:高速速度 speedL:低速速度
- * 參數(shù) :homeMode: 0 一次回零 即電機反向運動,碰到原點立即停止,適合短距離回零
- * 參數(shù) :homeMode: 1 一次回零加反找 電機向原點運動感應(yīng)到原點后減速停止
- * 參數(shù) :然后再正向找到未感應(yīng)到原點位置結(jié)束
- * 參數(shù) :homeMode: 2 兩次回零
- * 參數(shù) :homeDir: 0 負方向回零 1 正方向回零
- * 返回 :0電機還在復(fù)位 1電機復(fù)位完成 2碰到正限位停止 3碰到負限位停止
- *******************************************************************************/
- u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,float speedH,float speedL,u8 homeMode,u8 homeDir);
- /*******************************************************************************
- * 函數(shù)名 :MotorMoveToPosi
- * 描述 :電機運動到指定點位
- * 參數(shù) :index:軸號 mModel電機運行模式 0 無加減速 1 梯形加減速 2 S型加減速
- * 參數(shù) :accT:加速時間(ms) decT:減速時間(ms) runS:運行速度 distance:目標位置
- *******************************************************************************/
- u8 MotorMoveToPosi(u8 index,MotorModel mModel,u16 accT,u16 decT,float runS,float distance);
- /*******************************************************************************
- * 函數(shù)名 :MotorCheckDone
- * 描述 :電機運動完成結(jié)果檢測
- * 參數(shù) :index:軸號
- * 返回 :0電機還在運動中,1為運動結(jié)束
- *******************************************************************************/
- u8 MotorCheckDone(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorStop
- * 描述 :電機運動停止
- * 參數(shù) :index:軸號
- * 返回 :無
- *******************************************************************************/
- void MotorStop(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorPlusePro
- * 描述 :電機脈沖控制 定時器中斷需要調(diào)用
- * 參數(shù) :無
- * 返回 :無
- *******************************************************************************/
- void MotorPlusePro(void);
- /*******************************************************************************
- * 函數(shù)名 :MotorGetPosi
- * 描述 :獲取電機當前位置
- * 參數(shù) :index:軸號
- * 返回 :無
- *******************************************************************************/
- float MotorGetPosi(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorSetPosi
- * 描述 :設(shè)置電機位置
- * 參數(shù) :index:軸號
- * 返回 :0未設(shè)定成功 1設(shè)定成功
- *******************************************************************************/
- u8 MotorSetPosi(u8 index,float posi);
- #endif
復(fù)制代碼
沒有源碼 只提供.LIB和點.文件:
Motor.zip
(81.47 KB, 下載次數(shù): 52)
2021-8-23 15:51 上傳
點擊文件名下載附件
|