parameters_conversion.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. /**
  2. ******************************************************************************
  3. * @file parameters_conversion.h
  4. * @author Motor Control SDK Team, ST Microelectronics
  5. * @brief This file includes the proper Parameter conversion on the base
  6. * of stdlib for the first drive
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  11. * All rights reserved.</center></h2>
  12. *
  13. * This software component is licensed by ST under Ultimate Liberty license
  14. * SLA0044, the "License"; You may not use this file except in compliance with
  15. * the License. You may obtain a copy of the License at:
  16. * www.st.com/SLA0044
  17. *
  18. ******************************************************************************
  19. */
  20. /* Define to prevent recursive inclusion -------------------------------------*/
  21. #ifndef __PARAMETERS_CONVERSION_H
  22. #define __PARAMETERS_CONVERSION_H
  23. #include "mc_math.h"
  24. #include "parameters_conversion_f10x.h"
  25. #include "pmsm_motor_parameters.h"
  26. #include "drive_parameters.h"
  27. #include "power_stage_parameters.h"
  28. #define ADC_REFERENCE_VOLTAGE 3.30
  29. /************************* CONTROL FREQUENCIES & DELAIES **********************/
  30. #define TF_REGULATION_RATE (uint32_t) ((uint32_t)(PWM_FREQUENCY)/(REGULATION_EXECUTION_RATE))
  31. /* TF_REGULATION_RATE_SCALED is TF_REGULATION_RATE divided by PWM_FREQ_SCALING to allow more dynamic */
  32. #define TF_REGULATION_RATE_SCALED (uint16_t) ((uint32_t)(PWM_FREQUENCY)/(REGULATION_EXECUTION_RATE*PWM_FREQ_SCALING))
  33. /* DPP_CONV_FACTOR is introduce to compute the right DPP with TF_REGULATOR_SCALED */
  34. #define DPP_CONV_FACTOR (65536/PWM_FREQ_SCALING)
  35. #define REP_COUNTER (uint16_t) ((REGULATION_EXECUTION_RATE *2u)-1u)
  36. #define SYS_TICK_FREQUENCY 2000
  37. #define UI_TASK_FREQUENCY_HZ 10
  38. #define SERIAL_COM_TIMEOUT_INVERSE 25
  39. #define SERIAL_COM_ATR_TIME_MS 20
  40. #define MEDIUM_FREQUENCY_TASK_RATE (uint16_t)SPEED_LOOP_FREQUENCY_HZ
  41. #define INRUSH_CURRLIMIT_DELAY_COUNTS (uint16_t)(INRUSH_CURRLIMIT_DELAY_MS * \
  42. ((uint16_t)SPEED_LOOP_FREQUENCY_HZ)/1000u -1u)
  43. #define MF_TASK_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/SPEED_LOOP_FREQUENCY_HZ)-1u
  44. #define UI_TASK_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/UI_TASK_FREQUENCY_HZ)-1u
  45. #define SERIALCOM_TIMEOUT_OCCURENCE_TICKS (SYS_TICK_FREQUENCY/SERIAL_COM_TIMEOUT_INVERSE)-1u
  46. #define SERIALCOM_ATR_TIME_TICKS (uint16_t)(((SYS_TICK_FREQUENCY * SERIAL_COM_ATR_TIME_MS) / 1000u) - 1u)
  47. #define MAX_APPLICATION_SPEED_UNIT ((MAX_APPLICATION_SPEED_RPM*SPEED_UNIT)/_RPM)
  48. #define MIN_APPLICATION_SPEED_UNIT ((MIN_APPLICATION_SPEED_RPM*SPEED_UNIT)/_RPM)
  49. #define MAX_APPLICATION_SPEED_UNIT2 ((MAX_APPLICATION_SPEED_RPM2*SPEED_UNIT)/_RPM)
  50. #define MIN_APPLICATION_SPEED_UNIT2 ((MIN_APPLICATION_SPEED_RPM2*SPEED_UNIT)/_RPM)
  51. /************************** VOLTAGE CONVERSIONS Motor 1 *************************/
  52. #define OVERVOLTAGE_THRESHOLD_d (uint16_t)(OV_VOLTAGE_THRESHOLD_V*65535/\
  53. (ADC_REFERENCE_VOLTAGE/VBUS_PARTITIONING_FACTOR))
  54. #define UNDERVOLTAGE_THRESHOLD_d (uint16_t)((UD_VOLTAGE_THRESHOLD_V*65535)/\
  55. ((uint16_t)(ADC_REFERENCE_VOLTAGE/\
  56. VBUS_PARTITIONING_FACTOR)))
  57. #define INT_SUPPLY_VOLTAGE (uint16_t)(65536/ADC_REFERENCE_VOLTAGE)
  58. #define DELTA_TEMP_THRESHOLD (OV_TEMPERATURE_THRESHOLD_C- T0_C)
  59. #define DELTA_V_THRESHOLD (dV_dT * DELTA_TEMP_THRESHOLD)
  60. #define OV_TEMPERATURE_THRESHOLD_d ((V0_V + DELTA_V_THRESHOLD)*INT_SUPPLY_VOLTAGE)
  61. #define DELTA_TEMP_HYSTERESIS (OV_TEMPERATURE_HYSTERESIS_C)
  62. #define DELTA_V_HYSTERESIS (dV_dT * DELTA_TEMP_HYSTERESIS)
  63. #define OV_TEMPERATURE_HYSTERESIS_d (DELTA_V_HYSTERESIS*INT_SUPPLY_VOLTAGE)
  64. /*************** Timer for PWM generation & currenst sensing parameters ******/
  65. #define PWM_PERIOD_CYCLES (uint16_t)(ADV_TIM_CLK_MHz*\
  66. (uint32_t)1000000u/((uint32_t)(PWM_FREQUENCY)))
  67. #define DEADTIME_NS SW_DEADTIME_NS
  68. #define DEAD_TIME_ADV_TIM_CLK_MHz (ADV_TIM_CLK_MHz * TIM_CLOCK_DIVIDER)
  69. #define DEAD_TIME_COUNTS_1 (DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/1000uL)
  70. #if (DEAD_TIME_COUNTS_1 <= 255)
  71. #define DEAD_TIME_COUNTS (uint16_t) DEAD_TIME_COUNTS_1
  72. #elif (DEAD_TIME_COUNTS_1 <= 508)
  73. #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/2) /1000uL) + 128)
  74. #elif (DEAD_TIME_COUNTS_1 <= 1008)
  75. #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/8) /1000uL) + 320)
  76. #elif (DEAD_TIME_COUNTS_1 <= 2015)
  77. #define DEAD_TIME_COUNTS (uint16_t)(((DEAD_TIME_ADV_TIM_CLK_MHz * DEADTIME_NS/16) /1000uL) + 384)
  78. #else
  79. #define DEAD_TIME_COUNTS 510
  80. #endif
  81. #define DTCOMPCNT (uint16_t)((DEADTIME_NS * ADV_TIM_CLK_MHz) / 2000)
  82. #define TON_NS 500
  83. #define TOFF_NS 500
  84. #define TON (uint16_t)((TON_NS * ADV_TIM_CLK_MHz) / 2000)
  85. #define TOFF (uint16_t)((TOFF_NS * ADV_TIM_CLK_MHz) / 2000)
  86. /**********************/
  87. /* MOTOR 1 ADC Timing */
  88. /**********************/
  89. #define SAMPLING_TIME ((ADC_SAMPLING_CYCLES * ADV_TIM_CLK_MHz) / ADC_CLK_MHz) /* In ADV_TIMER CLK cycles*/
  90. #define HTMIN 1 /* Required for main.c compilation only, CCR4 is overwritten at runtime */
  91. #define TW_BEFORE ((uint16_t)((ADC_TRIG_CONV_LATENCY_CYCLES + ADC_SAMPLING_CYCLES) * ADV_TIM_CLK_MHz) / ADC_CLK_MHz + 1u)
  92. #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)
  93. #define TW_AFTER ((uint16_t)(((DEADTIME_NS+MAX_TNTR_NS)*ADV_TIM_CLK_MHz)/1000ul))
  94. #define MAX_TWAIT ((uint16_t)((TW_AFTER - SAMPLING_TIME)/2))
  95. /* USER CODE BEGIN temperature */
  96. #define M1_VIRTUAL_HEAT_SINK_TEMPERATURE_VALUE 25u
  97. #define M1_TEMP_SW_FILTER_BW_FACTOR 250u
  98. /* USER CODE END temperature */
  99. #define PQD_CONVERSION_FACTOR (int32_t)(( 1000 * 3 * ADC_REFERENCE_VOLTAGE ) /\
  100. ( 1.732 * RSHUNT * AMPLIFICATION_GAIN ))
  101. #define USART_IRQHandler USART1_IRQHandler
  102. /****** Prepares the UI configurations according the MCconfxx settings ********/
  103. #define COM_ENABLE | OPT_COM
  104. #define DAC_ENABLE
  105. #define DAC_OP_ENABLE
  106. /* Motor 1 settings */
  107. #define FW_ENABLE
  108. #define DIFFTERM_ENABLE
  109. /* Sensors setting */
  110. #define MAIN_SCFG UI_SCODE_HALL
  111. #define AUX_SCFG 0x0
  112. #define PLLTUNING_ENABLE
  113. #define UI_CFGOPT_PFC_ENABLE
  114. /*******************************************************************************
  115. * UI configurations settings. It can be manually overwritten if special
  116. * configuartion is required.
  117. *******************************************************************************/
  118. /* Specific options of UI */
  119. #define UI_CONFIG_M1 ( UI_CFGOPT_NONE DAC_OP_ENABLE FW_ENABLE DIFFTERM_ENABLE \
  120. | (MAIN_SCFG << MAIN_SCFG_POS) | (AUX_SCFG << AUX_SCFG_POS) | UI_CFGOPT_SETIDINSPDMODE PLLTUNING_ENABLE UI_CFGOPT_PFC_ENABLE | UI_CFGOPT_PLLTUNING)
  121. #define UI_CONFIG_M2
  122. #define DIN_ACTIVE_LOW Bit_RESET
  123. #define DIN_ACTIVE_HIGH Bit_SET
  124. #define DOUT_ACTIVE_HIGH DOutputActiveHigh
  125. #define DOUT_ACTIVE_LOW DOutputActiveLow
  126. /********** AUXILIARY HALL TIMER MOTOR 1 *************/
  127. #define M1_HALL_TIM_PERIOD 65535
  128. #define M1_HALL_IC_FILTER 11
  129. #define SPD_TIM_M1_IRQHandler TIM2_IRQHandler
  130. /* MMI Table Motor 1 MAX_MODULATION_95_PER_CENT */
  131. #define START_INDEX 57
  132. #define MAX_MODULE 31128
  133. #define MMITABLE {\
  134. 32613,32310,32016,31872,31589,31314,31046,30784,30529,30404,\
  135. 30158,29919,29684,29456,29343,29122,28906,28695,28488,28285,\
  136. 28186,27990,27798,27610,27425,27245,27155,26980,26808,26639,\
  137. 26473,26392,26230,26072,25917,25764,25614,25540,25394,25250,\
  138. 25109,24970,24901,24766,24633,24501,24372,24245,24182,24058,\
  139. 23936,23816,23697,23580,23522,23408,23295,23184,23075,23021,\
  140. 22913,22808,22703,22600,22499,22449,22349,22251,22154,22059,\
  141. 21964\
  142. }
  143. #define SAMPLING_CYCLE_CORRECTION 0.5 /* Add half cycle required by STM32F103RBTx ADC */
  144. #define LL_ADC_SAMPLINGTIME_1CYCLES_5 LL_ADC_SAMPLINGTIME_1CYCLE_5
  145. #define LL_ADC_SAMPLING_CYCLE(CYCLE) LL_ADC_SAMPLINGTIME_ ## CYCLE ## CYCLES_5
  146. #endif /*__PARAMETERS_CONVERSION_H*/
  147. /******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/