mirror of
https://github.com/goldenfishs/MRobot.git
synced 2025-11-02 04:23:10 +08:00
修复led和rm的reserv
This commit is contained in:
parent
a29e097978
commit
d16427f7d4
@ -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
|
||||
|
||||
|
||||
|
||||
@ -5,27 +5,58 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ----------------------------------------------------------------- */
|
||||
#include <stdint.h>
|
||||
#include "bsp/gpio.h"
|
||||
#include "bsp/pwm.h"
|
||||
#include "bsp/bsp.h"
|
||||
/* USER DEFIN BEGIN */
|
||||
|
||||
/* USER DEFIN END */
|
||||
#include <stdint.h>
|
||||
#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
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user