|
此電機(jī)驅(qū)動(dòng)函數(shù),只需開一個(gè)定時(shí)器,即可控制最大9路電機(jī),已在項(xiàng)目中多次驗(yàn)證OK。只需在自己工程中添加點(diǎn)LIB和點(diǎn)H文件,按下面功能描述驅(qū)動(dòng)即可。
一、電機(jī)驅(qū)動(dòng)函數(shù)定義
1. 電機(jī)相關(guān)參數(shù)初始化
函數(shù)名:void MotorInit(u8 motorNum,u8dirReset,u8 stepReset)
參數(shù):motorNum:控制板需控制電機(jī)總個(gè)數(shù)最大為10軸;dirReset:電機(jī)方向信號(hào)復(fù)位電平,即電機(jī)停止運(yùn)行時(shí)方向腳電平,可設(shè)置NPNSensor或PNPSensor;stepReset:電機(jī)脈沖信號(hào)復(fù)位電平,即電機(jī)停止運(yùn)行時(shí)脈沖腳電平,可設(shè)置NPNSensor或PNPSensor;
返回:無
2. 電機(jī)相關(guān)參數(shù)加載
函數(shù)名 :void AxisParaLoad(u8 index,MotorParaStruct mStruct)
參數(shù):index:軸號(hào) 0至9;mStruct:電機(jī)參數(shù)結(jié)構(gòu)體,包含驅(qū)動(dòng)器撥碼、絲杠導(dǎo)程、原點(diǎn)及極限極性、原點(diǎn)與極性引腳、最大軟限位
返回:無
3. 電機(jī)運(yùn)動(dòng)到指定點(diǎn)位
函數(shù)名:u8 MotorMoveToPosi(u8 index,MotorModelmModel,u16 accT,u16 decT,float runS,float distance)
參數(shù):index:軸號(hào) 0至9;mModel:電機(jī)運(yùn)行模式,Uniform_Model勻速運(yùn)行、T_Model 梯形加減速、S_Model S型加減速;accT:加速時(shí)間(ms) 至針點(diǎn)梯形加減速有效,如100為100ms,為0時(shí)切換為勻速運(yùn)動(dòng);decT:減速時(shí)間(ms) 至針點(diǎn)梯形加減速有效,如100為100ms,為0時(shí)切換為勻速運(yùn)動(dòng);runS:運(yùn)行速度,加減速完成后的速度;distance:目標(biāo)位置,需運(yùn)動(dòng)到的點(diǎn)位
返回:0:運(yùn)動(dòng)中 1:正常運(yùn)動(dòng)結(jié)束 2:碰到正限位運(yùn)動(dòng)結(jié)束 3:碰到負(fù)限位運(yùn)動(dòng)結(jié)束
4. 電機(jī)回原點(diǎn)處理
函數(shù)名 :u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,floatspeedH,float speedL,u8 homeMode,u8 homeDir)
參數(shù):index:軸號(hào) 0至9;mModel:電機(jī)運(yùn)行模式,Uniform_Model勻速運(yùn)行、T_Model 梯形加減速、S_Model S型加減速;accT:加速時(shí)間(ms) 至針點(diǎn)梯形加減速有效,如100為100ms,為0時(shí)切換為勻速運(yùn)動(dòng);decT:減速時(shí)間(ms) 至針點(diǎn)梯形加減速有效,如100為100ms,為0時(shí)切換為勻速運(yùn)動(dòng);speedH:回零高速速度,加減速完成后的速度;speedL:回零低速速度,加減速完成后的速度;distance:目標(biāo)位置,需運(yùn)動(dòng)到的點(diǎn)位;homeMode:回零方式,0為一次回零,即電機(jī)碰到原點(diǎn)立即停止;1為一次回零加反找,電機(jī)向原點(diǎn)運(yùn)動(dòng)感應(yīng)到原點(diǎn)減速停止,然后再反向找原點(diǎn),直到未感應(yīng)到原點(diǎn)停止停止;2為兩次回零,在一次回零加反找未感應(yīng)到原點(diǎn)后減速停止,然后再找原點(diǎn)立即停止;homeDir:回零方向,0為往負(fù)方向回零,1為往正方向回零
返回:0:運(yùn)動(dòng)中 1:正常運(yùn)動(dòng)結(jié)束 2:碰到正限位運(yùn)動(dòng)結(jié)束 3:碰到負(fù)限位運(yùn)動(dòng)結(jié)束
5. 獲取電機(jī)當(dāng)前位置
函數(shù)名:double MotorGetPosi(u8 index)
參數(shù):index:軸號(hào) 0至9;
返回:該軸電機(jī)當(dāng)前位置
6. 設(shè)置電機(jī)當(dāng)前位置
函數(shù)名:u8 MotorSetPosi(u8 index,int posi)
參數(shù):index:軸號(hào) 0至9;posi:待設(shè)定的位置
返回:0:設(shè)置失敗 1:設(shè)置成功
7. 電機(jī)運(yùn)動(dòng)完成結(jié)果檢測
函數(shù)名:u8 MotorCheckDone(u8 index)
參數(shù):index:軸號(hào) 0至9
返回:0為電機(jī)還在運(yùn)動(dòng)中,1為運(yùn)動(dòng)結(jié)束
8. 電機(jī)運(yùn)動(dòng)停止
函數(shù)名:void MotorStop(u8 index)
參數(shù):index:軸號(hào) 0至9
返回:無
- #ifndef __MOTOR_H
- #define __MOTOR_H
- #include "sys.h"
- #define NPNSENSOR 0 //NPN型信號(hào)
- #define PNPSENSOR 1 //PNP型信號(hào)
- typedef enum
- {
- Uniform_Model = 0, //勻速模式
- T_Model, //梯形加減速模式
- S_Model //S型加減速模式
- }MotorModel;
- typedef struct
- {
- float MaxPosi; //行程上限
- float CycleRange; //電機(jī)運(yùn)轉(zhuǎn)一圈的距離或者度數(shù) 絲桿導(dǎo)程
- u32 MotorPluse; //驅(qū)動(dòng)器撥碼
- u8 OrgPolar; //電機(jī)原點(diǎn)信號(hào)極性
- u8 ElPolar; //電機(jī)極限信號(hào)極性
- u8 DirSwitch; //電機(jī)方向切換
- uint32_t *StepPin; //電機(jī)脈沖引腳
- uint32_t *DirPin; //電機(jī)方向引腳
- uint32_t *OrgPin; //電機(jī)原點(diǎn)引腳
- uint32_t *ElPPin; //電機(jī)正極限引腳
- uint32_t *ElNPin; //電機(jī)負(fù)極限引腳
- }MotorParaStruct;
- /*******************************************************************************
- * 函數(shù)名 :MotorGpioInit
- * 描述 :電機(jī)GPIO口初始化 只需構(gòu)造 驅(qū)動(dòng)會(huì)自行調(diào)用
- * 參數(shù) :無
- * 返回 :無
- *******************************************************************************/
- void MotorGpioInit(void);
- /*******************************************************************************
- * 函數(shù)名 :MotorTimerPro
- * 描述 :電機(jī)定時(shí)器開啟/關(guān)閉 頻率切換 只需構(gòu)造 驅(qū)動(dòng)會(huì)自行調(diào)用
- * 參數(shù) :timerEnable:定時(shí)器開啟/關(guān)閉 freq:切換的頻率
- * 返回 :無
- *******************************************************************************/
- void MotorTimerPro(u8 timerEnable,u32 freq);
- /*******************************************************************************
- * 函數(shù)名 :MotorInit
- * 描述 :電機(jī)相關(guān)參數(shù)初始化
- * 參數(shù) :motorNum:軸數(shù) dirReset:電機(jī)方向信號(hào)復(fù)位電平
- * 參數(shù) :stepReset:電機(jī)脈沖信號(hào)復(fù)位電平
- * 返回 :無
- *******************************************************************************/
- void MotorInit(u8 motorNum,u8 dirReset,u8 stepReset);
- /*******************************************************************************
- * 函數(shù)名 :AxisParaLoad
- * 描述 :電機(jī)相關(guān)參數(shù)加載
- * 參數(shù) :index:軸號(hào) mStruct 電機(jī)參數(shù)結(jié)構(gòu)體
- * 返回 :無
- *******************************************************************************/
- void AxisParaLoad(u8 index,MotorParaStruct mStruct);
- /*******************************************************************************
- * 函數(shù)名 :MotorMoveHome
- * 描述 :電機(jī)回原點(diǎn)處理
- * 參數(shù) :index:軸號(hào) mModel電機(jī)運(yùn)行模式 0 無加減速 1 梯形加減速 2 S型加減速
- * 參數(shù) :accT:加速時(shí)間(ms) decT:減速時(shí)間(ms) speedH:高速速度 speedL:低速速度
- * 參數(shù) :homeMode: 0 一次回零 即電機(jī)反向運(yùn)動(dòng),碰到原點(diǎn)立即停止,適合短距離回零
- * 參數(shù) :homeMode: 1 一次回零加反找 電機(jī)向原點(diǎn)運(yùn)動(dòng)感應(yīng)到原點(diǎn)后減速停止
- * 參數(shù) :然后再正向找到未感應(yīng)到原點(diǎn)位置結(jié)束
- * 參數(shù) :homeMode: 2 兩次回零
- * 參數(shù) :homeDir: 0 負(fù)方向回零 1 正方向回零
- * 返回 :0電機(jī)還在復(fù)位 1電機(jī)復(fù)位完成 2碰到正限位停止 3碰到負(fù)限位停止
- *******************************************************************************/
- u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,float speedH,float speedL,u8 homeMode,u8 homeDir);
- /*******************************************************************************
- * 函數(shù)名 :MotorMoveToPosi
- * 描述 :電機(jī)運(yùn)動(dòng)到指定點(diǎn)位
- * 參數(shù) :index:軸號(hào) mModel電機(jī)運(yùn)行模式 0 無加減速 1 梯形加減速 2 S型加減速
- * 參數(shù) :accT:加速時(shí)間(ms) decT:減速時(shí)間(ms) runS:運(yùn)行速度 distance:目標(biāo)位置
- *******************************************************************************/
- u8 MotorMoveToPosi(u8 index,MotorModel mModel,u16 accT,u16 decT,float runS,float distance);
- /*******************************************************************************
- * 函數(shù)名 :MotorCheckDone
- * 描述 :電機(jī)運(yùn)動(dòng)完成結(jié)果檢測
- * 參數(shù) :index:軸號(hào)
- * 返回 :0電機(jī)還在運(yùn)動(dòng)中,1為運(yùn)動(dòng)結(jié)束
- *******************************************************************************/
- u8 MotorCheckDone(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorStop
- * 描述 :電機(jī)運(yùn)動(dòng)停止
- * 參數(shù) :index:軸號(hào)
- * 返回 :無
- *******************************************************************************/
- void MotorStop(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorPlusePro
- * 描述 :電機(jī)脈沖控制 定時(shí)器中斷需要調(diào)用
- * 參數(shù) :無
- * 返回 :無
- *******************************************************************************/
- void MotorPlusePro(void);
- /*******************************************************************************
- * 函數(shù)名 :MotorGetPosi
- * 描述 :獲取電機(jī)當(dāng)前位置
- * 參數(shù) :index:軸號(hào)
- * 返回 :無
- *******************************************************************************/
- float MotorGetPosi(u8 index);
- /*******************************************************************************
- * 函數(shù)名 :MotorSetPosi
- * 描述 :設(shè)置電機(jī)位置
- * 參數(shù) :index:軸號(hào)
- * 返回 :0未設(shè)定成功 1設(shè)定成功
- *******************************************************************************/
- u8 MotorSetPosi(u8 index,float posi);
- #endif
復(fù)制代碼
沒有源碼 只提供.LIB和點(diǎn).文件:
Motor.zip
(81.47 KB, 下載次數(shù): 52)
2021-8-23 15:51 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|