#ifndef _MOTOR_PARAM_H__
#define _MOTOR_PARAM_H__
#include "bsp/bsp.h"
#include "os/os_types.h"
#include "foc/core/PMSM_FOC_Core.h"

/* 电机外特性map, 每个转速点对应的最大扭矩 */
typedef struct {
	s16 rpm;
	s16 torque;
}motor_map_t;

typedef struct{
	s16 torque;
	s16 d;
	s16 q;
}torque2dq_t;

typedef struct {
	s16 iq;
	float lq;
}iq_lq_map_t;
typedef torque2dq_t torque_map_t;
s16 motor_max_torque_for_rpm(s16 rpm);
void motor_mpta_fw_lookup(float rpm, float torque, DQ_t *dq_out);
float motor_get_lq_from_iq(s16 iq);

#if CONFIG_MOT_TYPE==MOTOR_BLUESHARK_NEW1
#define MOTOR_R   0.010f
#define MOTOR_Ld (0.000120f*0.5f)
#define MOTOR_Lq (0.000200f*0.5f)
#define MOTOR_POLES  4
#define MOTOR_ENC_OFFSET 0.0F
#define CONFIG_MAX_MOTOR_TORQUE 40.0F

#define TRQ_PI_KP 0.14F
#define TRQ_PI_KI 0.15F

#define CONFIG_CURRENT_BANDWITH  1000.0f /* 电流环带宽 */
#define CONFIG_DEFAULT_PHASE_CURR_LIM 200
#define CONFIG_MAX_FW_D_CURR     100.0F //d轴最大的退磁电流

#define MOTOR_NR 0x11
#elif CONFIG_MOT_TYPE==MOTOR_BLUESHARK_A1
#define MOTOR_R   0.011f
#define MOTOR_Ld (0.000140F*0.5f)
#define MOTOR_Lq (0.000356f*0.5f)
#define MOTOR_Flux (0.013f)
//#define MOTOR_R   0.033f
//#define MOTOR_Ld (0.000168f * 0.5f)//(0.000140F*0.5f)
//#define MOTOR_Lq (0.000330f * 0.5f)//(0.000340f*0.5f)

#define MOTOR_POLES  4
#define MOTOR_ENC_OFFSET 0.0F
#define CONFIG_MAX_MOTOR_TORQUE 400.0f//45.0F

#define TRQ_PI_KP 0.05F
#define TRQ_PI_KI 0.01F
#define TRO_PI_KD 0.0F
#define MOTOR_NR 0x16

//4000->10, 34; 8000->8, 15
#define CONFIG_CURRENT_BANDWITH  (800 * 2 * PI) /* 电流环带宽 = bandwith / (2 * pi)*/
#define CONFIG_DEFAULT_PHASE_CURR_LIM 500
#define CONFIG_MAX_FW_D_CURR     300.0F //d轴最大的退磁电流
#define CONFIG_CURRENT_LOOP_DECOUPE    //电流环解耦
#elif CONFIG_MOT_TYPE==MOTOR_BLUESHARK_NEW2
#define MOTOR_R   0.013f
#define MOTOR_Ld (0.000140f*0.5f)
#define MOTOR_Lq (0.000320f*0.5f)
#define MOTOR_POLES  4
#define MOTOR_ENC_OFFSET 250.0F
#define CONFIG_MAX_MOTOR_TORQUE 40.0F

#define TRQ_PI_KP 0.14F
#define TRQ_PI_KI 0.15F

#define MOTOR_NR 0x12

#define CONFIG_CURRENT_BANDWITH  1000.0f /* 电流环带宽 */
#define CONFIG_DEFAULT_PHASE_CURR_LIM 200
#define CONFIG_MAX_FW_D_CURR     100.0F //d轴最大的退磁电流

#elif CONFIG_MOT_TYPE==MOTOR_BLUESHARK_ZD_100
#define MOTOR_R   0.008f
#define MOTOR_Lq (0.000125f*0.5f)
#define MOTOR_Ld (0.000091f*0.5f)
#define MOTOR_POLES  5
#define MOTOR_ENC_OFFSET 145.0F
#define CONFIG_MAX_MOTOR_TORQUE 200.0F

#define TRQ_PI_KP 0.6F //0.13f
#define TRQ_PI_KI 0.5F
#define TRO_PI_KD 0.0F

#define MOTOR_NR 0x13

#define CONFIG_CURRENT_BANDWITH  1000.0f /* 电流环带宽 */
#define CONFIG_DEFAULT_PHASE_CURR_LIM 200
#define CONFIG_MAX_FW_D_CURR     100.0F //d轴最大的退磁电流

#elif CONFIG_MOT_TYPE==MOTOR_BLUESHARK_OLD
#define MOTOR_R 0.012f
#define MOTOR_Ld (0.000143f*0.5f)
#define MOTOR_Lq (0.000205f*0.5f)
#define MOTOR_POLES  5
#define MOTOR_ENC_OFFSET 180.0F
#define CONFIG_MAX_MOTOR_TORQUE 40.0F

#define TRQ_PI_KP 0.14F
#define TRQ_PI_KI 0.15F

#define MOTOR_NR 0x14

#define CONFIG_CURRENT_BANDWITH  1000.0f /* 电流环带宽 */
#define CONFIG_DEFAULT_PHASE_CURR_LIM 200
#define CONFIG_MAX_FW_D_CURR     100.0F //d轴最大的退磁电流

#elif CONFIG_MOT_TYPE==MOTOR_3505
//编码器电机 3505
#define MOTOR_R 0.08f
#define MOTOR_Ld 0.000032f
#define MOTOR_Lq 0.000032f
#define MOTOR_POLES  10
#define CONFIG_MAX_MOTOR_CURR 20.0F

#define TRQ_PI_KP 0.14F
#define TRQ_PI_KI 0.15F

#define MOTOR_NR 0x15

#define CONFIG_CURRENT_BANDWITH  1000.0f /* 电流环带宽 */

#endif

#endif /* _MOTOR_PARAM_H__ */
