2025-11-18 13:03:52 +08:00
|
|
|
#ifndef __DM_IMU_H
|
|
|
|
|
#define __DM_IMU_H
|
2025-11-17 16:27:19 +08:00
|
|
|
|
2025-11-18 13:03:52 +08:00
|
|
|
#include "stm32h7xx_hal.h"
|
2025-11-17 16:27:19 +08:00
|
|
|
|
2025-11-18 13:03:52 +08:00
|
|
|
|
|
|
|
|
#define ACCEL_CAN_MAX (235.2f)
|
|
|
|
|
#define ACCEL_CAN_MIN (-235.2f)
|
|
|
|
|
#define GYRO_CAN_MAX (34.88f)
|
|
|
|
|
#define GYRO_CAN_MIN (-34.88f)
|
|
|
|
|
#define PITCH_CAN_MAX (90.0f)
|
|
|
|
|
#define PITCH_CAN_MIN (-90.0f)
|
|
|
|
|
#define ROLL_CAN_MAX (180.0f)
|
|
|
|
|
#define ROLL_CAN_MIN (-180.0f)
|
|
|
|
|
#define YAW_CAN_MAX (180.0f)
|
|
|
|
|
#define YAW_CAN_MIN (-180.0f)
|
|
|
|
|
#define TEMP_MIN (0.0f)
|
|
|
|
|
#define TEMP_MAX (60.0f)
|
|
|
|
|
#define Quaternion_MIN (-1.0f)
|
|
|
|
|
#define Quaternion_MAX (1.0f)
|
|
|
|
|
|
|
|
|
|
#define CMD_READ 0
|
|
|
|
|
#define CMD_WRITE 1
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
COM_USB = 0,
|
|
|
|
|
COM_RS485,
|
|
|
|
|
COM_CAN,
|
|
|
|
|
COM_VOFA
|
|
|
|
|
|
|
|
|
|
} imu_com_port_e;
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
CAN_BAUD_1M = 0,
|
|
|
|
|
CAN_BAUD_500K,
|
|
|
|
|
CAN_BAUD_400K,
|
|
|
|
|
CAN_BAUD_250K,
|
|
|
|
|
CAN_BAUD_200K,
|
|
|
|
|
CAN_BAUD_100K,
|
|
|
|
|
CAN_BAUD_50K,
|
|
|
|
|
CAN_BAUD_25K
|
|
|
|
|
|
|
|
|
|
} imu_baudrate_e;
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
REBOOT_IMU = 0,
|
|
|
|
|
ACCEL_DATA,
|
|
|
|
|
GYRO_DATA,
|
|
|
|
|
EULER_DATA,
|
|
|
|
|
QUAT_DATA,
|
|
|
|
|
SET_ZERO,
|
|
|
|
|
ACCEL_CALI,
|
|
|
|
|
GYRO_CALI,
|
|
|
|
|
MAG_CALI,
|
|
|
|
|
CHANGE_COM,
|
|
|
|
|
SET_DELAY,
|
|
|
|
|
CHANGE_ACTIVE,
|
|
|
|
|
SET_BAUD,
|
|
|
|
|
SET_CAN_ID,
|
|
|
|
|
SET_MST_ID,
|
|
|
|
|
DATA_OUTPUT_SELECTION,
|
|
|
|
|
SAVE_PARAM = 254,
|
|
|
|
|
RESTORE_SETTING = 255
|
|
|
|
|
} reg_id_e;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
|
{
|
|
|
|
|
uint8_t can_id;
|
|
|
|
|
uint8_t mst_id;
|
|
|
|
|
|
|
|
|
|
FDCAN_HandleTypeDef *can_handle;
|
|
|
|
|
|
|
|
|
|
float pitch;
|
|
|
|
|
float roll;
|
|
|
|
|
float yaw;
|
|
|
|
|
|
|
|
|
|
float gyro[3];
|
|
|
|
|
float accel[3];
|
|
|
|
|
|
|
|
|
|
float q[4];
|
|
|
|
|
|
|
|
|
|
float cur_temp;
|
|
|
|
|
|
|
|
|
|
} imu_t;
|
|
|
|
|
|
|
|
|
|
void imu_init(uint8_t can_id, uint8_t mst_id, FDCAN_HandleTypeDef *hfdcan);
|
|
|
|
|
|
|
|
|
|
void imu_write_reg(uint8_t reg_id, uint32_t data);
|
|
|
|
|
|
|
|
|
|
void imu_read_reg(uint8_t reg_id);
|
|
|
|
|
|
|
|
|
|
void imu_reboot();
|
|
|
|
|
|
|
|
|
|
void imu_accel_calibration();
|
|
|
|
|
|
|
|
|
|
void imu_gyro_calibration();
|
|
|
|
|
|
|
|
|
|
void imu_change_com_port(imu_com_port_e port);
|
|
|
|
|
|
|
|
|
|
void imu_set_active_mode_delay(uint32_t delay);
|
|
|
|
|
|
|
|
|
|
void imu_change_to_active();
|
|
|
|
|
|
|
|
|
|
void imu_change_to_request();
|
|
|
|
|
|
|
|
|
|
void imu_set_baud(imu_baudrate_e baud);
|
|
|
|
|
|
|
|
|
|
void imu_set_can_id(uint8_t can_id);
|
|
|
|
|
|
|
|
|
|
void imu_set_mst_id(uint8_t mst_id);
|
|
|
|
|
|
|
|
|
|
void imu_save_parameters();
|
|
|
|
|
|
|
|
|
|
void imu_restore_settings();
|
|
|
|
|
|
|
|
|
|
void imu_request_accel();
|
|
|
|
|
|
|
|
|
|
void imu_request_gyro();
|
|
|
|
|
|
|
|
|
|
void imu_request_euler();
|
|
|
|
|
|
|
|
|
|
void imu_request_quat();
|
|
|
|
|
|
|
|
|
|
#endif
|