加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
MaxXYHiSpd.h 6.33 KB
一键复制 编辑 原始数据 按行查看 历史
张彦欣 提交于 2024-02-07 15:08 . 第一次上传
/*******************************************************************************
青岛市张彦欣单片机有限公司
版权所有 @ 2018
基于DDA算法的2轴插补代码
输出信号分为脉冲信号Pls和方向引脚Dir.必须接步进电机驱动器或伺服电机驱动器.
张彦欣
2018.02.08
*******************************************************************************/
#ifndef _MAX_STEPPER_HiSPEED_H_
#define _MAX_STEPPER_HiSPEED_H_
#include "MaxDuino.h"
#include "MaxTimer.h"
#define DIR_FOREWARD 0 //正转
#define DIR_REVERSAL 1 //反转
// 为了便于工程上的同事读取正反 使用拼音标记
// 2018.10.01
#define DIR_ZHENG DIR_FOREWARD //正转.
#define DIR_FAN DIR_REVERSAL //反转.
#define RAMP_MODE_S 0 //加减速模式.S曲线加减速.
#define RAMP_MODE_L 1 //直线加减速.
#define MOTOR_STOP 0 //电机停止中.
#define MOTOR_UP 1 //电机加速中.
#define MOTOR_RUN 2 //电机恒速中.
#define MOTOR_DOWN 3 //电机减速中.
#define MOTOR_X 0 //X轴电机
#define MOTOR_Y 1 //Y轴电机
#define MIN_PLS_FREQ 20 //默认最低脉冲频率.
struct STRUCT_RAMP
{
Uchar EnRamp; //斜坡功能使能标志.
Ulong RampLength; //斜坡函数--加速的长度.
Ulong RampLengthSET; //用户设置的300RPM下的加减速长度
};
struct STRUCT_SYSTEM
{
Ulong TotalSteps; //总步数
Ulong RemainSteps; //剩余步数.
Ulong CurrentSteps; //当前步数.
Ulong x_TotalSteps;
Ulong y_TotalSteps;
Ulong x_CurrentSteps;
Ulong y_CurrentSteps;
long x_location; //记录当前位置.
long y_location;
float CurFrq; //记录当前速度.
Uchar State; //电机运行状态(加减速状态)
Uchar RunDirX; //电机的转动方向.
Uchar RunDirY;
};
struct STRUCT_CONFIG
{
MaxTimer DrvTimer; //定义一个步进电机使用的定时计数器变量.
Uint PIN_StepX; //驱动引脚.脉冲引脚.
Uint PIN_DirX; //驱动引脚.方向引脚.
Uint PIN_StepY;
Uint PIN_DirY;
Uint PlsPerCir; //步进电机转动一圈,所需要的脉冲数量.
Uchar DirOppX; //运动方向是否反向.
Uchar DirOppY;
float RPM; //电机的转速._RPM.
float TargetFrq; //目标频率.
Uchar StopLevel; //当步进电机停止运转时,输出的电平.
float MinPlsFrq; //脉冲引脚输出的脉冲最低频率.
};
struct STRUCT_LimitSwitch
{
Uint PIN_XMax; //X轴最大限位
Uint PIN_XMin; //X轴最小限位
Uint PIN_YMax; //Y轴最大限位
Uint PIN_YMin; //Y轴最小限位
Uchar Enable; //限位开关使能标志位.
Uchar ActLevel; //当限位开关动作时的电平.默认高电平.
Uchar XFlg; //动作标志位
Uchar YFlg;
};
struct STRUCT_LocationTrig
{
long StartX;
long StartY;
long StopX;
long StopY;
Uchar Motor;
Uchar Enable;
};
class MaxXYHiSpd
{
public:
STRUCT_LocationTrig locationtrig;
void begin( TIM_TypeDef* myTimer,
Uint myPlsPerCir,
Uint myXPls, Uint myXDir,
Uint myYPls, Uint myYDir,
Uchar PlsMod, Uchar DirMod,
Uchar PlsStopLvl );
void begin( TIM_TypeDef* myTimer,
Uint myPlsPerCir,
Uint myXPls, Uint myXDir,
Uint myYPls, Uint myYDir );
void speed(float _RPM); //设置速度.单位:_RPM.
float speed(void); //获取当前速度设置
void MinSpeed(float _RPM); //设置系统的最低转速.加减速的时候起作用.
float CurSpeed(); //获取当前速度.单位:_RPM.
void stop(void); //立即无条件停止电机.
void RStop(void); //斜坡停止功能.
Uchar state(void); //获取电机运行状态.
void wait(void); //等待电机停止.
void wait(Ulong OVTime); //带超时的等待.
Uchar swait(Uchar ulPin,Uchar Level); //等待电机停止,指定端口动作退出.
Uchar swait(Uchar ulPin,Uchar Level,Uint FilterTime);
void LSW(Uchar IfEnable);
void LSW(Uchar IfEnable, Uint XMaxPin, Uint XMinPin,
Uint YMaxPin, Uint YMinPin, Uchar ActLvl );
Uchar LSW(void);
void ResetLsw(void);
void EnRamp(Uchar myCMD); //开启斜坡功能.
void RampLength(Ulong myRampLength); //斜坡函数设置.
long location(Uchar myMOTOR);
void location(Uchar myMOTOR,long CurLocation);
void DirOppX(Uchar _Cmd); //运动方向是否反向.
void DirOppY(Uchar _Cmd); //运动方向是否反向.
Uchar CurDir(Uchar myMOTOR); //获取当前运动方向.
void MoveTo(long,long); //移动到目标全局位置.
void scan(void); //步进电机驱动函数.在ISR中运行.
//并非用户调用.
MaxXYHiSpd(void); //构造函数.完成变量初始化.
void LocationTrigEnable(Uchar myEnable);
void LocationTrigSET(Uchar Motor,long Start,long Stop);
private:
MaxTimer DrvTimer;
STRUCT_RAMP ramp;
STRUCT_SYSTEM system;
STRUCT_CONFIG config;
STRUCT_LimitSwitch limitswitch;
void OS_LoadTimer(void); //定时器加载频率
void OS_LRamp(void); //直线加减速.
void OS_NRamp(void); //无加减速.
void OS_Direction(void); //电机运动方向控制.
Uchar OS_LimitSwitch(void); //限位开关函数.
Uchar OS_LimitSwitch_One(Uchar myRunDir,Uint myMaxPin,Uint myMinPin);
void OS_location(void); //记录当前位置
void OS_StepOUT(void); //输出脉冲
void OS_ChkRemainSteps(void);//判断剩余步数
void OS_LocationTRIG(void); //位置触发
};
void MaxXYHiSpd_LocationTrigStart(void) _MaxWeak_;
void MaxXYHiSpd_LocationTrigStop(void) _MaxWeak_;
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化