141 lines
3.9 KiB
C
141 lines
3.9 KiB
C
|
|
//-------------------------------------------------------------------------------
|
|
// 最多实现软件控制6路电机异步运动
|
|
//-------------------------------------------------------------------------------
|
|
|
|
#ifndef __STM32MOTOS_H__
|
|
#define __STM32MOTOS_H__
|
|
|
|
#include "config.h"
|
|
|
|
//-------------------------------------------------------------------------------
|
|
// 最多实现软件控制6路电机异步运动
|
|
// 可以实现电机自动的 加速-匀速-降速 运动
|
|
|
|
#ifndef STM32_MOTOS_NUM
|
|
#define STM32_MOTOS_NUM 0 // 电机数量
|
|
#endif
|
|
|
|
//---------------------------------------------------------------
|
|
// 软件PWM信号输出
|
|
#ifndef STM32_SOFT_PWM
|
|
#define STM32_SOFT_PWM 0
|
|
#endif
|
|
|
|
//-------------------------------------------------------------------------------
|
|
|
|
// 脉冲模式
|
|
#define MODE_CWCCW 0
|
|
#define MODE_STEPDIR 1
|
|
|
|
//---------------------------------------------------------------
|
|
// 运动状态定义
|
|
#define STM32MOTO_ERR -1 // 异常
|
|
#define STM32MOTO_STOP 0 // 停止
|
|
#define STM32MOTO_ADD 1 // 加速
|
|
#define STM32MOTO_RUN 2 // 匀速
|
|
#define STM32MOTO_DEC 3 // 降速(计数降速)
|
|
#define STM32MOTO_NSTOP 4 // 停车(条件停车)
|
|
#define STM32MOTO_EMC 5 // 刹车(条件刹车)
|
|
|
|
//---------------------------------------------------------------
|
|
// 电机运动控制接口
|
|
typedef struct
|
|
{
|
|
// 输入
|
|
s32 movement; // 位移量
|
|
|
|
u32 startPPS; // 启动速度
|
|
u32 runPPS; // 运动速度
|
|
u32 addPPSG; // 启停加速度
|
|
u32 brkPPSG; // 刹车加速度
|
|
|
|
u32 funTestTime; // 运行过程中外部函数检测间隔时间 0:不检测外部函数 (单位:0.1ms)
|
|
int syncList[6]; // 同步移动选择
|
|
|
|
// 函数指针
|
|
int (*GetNormalStop)(u32,u32); // 一般停止条件函数,当为空时,不检测停止条件; 不为空时,条件满足,降速到停止(按启停加速度降速)
|
|
int (*GetQuickStop)(u32,u32); // 快速停止条件函数,当为空时,不检测停止条件; 不为空时,条件满足,降速到停止(按刹车加速度降速)
|
|
u32 condPara1, condPara2; // 条件函数参数
|
|
|
|
int blockRunflag; // 阻塞运行标志, =1阻塞运行,同步运动 =0,非阻塞,异步运动
|
|
void (*ExecWhenRun)(void); // 电机运行过程中执行的函数
|
|
void (*ExecWhenStart)(void); // 电机启动时执行的函数
|
|
void (*ExecWhenStop)(void); // 电机停止时执行的函数
|
|
|
|
}MotoCtrl;
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
typedef void (*OutFunc)(void);
|
|
|
|
|
|
#define MOTO_FUNC_DEF(x) \
|
|
\
|
|
void InitStm32Moto##x##OutFunc(OutFunc stepOn, OutFunc StepOff, OutFunc dirOn, OutFunc dirOff); /* 功能:设置电机控制输出函数 */ \
|
|
int STM32Moto##x##Start(MotoCtrl * pCtrl); /* 功能:启动电机 */ \
|
|
void STM32Moto##x##Stop (void); /* 功能:停止电机(非阻塞时用到) */ \
|
|
int STM32Moto##x##Run(MotoCtrl * pCtrl); /* 功能:电机运行(非阻塞时用到) */ \
|
|
int GetSTM32Moto##x##State(void); /* 功能:得到电机运行状态(非阻塞时用到) */ \
|
|
void SetSTM32Moto##x##Mode(int mode); /* 功能:设置脉冲方式 */ \
|
|
void SetSTM32Moto##x##RunSpd(u32 spd); /* 功能:设置电机运转速度(非阻塞时用到) */ \
|
|
s32 GetSTM32Moto##x##RealPos(void); /* 功能:得到电机当前坐标(非阻塞时用到) */ \
|
|
void SetSTM32Moto##x##RealPos(s32 pos); /* 功能:设置电机当前坐标(非阻塞时用到) */ \
|
|
void STM32Moto##x##IntProc(void); /* 功能:中断处理函数 */ \
|
|
//-------------------------------
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
// 初始化电机
|
|
void InitSTM32Motos(void);
|
|
void InitSTM32SoftPwm(OutFunc pwmProc);
|
|
|
|
|
|
//-------------------------------
|
|
#if (STM32_MOTOS_NUM > 0 || STM32_SOFT_PWM > 0)
|
|
void STM32MotoSpeedIntProc(void); /* 功能:中断处理函数 */
|
|
#endif
|
|
|
|
// MOTO1
|
|
#if (STM32_MOTOS_NUM >= 1)
|
|
MOTO_FUNC_DEF(1);
|
|
#endif
|
|
|
|
// MOTO2
|
|
#if (STM32_MOTOS_NUM >= 2)
|
|
MOTO_FUNC_DEF(2);
|
|
#endif
|
|
|
|
// MOTO3
|
|
#if (STM32_MOTOS_NUM >= 3)
|
|
MOTO_FUNC_DEF(3);
|
|
#endif
|
|
|
|
// MOTO4
|
|
#if (STM32_MOTOS_NUM >= 4)
|
|
MOTO_FUNC_DEF(4);
|
|
#endif
|
|
|
|
// MOTO5
|
|
#if (STM32_MOTOS_NUM >= 5)
|
|
MOTO_FUNC_DEF(5);
|
|
#endif
|
|
|
|
// MOTO6
|
|
#if (STM32_MOTOS_NUM >= 6)
|
|
MOTO_FUNC_DEF(6);
|
|
#endif
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|