/** ****************************************************************************** * @file user_interface.h * @author Motor Control SDK Team, ST Microelectronics * @brief This file contains all definitions and functions prototypes for the * user interface component of the Motor Control SDK. ****************************************************************************** * @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 MCUI */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __USERINTERFACE_H #define __USERINTERFACE_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Includes ------------------------------------------------------------------*/ #include "mc_type.h" #include "mc_interface.h" #include "mc_tuning.h" #include "state_machine.h" /** @addtogroup MCSDK * @{ */ /** @addtogroup MCUI * @{ */ /* Exported types ------------------------------------------------------------*/ /** * @brief Motor control protocol registers * * Enumerates the variables and information that can be exchanged across the Motor Control Protocol */ typedef enum { MC_PROTOCOL_REG_TARGET_MOTOR, /* 0 */ MC_PROTOCOL_REG_FLAGS, /* 1 */ MC_PROTOCOL_REG_STATUS, /* 2 */ MC_PROTOCOL_REG_CONTROL_MODE, /* 3 */ MC_PROTOCOL_REG_SPEED_REF, /* 4 */ MC_PROTOCOL_REG_SPEED_KP, /* 5 */ MC_PROTOCOL_REG_SPEED_KI, /* 6 */ MC_PROTOCOL_REG_SPEED_KD, /* 7 */ MC_PROTOCOL_REG_TORQUE_REF, /* 8 */ MC_PROTOCOL_REG_TORQUE_KP, /* 9 */ MC_PROTOCOL_REG_TORQUE_KI, /* 10 */ MC_PROTOCOL_REG_TORQUE_KD, /* 11 */ MC_PROTOCOL_REG_FLUX_REF, /* 12 */ MC_PROTOCOL_REG_FLUX_KP, /* 13 */ MC_PROTOCOL_REG_FLUX_KI, /* 14 */ MC_PROTOCOL_REG_FLUX_KD, /* 15 */ MC_PROTOCOL_REG_OBSERVER_C1, /* 16 */ MC_PROTOCOL_REG_OBSERVER_C2, /* 17 */ MC_PROTOCOL_REG_OBSERVER_CR_C1, /* 18 */ MC_PROTOCOL_REG_OBSERVER_CR_C2, /* 19 */ MC_PROTOCOL_REG_PLL_KI, /* 20 */ MC_PROTOCOL_REG_PLL_KP, /* 21 */ MC_PROTOCOL_REG_FLUXWK_KP, /* 22 */ MC_PROTOCOL_REG_FLUXWK_KI, /* 23 */ MC_PROTOCOL_REG_FLUXWK_BUS, /* 24 */ MC_PROTOCOL_REG_BUS_VOLTAGE, /* 25 */ MC_PROTOCOL_REG_HEATS_TEMP, /* 26 */ MC_PROTOCOL_REG_MOTOR_POWER, /* 27 */ MC_PROTOCOL_REG_DAC_OUT1, /* 28 */ MC_PROTOCOL_REG_DAC_OUT2, /* 29 */ MC_PROTOCOL_REG_SPEED_MEAS, /* 30 */ MC_PROTOCOL_REG_TORQUE_MEAS, /* 31 */ MC_PROTOCOL_REG_FLUX_MEAS, /* 32 */ MC_PROTOCOL_REG_FLUXWK_BUS_MEAS, /* 33 */ MC_PROTOCOL_REG_RUC_STAGE_NBR, /* 34 */ MC_PROTOCOL_REG_I_A, /* 35 */ MC_PROTOCOL_REG_I_B, /* 36 */ MC_PROTOCOL_REG_I_ALPHA, /* 37 */ MC_PROTOCOL_REG_I_BETA, /* 38 */ MC_PROTOCOL_REG_I_Q, /* 39 */ MC_PROTOCOL_REG_I_D, /* 40 */ MC_PROTOCOL_REG_I_Q_REF, /* 41 */ MC_PROTOCOL_REG_I_D_REF, /* 42 */ MC_PROTOCOL_REG_V_Q, /* 43 */ MC_PROTOCOL_REG_V_D, /* 44 */ MC_PROTOCOL_REG_V_ALPHA, /* 45 */ MC_PROTOCOL_REG_V_BETA, /* 46 */ MC_PROTOCOL_REG_MEAS_EL_ANGLE, /* 47 */ MC_PROTOCOL_REG_MEAS_ROT_SPEED, /* 48 */ MC_PROTOCOL_REG_OBS_EL_ANGLE, /* 49 */ MC_PROTOCOL_REG_OBS_ROT_SPEED, /* 50 */ MC_PROTOCOL_REG_OBS_I_ALPHA, /* 51 */ MC_PROTOCOL_REG_OBS_I_BETA, /* 52 */ MC_PROTOCOL_REG_OBS_BEMF_ALPHA, /* 53 */ MC_PROTOCOL_REG_OBS_BEMF_BETA, /* 54 */ MC_PROTOCOL_REG_OBS_CR_EL_ANGLE, /* 55 */ MC_PROTOCOL_REG_OBS_CR_ROT_SPEED, /* 56 */ MC_PROTOCOL_REG_OBS_CR_I_ALPHA, /* 57 */ MC_PROTOCOL_REG_OBS_CR_I_BETA, /* 58 */ MC_PROTOCOL_REG_OBS_CR_BEMF_ALPHA, /* 59 */ MC_PROTOCOL_REG_OBS_CR_BEMF_BETA, /* 60 */ MC_PROTOCOL_REG_DAC_USER1, /* 61 */ MC_PROTOCOL_REG_DAC_USER2, /* 62 */ MC_PROTOCOL_REG_MAX_APP_SPEED, /* 63 */ MC_PROTOCOL_REG_MIN_APP_SPEED, /* 64 */ MC_PROTOCOL_REG_IQ_SPEEDMODE, /* 65 */ MC_PROTOCOL_REG_EST_BEMF_LEVEL, /* 66 */ MC_PROTOCOL_REG_OBS_BEMF_LEVEL, /* 67 */ MC_PROTOCOL_REG_EST_CR_BEMF_LEVEL, /* 68 */ MC_PROTOCOL_REG_OBS_CR_BEMF_LEVEL, /* 69 */ MC_PROTOCOL_REG_FF_1Q, /* 70 */ MC_PROTOCOL_REG_FF_1D, /* 71 */ MC_PROTOCOL_REG_FF_2, /* 72 */ MC_PROTOCOL_REG_FF_VQ, /* 73 */ MC_PROTOCOL_REG_FF_VD, /* 74 */ MC_PROTOCOL_REG_FF_VQ_PIOUT, /* 75 */ MC_PROTOCOL_REG_FF_VD_PIOUT, /* 76 */ MC_PROTOCOL_REG_PFC_STATUS, /* 77 */ MC_PROTOCOL_REG_PFC_FAULTS, /* 78 */ MC_PROTOCOL_REG_PFC_DCBUS_REF, /* 79 */ MC_PROTOCOL_REG_PFC_DCBUS_MEAS, /* 80 */ MC_PROTOCOL_REG_PFC_ACBUS_FREQ, /* 81 */ MC_PROTOCOL_REG_PFC_ACBUS_RMS, /* 82 */ MC_PROTOCOL_REG_PFC_I_KP, /* 83 */ MC_PROTOCOL_REG_PFC_I_KI, /* 84 */ MC_PROTOCOL_REG_PFC_I_KD, /* 85 */ MC_PROTOCOL_REG_PFC_V_KP, /* 86 */ MC_PROTOCOL_REG_PFC_V_KI, /* 87 */ MC_PROTOCOL_REG_PFC_V_KD, /* 88 */ MC_PROTOCOL_REG_PFC_STARTUP_DURATION, /* 89 */ MC_PROTOCOL_REG_PFC_ENABLED, /* 90 */ MC_PROTOCOL_REG_RAMP_FINAL_SPEED, /* 91 */ MC_PROTOCOL_REG_RAMP_DURATION, /* 92 */ MC_PROTOCOL_REG_HFI_EL_ANGLE, /* 93 */ MC_PROTOCOL_REG_HFI_ROT_SPEED, /* 94 */ MC_PROTOCOL_REG_HFI_CURRENT, /* 95 */ MC_PROTOCOL_REG_HFI_INIT_ANG_PLL, /* 96 */ MC_PROTOCOL_REG_HFI_INIT_ANG_SAT_DIFF, /* 97 */ MC_PROTOCOL_REG_HFI_PI_PLL_KP, /* 98 */ MC_PROTOCOL_REG_HFI_PI_PLL_KI, /* 99 */ MC_PROTOCOL_REG_HFI_PI_TRACK_KP, /* 100 */ MC_PROTOCOL_REG_HFI_PI_TRACK_KI, /* 101 */ MC_PROTOCOL_REG_SC_CHECK, /* 102 */ MC_PROTOCOL_REG_SC_STATE, /* 103 */ MC_PROTOCOL_REG_SC_RS, /* 104 */ MC_PROTOCOL_REG_SC_LS, /* 105 */ MC_PROTOCOL_REG_SC_KE, /* 106 */ MC_PROTOCOL_REG_SC_VBUS, /* 107 */ MC_PROTOCOL_REG_SC_MEAS_NOMINALSPEED, /* 108 */ MC_PROTOCOL_REG_SC_STEPS, /* 109 */ MC_PROTOCOL_REG_SPEED_KP_DIV, /* 110 */ MC_PROTOCOL_REG_SPEED_KI_DIV, /* 111 */ MC_PROTOCOL_REG_UID, /* 112 */ MC_PROTOCOL_REG_HWTYPE, /* 113 */ MC_PROTOCOL_REG_CTRBDID, /* 114 */ MC_PROTOCOL_REG_PWBDID, /* 115 */ MC_PROTOCOL_REG_SC_PP, /* 116 */ MC_PROTOCOL_REG_SC_CURRENT, /* 117 */ MC_PROTOCOL_REG_SC_SPDBANDWIDTH, /* 118 */ MC_PROTOCOL_REG_SC_LDLQRATIO, /* 119 */ MC_PROTOCOL_REG_SC_NOMINAL_SPEED, /* 120 */ MC_PROTOCOL_REG_SC_CURRBANDWIDTH, /* 121 */ MC_PROTOCOL_REG_SC_J, /* 122 */ MC_PROTOCOL_REG_SC_F, /* 123 */ MC_PROTOCOL_REG_SC_MAX_CURRENT, /* 124 */ MC_PROTOCOL_REG_SC_STARTUP_SPEED, /* 125 */ MC_PROTOCOL_REG_SC_STARTUP_ACC, /* 126 */ MC_PROTOCOL_REG_SC_PWM_FREQUENCY, /* 127 */ MC_PROTOCOL_REG_SC_FOC_REP_RATE, /* 128 */ MC_PROTOCOL_REG_PWBDID2, /* 129 */ MC_PROTOCOL_REG_SC_COMPLETED, /* 130 */ MC_PROTOCOL_REG_CURRENT_POSITION, /* 131 */ MC_PROTOCOL_REG_TARGET_POSITION, /* 132 */ MC_PROTOCOL_REG_MOVE_DURATION, /* 133 */ MC_PROTOCOL_REG_POSITION_KP, /* 134 */ MC_PROTOCOL_REG_POSITION_KI, /* 135 */ MC_PROTOCOL_REG_POSITION_KD, /* 136 */ MC_PROTOCOL_REG_UNDEFINED } MC_Protocol_REG_t; /* @brief To configure the UI use MAIN Sensor (4bit)|AUX Sensor (4 bit) as first byte of CFG.*/ #define UI_SCODE_NONE 0x0u #define UI_SCODE_HALL 0x1u /*!< This code identifies the Hall sensor.*/ #define UI_SCODE_ENC 0x2u /*!< This code identifies the Encoder sensor.*/ #define UI_SCODE_STO_PLL 0x9u /*!< This code identifies the State observer + PLL sensor.*/ #define UI_SCODE_STO_CR 0xAu /*!< This code identifies the State observer + CORDIC sensor.*/ #define UI_SCODE_HFINJ 0xBu /*!< This code identifies the HF injection sensor.*/ #define UI_CFGOPT_NONE 0x00000000u /*!< Enable this option when no other option is selected.*/ #define UI_CFGOPT_FW 0x00000001u /*!< Enable this option when the flux weakening is enabled in the MC firmware.*/ #define UI_CFGOPT_SPEED_KD 0x00000002u /*!< Enable this option when the speed controller has derivative action. */ #define UI_CFGOPT_Iq_KD 0x00000004u /*!< Enable this option when the Iq controller has derivative action. */ #define UI_CFGOPT_Id_KD 0x00000008u /*!< Enable this option when the Id controller has derivative action. */ #define UI_CFGOPT_DAC 0x00000010u /*!< Enable this option if a DAC object will be associated with the UI.*/ #define UI_CFGOPT_SETIDINSPDMODE 0x00000020u /*!< Enable this option to allow setting the Id reference when MC is in speed mode.*/ #define UI_CFGOPT_PLLTUNING 0x00000040u /*!< Enable this option to allow setting the PLL KP and KI.*/ #define UI_CFGOPT_PFC 0x00000080u /*!< Enable this option to allow PFC tuning.*/ #define UI_CFGOPT_PFC_I_KD 0x00000100u /*!< Enable this option when PFC current controller has derivative action.*/ #define UI_CFGOPT_PFC_V_KD 0x00000200u /*!< Enable this option when PFC voltage controller has derivative action.*/ #define MC_PROTOCOL_CODE_SET_REG 0x01 #define MC_PROTOCOL_CODE_GET_REG 0x02 #define MC_PROTOCOL_CODE_EXECUTE_CMD 0x03 #define MC_PROTOCOL_CODE_STORE_TOADDR 0x04 #define MC_PROTOCOL_CODE_LOAD_FROMADDR 0x05 #define MC_PROTOCOL_CODE_GET_BOARD_INFO 0x06 #define MC_PROTOCOL_CODE_SET_SPEED_RAMP 0x07 #define MC_PROTOCOL_CODE_GET_REVUP_DATA 0x08 #define MC_PROTOCOL_CODE_SET_REVUP_DATA 0x09 #define MC_PROTOCOL_CODE_SET_CURRENT_REF 0x0A #define MC_PROTOCOL_CODE_GET_MP_INFO 0x0B #define MC_PROTOCOL_CODE_GET_FW_VERSION 0x0C #define MC_PROTOCOL_CODE_SET_TORQUE_RAMP 0x0D #define MC_PROTOCOL_CODE_SET_POSITION_CMD 0x12 #define MC_PROTOCOL_CMD_START_MOTOR 0x01 #define MC_PROTOCOL_CMD_STOP_MOTOR 0x02 #define MC_PROTOCOL_CMD_STOP_RAMP 0x03 #define MC_PROTOCOL_CMD_RESET 0x04 #define MC_PROTOCOL_CMD_PING 0x05 #define MC_PROTOCOL_CMD_START_STOP 0x06 #define MC_PROTOCOL_CMD_FAULT_ACK 0x07 #define MC_PROTOCOL_CMD_ENCODER_ALIGN 0x08 #define MC_PROTOCOL_CMD_IQDREF_CLEAR 0x09 #define MC_PROTOCOL_CMD_PFC_ENABLE 0x0A #define MC_PROTOCOL_CMD_PFC_DISABLE 0x0B #define MC_PROTOCOL_CMD_PFC_FAULT_ACK 0x0C #define MC_PROTOCOL_CMD_SC_START 0x0D #define MC_PROTOCOL_CMD_SC_STOP 0x0E #define CTRBDID 0 #define PWBDID 0 #define MC_UID 883328122 /** * @brief UserInterface class parameters definition */ typedef const void UserInterfaceParams_t, *pUserInterfaceParams_t; /** * @brief This structure is used to handle an instance of the UI component * */ typedef struct UI_Handle UI_Handle_t; /** * @brief Polymorphic function. The function called can change in run-time and * is assigned by the library to one of the callback pointers * pFctSwitchOffPwm * pFctSwitchOnPwm * pFctCurrReadingCalib * pFctTurnOnLowSides * pFctRLDetectionModeEnable * pFctRLDetectionModeDisable * * */ typedef void (*UI_Generic_Cb_t)( UI_Handle_t *pHandle); /** * @brief Polymorphic function. The function called can change in run-time and * is assigned by the library to the callback pointer pFctIrqHandler * */ typedef void* (*UI_IrqHandler_Cb_t)( void *pHandle, unsigned char flag, unsigned short rx_data); /** * @brief UI_Handle structure used for User Interface * */ struct UI_Handle { UI_IrqHandler_Cb_t pFctIrqHandler; uint8_t bDriveNum; /*!< Total number of MC objects.*/ MCI_Handle_t** pMCI; /*!< Pointer of MC interface list.*/ MCT_Handle_t** pMCT; /*!< Pointer of MC tuning list.*/ uint32_t* pUICfg; /*!< Pointer of UI configuration list.*/ uint8_t bSelectedDrive; /*!< Current selected MC object in the list.*/ }; /** * @brief Initialization of UI object. It perform the link between the UI * object and the MC interface and MC tuning objects. It must be called * before the derived class initialization. */ void UI_Init(UI_Handle_t *pHandle, uint8_t bMCNum, MCI_Handle_t** pMCI, MCT_Handle_t** pMCT, uint32_t* pUICfg); /** * @brief It is used to select the MC on which UI operates. */ bool UI_SelectMC(UI_Handle_t *pHandle,uint8_t bSelectMC); /** * @brief It is used to retrive the MC on which UI currently operates. * @param pHandle pointer on the target component handle. * @retval uint8_t It returns the currently selected MC, zero based, on which * UI operates. */ uint8_t UI_GetSelectedMC(UI_Handle_t *pHandle); /** * @brief It is used to retrive the configuration of the MC on which UI * currently operates. * @param pHandle pointer on the target component handle. * @retval uint32_t It returns the currently configuration of selected MC on * which UI operates. * It represents a bit field containing one (or more) of * the exported configuration option UI_CFGOPT_xxx (eventually OR-ed). */ uint32_t UI_GetSelectedMCConfig(UI_Handle_t *pHandle); /** * @brief It is used to execute a SetReg command coming from the user. * @param pHandle pointer on the target component handle. * @param bRegID Code of register to be updated. Valid code is one of the * MC_PROTOCOL_REG_xxx values exported by UserInterfaceClass. * @param wValue is the new value to be set. * @retval bool It returns true if the SetReg command has been performed * succesfully otherwise returns false. */ bool UI_SetReg(UI_Handle_t *pHandle, MC_Protocol_REG_t bRegID, int32_t wValue); /** * @brief It is used to execute a GetReg command coming from the user. * @param pHandle pointer on the target component handle. * @param bRegID Code of register to be updated. Valid code is one of the * MC_PROTOCOL_REG_xxx values exported by UserInterfaceClass. * @param success if not NULL, the function sets success to true if tregister * @p bRegID is known bby the application and false otherwise. * * @retval int32_t is the current value of register bRegID. * * If @p success is set to false by the function, then the return value is meaningless. */ int32_t UI_GetReg(UI_Handle_t *pHandle, MC_Protocol_REG_t bRegID, bool * success ); /** * @brief It is used to execute a command coming from the user. * @param pHandle pointer on the target component handle. * @param bCmdID Code of register to be updated. Valid code is one of the * MC_PROTOCOL_CMD_xxx define exported by UserInterfaceClass. * @retval bool It returns true if the command has been performed * succesfully otherwise returns false. */ bool UI_ExecCmd(UI_Handle_t *pHandle, uint8_t bCmdID); /* Executes a speed ramp command coming from the user.*/ bool UI_ExecSpeedRamp(UI_Handle_t *pHandle, int32_t wFinalMecSpeedUnit, uint16_t hDurationms); /** * @brief It is used to execute a torque ramp command coming from the user. * @param pHandle pointer on the target component handle. * @param hTargetFinal final torque value. See MCI interface for more details. * @param hDurationms the duration of the ramp expressed in milliseconds. It * is possible to set 0 to perform an instantaneous change in the value. * @retval bool It returns true if the command has been performed * succesfully otherwise returns false. */ bool UI_ExecTorqueRamp(UI_Handle_t *pHandle, int16_t hTargetFinal, uint16_t hDurationms); /* Executes a get Revup data command coming from the user */ bool UI_GetRevupData(UI_Handle_t *pHandle, uint8_t bStage, uint16_t* pDurationms, int16_t* pFinalMecSpeedUnit, int16_t* pFinalTorque ); /** Executes a set Revup data command coming from the user. */ bool UI_SetRevupData(UI_Handle_t *pHandle, uint8_t bStage, uint16_t hDurationms, int16_t hFinalMecSpeedUnit, int16_t hFinalTorque ); /** * @brief It is used to execute a set current reference command coming from * the user. * @param pHandle pointer on the target component handle. * @param hIqRef is the current Iq reference on qd reference frame. This value * is expressed in digit. To convert current expressed in digit to * current expressed in Amps is possible to use the formula: * Current(Amp) = [Current(digit) * Vdd micro] / [65536 * Rshunt * Aop] * @param hIdRef is the current Id reference on qd reference frame. This value * is expressed in digit. See hIqRef param description. * @retval none. */ void UI_SetCurrentReferences(UI_Handle_t *pHandle, int16_t hIqRef, int16_t hIdRef); /** * @brief Function to get information about MP registers available for each * step. PC send to the FW the list of steps to get the available * registers. The FW returs the list of available registers for that * steps. * @param stepList List of requested steps. * @param pMPInfo The returned list of register. * It is populated by this function. * @retval true if MP is enabled, false otherwise. */ bool UI_GetMPInfo(pMPInfo_t stepList, pMPInfo_t MPInfo); /** * @} */ /** * @} */ /** * @} */ #ifdef __cplusplus } #endif /* __cpluplus */ #endif /*__USERINTERFACE_H*/ /************************ (C) COPYRIGHT 2019 STMicroelectronics *****END OF FILE****/