| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /**
- ******************************************************************************
- * @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
- *
- * <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
- *
- ******************************************************************************
- * @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****/
|