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