/** ****************************************************************************** * @file parameters_conversion.h * @author Motor Control SDK Team, ST Microelectronics * @brief This file includes the proper Parameter conversion on the base * of stdlib for the first drive ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * 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 * ****************************************************************************** */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __PARAMETERS_CONVERSION_H #define __PARAMETERS_CONVERSION_H #include "mc_math.h" #include "parameters_conversion_f10x.h" #include "pmsm_motor_parameters.h" #include "drive_parameters.h" #include "power_stage_parameters.h" #define ADC_REFERENCE_VOLTAGE 3.30 /************************* CONTROL FREQUENCIES & DELAIES **********************/ #define TF_REGULATION_RATE (uint32_t) ((uint32_t)(PWM_FREQUENCY)/(REGULATION_EXECUTION_RATE)) /* TF_REGULATION_RATE_SCALED is TF_REGULATION_RATE divided by PWM_FREQ_SCALING to allow more dynamic */ #define TF_REGULATION_RATE_SCALED (uint16_t) ((uint32_t)(PWM_FREQUENCY)/(REGULATION_EXECUTION_RATE*PWM_FREQ_SCALING)) /* DPP_CONV_FACTOR is introduce to compute the right DPP with TF_REGULATOR_SCALED */ #define DPP_CONV_FACTOR (65536/PWM_FREQ_SCALING) #define REP_COUNTER (uint16_t) ((REGULATION_EXECUTION_RATE *2u)-1u) #define SYS_TICK_FREQUENCY 2000 #define UI_TASK_FREQUENCY_HZ 10 #define SERIAL_COM_TIMEOUT_INVERSE 25 #define SERIAL_COM_ATR_TIME_MS 20 #define MEDIUM_FREQUENCY_TASK_RATE (uint16_t)SPEED_LOOP_FREQUENCY_HZ #define INRUSH_CURRLIMIT_DELAY_COUNTS (uint16_t)(INRUSH_CURRLIMIT_DELAY_MS * \ ((uint16_t)SPEED_LOOP_FREQUENCY_HZ)/1000u -1u) #define MF_TASK_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/SPEED_LOOP_FREQUENCY_HZ)-1u #define UI_TASK_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/UI_TASK_FREQUENCY_HZ)-1u #define SERIALCOM_TIMEOUT_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/SERIAL_COM_TIMEOUT_INVERSE)-1u #define SERIALCOM_ATR_TIME_TICKS (uint16_t)(((SYS_TICK_FREQUENCY * SERIAL_COM_ATR_TIME_MS) / 1000u) - 1u) #define MAX_APPLICATION_SPEED_UNIT ((MAX_APPLICATION_SPEED_RPM*SPEED_UNIT)/_RPM) #define MIN_APPLICATION_SPEED_UNIT ((MIN_APPLICATION_SPEED_RPM*SPEED_UNIT)/_RPM) #define MAX_APPLICATION_SPEED_UNIT2 ((MAX_APPLICATION_SPEED_RPM2*SPEED_UNIT)/_RPM) #define MIN_APPLICATION_SPEED_UNIT2 ((MIN_APPLICATION_SPEED_RPM2*SPEED_UNIT)/_RPM) /************************** VOLTAGE CONVERSIONS Motor 1 *************************/ #define OVERVOLTAGE_THRESHOLD_d (uint16_t)(OV_VOLTAGE_THRESHOLD_V*65535/\ (ADC_REFERENCE_VOLTAGE/VBUS_PARTITIONING_FACTOR)) #define UNDERVOLTAGE_THRESHOLD_d (uint16_t)((UD_VOLTAGE_THRESHOLD_V*65535)/\ ((uint16_t)(ADC_REFERENCE_VOLTAGE/\ VBUS_PARTITIONING_FACTOR))) #define INT_SUPPLY_VOLTAGE (uint16_t)(65536/ADC_REFERENCE_VOLTAGE) #define DELTA_TEMP_THRESHOLD (OV_TEMPERATURE_THRESHOLD_C- T0_C) #define DELTA_V_THRESHOLD (dV_dT * DELTA_TEMP_THRESHOLD) #define OV_TEMPERATURE_THRESHOLD_d ((V0_V + DELTA_V_THRESHOLD)*INT_SUPPLY_VOLTAGE) #define DELTA_TEMP_HYSTERESIS (OV_TEMPERATURE_HYSTERESIS_C) #define DELTA_V_HYSTERESIS (dV_dT * DELTA_TEMP_HYSTERESIS) #define OV_TEMPERATURE_HYSTERESIS_d (DELTA_V_HYSTERESIS*INT_SUPPLY_VOLTAGE) /*************** Timer for PWM generation & currenst sensing parameters ******/ #define PWM_PERIOD_CYCLES (uint16_t)(ADV_TIM_CLK_MHz*\ (uint32_t)1000000u/((uint32_t)(PWM_FREQUENCY))) #define DEADTIME_NS SW_DEADTIME_NS #define DEAD_TIME_ADV_TIM_CLK_MHz (ADV_TIM_CLK_MHz * TIM_CLOCK_DIVIDER) #define DEAD_TIME_COUNTS_1 (DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/1000uL) #if (DEAD_TIME_COUNTS_1 <= 255) #define DEAD_TIME_COUNTS (uint16_t) DEAD_TIME_COUNTS_1 #elif (DEAD_TIME_COUNTS_1 <= 508) #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/2) /1000uL) + 128) #elif (DEAD_TIME_COUNTS_1 <= 1008) #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/8) /1000uL) + 320) #elif (DEAD_TIME_COUNTS_1 <= 2015) #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/16) /1000uL) + 384) #else #define DEAD_TIME_COUNTS 510 #endif #define DTCOMPCNT (uint16_t)((DEADTIME_NS * ADV_TIM_CLK_MHz) / 2000) #define TON_NS 500 #define TOFF_NS 500 #define TON (uint16_t)((TON_NS * ADV_TIM_CLK_MHz) / 2000) #define TOFF (uint16_t)((TOFF_NS * ADV_TIM_CLK_MHz) / 2000) /**********************/ /* MOTOR 1 ADC Timing */ /**********************/ #define SAMPLING_TIME ((ADC_SAMPLING_CYCLES * ADV_TIM_CLK_MHz) / ADC_CLK_MHz) /* In ADV_TIMER CLK cycles*/ #define HTMIN 1 /* Required for main.c compilation only, CCR4 is overwritten at runtime */ #define TW_BEFORE ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * ADV_TIM_CLK_MHz) / ADC_CLK_MHz + 1u) #define TW_BEFORE_R3_1 ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES*2 + ADC_SAR_CYCLES) * ADV_TIM_CLK_MHz) / ADC_CLK_MHz + 1u) #define TW_AFTER ((uint16_t)(((DEADTIME_NS+MAX_TNTR_NS)*ADV_TIM_CLK_MHz)/1000ul)) #define MAX_TWAIT ((uint16_t)((TW_AFTER - SAMPLING_TIME)/2)) /* USER CODE BEGIN temperature */ #define M1_VIRTUAL_HEAT_SINK_TEMPERATURE_VALUE 25u #define M1_TEMP_SW_FILTER_BW_FACTOR 250u /* USER CODE END temperature */ #define PQD_CONVERSION_FACTOR (int32_t)(( 1000 * 3 * ADC_REFERENCE_VOLTAGE ) /\ ( 1.732 * RSHUNT * AMPLIFICATION_GAIN )) #define USART_IRQHandler USART1_IRQHandler /****** Prepares the UI configurations according the MCconfxx settings ********/ #define COM_ENABLE | OPT_COM #define DAC_ENABLE #define DAC_OP_ENABLE /* Motor 1 settings */ #define FW_ENABLE #define DIFFTERM_ENABLE /* Sensors setting */ #define MAIN_SCFG UI_SCODE_HALL #define AUX_SCFG 0x0 #define PLLTUNING_ENABLE #define UI_CFGOPT_PFC_ENABLE /******************************************************************************* * UI configurations settings. It can be manually overwritten if special * configuartion is required. *******************************************************************************/ /* Specific options of UI */ #define UI_CONFIG_M1 ( UI_CFGOPT_NONE DAC_OP_ENABLE FW_ENABLE DIFFTERM_ENABLE \ | (MAIN_SCFG << MAIN_SCFG_POS) | (AUX_SCFG << AUX_SCFG_POS) | UI_CFGOPT_SETIDINSPDMODE PLLTUNING_ENABLE UI_CFGOPT_PFC_ENABLE | UI_CFGOPT_PLLTUNING) #define UI_CONFIG_M2 #define DIN_ACTIVE_LOW Bit_RESET #define DIN_ACTIVE_HIGH Bit_SET #define DOUT_ACTIVE_HIGH DOutputActiveHigh #define DOUT_ACTIVE_LOW DOutputActiveLow /********** AUXILIARY HALL TIMER MOTOR 1 *************/ #define M1_HALL_TIM_PERIOD 65535 #define M1_HALL_IC_FILTER 11 #define SPD_TIM_M1_IRQHandler TIM2_IRQHandler /* MMI Table Motor 1 MAX_MODULATION_95_PER_CENT */ #define START_INDEX 57 #define MAX_MODULE 31128 #define MMITABLE {\ 32613,32310,32016,31872,31589,31314,31046,30784,30529,30404,\ 30158,29919,29684,29456,29343,29122,28906,28695,28488,28285,\ 28186,27990,27798,27610,27425,27245,27155,26980,26808,26639,\ 26473,26392,26230,26072,25917,25764,25614,25540,25394,25250,\ 25109,24970,24901,24766,24633,24501,24372,24245,24182,24058,\ 23936,23816,23697,23580,23522,23408,23295,23184,23075,23021,\ 22913,22808,22703,22600,22499,22449,22349,22251,22154,22059,\ 21964\ } #define SAMPLING_CYCLE_CORRECTION 0.5 /* Add half cycle required by STM32F103RBTx ADC */ #define LL_ADC_SAMPLINGTIME_1CYCLES_5 LL_ADC_SAMPLINGTIME_1CYCLE_5 #define LL_ADC_SAMPLING_CYCLE(CYCLE) LL_ADC_SAMPLINGTIME_ ## CYCLE ## CYCLES_5 #endif /*__PARAMETERS_CONVERSION_H*/ /******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/