
/************************ (C) COPYRIGHT 2016 FT *******************************
* File Name          : 
* Author             : Application Team  Tom.wang 
* Version            : V2.0.0
* Date               : 06/15/2015
* Description        : 警告：禁止修改,删除 结构体定义 会导致未知错误
TOM 20170911
sys_conf.h -> fu68xx_IQmath.h
              user_conf.h  -> tempuserconf.h
           -> function.h
           -> tempconstant.h
用户配置层
停机模式;上电等待时间；位置反馈模式； 
********************************************************************************
/*******************************************************************************
* All Rights Reserved
*******************************************************************************/
#ifndef __USER_CONF_H
#define __USER_CONF_H
#include <tempuserconf.h>
//&& 读写  %% 只读  单位 *  标幺值 -- 无单位
//_IQ15 最小分辨率 0.0000306 范围-0.9999 ~0.9999
//========================================================================
//-----------------------------------------------------------------------
//PWM PWM参数配置
#define PWM_FREQ        (16000)          //单位 Hz && (5000~50000)
#define PWM_DEADTIMENUS (0.8)            //单位 us && (0.5~3.0)

//PWM 有限电平
#define H_MOSActive    (ActiveLowEnable) //单位 -- && (ActiveLowEnable,ActiveHighEnable)上桥HVIC驱动有效电平  
#define L_MOSActive    (ActiveLowEnable) //单位 -- && (ActiveLowEnable,ActiveHighEnable)下桥HVIC驱动有效电平  

//PWM 调制方式    (M_Hpwm_Lon,M_HLPWM_Lon,M_HLPWM_Lon,M_HONPWM_Lpwm)                                                                                                            //M_Hpwm_Lon  M_HPWM_LPWM  M_HLPWM_Lon  M_HONPWM_Lpwm
#define PWM_MODE       (M_Hpwm_Lon)      //单位 -- &&    

//ADC vref 参考电压 
#define HW_ADC_REF     (VREF4_5)          //单位-- && (VREF3_0 VREF4_0  VREF4_5  VREF5_0)

//硬件保护 输入方式设置 IPM或者FD6536设置FO_INT;其他设置内部比较器触发FO
#define EFAL           (FO_CMPINT)          //单位 -- && (FO_CMP,FO_INT，FO_CMPINT)

//转子位置反馈模式     (HallSensor,SensorLess)
#define POS_FB_MODE    (SensorLess)      //单位-- && 位置反馈检测方式

//停机方式  (BREAK_DOWN,FREE_DOWN)      
#define STOPMODE       (FREE_DOWN)  //单位-- &&  停机模式选择  FREE_DOWN  BREAK_DOWN

// DIRECTION 设置参数为： CW CCW 0  当DIRECTION = 0时 如果Ui.flg.FR 没有赋值则不能启动   
#define DIRECTION      (CW)         //单位-- && 默认旋转方向 (NODIR  CW CCW)

//自举电容充电参数设置                         
#define CHARGEDUTY     _IQ(0.5)     //单位** && 充电占空比
#define CHARGENMS      (0)          //单位ms && 充电时间 (0~5)

//上电等待时间
#define POWER_ON_NMS   (1000)        //单位ms && 上电等待时间100ms 500ms 
//======================================================================
//HALLSENSOR 参数调整区
//HALLADVANCEEANGLE 设置范围（-1~-50 或者0~30）整数 
//1、不超前换相  设置范围-1~-50度超前角   0~30 为滞后换相
//2、设置超前换相时，如果电机不正常运行，请调换HALL线
//3、定义Ctl.direction == CW(正转)时 定义HALL顺序为
//  Drv.Hall.Section 1->2->3->4->5->6->1……

#define HallMode             (HallIC_X)
//hall安装方式
#define HALLPTDPE            (0)             //单位-- && hall MCU内部上拉使能
#define HALL_SENSORS_PLACEMENT (DEGREES_120) //单位-- && (DEGREES_60,DEGREES_120)

#define HALLADVANCEFIX        (0)            //开启超前换相如果电机运行不正常，修改此参数 1 or 0
#define HALLADVANCEEANGLE_CW  (0)            //单位° && HALL安装角度调整 hall Advance Eangle  
#define HALLADVANCEEANGLE_CCW (0)            //单位° && HALL安装角度调整 hall Advance Eangle 
//HALLSENSOR 参数调整区结束
//======================================================================
//----------------------------------------------------------------------
//SensorLess参数调整区                      P07 和 P01 输出测试信号
#define BEMF_DEBUG         (1)              //单位-- && debug BEMF测试信号输出使能 
#define PWM_MASK           (4)              //单位 -- && () n*333.336ns
#define PWM_DELAY          (1)              //单位 -- && () n*333.336ns
//转速跟踪启动
#define STRACK_EN          (1)              //单位-- &&转速跟踪启动使能 1反转等待  2反转自动刹车  
#define STKNMS             (30)             //单位ms 转速跟踪监测时间  (10~255)
#define SRKBNUM            (3)              //单位-- 转速跟踪检测次数  (2~10)

//转子初始位置 定位&检测参数设置
//说明：小负载使用0模式   凸极电机可以使用2模式  其他使用1模式
//45 15 8000 8000   200
#define MOTORROTORCALC    (0)                   //单位-- &&  0 不检测 2检测
#define ALIGNMENTNMS      (0)                   //单位ms 定位时间  50    (10~1000)
#define ALIGNMENTDUTY    _IQ(0.55)              //单位ms 定位力矩  0.52  (0.45~0.8)
//Ramp Up参数配置 
#define RAMP_MODE         (1)                   //单位-- &&  pamp 模式   1 2 3
#define PAMP_PWM_FREQ     (24000)               //单位Hz &&  启动频率 PWM_FREQ  (8000~15000)       
#define RAMP_TIM_STA      (100)                  //单位ms &&  爬坡开始步进时间， (10~120) 
#define RAMP_TIM_END      (100)                   //单位ms &&  爬坡结束步进时间， (10~120)  
#define RAMP_TIM_STEP     (40)                  //单位ms &&  爬坡步进时间递减增量， 
#define RAMP_DUTY_STA     _IQ(500.0/32767.0)   //单位* &&   爬坡开始力矩       (2000~6000)
#define RAMP_DUTY_END     _IQ(1000.0/32767.0)   //单位* &&   爬坡结束力矩       (2000~6000)
#define RAMP_DUTY_INC     _IQ(100.0/32767.0)    //单位*  &&  爬坡步进力矩增量   (100)
#define RAMP_COM_CNT      (5)                   //单位-- &&  爬坡结束后维持步数  (5~120) RAMP_MODE == 3有效
#define RAMP_TIM_MASK     (0.08)                  //单位ms &&  启动续流屏蔽时间 
#define RAMP_TURE_NUM     (6)                   //单位-- &&  启动检测BEMF过零点个数      (2~10)  
#define RAMP_ERR_NUM      (10)                  //单位-- &&  启动检测错误BEMF过零点个数  (5~20)  

//换相参数配置
#define RUN_ANGLE_MASK     (10)                 //单位° && 续流屏蔽角度 (0~6) 
#define RUN_ANGLE_DELAY    (10)                 //单位° && 换相进角角度 (0~6) 

//SensorLess参数调整区结束
//======================================================================
//调速方式 参数调整请见function.h文件
#define ADCSREF_EN         (1)               //单位-- &&模拟调速使能
#define ADCONOFF_EN        (1)               //单位-- && SREF控制ONOFF使能
#define KEYONOFF_EN        (0)               //单位-- && Key/端子 控制ONOFF使能   1 轻触式开关 2端子是开关

#define ESC_PPMSREFEN      (0)               //单位-- && 电调PPM调速、同时会使能BEEP、TIM3
//----------------------------------------------------------------------
//速度开环
#define MOTOR_TARGRT_DUTY   _IQ(0.6)          //单位* 开环目标占空比 默认值 即无调速给定时有效
#define MOTOR_INIT_DUTY     _IQ(0.01)         //单位* 初始占空比

//----------------------------------------------------------------------
//加减速曲线 开环、闭环统一变量
#define SPEED_TICKPEREN    (1)                //单位* 1-> 1ms 执行一次  0-> 100us执行一次
#define SPEED_INCVALUE     (20)              //单位* 加速爬坡步进增量 (1~32767)
#define SPEED_DECVALUE     (20)              //单位* 减速爬坡步进增量 (1~32767)

//----------------------------------------------------------------------
//速度闭环 外环  
#define SPEED_CALC_EN      (2)                //单位-- &&转速计算使能 失能优化计算时间 0->不计算   1->标幺值  2->标幺值+实际转速
#define SPEED_CLOSE_EN     (0)                //单位-- 速度闭环使能后 必须打开速度计算
#define SPEED_CTL_CNT      (5)               //单位-- 速度调节频率计数器
#define SPEED_PTERM        _IQ(300.0/32767.0)  //单位* 速度环kp
#define SPEED_ITERM        _IQ(50.0/32767.0)  //单位* 速度环ki
#define SPEED_INMIN        _IQ(-0.9)           //单位* 速度环 输入最小值   (0.05~0.5)  速度闭环限制最小速度
#define SPEED_INMAX        _IQ(0.9)           //单位* 速度环 输入最大值   (0.3~0.8)   速度闭环限制最大速度
#define SPEED_OUTMIN       _IQ(-1.0)           //单位* 速度环 输出最小值   (0.1)       速度闭环输出最小占空比
#define SPEED_OUTMAX       _IQ(1.0)           //单位* 速度环 输出最大值   (1.0)       速度闭环输出最大占空比
#define SPEED_REF_TAR      _IQ(0.5)           //单位* 控制目标速度 默认值   速度闭环 
#define SPEED_REF_INIT     _IQ(0.001)         //单位* 控制目标速度 初始值   速度闭环 
#define SPEED_LIMIT_EN     (0)                //单位-- && 简单限速使能，不用使能速度环
#define SPEED_LIMITRPMREF  (10000)            //单位RPM && 软件限速   
//----------------------------------------------------------------------
//电流闭环控制  电流环内环
//CURRENT_CLOSE_EN == 1 简单根据电流大小限流，无电流环 调试简单，电流会有波动
//CURRENT_CLOSE_EN == 2 电流闭环
//CURRENT_CLOSE_EN == 3 功率闭环控制
#define  CURRENT_CLOSE_EN   (1)                  //单位-- && 1限流 2 电流环 
#define  CURRENT_CTL_CNT    (3)                  //单位-- 电流调节频率计数器
#define  CURRENT_PTERM      _IQ(10000.0/32767.0)   //单位* 电流环kp
#define  CURRENT_ITERM      _IQ(200.0/32767.0)    //单位* 电流环ki
#define  CURRENT_INMAX      _IQ(3000.0/32767.0)  //单位* 电流环，输入限幅值 2000

#define  CURRENT_OUTMIN     (_IQ(0.0/32767.0))  //单位* 电流环输出限幅
#define  CURRENT_OUTMAX     (_IQ(1.0))             //单位* 电流环输出限幅
#define  CURRENT_REF_TAR    (_IQ(20000.0/32767.0)) //单位* 电流环输入给定 &&功率环输入给定

#define  CURRENT_LIMIT_MAXREF (20)             //单位A  && 限制电流 
#define  LIMIT_DUTYINCDEC     (30)             //单位-- && 限制电流 

//----------------------------------------------------------------------
//电压输出限幅
#define  MOTOR_VS_MAX        _IQ(1.0)          //单位*   最大输出占空比 
#define  MOTOR_VS_MIN        _IQ(0.01)         //单位*   最小输出占空比

//======================================================================
/*
保护功能配置区：
1、堵转失速保护
2、过流保护
   硬件过流；软件过流保护；过载保护
3、欠压过压保护
4、过温保护
   MOS管过温；电机过温
   
STA_EN 故障和保护参数配置  注意：有位置反馈 一般堵转保护设置为大于1000ms。 失速保护关闭
STARSTARTNMS 无HALL 启动时连续重启时间 0即一直重启 3000 3s内没有启动成功不再启动 报故障ERR1 
*/
#if (POS_FB_MODE == SensorLess)
  #define  STANMS            (3000)          //单位ms 堵转时连续重启时间  默认3000
  #define  STA_EN            (1)             //单位-- && 堵转保护使能
  #define  STB1RPM           (500)           //单位rpm && 低速保护  换算为1对极
  #define  STB2RPM           (800000)        //单位rpm && 超速保护  换算为1对极
  #define  STB3_EN           (1)             //单位-- && 失速保护
#else
  #define  STA_EN            (0)             //堵转保护使能
  #define  STANMS            (3000)          //单位ms  堵转保护时间  
#endif
//------------------------------------------------------------------------
//堵转保护重启参数  STA_EN  STB1_EN  STB2_EN STB3_EN 故障均自动清除故障，启动                 
#define  STALLRESTARTNUM     (255)         //单位-- && 堵转重启次数 范围0~255 设置255 一直重启   0不重启
#define  STALLRESTARTTIM     (20)          //单位1ms && 堵转重启延迟时间 

//----------------------------------------------------------------------
/*
//单位- && 逐波限流模式选择
硬件过流保护：逐波限流 使能逐波限流会取消硬件过流保护 
HARD_OC_EN 0 1 2 3 4
0： 无硬件过流
1： 取消逐波限流，硬件FO直接保护  
2： CYC1限流 逐波限流 
3： CYC2限流 超级逐波限流

FO_NUM
4、FO_EN ==2 模式下 FO_NUM取值：1、1~999 (限流次数)  2、10000  (一直限流)
*/
//硬件过流 FO触发保护并关闭输出
#define  FO_EN               (0)           //单位- 使能硬件过流    禁止关闭
#define  FO_NUM              (800)         //单位- && 逐波限流次数 

//CMP3 N输入电压 硬件过流用
#define  FO_CMP3P_VORI       (1)            //cmp输入 宏定义选择 1-> FO_CMP3VREF 2->FO_OCVALUE
#define  FO_CMP3VREF         (2.5)          //单位V && 范围(0~HW_ADC_VREF)
#define  FO_OCVALUE          (20.0)         //单位A && 硬件过流值

//软件过流保护参数设置
#define  IBUS_CALC_EN        (1)           //单位-  失能，建议关闭，不影响过流保护
#define  OVERCURRENT_EN      (0)           //单位-  过流保护
#define  OVERCURRENT         (100)         //单位A  过流值
#define  OCNMS               (4)           //单位ms 过流监测时间

//过流保护重启参数                         
#define  OCRESTART_EN        (0)           //单位- && 过流重启使能  参数：1软件过流重启 2、包括硬件过流 软件过流 过载
#define  OCRESTARTNUM        (255)          //单位* && 母线过流重启次数
#define  OCRESTARTTIM        (5)           //单位ms && 过流重启延迟时间

//----------------------------------------------------------------------
//过压、欠压保护重启参数 
#define  VBUS_CALC_EN        (1)           //单位-  失能,建议关闭，不影响过欠压保护 AD2
#define  OVERVOLTAGE_EN      (0)           //单位-  过压保护使能  
#define  UNDERVOLTAGE_EN     (0)           //单位-  欠压保护使能
#define  VBUSRECOVER_EN      (0)           //单位-  母线电压恢复重启使能

#define  DCVOLTAGE           (21.6)        //单位V   控制器基本电压
#define  OVERVOLTAGE         (36.0)        //单位V   过压保护电压    //(DCVOLTAGE*1.2) 
#define  UNDERVOLTAGE        (15.0)        //单位V   欠压保护电压    //(DCVOLTAGE*0.8)  
#define  OVREERVOLTAGE       (30.0)        //单位V   回差电压        //(DCVOLTAGE*1.15)
#define  UNREDERVOLTAGE      (16.0)        //单位V   回差电压        //(DCVOLTAGE*0.85) 
#define  UVNMS               (500)         //单位ms  母线过压判断时间，
#define  OVNMS               (500)         //单位ms  母线欠压判断时间
#define  NONMS               (500)         //单位ms  母线恢复判断时间

//----------------------------------------------------------------------
//过热保护
#define  OH1_EN              (0)           //单位- 过热使能
#define  OH2_EN              (0)           //单位- 过热使能                        
#define  OH3_EN              (0)           //单位- 过热使能            
#define  OHRE_EN             (0)           //单位- 恢复重启
#define  OH1NMS              (5000)        //单位- 过热检测时间 OH1
#define  OH2NMS              (5000)        //单位- 过热检测时间 OH2

//======================================================================
/*
驱动板和电机参数配置区：
*/
//母线电压采样
#define RV_BUS_1   (20.0)         //单位KΩ 分压电阻    Y
#define RV_BUS_2   (1.0)          //单位KΩ 采样电阻    Y
//------------------------------------------------------------------------
//电流采样
#define Rs         (0.0025)        //单位Ω   采样电阻    Y
#define RI_BUS_1   (12.0)         //单位KΩ  运算放大器电阻 Y
#define RI_BUS_2   (2.0)          //单位KΩ  运算放大器电阻 Y 

//电机参数设定
#define POLE_PAIR     (4)         //单位* 电机极对数         Y
#define BASE_VOLTAGE  (18)        //单位V 电机额定电压       Y
#define BASE_SPEED    (20000)     //单位rpm 电机额定转速*1.5 Y
//------------------------------------------------------------------------      

#endif /*__USER_CONF_H*/

