This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2800137: ModuleOverCurrent fault occur

Part Number: TMS320F2800137

Tool/software:

Dear Sir,

module over current =1 error occur.

i have used TIDM-02010E32 evolution board .

but here module over current =1 error occur.

how to resolved this error.

for details please find user_mtr1.h file.

//#############################################################################
// $Copyright:
// Copyright (C) 2017-2023 Texas Instruments Incorporated - http://www.ti.com/
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
//   Redistributions of source code must retain the above copyright
//   notice, this list of conditions and the following disclaimer.
//
//   Redistributions in binary form must reproduce the above copyright
//   notice, this list of conditions and the following disclaimer in the
//   documentation and/or other materials provided with the
//   distribution.
//
//   Neither the name of Texas Instruments Incorporated nor the names of
//   its contributors may be used to endorse or promote products derived
//   from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// $
//#############################################################################


//! \file   /solutions/tidm_02010_dmpfc/common/include/user_mtr1.h
//! \brief  Contains the user related definitions for motor 1
//!         This file is shared with all of devices
//!


#ifndef USER_MTR1_H
#define USER_MTR1_H

//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif

//*****************************************************************************
//
//! \defgroup USER_MTR1 USER_MTR1
//! @{
//
//*****************************************************************************

// the includes

// modules
#include "userParams.h"

#include "user_dms.h"

// the defines
//******************************************************************************
// Supports F28002x, F28003x, F280015x... devices

#if defined(DMCPFC_REV3P2) || defined(DMCPFC_REV3P1)
//! \brief Defines the nominal DC bus voltage, V
//!
#define USER_M1_NOMINAL_DC_BUS_VOLTAGE_V         (200.0f)

//! \brief Defines the maximum voltage at the AD converter, V
//  Full scale voltage of AD converter, not the maximum voltage
#define USER_M1_ADC_FULL_SCALE_VOLTAGE_V         (404.1292683f)     // 8.2k

//! \brief Defines the analog voltage filter pole location, Hz
//!
#define USER_M1_VOLTAGE_FILTER_POLE_Hz           (405.1455619f)     // 8.2k/47nF

#if !defined(MOTOR1_DCLINKSS)          // Three shunt resistor
//! \brief Defines the maximum current at the AD converter, A
//  Full scale current of AD converter, not the maximum current of the motor
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (37.18f)           // (0.01)/(7.5k)/(825+20)

//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF     (1.0f)

//! \brief ADC current offsets for A, B, and C phases
#define USER_M1_IA_OFFSET_A         (18.2383938f)   // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IB_OFFSET_A         (18.1512699f)   // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IC_OFFSET_A         (18.2062855f)   // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A

// The maximum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MAX     (USER_M1_IA_OFFSET_A * 1.10f)
#define USER_M1_IB_OFFSET_A_MAX     (USER_M1_IB_OFFSET_A * 1.10f)
#define USER_M1_IC_OFFSET_A_MAX     (USER_M1_IC_OFFSET_A * 1.10f)

// The minimum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MIN     (USER_M1_IA_OFFSET_A * 0.90f)
#define USER_M1_IB_OFFSET_A_MIN     (USER_M1_IB_OFFSET_A * 0.90f)
#define USER_M1_IC_OFFSET_A_MIN     (USER_M1_IC_OFFSET_A * 0.90f)

#else   // MOTOR1_DCLINKSS                 // Single shunt resistor
//! \brief Defines the maximum current at the AD converter, A
//  Full scale current of AD converter, not the maximum current of the motor
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (37.18f)          //  (0.01)/(7.5k)/(825+20) single shunt for compressor drive

//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF         (-1.0f)

//! \brief ADC current offsets for dc-link
#define USER_M1_IDC_OFFSET_A            (-30.5651188f)          // Calibration vlue
//#define USER_M1_IDC_OFFSET_A            (-33.83237548f)         // 4.7K(D)/47.5K(S)

// The dc-link offset setting value to check if offset calibration is correct
#define USER_M1_IDC_OFFSET_A_MAX       (USER_M1_IDC_OFFSET_A * 1.10f)
#define USER_M1_IDC_OFFSET_A_MIN       (USER_M1_IDC_OFFSET_A * 0.90f)

// Tdt  =  2.20us (Dead-time between top and bottom switch)
// Tpd  =  0.75us (Gate driver propagation delay)
// Tr   =  0.35us (Rise time of amplifier including power switches turn on time)
// Ts   =  1.0us  (Settling time of amplifier)
// Ts&h =  180ns  (ADC sample&holder = (16 + 2) SYSCLK)
// T_MinAVDuration = Tdt+Tpd+Tr+Ts+Ts&h
//                 = 2200+750+350+1000+180 = 4480ns => 450 SYSCLK cycles
// T_SampleDelay   = Tdt+Tpd+Tr+Ts
//                 = 2200+750+350+1000 = 4300ns => 430 SYSCLK cycles
//! \brief Defines the minimum duration, Clock Cycle
//!
#define USER_M1_DCLINKSS_MIN_DURATION   (450U)

//! \brief Defines the sample delay, Clock Cycle
//!
#define USER_M1_DCLINKSS_SAMPLE_DELAY   (430U)
#endif  // MOTOR1_DCLINKSS

//! \brief ADC voltage offsets for A, B, and C phases
#define USER_M1_VA_OFFSET_SF    (0.497367263f)
#define USER_M1_VB_OFFSET_SF    (0.496987134f)
#define USER_M1_VC_OFFSET_SF    (0.501186967f)

//! \brief Defines the number of current sensors
#define USER_M1_NUM_CURRENT_SENSORS             (3)

//! \brief Defines the number of voltage sensors
#define USER_M1_NUM_VOLTAGE_SENSORS             (3)

//! \brief motor lost phase current threshold
#define USER_M1_LOST_PHASE_CURRENT_A            (0.2f)

//! \brief motor unbalance ratio percent threshold
#define USER_M1_UNBALANCE_RATIO                 (0.6f)

//! \brief motor over load power threshold
#define USER_M1_OVER_LOAD_POWER_W               (1500.0f)

//! \brief motor stall current threshold
#define USER_M1_STALL_CURRENT_A                 (10.0f)

//! \brief motor fault check current threshold
#define USER_M1_FAULT_CHECK_CURRENT_A           (0.2f)

//! \brief motor failed maximum speed threshold
#define USER_M1_FAIL_SPEED_MAX_Hz               (500.0f)

//! \brief motor failed minimum speed threshold
#define USER_M1_FAIL_SPEED_MIN_Hz               (5.0f)

//! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz
#ifndef PFC_DISABLE
#if defined(_F28002x)          // 100MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.003842459f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (8328)

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK      (1)

#elif defined(_F28003x)        // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK      (1)

#elif defined(_F280013x)       // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))  //(6.00240096f) // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK      (1)

#elif defined(_F280015x)       // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK      (1)

#else   // !_F28002x && !_F28003x
#error Not select the right device for this reference design
#endif  // !_F28002x && !_F28003x
#else  // PFC_DISABLE
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.0))
#define USER_M1_PWM_TBPRD_NUM       (USER_SYSTEM_FREQ_MHz * 1000 / USER_M1_PWM_FREQ_kHz / 2)

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK      (1)
#endif  // PFC_DISABLE


// end of DMCPFC_REV3P2 | DMCPFC_REV3P1
//******************************************************************************
#elif defined(HVMTRPFC_REV1P1)

//! \brief Defines the nominal DC bus voltage, V
//!
#define USER_M1_NOMINAL_DC_BUS_VOLTAGE_V         (220.0f)

//! \brief Defines the maximum voltage at the AD converter
//  Full scale voltage of AD converter, not the current voltage
#define USER_M1_ADC_FULL_SCALE_VOLTAGE_V         (409.90f)

//! \brief Defines the analog voltage filter pole location, Hz
//!
#define USER_M1_VOLTAGE_FILTER_POLE_Hz           (375.55f)

#if !defined(MOTOR1_DCLINKSS)              // Three shunt resistor
//! \brief Defines the maximum current at the AD converter
// High Voltage motor control kit
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (19.89f)

//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF     (1.0f)

//! \brief ADC current offsets for A, B, and C phases
#define USER_M1_IA_OFFSET_A     (9.945f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IB_OFFSET_A     (9.945f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IC_OFFSET_A     (9.945f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A

// The maximum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MAX     (USER_M1_IA_OFFSET_A * 1.10f)
#define USER_M1_IB_OFFSET_A_MAX     (USER_M1_IB_OFFSET_A * 1.10f)
#define USER_M1_IC_OFFSET_A_MAX     (USER_M1_IC_OFFSET_A * 1.10f)

// The minimum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MIN     (USER_M1_IA_OFFSET_A * 0.90f)
#define USER_M1_IB_OFFSET_A_MIN     (USER_M1_IB_OFFSET_A * 0.90f)
#define USER_M1_IC_OFFSET_A_MIN     (USER_M1_IC_OFFSET_A * 0.90f)

#else   // MOTOR1_DCLINKSS                 // Three shunt resistor
//! \brief Defines the maximum current at the AD converter
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (19.995f)

//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF         (-1.0f)

//! \brief ADC current offsets for dc-link
#define USER_M1_IDC_OFFSET_AD           (2048.0f)

// The dc-link offset setting value to check if offset calibration is correct
#define USER_M1_IDC_OFFSET_AD_MAX       (USER_M1_IDC_OFFSET_AD + 100.0f)
#define USER_M1_IDC_OFFSET_AD_MIN       (USER_M1_IDC_OFFSET_AD - 100.0f)

// Tdt  =  2.45us (Dead-time between top and bottom switch)
// Tpd  =  0.75us (Gate driver propagation delay)
// Tr   =  0.35us (Rise time of amplifier including power switches turn on time)
// Ts   =  1.0us  (Settling time of amplifier)
// Ts&h =  180ns  (ADC sample&holder = (16 + 2) SYSCLK)
// T_MinAVDuration = Tdt+Tpd+Tr+Ts+Ts&h
//                 = 2400+350+1000+180 = 4730ns => 480 SYSCLK cycles
// T_SampleDelay   = Tdt+Tpd+Tr+Ts
//                 = 2400+750+350+1000 = 4550ns => 455 SYSCLK cycles
//! \brief Defines the minimum duration, Clock Cycle
//!
#define USER_M1_DCLINKSS_MIN_DURATION   (480U)

//! \brief Defines the sample delay, Clock Cycle
//!
#define USER_M1_DCLINKSS_SAMPLE_DELAY   (455U)
#endif   // !MOTOR1_DCLINKSS

//! \brief ADC voltage offsets for A, B, and C phases
#define USER_M1_VA_OFFSET_SF    (0.503290117f)
#define USER_M1_VB_OFFSET_SF    (0.500881076f)
#define USER_M1_VC_OFFSET_SF    (0.497107089f)

//! \brief Defines the number of current sensors
#define USER_M1_NUM_CURRENT_SENSORS         (3)

//! \brief Defines the number of voltage sensors
#define USER_M1_NUM_VOLTAGE_SENSORS         (3)

//! \brief motor lost phase current threshold
#define USER_M1_LOST_PHASE_CURRENT_A        (0.02f)

//! \brief motor unbalance ratio percent threshold
#define USER_M1_UNBALANCE_RATIO             (0.2f)

//! \brief motor over load power threshold
#define USER_M1_OVER_LOAD_POWER_W           (50.0f)

//! \brief motor stall current threshold
#define USER_M1_STALL_CURRENT_A             (10.0f)

//! \brief motor fault check current threshold
#define USER_M1_FAULT_CHECK_CURRENT_A       (0.2f)

//! \brief motor failed maximum speed threshold
#define USER_M1_FAIL_SPEED_MAX_Hz           (500.0f)

//! \brief motor failed minimum speed threshold
#define USER_M1_FAIL_SPEED_MIN_Hz           (5.0f)

//! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz
#ifndef PFC_DISABLE
#if defined(_F28002x)       // 100MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.003842459f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (8328)
#elif defined(_F28003x)       // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#elif defined(_F280013x)       // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#elif defined(_F280015x)       // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#else   // !_F28002x && !_F28003x  && !_F280013x
#error Not select the right device for this reference design
#endif  // !_F28002x && !_F28003x  && !_F280013x
#else  // PFC_DISABLE
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.0))
#define USER_M1_PWM_TBPRD_NUM       (USER_SYSTEM_FREQ_MHz * 1000 / USER_M1_PWM_FREQ_kHz / 2)
#endif  // PFC_DISABLE

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK        (1)

// end of HVMTRPFC_REV1P1
//******************************************************************************
#elif defined(BSXL8323RH_REVB)
//! \brief Defines the nominal DC bus voltage, V
//!
#define USER_M1_NOMINAL_DC_BUS_VOLTAGE_V         (48.0f)

//! \brief Defines the maximum voltage at the AD converter
#define USER_M1_ADC_FULL_SCALE_VOLTAGE_V         (57.52845691f)

//! \brief Defines the analog voltage filter pole location, Hz
#define USER_M1_VOLTAGE_FILTER_POLE_Hz           (680.4839141f)

#if !defined(MOTOR1_DCLINKSS)              // Three shunt resistor
//! \brief Defines the maximum current at the AD converter
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (47.14285714f)     // gain=10


//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF     (1.0f)

//! \brief ADC current offsets for A, B, and C phases
#define USER_M1_IA_OFFSET_A         (23.57f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IB_OFFSET_A         (23.57f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A
#define USER_M1_IC_OFFSET_A         (23.57f)        // ~0.5 * USER_M1_ADC_FULL_SCALE_CURRENT_A

// The maximum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MAX     (USER_M1_IA_OFFSET_A * 1.10f)
#define USER_M1_IB_OFFSET_A_MAX     (USER_M1_IB_OFFSET_A * 1.10f)
#define USER_M1_IC_OFFSET_A_MAX     (USER_M1_IC_OFFSET_A * 1.10f)

// The minimum offset setting value to check if offset calibration is correct
#define USER_M1_IA_OFFSET_A_MIN     (USER_M1_IA_OFFSET_A * 0.90f)
#define USER_M1_IB_OFFSET_A_MIN     (USER_M1_IB_OFFSET_A * 0.90f)
#define USER_M1_IC_OFFSET_A_MIN     (USER_M1_IC_OFFSET_A * 0.90f)

#else   // !MOTOR1_DCLINKSS              // Three shunt resistor
//! \brief Defines the maximum current at the AD converter
#define USER_M1_ADC_FULL_SCALE_CURRENT_A         (47.14285714f)     // gain=10

//! \brief Defines the sign of the current_sf based on
//!        the polarity of the current feedback circuit
//!
//!        the "sign" = -1.0f if the current feedback polarity is positive that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the noninverting pin of the operational amplifier
//!
//!        the "sign" = 1.0f if the current feedback polarity is negative that
//!        means the same pin of the shunt resistor is connected to ground and
//!        is also connected to the inverting pin of the operational amplifier
#define USER_M1_SIGN_CURRENT_SF         (-1.0f)

//! \brief ADC current offsets for dc-link
#define USER_M1_IDC_OFFSET_AD       (2048.0f)

// The dc-link offset setting value to check if offset calibration is correct
#define USER_M1_IDC_OFFSET_AD_MAX       (USER_M1_IDC_OFFSET_AD + 100.0f)
#define USER_M1_IDC_OFFSET_AD_MIN       (USER_M1_IDC_OFFSET_AD - 100.0f)

// Tdt  =  2.45us (Dead-time between top and bottom switch)
// Tpd  =  0.75us (Gate driver propagation delay)
// Tr   =  0.35us (Rise time of amplifier including power switches turn on time)
// Ts   =  1.0us  (Settling time of amplifier)
// Ts&h =  180ns  (ADC sample&holder = (16 + 2) SYSCLK)
// T_MinAVDuration = Tdt+Tpd+Tr+Ts+Ts&h
//                 = 2400+350+1000+180 = 4730ns => 480 SYSCLK cycles
// T_SampleDelay   = Tdt+Tpd+Tr+Ts
//                 = 2400+750+350+1000 = 4550ns => 455 SYSCLK cycles
//! \brief Defines the minimum duration, Clock Cycle
//!
#define USER_M1_DCLINKSS_MIN_DURATION   (120U)

//! \brief Defines the sample delay, Clock Cycle
//!
#define USER_M1_DCLINKSS_SAMPLE_DELAY   (100U)
#endif  // MOTOR1_DCLINKSS


//! \brief ADC voltage offsets for A, B, and C phases
#define USER_M1_VA_OFFSET_SF        (0.500514159f)
#define USER_M1_VB_OFFSET_SF        (0.506255884f)
#define USER_M1_VC_OFFSET_SF        (0.503381569f)

//! \brief Defines the number of current sensors
#define USER_M1_NUM_CURRENT_SENSORS         (3)

//! \brief Defines the number of voltage sensors
#define USER_M1_NUM_VOLTAGE_SENSORS         (3)

//! \brief motor lost phase current threshold
#define USER_M1_LOST_PHASE_CURRENT_A        (0.02f)

//! \brief motor unbalance ratio percent threshold
#define USER_M1_UNBALANCE_RATIO             (1.0f)

//! \brief motor stall current threshold
#define USER_M1_STALL_CURRENT_A             (10.0f)

//! \brief motor fault check current threshold
#define USER_M1_FAULT_CHECK_CURRENT_A       (0.2f)

//! \brief motor failed maximum speed threshold
#define USER_M1_FAIL_SPEED_MAX_Hz           (500.0f)

//! \brief motor failed minimum speed threshold
#define USER_M1_FAIL_SPEED_MIN_Hz           (5.0f)

//! \brief Defines the Pulse Width Modulation (PWM) frequency, kHz
#ifndef PFC_DISABLE
#if defined(_F28002x)           // 100MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.003842459f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (8328)
#elif defined(_F28003x)         // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#elif defined(_F280013x)        // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#elif defined(_F280015x)        // 120MHz CPU Clock
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.00240096f))   // 6.0kHz/72.0kHz PFC
#define USER_M1_PWM_TBPRD_NUM       (9996)
#else   // !_F28002x && !_F28003x  && !_F280013x
#error Not select the right device for this reference design
#endif  // !_F28002x && !_F28003x  && !_F280013x
#else  // PFC_DISABLE
#define USER_M1_PWM_FREQ_kHz        ((float32_t)(6.0))
#define USER_M1_PWM_TBPRD_NUM       (USER_SYSTEM_FREQ_MHz * 1000 / USER_M1_PWM_FREQ_kHz / 2)
#endif  // PFC_DISABLE

//! \brief Defines the number of pwm clock ticks per isr clock tick
//!        Note: Valid values are 1, 2 or 3 only
#define USER_M1_NUM_PWM_TICKS_PER_ISR_TICK        (1)

// end of BSXL8323RH_REVB
//******************************************************************************
//******************************************************************************
#else
#error Not set the hardware board configuration for PFC
#endif

//! \brief Vbus used to calculate the voltage offsets A, B, and C
#define USER_M1_VBUS_OFFSET_V  (0.5*USER_M1_ADC_FULL_SCALE_VOLTAGE_V)


//! \brief Defines the maximum negative current to be applied in Id reference
#define USER_M1_MAX_NEGATIVE_ID_REF_CURRENT_A    ((float32_t)(-2.0))

//! \brief Defines the number of ISR clock ticks per current controller clock tick
#define USER_M1_NUM_ISR_TICKS_PER_CURRENT_TICK     (1)


//! \brief Defines the number of ISR clock ticks per speed controller clock tick
#define USER_M1_NUM_ISR_TICKS_PER_SPEED_TICK     (10)

//! \brief Defines the Pulse Width Modulation (PWM) period, usec
#define USER_M1_PWM_PERIOD_usec     ((float32_t)1000.0/USER_M1_PWM_FREQ_kHz)


//! \brief Defines the Interrupt Service Routine (ISR) frequency, Hz
#define USER_M1_ISR_FREQ_Hz         (USER_M1_PWM_FREQ_kHz * (float32_t)1000.0 / (float32_t)USER_M1_NUM_PWM_TICKS_PER_ISR_TICK)

//! \brief Defines the SFRA sampling, Hz
#define USER_M1_SAMPLING_FREQ_Hz    USER_M1_ISR_FREQ_Hz


//! \brief Defines the Interrupt Service Routine (ISR) period, usec
#define USER_M1_ISR_PERIOD_usec     (USER_M1_PWM_PERIOD_usec * (float32_t)USER_M1_NUM_PWM_TICKS_PER_ISR_TICK)

//! \brief Defines the ADC timer frequency, Hz
#define USER_M1_ADC_TIMER_FREQ_HZ   (USER_M1_ISR_FREQ_Hz * (float32_t)DMA_MTR_ADC_BUF_SIZE)

//! \brief Defines the direct voltage (Vd) scale factor
#define USER_M1_VD_SF               ((float32_t)(0.95))


//! \brief Defines the voltage scale factor for the system
#define USER_M1_VOLTAGE_SF          (USER_M1_ADC_FULL_SCALE_VOLTAGE_V / 4096.0f)

//! \brief Defines the current scale factor for the system
#define USER_M1_CURRENT_SF          (USER_M1_ADC_FULL_SCALE_CURRENT_A / 4096.0f)


//! \brief Defines the current scale invert factor for the system
#define USER_M1_CURRENT_INV_SF      (4096.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A)


//! \brief Defines the analog voltage filter pole location, rad/s
#define USER_M1_VOLTAGE_FILTER_POLE_rps  (MATH_TWO_PI * USER_M1_VOLTAGE_FILTER_POLE_Hz)

//! \brief Defines the maximum Vs magnitude in per units allowed
//! \brief This value sets the maximum magnitude for the output of the Id and
//! \brief Iq PI current controllers. The Id and Iq current controller outputs
//! \brief are Vd and Vq. The relationship between Vs, Vd, and Vq is:
//! \brief Vs = sqrt(Vd^2 + Vq^2).  In this FOC controller, the Vd value is set
//! \brief equal to USER_MAX_VS_MAG*USER_VD_MAG_FACTOR.
//! \brief so the Vq value is set equal to sqrt(USER_MAX_VS_MAG^2 - Vd^2).
//!
//! \brief Set USER_MAX_VS_MAG = 0.5 for a pure sinewave with a peak at
//! \brief SQRT(3)/2 = 86.6% duty cycle.  No current reconstruction
//! \brief is needed for this scenario.
//!
//! \brief Set USER_MAX_VS_MAG = 1/SQRT(3) = 0.5774 for a pure sinewave
//! \brief with a peak at 100% duty cycle.  Current reconstruction
//! \brief will be needed for this scenario (Lab08).
//!
//! \brief Set USER_MAX_VS_MAG = 2/3 = 0.6666 to create a trapezoidal
//! \brief voltage waveform.  Current reconstruction will be needed
//! \brief for this scenario (Lab08).
//!
//! \brief For space vector over-modulation, see lab08 for details on
//! \brief system requirements that will allow the SVM generator to
//! \brief go all the way to trapezoidal.
//#define USER_M1_MAX_VS_MAG_PU            (0.66f)
//#define USER_M1_MAX_VS_MAG_PU            (0.57f)
#define USER_M1_MAX_VS_MAG_PU              (0.5f)


//! \brief Defines the reference Vs magnitude in per units allowed
//! \      Set the value equal from 0.5 to 0.95 of the maximum Vs magnitude
#define USER_M1_VS_REF_MAG_PU           (float32_t)(0.95f) * USER_MAX_VS_MAG_PU)

//! \brief Defines the R/L excitation frequency, Hz
#define USER_M1_R_OVER_L_EXC_FREQ_Hz    ((float32_t)(300.0f))


//! \brief Defines the R/L Kp scale factor, pu
//! \brief Kp used during R/L is USER_M1_R_OVER_L_KP_SF * USER_M1_NOMINAL_DC_BUS_VOLTAGE_V / USER_MOTOR1_MAX_CURRENT_A;
#define USER_M1_R_OVER_L_KP_SF          ((float32_t)(0.02f))


//! \brief Defines maximum acceleration for the estimation speed profiles, Hz/sec
#define USER_M1_MAX_ACCEL_Hzps          ((float32_t)(2.0f))


//! \brief Defines the controller execution period, usec
#define USER_M1_CTRL_PERIOD_usec        (USER_M1_ISR_PERIOD_usec)


//! \brief Defines the controller execution period, sec
#define USER_M1_CTRL_PERIOD_sec         ((float32_t)USER_M1_CTRL_PERIOD_usec/(float32_t)1000000.0f)


//! \brief Defines the IdRated delta to use during estimation
#define USER_M1_IDRATED_DELTA_A                 ((float32_t)(0.0001f))

//! \brief Defines the forced angle frequency, Hz
#define USER_M1_FORCE_ANGLE_FREQ_Hz             ((float32_t)(1.0))

//! \brief Defines the forced angle acceleration, Hz
#define USER_M1_FORCE_ANGLE_ACCEL_Hzps          ((float32_t)(10.0))

//! \brief Defines the fraction of IdRated to use during inductance estimation
#define USER_M1_IDRATED_FRACTION_FOR_L_IDENT    ((float32_t)(0.5f))


//! \brief Defines the fraction of SpeedMax to use during inductance estimation
#define USER_M1_SPEEDMAX_FRACTION_FOR_L_IDENT   ((float32_t)(1.0f))


//! \brief Defines the Power Warp gain for computing Id reference
//! \brief If motor parameters are known, set this gain to:
//! \brief USER_M1_PW_GAIN = SQRT(1.0 + USER_MOTOR1_Rr_Ohm / USER_MOTOR1_Rs_Ohm)
#define USER_M1_PW_GAIN                         ((float32_t)(1.0f))


//! \brief Defines the pole location for the DC bus filter, rad/sec
#define USER_M1_DCBUS_POLE_rps                  ((float32_t)(100.0f))


//! \brief Defines the pole location for the voltage and current offset estimation, rad/s
#define USER_M1_OFFSET_POLE_rps                 ((float32_t)(20.0f))


//! \brief Defines the pole location for the speed control filter, rad/sec
#define USER_M1_SPEED_POLE_rps                  ((float32_t)(100.0f))


//! \brief Defines the near zero speed limit for electrical frequency estimation, Hz
//!        The flux integrator uses this limit to regulate flux integration
#define USER_M1_FREQ_NEARZEROSPEEDLIMIT_Hz     ((float32_t)(2.0f))


//! \brief Defines the pole location for the direction filter, rad/sec
#define USER_M1_DIRECTION_POLE_rps             (MATH_TWO_PI * (float32_t)10.0f)


//! \brief Defines the pole location for the second direction filter, rad/sec
#define USER_M1_DIRECTION_POLE_2_rps           (MATH_TWO_PI * (float32_t)100.0f)


//! \brief Defines the pole location for the flux estimation, rad/sec
#define USER_M1_FLUX_POLE_rps                  ((float32_t)(10.0f))


//! \brief Defines the pole location for the R/L estimation, rad/sec
#define USER_M1_R_OVER_L_POLE_rps              ((float32_t)10.0f)


//! \brief Defines the convergence factor for the estimator
#define USER_M1_EST_KAPPAQ                     ((float32_t)(1.5f))

//! brief Define the factor of the reference voltage for Field Weakening Control
#define USER_M1_FWC_VREF               (0.98f * USER_M1_MAX_VS_MAG_PU)

//! brief Define the Kp gain for Field Weakening Control
#define USER_M1_FWC_KP                 (0.05f)

//! brief Define the Ki gain for Field Weakening Control
#define USER_M1_FWC_KI                 (0.005f)

//! brief Define the maximum current vector angle for Field Weakening Control
#define USER_M1_FWC_MAX_ANGLE          (-75.0f)                        // degree
#define USER_M1_FWC_MAX_ANGLE_RAD      (USER_M1_FWC_MAX_ANGLE /180.0f * MATH_PI)

//! brief Define the minimum current vector angle for Field Weakening Control
#define USER_M1_FWC_MIN_ANGLE          (0.0f)                          // degree
#define USER_M1_FWC_MIN_ANGLE_RAD      (USER_M1_FWC_MIN_ANGLE /180.0f * MATH_PI)

//! \brief Defines the number of motor over load setting time
//!  timer base = 5ms, 1s
#define USER_M1_OVER_LOAD_TIME_SET          (200)

//! \brief Defines the number of motor stall setting time
//!  timer base = 5ms, 1s
#define USER_M1_STALL_TIME_SET              (2000)

//! \brief Defines the number of phase unbalance setting time
//!  timer base = 5ms, 3s
#define USER_M1_UNBALANCE_TIME_SET          (4000)

//! \brief Defines the number of lost phase setting time
//!  timer base = 5ms, 10s
#define USER_M1_LOST_PHASE_TIME_SET         (2000)

//! \brief Defines the number of over speed setting time
//!  timer base = 5ms, 3s
#define USER_M1_OVER_SPEED_TIME_SET         (600)

//! \brief Defines the number of startup failed setting time
//!  timer base = 5ms, 5s
#define USER_M1_STARTUP_FAIL_TIME_SET       (4000)

//! \brief Defines the number of over load setting times
#define USER_M1_OVER_CURRENT_TIMES_SET      (5)

//! \brief Defines the number of stop wait time
//!  timer base = 5ms, 30s
#define USER_M1_STOP_WAIT_TIME_SET          (100)

//! \brief Defines the number of restart wait time
//!  timer base = 5ms, 10s
#define USER_M1_RESTART_WAIT_TIME_SET       (2000)

//! \brief Defines the number of restart time
#define USER_M1_START_TIMES_SET             (3)

//! \brief Defines the current filter pole location, Hz
#define USER_M1_IS_FILTER_POLE_Hz           (USER_M1_PWM_FREQ_kHz * 500.0f)      // Half of PWM frequency

//! \brief Defines the current filter pole location, rad/s
//!
#define USER_M1_IS_FILTER_POLE_rps          (MATH_TWO_PI * USER_M1_IS_FILTER_POLE_Hz)


//! \brief Defines the voltage filter pole location, Hz
#define USER_M1_VS_FILTER_POLE_Hz           (USER_M1_PWM_FREQ_kHz * 2000.0f)     // twice of PWM frequency

//! \brief Defines the voltage filter pole location, rad/s
//!
#define USER_M1_VS_FILTER_POLE_rps          (MATH_TWO_PI * USER_M1_VS_FILTER_POLE_Hz)

//==============================================================================
// Motor defines
#define USER_MOTOR1 Voepl_Compressor_Motor     //*Tested, SS+Load
//#define USER_MOTOR1 Estun_EMJ_04APB22     //*Tested, SS+Load
//#define USER_MOTOR1 Anaheim_BLWS235D      //*Tested
//#define USER_MOTOR1 Anaheim_BLZ362S       //*Tested
//#define USER_MOTOR1 Baldor_BSM90N175      //*Tested
//#define USER_MOTOR1 Teknic_M2310PLN04K    //*Tested
//#define USER_MOTOR1 Anaheim_BLY172S_24V   //*Tested
//#define USER_MOTOR1 GMCC_KSK89D53U        // M_Compressor
//#define USER_MOTOR1 QXA_A091ZE190A        // G_Compressor
//#define USER_MOTOR1 Marathon_N56PNRA10102
//#define USER_MOTOR1 ziehlab_Fan160hv
//#define USER_MOTOR1 Dhvac_Fan110hv

#if (USER_MOTOR1 == Voepl_Compressor_Motor)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM   //PMSM
#define USER_MOTOR1_NUM_POLE_PAIRS          (3)
#define USER_MOTOR1_Rr_Ohm                  (0.0)

#define USER_MOTOR1_Rs_Ohm                    (2.16)  //(2.16)g  //(0.7100)
#define USER_MOTOR1_Ls_d_H                    (0.0095)  //(0.0095)g    //(0.007260)
#define USER_MOTOR1_Ls_q_H                    (0.0158) //(0.0158)g    //(0.009758)
#define USER_MOTOR1_RATED_FLUX_VpHz            (0.40656)//(0.455)g //(0.377903223) //orignal

#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)  //(21.0)g //(NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (1.0f)      // A - 10~30% of rated current of the motor
#define USER_MOTOR1_IND_EST_CURRENT_A       (-0.5f)     // A - 10~30% of rated current of the motor, just enough to enable rotation
#define USER_MOTOR1_MAX_CURRENT_A           (15.0f)  //(5.0f)      // A - 30~150% of rated current of the motor
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0f)     // Hz - 10~30% of rated frequency of the motor
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (2.2e-4)//(2.2e-4)g    //(3.100017e-5)

#define USER_MOTOR1_RATED_VOLTAGE_V        (400.0f) //(400.0f)g     //(200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz              (5.0f)  //(10.0f)g  //(5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)    //(120.0f)g //(400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (5.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (160.0f)  //(9.0f) orignal
#define USER_MOTOR1_VOLT_MAX_V              (400.0f)//(160.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A         (1.0f)  //(0.20f)g  //(1.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (1.0f)  //(0.20f)g  //(1.0f)
#define USER_MOTOR1_OVER_CURRENT_A          (20.0f)  // (4.5f)  //changed this parameter
#define USER_MOTOR1_LOCK_CURRENT_A          (1.0f)

#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (20.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (30.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.25f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_SF        (1.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

//#if (USER_MOTOR1 == Estun_EMJ_04APB22)
//#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
//#define USER_MOTOR1_NUM_POLE_PAIRS          (4)
//#define USER_MOTOR1_Rr_Ohm                  (0.0)
//
//#define USER_MOTOR1_Rs_Ohm                  (2.12655902)
//#define USER_MOTOR1_Ls_d_H                  (0.00860825367)
//#define USER_MOTOR1_Ls_q_H                  (0.00860825367)
//#define USER_MOTOR1_RATED_FLUX_VpHz         (0.377903223)
//
//#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
//#define USER_MOTOR1_RES_EST_CURRENT_A       (1.0f)      // A - 10~30% of rated current of the motor
//#define USER_MOTOR1_IND_EST_CURRENT_A       (-0.5f)     // A - 10~30% of rated current of the motor, just enough to enable rotation
//#define USER_MOTOR1_MAX_CURRENT_A           (5.0f)      // A - 30~150% of rated current of the motor
//#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0f)     // Hz - 10~30% of rated frequency of the motor
//#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
//#define USER_MOTOR1_INERTIA_Kgm2            (3.100017e-5)
//
//#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
//#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)
//
//#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
//#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)
//
//#define USER_MOTOR1_FREQ_LOW_Hz             (5.0f)
//#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
//#define USER_MOTOR1_VOLT_MIN_V              (9.0f)
//#define USER_MOTOR1_VOLT_MAX_V              (160.0f)
//
//#define USER_MOTOR1_ALIGN_CURRENT_A         (1.0f)
//#define USER_MOTOR1_STARTUP_CURRENT_A       (1.0f)
//#define USER_MOTOR1_OVER_CURRENT_A          (4.5f)
//#define USER_MOTOR1_LOCK_CURRENT_A          (1.0f)
//
//#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
//#define USER_MOTOR1_SPEED_START_Hz          (20.0f)
//#define USER_MOTOR1_SPEED_FORCE_Hz          (30.0f)
//
//#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
//#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)
//
//// Only for eSMO
//#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
//#define USER_MOTOR1_KSLIDE_MIN             (0.25f)
//
//#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
//#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
//#define USER_MOTOR1_PLL_KP_SF              (5.0f)
//
//#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
//#define USER_MOTOR1_BEMF_KSLF_FC_SF        (1.0f)
//#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
//#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)
//
//// vibration compensation parameters
//#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
//#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
//#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == Baldor_BSM90N175)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (4)
#define USER_MOTOR1_Rr_Ohm                  (0.0)

#define USER_MOTOR1_Rs_Ohm                  (0.640710652f)
#define USER_MOTOR1_Ls_d_H                  (0.00247943331f)
#define USER_MOTOR1_Ls_q_H                  (0.00247943331f)
#define USER_MOTOR1_RATED_FLUX_VpHz         (0.609170914f)

#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (1.5f)      // A - 10~30% of rated current of the motor
#define USER_MOTOR1_IND_EST_CURRENT_A       (-1.5f)     // A - 10~30% of rated current of the motor, just enough to enable rotation
#define USER_MOTOR1_MAX_CURRENT_A           (15.0f)     // A - 30~150% of rated current of the motor
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0f)     // Hz - 10~30% of rated frequency of the motor
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (6.327e-4)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (10.0f)
#define USER_MOTOR1_VOLT_MAX_V              (200.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A         (3.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (5.0f)

#if defined(HVMTRPFC_REV1P1)
#define USER_MOTOR1_OVER_CURRENT_A          (9.5f)
#else   // !HVMTRPFC_REV1P1
#define USER_MOTOR1_OVER_CURRENT_A          (17.5f)
#endif   // !HVMTRPFC_REV1P1

#define USER_MOTOR1_LOCK_CURRENT_A          (3.5f)

#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (10.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (0.400f)
#define USER_MOTOR1_KSLIDE_MIN             (0.125f)

#define USER_MOTOR1_PLL_KP_MAX             (5.0f)
#define USER_MOTOR1_PLL_KP_MIN             (1.0f)
#define USER_MOTOR1_PLL_KP_SF              (10.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (2.5f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

#elif (USER_MOTOR1 == Marathon_N56PNRA10102)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (3)
#define USER_MOTOR1_Rr_Ohm                  (0.0)
#define USER_MOTOR1_Rs_Ohm                  (2.21499157)
#define USER_MOTOR1_Ls_d_H                  (0.0274559446)
#define USER_MOTOR1_Ls_q_H                  (0.0274559446)
#define USER_MOTOR1_RATED_FLUX_VpHz         (2.69975376)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (2.5)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-2.0)
#define USER_MOTOR1_MAX_CURRENT_A           (8.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (20.0)
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (3.100017e-5)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0)

#define USER_MOTOR1_FREQ_LOW_Hz             (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0)
#define USER_MOTOR1_VOLT_MIN_V              (20.0)
#define USER_MOTOR1_VOLT_MAX_V              (200.0)

#define USER_MOTOR1_ALIGN_CURRENT_A         (2.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (2.5)
#define USER_MOTOR1_OVER_CURRENT_A          (9.5)
#define USER_MOTOR1_LOCK_CURRENT_A          (1.0f)

#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (10.0)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0)

#define USER_MOTOR1_ACCEL_START_Hzps          (10.0)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (100.0)

#elif (USER_MOTOR1 == QXA_A091ZE190A)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (3)
#define USER_MOTOR1_Rr_Ohm                  (0.0)
#define USER_MOTOR1_Rs_Ohm                  (0.771440625f)
#define USER_MOTOR1_Ls_d_H                  (0.0132690407f)
#define USER_MOTOR1_Ls_q_H                  (0.0132690407f)
#define USER_MOTOR1_RATED_FLUX_VpHz         (0.50693661f)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (2.5f)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-2.0f)
#define USER_MOTOR1_MAX_CURRENT_A           (8.0f)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (20.0f)
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0f)
#define USER_MOTOR1_INERTIA_Kgm2            (3.100017e-5)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (20.0f)
#define USER_MOTOR1_VOLT_MAX_V              (200.0f)

#define USER_MOTOR1_ALIGN_DELTA_A           (0.01f)
#define USER_MOTOR1_ALIGN_CURRENT_A         (2.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (2.5f)
#define USER_MOTOR1_OVER_CURRENT_A          (9.5f)

#define USER_MOTOR1_SPEED_START_Hz          (10.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0f)
#define USER_MOTOR1_ACCEL_START_Hz          (10.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (10.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (20.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.15f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == GMCC_KSK89D53U)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (3)
#define USER_MOTOR1_Rr_Ohm                  (0.0)
#define USER_MOTOR1_Rs_Ohm                  (1.175)
#define USER_MOTOR1_Ls_d_H                  (0.0076)
#define USER_MOTOR1_Ls_q_H                  (0.0109)
#define USER_MOTOR1_RATED_FLUX_VpHz         (0.5415546)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (3.5)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-3.0)
#define USER_MOTOR1_MAX_CURRENT_A           (12.5)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (20.0)
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (0.00018)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0)

#define USER_MOTOR1_FREQ_LOW_Hz             (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0)
#define USER_MOTOR1_VOLT_MIN_V              (20.0)
#define USER_MOTOR1_VOLT_MAX_V              (200.0)

#define USER_MOTOR1_ALIGN_DELTA_A           (0.01f)
#define USER_MOTOR1_ALIGN_CURRENT_A         (2.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (3.5)
#define USER_MOTOR1_OVER_CURRENT_A          (16.0)
#define USER_MOTOR1_LOCK_CURRENT_A          (1.0f)

#define USER_MOTOR1_SPEED_START_Hz          (25.0)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0)
#define USER_MOTOR1_ACCEL_START_Hz          (10.0)

#define USER_MOTOR1_ACCEL_START_Hzps        (10.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (15.0)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.15f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)          //



#elif (USER_MOTOR1 == Drone_BLK2BLADE)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (6)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.0643650517)
#define USER_MOTOR1_Ls_d_H                 (1.14000011e-06)
#define USER_MOTOR1_Ls_q_H                 (1.14000011e-06)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.00273337867)

#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (4.0)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-3.0)
#define USER_MOTOR1_MAX_CURRENT_A          (16.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (100.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (1000)
#define USER_MOTOR1_INERTIA_Kgm2           (7.06154e-06)

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz            (1200.0f)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0f)
#define USER_MOTOR1_VOLT_MIN_V             (2.0f)
#define USER_MOTOR1_VOLT_MAX_V             (24.0f)

#define USER_MOTOR1_STARTUP_CURRENT_A      (4.0f)
#define USER_MOTOR1_OVER_CURRENT_A         (20.5f)

#define USER_MOTOR1_SPEED_START_Hz         (20.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (20.0f)
#define USER_MOTOR1_ACCEL_START_Hz         (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (100.0f)

#elif (USER_MOTOR1 == Dhvac_Fan110hv)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (5)
#define USER_MOTOR1_Rr_Ohm                  (0.0)

//#define USER_MOTOR2_Rs_Ohm                  (5.75555897f)
//#define USER_MOTOR2_Ls_d_H                  (0.0273226835f)
//#define USER_MOTOR2_Ls_q_H                  (0.0273226835f)
//#define USER_MOTOR2_RATED_FLUX_VpHz         (0.490144432f)

#define USER_MOTOR2_Rs_Ohm                  (6.54142952f)
#define USER_MOTOR2_Ls_d_H                  (0.00732990634f)
#define USER_MOTOR2_Ls_q_H                  (0.00732990634f)
#define USER_MOTOR2_RATED_FLUX_VpHz         (0.469156891f)

#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (1.0f)      // A - 10~30% of rated current of the motor
#define USER_MOTOR1_IND_EST_CURRENT_A       (-0.5f)     // A - 10~30% of rated current of the motor, just enough to enable rotation
#define USER_MOTOR1_MAX_CURRENT_A           (3.0f)      // A - 30~150% of rated current of the motor
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0f)     // Hz - 10~30% of rated frequency of the motor
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (3.100017e-5)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (5.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (10.0f)
#define USER_MOTOR1_VOLT_MAX_V              (200.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A         (0.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (1.0f)
#define USER_MOTOR1_OVER_CURRENT_A          (3.5f)
#define USER_MOTOR1_LOCK_CURRENT_A          (1.0f)

#define USER_MOTOR1_DELAY_FLYST_s           (uint16_t)(0.5f * USER_M2_ISR_FREQ_Hz) // 0.5s
#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (20.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (30.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.75f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == Teknic_M2310PLN04K)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.392925918f)
#define USER_MOTOR1_Ls_d_H                 (0.000188550417f)
#define USER_MOTOR1_Ls_q_H                 (0.000188550417f)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.0402340814f)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (2.0f)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-1.5f)
#define USER_MOTOR1_MAX_CURRENT_A          (9.0f)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (40.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (1000)
#define USER_MOTOR1_INERTIA_Kgm2           (7.06154e-06)

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz            (800.0f)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0f)
#define USER_MOTOR1_VOLT_MIN_V             (1.5f)
#define USER_MOTOR1_VOLT_MAX_V             (24.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A        (1.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A      (1.0f)
#define USER_MOTOR1_OVER_CURRENT_A         (8.5f)
#define USER_MOTOR1_LOCK_CURRENT_A         (1.0f)

#define USER_MOTOR1_SPEED_FLYST_Hz         (3.0f)
#define USER_MOTOR1_SPEED_START_Hz         (25.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (25.0f)

#define USER_MOTOR1_ACCEL_START_Hzps       (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (20.0f)

// Only for eSMO
// Low PWM frequency needs a low Kslide_max
#define USER_MOTOR1_KSLIDE_MAX             (0.55f)
#define USER_MOTOR1_KSLIDE_MIN             (0.10f)

#define USER_MOTOR1_PLL_KP_MAX             (7.25f)
#define USER_MOTOR1_PLL_KP_MIN             (1.50f)
#define USER_MOTOR1_PLL_KP_SF              (20.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == Anaheim_BLY172S_24V)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.384005845f)
#define USER_MOTOR1_Ls_d_H                 (0.000639994687f)
#define USER_MOTOR1_Ls_q_H                 (0.000639994687f)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.0327013217f)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (1.5f)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-1.5f)
#define USER_MOTOR1_MAX_CURRENT_A          (7.5f)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (40.0f)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
#define USER_MOTOR1_INERTIA_Kgm2           (4.80185e-06f)

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz            (800.0f)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0f)
#define USER_MOTOR1_VOLT_MIN_V             (1.5f)
#define USER_MOTOR1_VOLT_MAX_V             (24.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A        (1.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A      (1.0f)
#define USER_MOTOR1_OVER_CURRENT_A         (6.5f)
#define USER_MOTOR1_LOCK_CURRENT_A         (1.0f)

#define USER_MOTOR1_SPEED_FLYST_Hz         (3.0f)
#define USER_MOTOR1_SPEED_START_Hz         (25.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz         (25.0f)

#define USER_MOTOR1_ACCEL_START_Hzps       (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (20.0f)

// Only for eSMO
// Low PWM frequency needs a low Kslide_max
#define USER_MOTOR1_KSLIDE_MAX             (0.55f)
#define USER_MOTOR1_KSLIDE_MIN             (0.10f)

#define USER_MOTOR1_PLL_KP_MAX             (7.25f)
#define USER_MOTOR1_PLL_KP_MIN             (1.50f)
#define USER_MOTOR1_PLL_KP_SF              (20.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

#elif (USER_MOTOR1 == ziehlab_Fan160hv)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (4)
#define USER_MOTOR1_Rr_Ohm                  (0.0)
#define USER_MOTOR1_Rs_Ohm                  (23.054863)
#define USER_MOTOR1_Ls_d_H                  (0.127078742)
#define USER_MOTOR1_Ls_q_H                  (0.127078742)
#define USER_MOTOR1_RATED_FLUX_VpHz         (1.86737704)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (1.5)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-1.0)
#define USER_MOTOR1_MAX_CURRENT_A           (5.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (20.0)
#define USER_MOTOR1_NUM_ENC_SLOTS           (2500.0)
#define USER_MOTOR1_INERTIA_Kgm2            (3.100017e-5)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (600.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (10.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (20.0f)
#define USER_MOTOR1_VOLT_MAX_V              (200.0f)

#define USER_MOTOR1_STARTUP_CURRENT_A       (2.0)
#define USER_MOTOR1_OVER_CURRENT_A          (7.5)

#define USER_MOTOR1_SPEED_START_Hz          (10.0)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0)
#define USER_MOTOR1_ACCEL_START_Hz          (10.0)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (100.0)

#elif (USER_MOTOR1 == Anaheim_BLWS235D)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (2)
#define USER_MOTOR1_Rr_Ohm                  (NULL)
#define USER_MOTOR1_Rs_Ohm                  (5.78235817)
#define USER_MOTOR1_Ls_d_H                  (0.0249353331)
#define USER_MOTOR1_Ls_q_H                  (0.0249353331)
#define USER_MOTOR1_RATED_FLUX_VpHz         (0.554215252)      // 4.11V/krpm
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (1.5)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-1.0)
#define USER_MOTOR1_MAX_CURRENT_A           (5.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0)
#define USER_MOTOR1_NUM_ENC_SLOTS           (NULL)
#define USER_MOTOR1_INERTIA_Kgm2            (0.0000230206204)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (5.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (10.0f)
#define USER_MOTOR1_VOLT_MAX_V              (220.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A         (1.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (1.5f)
#define USER_MOTOR1_OVER_CURRENT_A          (6.5f)
#define USER_MOTOR1_LOCK_CURRENT_A          (1.5f)

#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (10.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.75f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == Anaheim_BLZ362S)
#define USER_MOTOR1_TYPE                    MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS          (4)
#define USER_MOTOR1_Rr_Ohm                  (NULL)
#define USER_MOTOR1_Rs_Ohm                  (0.562865257f)
#define USER_MOTOR1_Ls_d_H                  (0.00117779721f)
#define USER_MOTOR1_Ls_q_H                  (0.00117779721f)
#define USER_MOTOR1_RATED_FLUX_VpHz         (0.276417136f)      // 4.11V/krpm
#define USER_MOTOR1_MAGNETIZING_CURRENT_A   (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A       (2.5f)
#define USER_MOTOR1_IND_EST_CURRENT_A       (-1.5f)
#define USER_MOTOR1_MAX_CURRENT_A           (7.5f)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz        (40.0)
#define USER_MOTOR1_NUM_ENC_SLOTS           (NULL)
#define USER_MOTOR1_INERTIA_Kgm2            (0.0000230206204)

#define USER_MOTOR1_RATED_VOLTAGE_V         (200.0f)
#define USER_MOTOR1_RATED_SPEED_KRPM        (3.0f)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz             (400.0f)

#define USER_MOTOR1_FREQ_LOW_Hz             (5.0f)
#define USER_MOTOR1_FREQ_HIGH_Hz            (200.0f)
#define USER_MOTOR1_VOLT_MIN_V              (10.0f)
#define USER_MOTOR1_VOLT_MAX_V              (220.0f)

#define USER_MOTOR1_ALIGN_CURRENT_A         (1.0f)
#define USER_MOTOR1_STARTUP_CURRENT_A       (1.5f)
#define USER_MOTOR1_OVER_CURRENT_A          (6.5f)
#define USER_MOTOR1_LOCK_CURRENT_A          (1.5f)

#define USER_MOTOR1_SPEED_FLYST_Hz          (3.0f)
#define USER_MOTOR1_SPEED_START_Hz          (10.0f)
#define USER_MOTOR1_SPEED_FORCE_Hz          (20.0f)

#define USER_MOTOR1_ACCEL_START_Hzps        (5.0f)
#define USER_MOTOR1_ACCEL_MAX_Hzps          (10.0f)

// Only for eSMO
#define USER_MOTOR1_KSLIDE_MAX             (1.50f)
#define USER_MOTOR1_KSLIDE_MIN             (0.75f)

#define USER_MOTOR1_PLL_KP_MAX             (10.0f)
#define USER_MOTOR1_PLL_KP_MIN             (2.0f)
#define USER_MOTOR1_PLL_KP_SF              (5.0f)

#define USER_MOTOR1_BEMF_THRESHOLD         (0.5f)
#define USER_MOTOR1_BEMF_KSLF_FC_Hz        (300.0f)
#define USER_MOTOR1_THETA_OFFSET_SF        (1.0f)
#define USER_MOTOR1_SPEED_LPF_FC_Hz        (200.0f)

// vibration compensation parameters
#define USER_MOTOR1_VIBCOMPA_ALPHA         (0.90f)
#define USER_MOTOR1_VIBCOMPA_GAIN          (1.0f)
#define USER_MOTOR1_VIBCOMPA_INDEX_DELTA   (5)

#elif (USER_MOTOR1 == Anaheim_BLY172S_24V)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.4)
#define USER_MOTOR1_Ls_d_H                 (0.0007190173)
#define USER_MOTOR1_Ls_q_H                 (0.0007190173)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.0327013217)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (1.5)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-1.5)
#define USER_MOTOR1_MAX_CURRENT_A          (5.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (20.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
#define USER_MOTOR1_INERTIA_Kgm2           (4.80185e-06)

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (800.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0)
#define USER_MOTOR1_VOLT_MIN_V             (2.0)
#define USER_MOTOR1_VOLT_MAX_V             (24.0)

#define USER_MOTOR1_STARTUP_CURRENT_A      (2.0)
#define USER_MOTOR1_OVER_CURRENT_A         (8.0)

#define USER_MOTOR1_SPEED_START_Hz         (25.0)
#define USER_MOTOR1_SPEED_FORCE_Hz         (15.0)
#define USER_MOTOR1_ACCEL_START_Hz         (5.0)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (20.0)

#elif (USER_MOTOR1 == Anaheim_BLY341S_Y24V)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.133211181)
#define USER_MOTOR1_Ls_d_H                 (0.000275031634)
#define USER_MOTOR1_Ls_q_H                 (0.000275031634)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.0514687076)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (4.5)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-4.0)
#define USER_MOTOR1_MAX_CURRENT_A          (12.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (20.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
#define USER_MOTOR1_INERTIA_Kgm2           (3.99683e-05)     // 0.00566 oz-in-sec2

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0f)
#define USER_MOTOR1_FREQ_MAX_Hz            (300.0f)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (200.0)
#define USER_MOTOR1_VOLT_MIN_V             (4.0)
#define USER_MOTOR1_VOLT_MAX_V             (24.0)

#define USER_MOTOR1_STARTUP_CURRENT_A      (3.0)
#define USER_MOTOR1_OVER_CURRENT_A         (6.0)

#define USER_MOTOR1_SPEED_START_Hz         (10.0)
#define USER_MOTOR1_ACCEL_START_Hz         (10.0)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (100.0)

#elif (USER_MOTOR1 == Anaheim_BLY341S_D24V)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (0.0544644073)
#define USER_MOTOR1_Ls_d_H                 (9.58044038e-05)
#define USER_MOTOR1_Ls_q_H                 (9.58044038e-05)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.0544644073)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (4.0)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-3.5)
#define USER_MOTOR1_MAX_CURRENT_A          (8.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (40.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)
#define USER_MOTOR1_INERTIA_Kgm2           (3.99683e-05)     // 0.00566 oz-in-sec2

#define USER_MOTOR1_RATED_VOLTAGE_V        (24.0)
#define USER_MOTOR1_RATED_SPEED_KRPM       (3.0)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (300.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (200.0)
#define USER_MOTOR1_VOLT_MIN_V             (4.0)
#define USER_MOTOR1_VOLT_MAX_V             (24.0)

#define USER_MOTOR1_STARTUP_CURRENT_A      (3.0)
#define USER_MOTOR1_OVER_CURRENT_A         (8.5)

#define USER_MOTOR1_SPEED_START_Hz         (10.0)
#define USER_MOTOR1_ACCEL_START_Hz         (10.0)
#define USER_MOTOR1_ACCEL_MAX_Hzps         (100.0)

#elif (USER_MOTOR1 == Marathon_5K33GN2A)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_INDUCTION
#define USER_MOTOR1_NUM_POLE_PAIRS         (2)
#define USER_MOTOR1_Rr_Ohm                 (5.508003)
#define USER_MOTOR1_Rs_Ohm                 (10.71121)
#define USER_MOTOR1_Ls_d_H                 (0.05296588)
#define USER_MOTOR1_Ls_q_H                 (0.05296588)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.8165*220.0/60.0)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (1.378)
#define USER_MOTOR1_RES_EST_CURRENT_A      (1.0)
#define USER_MOTOR1_IND_EST_CURRENT_A      (NULL)
#define USER_MOTOR1_MAX_CURRENT_A          (3.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (5.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (400.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (200.0)
#define USER_MOTOR1_VOLT_MIN_V             (20.0)
#define USER_MOTOR1_VOLT_MAX_V             (200.0)

#elif (USER_MOTOR1 == Marathon_56H17T2011A)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_INDUCTION
#define USER_MOTOR1_NUM_POLE_PAIRS         (2)
#define USER_MOTOR1_Rr_Ohm                 (5.159403)
#define USER_MOTOR1_Rs_Ohm                 (7.924815)
#define USER_MOTOR1_Ls_d_H                 (0.03904648)
#define USER_MOTOR1_Ls_q_H                 (0.03904648)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.8*0.8165*230.0/60.0)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (0.9941965)
#define USER_MOTOR1_RES_EST_CURRENT_A      (0.5)
#define USER_MOTOR1_IND_EST_CURRENT_A      (NULL)
#define USER_MOTOR1_MAX_CURRENT_A          (2.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (5.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)

#define USER_MOTOR1_FREQ_MIN_Hz             (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (400.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (200.0)
#define USER_MOTOR1_VOLT_MIN_V             (20.0)
#define USER_MOTOR1_VOLT_MAX_V             (200.0)

#elif (USER_MOTOR1 == Dayton_3N352C)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_INDUCTION
#define USER_MOTOR1_NUM_POLE_PAIRS         (2)
#define USER_MOTOR1_Rr_Ohm                 (2.428799)
#define USER_MOTOR1_Rs_Ohm                 (2.863202)
#define USER_MOTOR1_Ls_d_H                 (0.02391323)
#define USER_MOTOR1_Ls_q_H                 (0.02391323)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.8165*230.0/60.0)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (1.0)
#define USER_MOTOR1_IND_EST_CURRENT_A      (NULL)
#define USER_MOTOR1_MAX_CURRENT_A          (3.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (5.0)
#define USER_MOTOR1_NUM_ENC_SLOTS          (NULL)

//------------------------------------------------------------------
#elif (USER_MOTOR1 == my_pm_motor_1)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_PM
#define USER_MOTOR1_NUM_POLE_PAIRS         (4)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (NULL)
#define USER_MOTOR1_Ls_d_H                 (NULL)
#define USER_MOTOR1_Ls_q_H                 (NULL)
#define USER_MOTOR1_RATED_FLUX_VpHz        (NULL)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (2.0)
#define USER_MOTOR1_IND_EST_CURRENT_A      (-2.0)
#define USER_MOTOR1_MAX_CURRENT_A          (5.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (40.0)

// Number of lines on the motor's quadrature encoder
#define USER_MOTOR1_NUM_ENC_SLOTS          (1000)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (300.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0)
#define USER_MOTOR1_VOLT_MIN_V             (4.0)
#define USER_MOTOR1_VOLT_MAX_V             (24.0)

#elif (USER_MOTOR1 == my_aci_motor_2)
#define USER_MOTOR1_TYPE                   MOTOR_TYPE_INDUCTION
#define USER_MOTOR1_NUM_POLE_PAIRS         (2)
#define USER_MOTOR1_Rr_Ohm                 (NULL)
#define USER_MOTOR1_Rs_Ohm                 (NULL)
#define USER_MOTOR1_Ls_d_H                 (NULL)
#define USER_MOTOR1_Ls_q_H                 (NULL)
#define USER_MOTOR1_RATED_FLUX_VpHz        (0.8165*230.0/60.0)
#define USER_MOTOR1_MAGNETIZING_CURRENT_A  (NULL)
#define USER_MOTOR1_RES_EST_CURRENT_A      (0.5)
#define USER_MOTOR1_IND_EST_CURRENT_A      (NULL)
#define USER_MOTOR1_MAX_CURRENT_A          (5.0)
#define USER_MOTOR1_FLUX_EXC_FREQ_Hz       (5.0)

// Number of lines on the motor's quadrature encoder
#define USER_MOTOR1_NUM_ENC_SLOTS          (1000)

#define USER_MOTOR1_FREQ_MIN_Hz            (5.0)
#define USER_MOTOR1_FREQ_MAX_Hz            (300.0)

#define USER_MOTOR1_FREQ_LOW_Hz            (10.0)
#define USER_MOTOR1_FREQ_HIGH_Hz           (400.0)
#define USER_MOTOR1_VOLT_MIN_V             (4.0)
#define USER_MOTOR1_VOLT_MAX_V             (24.0)

#else
#error No motor type specified
#endif

//! \brief Defines the maximum current slope for Id trajectory
//!
#define USER_M1_MAX_CURRENT_DELTA_A        (USER_MOTOR1_RES_EST_CURRENT_A / USER_M1_ISR_FREQ_Hz)

//! \brief Defines the maximum current slope for Id trajectory during power warp mode
//!
#define USER_M1_MAX_CURRENT_DELTA_PW_A    (0.3 * USER_MOTOR1_RES_EST_CURRENT_A / USER_M1_ISR_FREQ_Hz)

#ifndef USER_MOTOR1
#error Motor type is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_TYPE
#error The motor type is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_NUM_POLE_PAIRS
#error Number of motor pole pairs is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_Rr_Ohm
#error The rotor resistance is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_Rs_Ohm
#error The stator resistance is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_Ls_d_H
#error The direct stator inductance is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_Ls_q_H
#error The quadrature stator inductance is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_RATED_FLUX_VpHz
#error The rated flux of motor is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_MAGNETIZING_CURRENT_A
#error The magnetizing current is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_RES_EST_CURRENT_A
#error The resistance estimation current is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_IND_EST_CURRENT_A
#error The inductance estimation current is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_MAX_CURRENT_A
#error The maximum current is not defined in user_motor1.h
#endif

#ifndef USER_MOTOR1_FLUX_EXC_FREQ_Hz
#error The flux excitation frequency is not defined in user_motor1.h
#endif

#if ((USER_M1_NUM_CURRENT_SENSORS < 2) || (USER_M1_NUM_CURRENT_SENSORS > 3))
#error The number of current sensors must be 2 or 3
#endif

#if (USER_M1_NUM_VOLTAGE_SENSORS != 3)
#error The number of voltage sensors must be 3
#endif


// **************************************************************************
// the typedefs


// **************************************************************************
// the globals


// **************************************************************************
// the functions
//! \param[in]  pUserParams  The pointer to the user param structure
extern void USER_setMotor1Params(USER_Params *pUserParams);

//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************

//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif // extern "C"

#endif // end of USER_MTR1_H definition