此电机驱动函数,只需开一个定时器,即可控制最大9路电机,已在项目中多次验证OK。只需在自己工程中添加点LIB和点H文件,按下面功能描述驱动即可。
一、电机驱动函数定义
1. 电机相关参数初始化
函数名:void MotorInit(u8 motorNum,u8dirReset,u8 stepReset)
参数:motorNum:控制板需控制电机总个数最大为10轴;dirReset:电机方向信号复位电平,即电机停止运行时方向脚电平,可设置NPNSensor或PNPSensor;stepReset:电机脉冲信号复位电平,即电机停止运行时脉冲脚电平,可设置NPNSensor或PNPSensor;
返回:无
2. 电机相关参数加载
函数名 :void AxisParaLoad(u8 index,MotorParaStruct mStruct)
参数:index:轴号 0至9;mStruct:电机参数结构体,包含驱动器拨码、丝杠导程、原点及极限极性、原点与极性引脚、最大软限位
返回:无
3. 电机运动到指定点位
函数名:u8 MotorMoveToPosi(u8 index,MotorModelmModel,u16 accT,u16 decT,float runS,float distance)
参数: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:正常运动结束 2:碰到正限位运动结束 3:碰到负限位运动结束
4. 电机回原点处理
函数名 :u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,floatspeedH,float speedL,u8 homeMode,u8 homeDir)
参数: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为一次回零加反找,电机向原点运动感应到原点减速停止,然后再反向找原点,直到未感应到原点停止停止;2为两次回零,在一次回零加反找未感应到原点后减速停止,然后再找原点立即停止;homeDir:回零方向,0为往负方向回零,1为往正方向回零
返回:0:运动中 1:正常运动结束 2:碰到正限位运动结束 3:碰到负限位运动结束
5. 获取电机当前位置
函数名:double MotorGetPosi(u8 index)
参数:index:轴号 0至9;
返回:该轴电机当前位置
6. 设置电机当前位置
函数名:u8 MotorSetPosi(u8 index,int posi)
参数:index:轴号 0至9;posi:待设定的位置
返回:0:设置失败 1:设置成功
7. 电机运动完成结果检测
函数名:u8 MotorCheckDone(u8 index)
参数:index:轴号 0至9
返回:0为电机还在运动中,1为运动结束
8. 电机运动停止
函数名:void MotorStop(u8 index)
参数: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; //电机运转一圈的距离或者度数 丝杆导程
- u32 MotorPluse; //驱动器拨码
- u8 OrgPolar; //电机原点信号极性
- u8 ElPolar; //电机极限信号极性
- u8 DirSwitch; //电机方向切换
- uint32_t *StepPin; //电机脉冲引脚
- uint32_t *DirPin; //电机方向引脚
- uint32_t *OrgPin; //电机原点引脚
- uint32_t *ElPPin; //电机正极限引脚
- uint32_t *ElNPin; //电机负极限引脚
- }MotorParaStruct;
- /*******************************************************************************
- * 函数名 :MotorGpioInit
- * 描述 :电机GPIO口初始化 只需构造 驱动会自行调用
- * 参数 :无
- * 返回 :无
- *******************************************************************************/
- void MotorGpioInit(void);
- /*******************************************************************************
- * 函数名 :MotorTimerPro
- * 描述 :电机定时器开启/关闭 频率切换 只需构造 驱动会自行调用
- * 参数 :timerEnable:定时器开启/关闭 freq:切换的频率
- * 返回 :无
- *******************************************************************************/
- void MotorTimerPro(u8 timerEnable,u32 freq);
- /*******************************************************************************
- * 函数名 :MotorInit
- * 描述 :电机相关参数初始化
- * 参数 :motorNum:轴数 dirReset:电机方向信号复位电平
- * 参数 :stepReset:电机脉冲信号复位电平
- * 返回 :无
- *******************************************************************************/
- void MotorInit(u8 motorNum,u8 dirReset,u8 stepReset);
- /*******************************************************************************
- * 函数名 :AxisParaLoad
- * 描述 :电机相关参数加载
- * 参数 :index:轴号 mStruct 电机参数结构体
- * 返回 :无
- *******************************************************************************/
- void AxisParaLoad(u8 index,MotorParaStruct mStruct);
- /*******************************************************************************
- * 函数名 :MotorMoveHome
- * 描述 :电机回原点处理
- * 参数 :index:轴号 mModel电机运行模式 0 无加减速 1 梯形加减速 2 S型加减速
- * 参数 :accT:加速时间(ms) decT:减速时间(ms) speedH:高速速度 speedL:低速速度
- * 参数 :homeMode: 0 一次回零 即电机反向运动,碰到原点立即停止,适合短距离回零
- * 参数 :homeMode: 1 一次回零加反找 电机向原点运动感应到原点后减速停止
- * 参数 :然后再正向找到未感应到原点位置结束
- * 参数 :homeMode: 2 两次回零
- * 参数 :homeDir: 0 负方向回零 1 正方向回零
- * 返回 :0电机还在复位 1电机复位完成 2碰到正限位停止 3碰到负限位停止
- *******************************************************************************/
- u8 MotorMoveHome(u8 index,MotorModel mModel,u16 accT,u16 decT,float speedH,float speedL,u8 homeMode,u8 homeDir);
- /*******************************************************************************
- * 函数名 :MotorMoveToPosi
- * 描述 :电机运动到指定点位
- * 参数 :index:轴号 mModel电机运行模式 0 无加减速 1 梯形加减速 2 S型加减速
- * 参数 :accT:加速时间(ms) decT:减速时间(ms) runS:运行速度 distance:目标位置
- *******************************************************************************/
- u8 MotorMoveToPosi(u8 index,MotorModel mModel,u16 accT,u16 decT,float runS,float distance);
- /*******************************************************************************
- * 函数名 :MotorCheckDone
- * 描述 :电机运动完成结果检测
- * 参数 :index:轴号
- * 返回 :0电机还在运动中,1为运动结束
- *******************************************************************************/
- u8 MotorCheckDone(u8 index);
- /*******************************************************************************
- * 函数名 :MotorStop
- * 描述 :电机运动停止
- * 参数 :index:轴号
- * 返回 :无
- *******************************************************************************/
- void MotorStop(u8 index);
- /*******************************************************************************
- * 函数名 :MotorPlusePro
- * 描述 :电机脉冲控制 定时器中断需要调用
- * 参数 :无
- * 返回 :无
- *******************************************************************************/
- void MotorPlusePro(void);
- /*******************************************************************************
- * 函数名 :MotorGetPosi
- * 描述 :获取电机当前位置
- * 参数 :index:轴号
- * 返回 :无
- *******************************************************************************/
- float MotorGetPosi(u8 index);
- /*******************************************************************************
- * 函数名 :MotorSetPosi
- * 描述 :设置电机位置
- * 参数 :index:轴号
- * 返回 :0未设定成功 1设定成功
- *******************************************************************************/
- u8 MotorSetPosi(u8 index,float posi);
- #endif
复制代码
没有源码 只提供.LIB和点.文件:
Motor.zip
(81.47 KB, 下载次数: 52)
|