diff --git a/assets/User_code/device/led.c b/assets/User_code/device/led.c index eab5735..f796a1c 100644 --- a/assets/User_code/device/led.c +++ b/assets/User_code/device/led.c @@ -3,17 +3,13 @@ */ /*Includes -----------------------------------------*/ #include "device/led.h" -#include "bsp/gpio.h" -#include "bsp/pwm.h" #include "device.h" /* Private define ----------------------------------------------------------- */ /* Private macro ------------------------------------------------------------ */ /* Private typedef ---------------------------------------------------------- */ - - - +#ifdef LED_PWM int8_t DEVICE_LED_PWM_Set(BSP_PWM_Channel_t channel, float duty_cycle) { if (duty_cycle < 0.0f || duty_cycle > 1.0f) { @@ -24,7 +20,9 @@ int8_t DEVICE_LED_PWM_Set(BSP_PWM_Channel_t channel, float duty_cycle) BSP_PWM_SetComp(channel, pulse); return DEVICE_OK; } +#endif +#ifdef LED_GPIO int8_t DEVICE_LED_GPIO_Set(BSP_GPIO_t gpio, bool value) { if (value) { @@ -34,5 +32,6 @@ int8_t DEVICE_LED_GPIO_Set(BSP_GPIO_t gpio, bool value) } return DEVICE_OK; } +#endif diff --git a/assets/User_code/device/led.h b/assets/User_code/device/led.h index 04fdb54..421bac1 100644 --- a/assets/User_code/device/led.h +++ b/assets/User_code/device/led.h @@ -5,27 +5,58 @@ extern "C" { #endif /* Includes ----------------------------------------------------------------- */ -#include -#include "bsp/gpio.h" -#include "bsp/pwm.h" -#include "bsp/bsp.h" +/* USER DEFIN BEGIN */ +/* USER DEFIN END */ +#include +#ifdef LED_GPIO +#include "bsp/gpio.h" +#endif +#ifdef LED_PWM +#include "bsp/pwm.h" +#endif +#include "bsp/bsp.h" /* Exported constants ------------------------------------------------------- */ /* Exported macro ----------------------------------------------------------- */ /* Exported types ----------------------------------------------------------- */ typedef struct { +#ifdef LED_GPIO BSP_GPIO_t gpio; +#endif +#ifdef LED_PWM BSP_PWM_Channel_t channel; +#endif } DEVICE_LED_t; extern DEVICE_LED_t LED_Map; /* Exported functions prototypes -------------------------------------------- */ +#ifdef LED_PWM +int8_t DEVICE_LED_PWM_Set(BSP_PWM_Channel_t channel, float duty_cycle) +{ + if (duty_cycle < 0.0f || duty_cycle > 1.0f) { + return DEVICE_ERR_NULL; // 错误:占空比超出范围 + } + uint16_t pulse = (uint16_t)(duty_cycle * (float)UINT16_MAX); + BSP_PWM_Start(channel); + BSP_PWM_SetComp(channel, pulse); + return DEVICE_OK; +} +#endif - -int8_t BSP_LED_Set(char sign,DEVICE_LED_t ch,bool value,float duty_cycle); +#ifdef LED_GPIO +int8_t DEVICE_LED_GPIO_Set(BSP_GPIO_t gpio, bool value) +{ + if (value) { + BSP_GPIO_WritePin(gpio, true); + } else { + BSP_GPIO_WritePin(gpio, false); + } + return DEVICE_OK; +} +#endif #ifdef __cplusplus } diff --git a/assets/User_code/device/motor_rm.c b/assets/User_code/device/motor_rm.c index 2ca4507..cd6e633 100644 --- a/assets/User_code/device/motor_rm.c +++ b/assets/User_code/device/motor_rm.c @@ -139,12 +139,16 @@ static void Motor_RM_Decode(MOTOR_RM_t *motor, BSP_CAN_Message_t *msg) { motor->feedback.rotor_speed = rotor_speed; motor->feedback.torque_current = torque_current; } + if (motor->motor.reverse) { + motor->feedback.rotor_abs_angle = M_2_PI - motor->feedback.rotor_abs_angle; + motor->feedback.rotor_speed = -motor->feedback.rotor_speed; + motor->feedback.torque_current = -motor->feedback.torque_current; + } motor->feedback.temp = msg->data[6]; } /* Exported functions ------------------------------------------------------- */ - int8_t MOTOR_RM_Register(MOTOR_RM_Param_t *param) { if (param == NULL) return DEVICE_ERR_NULL; if (MOTOR_RM_CreateCANManager(param->can) != DEVICE_OK) return DEVICE_ERR; @@ -222,6 +226,9 @@ int8_t MOTOR_RM_SetOutput(MOTOR_RM_Param_t *param, float value) { if (manager == NULL) return DEVICE_ERR_NO_DEV; if (value > 1.0f) value = 1.0f; if (value < -1.0f) value = -1.0f; + if (param->reverse){ + value = -value; + } MOTOR_RM_t *motor = MOTOR_RM_GetMotor(param); if (motor == NULL) return DEVICE_ERR_NO_DEV; int8_t logical_index = MOTOR_RM_GetLogicalIndex(param->id, param->module);