⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 epos.h

📁 MAXON epos的基于CAN总线的驱动代码
💻 H
字号:
/**************************************************************************
                              EPOS标准驱动V1.1    
                                                      Edit by:李诚
               注意:使用前请仔细阅读下面的操作说明!!!!!!
**************************************************************************/


/**************************************************************************
Epos操作说明:
    (1).调用Epos_Init()函数初始化;
    (2).调用Epos_Run()函数开始运行;
    (3).若要使电机停止转动,可以调用Epos_Stop()函数;
    (4).若要关闭epos对电机的控制作用,可调用函数Epos_ShutDown();关闭后可以直接调用Epos_Run()
        函数重新启动epos对电机的控制作用!
           
 说明:(1).可以调用Epos_SetAcc()、Epos_SetDec()函数设置加速度和减速度,但是需要注意改动后
           不会立即生效,会在下一次运行Epos_Run函数后才生效!
       (2).若要从epos中读取数据,可以调用函数Epos_Read(),其参数请参考函数原型及EposManul!
 
 注意:只能使用Epos_Run()函数操作各种模式,大家不要调用各个子函数如Epos_RunPPM()等去操作
       epos,否则可能不能得到预期的效果!!!!
 
 函数详解:
     Epos_Init(Epos* epos1,Epos* epos2,INT8U CAN_ID,INT8U NODE_ID1,INT8U NODE_ID2);
         参数:epos1:第一个epos(通常为左轮)
               epos2:第二个epos(通常为右轮)
               CAN_ID:CAN通道号,可为CAN_CH1或者CAN_CH2
               NODE_ID1:epos1节点号
               NODE_ID2:epos2节点号
     Epos_Run(Epos* epos,INT32S speed,INT32S position,INT8U mode,INT32S opt);
         参数:epos:    要设置的epos
               speed:   设置速度,仅在PPMODE,PVMODE,VMODE三种模式下有用,PMODE下置0即可;
               position:设置运行到的位置,仅在PPMODE,PMODE模式下有用,其他模式置0即可
               mode :   设置运行模式,可为PPMODE(平滑位置模式)、PMODE(位置模式)、
                        PVMODE(平滑速度模式)、VMODE(速度模式),各种模式的特点请参考
                        我写的epos研究报告,也可阅读epos UserManul
               opt  :   平滑位置模式下的特殊参数,用于定义平滑位置模式的运行方式,仅对平滑位置模式
                        起作用,其他模式下置0即可,
                        定义如下:
                        0x001f-完成当前操作(即走到前一次设定的位置)后再走到绝对位置position;
                        0x003f-停止当前操作(即不走到前一次设定的位置),立即走到绝对位置position;
                        0x005f-完成当前操作后,走到与当前位置相差position的位置;
                        0x007f-停止当前操作,立即走到与当前位置相差position的位置;
        
     另外,epos可以运行与电流模式,请调用函数Epos_RunCM(),参数如下:
     Epos_RunCM(Epos* epos,INT32S Current,INT32S MAX_Speed)
              Current:  设置运行电流,单位为mA
              MAX_Speed:设置在设置的电流下电机的最大转速,单位为rpm,如果转速搭到最大转速,而电流还
                        没有达到最大值,电流将不再增大,如此可以在电流模式下做到限速!若要保持电流恒
                        定,可以将MAX_Speed设得较大,
                        
               
操作示例:
         比如现有epos1,初始化后epos处于位置0,
         如果要以平滑位置模式以2000的速度走到位置1000000,
         则代码为:Epos_Run(&epos1,2000,1000000,PPMODE,0x001f);
         如果要工作与平滑速度模式,速度为3000,
         则代码为:Epos_Run(&epos1,2000,0,PVMODE,0);          
***************************************************************************/

#ifndef _EPOS_H
#define _EPOS_H


#include "typedef.h"
#include "can.h"


#define MAX_F_ERR 80000   //最大允许误差
#define MAX_P_V 20000    //最大运行速度
#define QDEC 15000       //出错停止减速度
#define MAX_ACC 800


typedef struct __Epos
{
	stcCAN* CAN_Handles;
	stcCANFrame buf;
	BOOL isInit;
	INT8U NODE_ID;
	INT8U CurMode;
	INT32S opt;    //用于保存PPMODE下的opt参数
	INT32S Acc;
	INT32S Dec;	
}Epos;




//运行模式定义
#define PPMODE 0x01
#define PMODE 0xFF
#define PVMODE 0x03
#define VMODE 0xFE 
#define CMODE 0xFD


extern void    Epos_Delay(INT8U time);

extern void    Epos_Write(Epos* epos,INT16U Index,INT8U SubIndex,INT32S param);

extern BOOL    Epos_Read(Epos* epos,INT16U Index,INT8U SubIndex,INT32S* param);

extern void    Epos_SInit(Epos* epos1,INT8U CAN_ID,INT8U NODE_ID1);

extern void    Epos_Init(Epos* epos1,Epos* epos2,INT8U CAN_ID,INT8U NODE_ID1,INT8U NODE_ID2);
	
extern void    Epos_ParamInit(Epos* epos);

extern void    Epos_Run(Epos* epos,INT32S speed,INT32S position,INT8U mode,INT32S opt);

extern void    Epos_RunPPM(Epos* epos,INT32S speed,INT32S posi,INT8U opt);

extern void    Epos_RunPM(Epos* epos,INT32S position,INT8U opt);

extern void    Epos_RunPVM(Epos* epos,INT32S speed,INT8U opt);

extern void    Epos_RunVM(Epos* epos,INT32S speed,INT8U opt);

extern void    Epos_RunCM(Epos* epos,INT32S Current,INT32S MAX_Speed);

extern void    Epos_SetAcc(Epos* epos,INT32S Acc);

extern void    Epos_SetDec(Epos* epos,INT32S Dec);

extern void    Epos_Stop(Epos* epos);

extern void    Epos_ShutDown(Epos* epos);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -