/** ****************************************************************************** * @file mc_math.h * @author Motor Control SDK Team, ST Microelectronics * @brief This file provides mathematics functions useful for and specific to * Motor Control. * ****************************************************************************** * @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 * ****************************************************************************** * @ingroup MC_Math */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef MC_MATH_H #define MC_MATH_H /* Includes ------------------------------------------------------------------*/ #include "mc_type.h" /** @addtogroup MCSDK * @{ */ /** @addtogroup MC_Math * @{ */ #define SQRT_2 1.4142 #define SQRT_3 1.732 /** * @brief Macro to compute logarithm of two */ #define LOG2(x) \ ((x) == 65535 ? 16 : \ ((x) == 2*2*2*2*2*2*2*2*2*2*2*2*2*2*2 ? 15 : \ ((x) == 2*2*2*2*2*2*2*2*2*2*2*2*2*2 ? 14 : \ ((x) == 2*2*2*2*2*2*2*2*2*2*2*2*2 ? 13 : \ ((x) == 2*2*2*2*2*2*2*2*2*2*2*2 ? 12 : \ ((x) == 2*2*2*2*2*2*2*2*2*2*2 ? 11 : \ ((x) == 2*2*2*2*2*2*2*2*2*2 ? 10 : \ ((x) == 2*2*2*2*2*2*2*2*2 ? 9 : \ ((x) == 2*2*2*2*2*2*2*2 ? 8 : \ ((x) == 2*2*2*2*2*2*2 ? 7 : \ ((x) == 2*2*2*2*2*2 ? 6 : \ ((x) == 2*2*2*2*2 ? 5 : \ ((x) == 2*2*2*2 ? 4 : \ ((x) == 2*2*2 ? 3 : \ ((x) == 2*2 ? 2 : \ ((x) == 2 ? 1 : \ ((x) == 1 ? 0 : -1))))))))))))))))) /** * @brief Trigonometrical functions type definition */ typedef struct { int16_t hCos; int16_t hSin; } Trig_Components; /** * @brief This function transforms stator currents Ia and qIb (which are * directed along axes each displaced by 120 degrees) into currents * Ialpha and Ibeta in a stationary qd reference frame. * Ialpha = Ia * Ibeta = -(2*Ib+Ia)/sqrt(3) * @param Curr_Input: stator current Ia and Ib in ab_t format * @retval Stator current Ialpha and Ibeta in alphabeta_t format */ alphabeta_t MCM_Clarke( ab_t Input ); /** * @brief This function transforms stator values alpha and beta, which * belong to a stationary qd reference frame, to a rotor flux * synchronous reference frame (properly oriented), so as Iq and Id. * Id= Ialpha *sin(theta)+qIbeta *cos(Theta) * Iq=qIalpha *cos(Theta)-qIbeta *sin(Theta) * @param Curr_Input: stator values alpha and beta in alphabeta_t format * @param Theta: rotating frame angular position in q1.15 format * @retval Stator current q and d in qd_t format */ qd_t MCM_Park( alphabeta_t Input, int16_t Theta ); /** * @brief This function transforms stator voltage qVq and qVd, that belong to * a rotor flux synchronous rotating frame, to a stationary reference * frame, so as to obtain qValpha and qVbeta: * Valfa= Vq*Cos(theta)+ Vd*Sin(theta) * Vbeta=-Vq*Sin(theta)+ Vd*Cos(theta) * @param Curr_Input: stator voltage Vq and Vd in qd_t format * @param Theta: rotating frame angular position in q1.15 format * @retval Stator values alpha and beta in alphabeta_t format */ alphabeta_t MCM_Rev_Park( qd_t Input, int16_t Theta ); /** * @brief This function returns cosine and sine functions of the angle fed in * input * @param hAngle: angle in q1.15 format * @retval Trig_Components Cos(angle) and Sin(angle) in Trig_Components format */ Trig_Components MCM_Trig_Functions( int16_t hAngle ); /** * @brief It calculates the square root of a non-negative s32. It returns 0 * for negative s32. * @param Input int32_t number * @retval int32_t Square root of Input (0 if Input<0) */ int32_t MCM_Sqrt( int32_t wInput ); int16_t MCM_PhaseComputation( int32_t wBemf_alfa_est, int32_t wBemf_beta_est ); /** * @brief This function codify a floting point number into the relative * 32bit integer. * @param float Floting point number to be coded. * @retval uint32_t Coded 32bit integer. */ uint32_t MCM_floatToIntBit( float x ); /** * @} */ /** * @} */ #endif /* MC_MATH_H*/ /******************* (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/