| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271 |
- /**
- ******************************************************************************
- * @file mc_config.c
- * @author Motor Control SDK Team, ST Microelectronics
- * @brief Motor Control Subsystem components configuration and handler structures.
- ******************************************************************************
- * @attention
- *
- * <h2><center>© Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.</center></h2>
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
- #include "main.h"
- #include "mc_type.h"
- #include "parameters_conversion.h"
- #include "mc_parameters.h"
- #include "mc_config.h"
- /* USER CODE BEGIN Additional include */
- /* USER CODE END Additional include */
- #define FREQ_RATIO 1 /* Dummy value for single drive */
- #define FREQ_RELATION HIGHEST_FREQ /* Dummy value for single drive */
- #define OFFCALIBRWAIT_MS 0
- #define OFFCALIBRWAIT_MS2 0
- #include "pqd_motor_power_measurement.h"
- /* USER CODE BEGIN Additional define */
- /* USER CODE END Additional define */
- PQD_MotorPowMeas_Handle_t PQD_MotorPowMeasM1 =
- {
- .wConvFact = PQD_CONVERSION_FACTOR
- };
- PQD_MotorPowMeas_Handle_t *pPQD_MotorPowMeasM1 = &PQD_MotorPowMeasM1;
- /**
- * @brief PI / PID Speed loop parameters Motor 1
- */
- PID_Handle_t PIDSpeedHandle_M1 =
- {
- .hDefKpGain = (int16_t)PID_SPEED_KP_DEFAULT,
- .hDefKiGain = (int16_t)PID_SPEED_KI_DEFAULT,
- .wUpperIntegralLimit = (int32_t)IQMAX * (int32_t)SP_KIDIV,
- .wLowerIntegralLimit = -(int32_t)IQMAX * (int32_t)SP_KIDIV,
- .hUpperOutputLimit = (int16_t)IQMAX,
- .hLowerOutputLimit = -(int16_t)IQMAX,
- .hKpDivisor = (uint16_t)SP_KPDIV,
- .hKiDivisor = (uint16_t)SP_KIDIV,
- .hKpDivisorPOW2 = (uint16_t)SP_KPDIV_LOG,
- .hKiDivisorPOW2 = (uint16_t)SP_KIDIV_LOG,
- .hDefKdGain = 0x0000U,
- .hKdDivisor = 0x0000U,
- .hKdDivisorPOW2 = 0x0000U,
- };
- /**
- * @brief PI / PID Iq loop parameters Motor 1
- */
- PID_Handle_t PIDIqHandle_M1 =
- {
- .hDefKpGain = (int16_t)PID_TORQUE_KP_DEFAULT,
- .hDefKiGain = (int16_t)PID_TORQUE_KI_DEFAULT,
- .wUpperIntegralLimit = (int32_t)INT16_MAX * TF_KIDIV,
- .wLowerIntegralLimit = (int32_t)-INT16_MAX * TF_KIDIV,
- .hUpperOutputLimit = INT16_MAX,
- .hLowerOutputLimit = -INT16_MAX,
- .hKpDivisor = (uint16_t)TF_KPDIV,
- .hKiDivisor = (uint16_t)TF_KIDIV,
- .hKpDivisorPOW2 = (uint16_t)TF_KPDIV_LOG,
- .hKiDivisorPOW2 = (uint16_t)TF_KIDIV_LOG,
- .hDefKdGain = 0x0000U,
- .hKdDivisor = 0x0000U,
- .hKdDivisorPOW2 = 0x0000U,
- };
- /**
- * @brief PI / PID Id loop parameters Motor 1
- */
- PID_Handle_t PIDIdHandle_M1 =
- {
- .hDefKpGain = (int16_t)PID_FLUX_KP_DEFAULT,
- .hDefKiGain = (int16_t)PID_FLUX_KI_DEFAULT,
- .wUpperIntegralLimit = (int32_t)INT16_MAX * TF_KIDIV,
- .wLowerIntegralLimit = (int32_t)-INT16_MAX * TF_KIDIV,
- .hUpperOutputLimit = INT16_MAX,
- .hLowerOutputLimit = -INT16_MAX,
- .hKpDivisor = (uint16_t)TF_KPDIV,
- .hKiDivisor = (uint16_t)TF_KIDIV,
- .hKpDivisorPOW2 = (uint16_t)TF_KPDIV_LOG,
- .hKiDivisorPOW2 = (uint16_t)TF_KIDIV_LOG,
- .hDefKdGain = 0x0000U,
- .hKdDivisor = 0x0000U,
- .hKdDivisorPOW2 = 0x0000U,
- };
- /**
- * @brief SpeednTorque Controller parameters Motor 1
- */
- SpeednTorqCtrl_Handle_t SpeednTorqCtrlM1 =
- {
- .STCFrequencyHz = MEDIUM_FREQUENCY_TASK_RATE,
- .MaxAppPositiveMecSpeedUnit = (uint16_t)(MAX_APPLICATION_SPEED_UNIT),
- .MinAppPositiveMecSpeedUnit = (uint16_t)(MIN_APPLICATION_SPEED_UNIT),
- .MaxAppNegativeMecSpeedUnit = (int16_t)(-MIN_APPLICATION_SPEED_UNIT),
- .MinAppNegativeMecSpeedUnit = (int16_t)(-MAX_APPLICATION_SPEED_UNIT),
- .MaxPositiveTorque = (int16_t)NOMINAL_CURRENT,
- .MinNegativeTorque = -(int16_t)NOMINAL_CURRENT,
- .ModeDefault = DEFAULT_CONTROL_MODE,
- .MecSpeedRefUnitDefault = (int16_t)(DEFAULT_TARGET_SPEED_UNIT),
- .TorqueRefDefault = (int16_t)DEFAULT_TORQUE_COMPONENT,
- .IdrefDefault = (int16_t)DEFAULT_FLUX_COMPONENT,
- };
- PWMC_R3_2_Handle_t PWM_Handle_M1 =
- {
- {
- .pFctGetPhaseCurrents = &R3_2_GetPhaseCurrents,
- .pFctSwitchOffPwm = &R3_2_SwitchOffPWM,
- .pFctSwitchOnPwm = &R3_2_SwitchOnPWM,
- .pFctCurrReadingCalib = &R3_2_CurrentReadingPolarization,
- .pFctTurnOnLowSides = &R3_2_TurnOnLowSides,
- .pFctSetADCSampPointSectX = &R3_2_SetADCSampPointSectX,
- .pFctIsOverCurrentOccurred = &R3_2_IsOverCurrentOccurred,
- .pFctOCPSetReferenceVoltage = MC_NULL,
- .pFctRLDetectionModeEnable = MC_NULL,
- .pFctRLDetectionModeDisable = MC_NULL,
- .pFctRLDetectionModeSetDuty = MC_NULL,
- .hT_Sqrt3 = (PWM_PERIOD_CYCLES*SQRT3FACTOR)/16384u,
- .Sector = 0,
- .CntPhA = 0,
- .CntPhB = 0,
- .CntPhC = 0,
- .SWerror = 0,
- .TurnOnLowSidesAction = false,
- .OffCalibrWaitTimeCounter = 0,
- .Motor = M1,
- .RLDetectionMode = false,
- .Ia = 0,
- .Ib = 0,
- .Ic = 0,
- .DTTest = 0,
- .DTCompCnt = DTCOMPCNT,
- .PWMperiod = PWM_PERIOD_CYCLES,
- .OffCalibrWaitTicks = (uint16_t)((SYS_TICK_FREQUENCY * OFFCALIBRWAIT_MS)/ 1000),
- .Ton = TON,
- .Toff = TOFF
- },
- .Half_PWMPeriod = PWM_PERIOD_CYCLES/2u,
- .PhaseAOffset = 0,
- .PhaseBOffset = 0,
- .PhaseCOffset = 0,
- .pParams_str = &R3_2_ParamsM1
- };
- /**
- * @brief SpeedNPosition sensor parameters Motor 1 - HALL
- */
- HALL_Handle_t HALL_M1 =
- {
- ._Super = {
- .bElToMecRatio = POLE_PAIR_NUM,
- .hMaxReliableMecSpeedUnit = (uint16_t)(1.15*MAX_APPLICATION_SPEED_UNIT),
- .hMinReliableMecSpeedUnit = (uint16_t)(MIN_APPLICATION_SPEED_UNIT),
- .bMaximumSpeedErrorsNumber = MEAS_ERRORS_BEFORE_FAULTS,
- .hMaxReliableMecAccelUnitP = 65535,
- .hMeasurementFrequency = TF_REGULATION_RATE_SCALED,
- .DPPConvFactor = DPP_CONV_FACTOR,
- },
- .SensorPlacement = HALL_SENSORS_PLACEMENT,
- .PhaseShift = (int16_t)(HALL_PHASE_SHIFT * 65536/360),
- .SpeedSamplingFreqHz = MEDIUM_FREQUENCY_TASK_RATE,
- .SpeedBufferSize = HALL_AVERAGING_FIFO_DEPTH,
- .TIMClockFreq = HALL_TIM_CLK,
- .TIMx = TIM2,
- .ICx_Filter = M1_HALL_IC_FILTER,
- .PWMFreqScaling = PWM_FREQ_SCALING,
- .HallMtpa = HALL_MTPA,
- .H1Port = M1_HALL_H1_GPIO_Port,
- .H1Pin = M1_HALL_H1_Pin<<8,
- .H2Port = M1_HALL_H2_GPIO_Port,
- .H2Pin = M1_HALL_H2_Pin<<8,
- .H3Port = M1_HALL_H3_GPIO_Port,
- .H3Pin = M1_HALL_H3_Pin<<8,
- };
- /**
- * Virtual temperature sensor parameters Motor 1
- */
- NTC_Handle_t TempSensorParamsM1 =
- {
- .bSensorType = VIRTUAL_SENSOR,
- .hExpectedTemp_d = 555,
- .hExpectedTemp_C = M1_VIRTUAL_HEAT_SINK_TEMPERATURE_VALUE,
- };
- /* Bus voltage sensor value filter buffer */
- uint16_t RealBusVoltageSensorFilterBufferM1[M1_VBUS_SW_FILTER_BW_FACTOR];
- /**
- * Bus voltage sensor parameters Motor 1
- */
- RDivider_Handle_t RealBusVoltageSensorParamsM1 =
- {
- ._Super =
- {
- .SensorType = REAL_SENSOR,
- .ConversionFactor = (uint16_t)(ADC_REFERENCE_VOLTAGE / VBUS_PARTITIONING_FACTOR),
- },
- .VbusRegConv =
- {
- .regADC = ADC1,
- .channel = MC_ADC_CHANNEL_3,
- .samplingTime = M1_VBUS_SAMPLING_TIME,
- },
- .LowPassFilterBW = M1_VBUS_SW_FILTER_BW_FACTOR,
- .OverVoltageThreshold = OVERVOLTAGE_THRESHOLD_d,
- .UnderVoltageThreshold = UNDERVOLTAGE_THRESHOLD_d,
- .aBuffer = RealBusVoltageSensorFilterBufferM1,
- };
- UI_Handle_t UI_Params =
- {
- .bDriveNum = 0,
- };
- /** RAMP for Motor1.
- *
- */
- RampExtMngr_Handle_t RampExtMngrHFParamsM1 =
- {
- .FrequencyHz = TF_REGULATION_RATE
- };
- /**
- * @brief CircleLimitation Component parameters Motor 1 - Base Component
- */
- CircleLimitation_Handle_t CircleLimitationM1 =
- {
- .MaxModule = MAX_MODULE,
- .MaxVd = (uint16_t)(MAX_MODULE * 950 / 1000),
- .Circle_limit_table = MMITABLE,
- .Start_index = START_INDEX,
- };
- UFCP_Handle_t pUSART =
- {
- ._Super.RxTimeout = 0,
- .USARTx = USART1,
- };
- /* USER CODE BEGIN Additional configuration */
- /* USER CODE END Additional configuration */
- /******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/
|