Files
Motor_v2/Robot_V2/sys/config.h
T
cbb 4c4e47e9e3 refactor(FOC): 添加Doxygen文档注释并优化SVPWM算法性能
添加了完整的Doxygen文档注释到FOC算法模块的所有函数、类和变量,提升了代码可读性和维护性。同时优化了SVPWM算法实现,将atan2f替换为符号法扇区判断,显著提升计算效率(约15周期vs atan2f 300周期),并改进了arm_sin_cos_f32替代sqrtf提高性能。

feat(FOC): 统一电气角度计算避免重复运算

重构代码以统一电气角度计算,在各个控制循环中只计算一次电气角度并传递给需要的函数,避免了多次重复的fmodf运算和角度归一化操作,提升了实时控制性能。

refactor(Filter): 改进α-β观测器角度处理精度

修改角度卡尔曼滤波器在归一化角度空间[0,360)内工作,避免大累积角度的浮点精度损失问题,确保静止状态下不会产生虚假速度,同时保持与下游代码的兼容性。

refactor: 为算法模块添加完整文档注释

为所有算法模块(FOC、Filter、pid、thermal)添加了详细的Doxygen文档注释,包括函数说明、参数描述、返回值说明等,便于代码理解和API文档生成。
2026-05-23 22:46:32 +08:00

427 lines
19 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file sys/config.h
* @brief 系统服务与平台支持源文件
* @note 本文件仅补充 Doxygen 文档注释,不改变代码逻辑。
*/
#ifndef __CONFIG_H
#define __CONFIG_H
#include "gd32c10x_eval.h"
#include <cstdint>
// 如果使用 CMSIS DSP 库,需要定义 ARM_MATH_CM4
#define ARM_MATH_CM4
/** @brief EEP_DEBUG 宏定义 */
#define EEP_DEBUG 0
/** @brief OTA_DEBUG 宏定义 */
#define OTA_DEBUG 0
/** @brief SLEEP_DEBUG 宏定义 */
#define SLEEP_DEBUG 0
/** @brief ANG_SENS_DEBUG 宏定义 */
#define ANG_SENS_DEBUG 0
/** @brief CAN_DEBUG 宏定义 */
#define CAN_DEBUG 0
/** @brief MAIN_DEBUG 宏定义 */
#define MAIN_DEBUG 0
/** @brief FOC_DEBUG 宏定义 */
#define FOC_DEBUG 0
// 版本号定义 - 可根据实际项目进行调整
/** @brief SOFTWARE_VERSION_MAJOR 常量定义 */
constexpr u16 SOFTWARE_VERSION_MAJOR = 26;
/** @brief SOFTWARE_VERSION_MINOR 常量定义 */
constexpr u16 SOFTWARE_VERSION_MINOR = 5;
/** @brief SOFTWARE_VERSION_PATCH 常量定义 */
constexpr u16 SOFTWARE_VERSION_PATCH = 19;
/** @brief SOFTWARE_VERSION_BUILD 常量定义 */
constexpr u16 SOFTWARE_VERSION_BUILD = 2;
/** @brief HARDWARE_VERSION_MAJOR 常量定义 */
constexpr u16 HARDWARE_VERSION_MAJOR = 25;
/** @brief HARDWARE_VERSION_MINOR 常量定义 */
constexpr u16 HARDWARE_VERSION_MINOR = 12;
/** @brief HARDWARE_VERSION_PATCH 常量定义 */
constexpr u16 HARDWARE_VERSION_PATCH = 01;
/** @brief HARDWARE_VERSION_BUILD 常量定义 */
constexpr u16 HARDWARE_VERSION_BUILD = 0;
/** @brief BOOT_VERSION_MAJOR 常量定义 */
constexpr u16 BOOT_VERSION_MAJOR = 26;
/** @brief BOOT_VERSION_MINOR 常量定义 */
constexpr u16 BOOT_VERSION_MINOR = 1;
/** @brief BOOT_VERSION_PATCH 常量定义 */
constexpr u16 BOOT_VERSION_PATCH = 12;
/** @brief BOOT_VERSION_BUILD 常量定义 */
constexpr u16 BOOT_VERSION_BUILD = 0;
// Flash 分区配置
/** @brief BOOTLOADER_SIZE 常量定义 */
constexpr u32 BOOTLOADER_SIZE = 0x6000; // 24KB
/** @brief BOOTLOADER_START_ADDR 常量定义 */
constexpr u32 BOOTLOADER_START_ADDR = 0x08000000; // BOOT 起始地址
/** @brief APPLATEST_START_ADDR 常量定义 */
constexpr u32 APPLATEST_START_ADDR = 0x08012000; // APP 起始地址
/** @brief APPBACK_START_ADDR 常量定义 */
constexpr u32 APPBACK_START_ADDR = 0x08006000; // APPBACK 起始地址
/** @brief APP_MAX_SIZE 常量定义 */
constexpr u32 APP_MAX_SIZE = 0xC000; // 48KB
/** @brief FMC_PAGE_SIZE 常量定义 */
constexpr u32 FMC_PAGE_SIZE = 0x400; // 1KB
/** @brief SLEEP_CONFIG_START 常量定义 */
constexpr u32 SLEEP_CONFIG_START = 0x0801E400; // 睡眠配置起始地址
/** @brief SLEEP_CONFIG_END 常量定义 */
constexpr u32 SLEEP_CONFIG_END = 0x0801E800; // 睡眠配置结束地址
/** @brief FLASH_EMPTY 常量定义 */
constexpr u32 FLASH_EMPTY = 0xFFFFFFFF; // 空数据
/** @brief SLEEP_ENABLE 常量定义 */
constexpr u32 SLEEP_ENABLE = 0x11111111; // 睡眠使能
/** @brief SLEEP_DISABLE 常量定义 */
constexpr u32 SLEEP_DISABLE = 0x00000000; // 睡眠禁止
// 节点 ID 配置 (用于多电机 CAN 总线隔离)
// 使用 CAN ID 高 16 位 (bits 31-16) 存储节点 ID,低 16 位 (bits 15-0) 存储基础 ID
// 格式:[节点 ID(16 位)][基础 ID(16 位)],例如:node_id=1, base_id=0x0200 → 0x00010200
//
// 节点 ID 存储方案:
// - 使用独立 Flash 页 (NODE_ID_PAGE_ADDR) 存储节点 ID,与EEPROM完全隔离
// - 采用双重备份机制 (主备份 + 备用备份)
// - 使用魔数 (NODE_ID_MAGIC) 验证数据有效性,防止位翻转导致错读
// - 使用写入计数器区分最新数据
/** @brief NODE_ID_PAGE_ADDR 常量定义 */
constexpr u32 NODE_ID_PAGE_ADDR = 0x0801E800; // 节点 ID 存储页 (1KB,独立区域)
/** @brief NODE_ID_PRIMARY_ADDR 常量定义 */
constexpr u32 NODE_ID_PRIMARY_ADDR = 0x0801E800; // 主存储地址
/** @brief NODE_ID_BACKUP_ADDR 常量定义 */
constexpr u32 NODE_ID_BACKUP_ADDR = 0x0801E840; // 备份存储地址 (偏移64字节)
/** @brief NODE_ID_MAGIC 常量定义 */
constexpr u32 NODE_ID_MAGIC = 0x4E4F4445; // 魔数 'NODE' 用于验证数据有效性
/** @brief DEFAULT_NODE_ID 常量定义 */
constexpr u16 DEFAULT_NODE_ID = 1; // 默认节点 ID
/** @brief BROADCAST_NODE_ID 常量定义 */
constexpr u16 BROADCAST_NODE_ID = 0x1FFF; // 广播 ID (所有节点响应)
/** @brief MAX_NODE_ID 常量定义 */
constexpr u16 MAX_NODE_ID = 0x1FFE; // 最大有效节点 ID (0~0x1FFE)
// 节点 ID 存储结构 (存储在Flash中的格式)
// 地址偏移 0x00: 魔数 (0x4E4F4445 = 'NODE')
// 地址偏移 0x04: 节点 ID (u16)
// 地址偏移 0x06: 保留 (u16,填充为0xFFFF)
// 地址偏移 0x08: 写入计数器 (u32,用于区分最新数据)
// 地址偏移 0x0C: CRC32 校验 (u32)
/** @brief NODE_ID_STRUCT_SIZE 常量定义 */
constexpr u8 NODE_ID_STRUCT_SIZE = 0x10; // 结构体大小 16 字节
/** @brief NODE_ID_MAGIC_OFFSET 常量定义 */
constexpr u8 NODE_ID_MAGIC_OFFSET = 0x00; // 魔数偏移
/** @brief NODE_ID_VALUE_OFFSET 常量定义 */
constexpr u8 NODE_ID_VALUE_OFFSET = 0x04; // 节点ID值偏移
/** @brief NODE_ID_COUNTER_OFFSET 常量定义 */
constexpr u8 NODE_ID_COUNTER_OFFSET = 0x08; // 写入计数器偏移
/** @brief NODE_ID_CRC_OFFSET 常量定义 */
constexpr u8 NODE_ID_CRC_OFFSET = 0x0C; // CRC偏移
// BOOT 相关
/** @brief OTA_CONFIG_NUM 常量定义 */
constexpr u32 OTA_CONFIG_NUM = 6;
/** @brief n_APP_LATEST_AVAL_ADDR 常量定义 */
constexpr u32 n_APP_LATEST_AVAL_ADDR = 0x0801E000; // 最新 APP 可用地址
/** @brief n_APP_BACKUP_AVAL_ADDR 常量定义 */
constexpr u32 n_APP_BACKUP_AVAL_ADDR = 0x0801E004; // 备份 APP 可用地址
/** @brief n_APP_LATEST_EN_ADDR 常量定义 */
constexpr u32 n_APP_LATEST_EN_ADDR = 0x0801E008; // 最新 APP 激活
/** @brief n_APP_BACKUP_EN_ADDR 常量定义 */
constexpr u32 n_APP_BACKUP_EN_ADDR = 0x0801E00C; // 备份 APP 激活
/** @brief n_APP_LATEST_CHECK_ADDR 常量定义 */
constexpr u32 n_APP_LATEST_CHECK_ADDR = 0x0801E010; // 最新 APP 校验
/** @brief n_APP_BACKUP_CHECK_ADDR 常量定义 */
constexpr u32 n_APP_BACKUP_CHECK_ADDR = 0x0801E014; // 备份 APP 校验
/** @brief OTA_NOT_AVAL 常量定义 */
constexpr u32 OTA_NOT_AVAL = 0xFFFFFFFF;
/** @brief OTA_AVAL 常量定义 */
constexpr u32 OTA_AVAL = 0x00000000; // 全零表示可用
// 参数配置
/** @brief PP 常量定义 */
constexpr u8 PP = 11;
/** @brief DIR 常量定义 */
constexpr float DIR = 1.0f; // 默认方向:-1.0f 反转,1.0f 正转
/** @brief REDUCTION_RATIO 常量定义 */
constexpr u16 REDUCTION_RATIO = 25;
/** @brief CURRENT_OFFSET 常量定义 */
constexpr float CURRENT_OFFSET = -3.31f / 2.0f; // 当前电流传感器的零点偏移
/** @brief HOLD_PWM_DUTY 常量定义 */
constexpr float HOLD_PWM_DUTY = 0.1f;
/** @brief ANGLESENS_OFFSET 常量定义 */
constexpr u16 ANGLESENS_OFFSET = 0;
/** @brief ANGLESENS_CALIBRATION_ANGLE 常量定义 */
constexpr float ANGLESENS_CALIBRATION_ANGLE = 83.0f;
/** @brief KE_FACTOR 常量定义 */
constexpr float KE_FACTOR = 0.0f;
// 角度/速度 α-β 观测器参数
/** @brief ANGLE_KALMAN_INITIAL_STATE 常量定义 */
constexpr float ANGLE_KALMAN_INITIAL_STATE = 0.0f;
/** @brief ANGLE_KALMAN_INITIAL_COVARIANCE 常量定义 */
constexpr float ANGLE_KALMAN_INITIAL_COVARIANCE = 0.0f;
/** @brief ANGLE_KALMAN_PROCESS_NOISE_Q 常量定义 */
constexpr float ANGLE_KALMAN_PROCESS_NOISE_Q = 0.0f;
/** @brief ANGLE_KALMAN_MEASUREMENT_NOISE_R 常量定义 */
constexpr float ANGLE_KALMAN_MEASUREMENT_NOISE_R = 0.0f;
/** @brief ANGLE_OBSERVER_ALPHA 常量定义 */
constexpr float ANGLE_OBSERVER_ALPHA = 0.75f; // 角度校正增益,越大越跟测量
/** @brief ANGLE_OBSERVER_BETA 常量定义 */
constexpr float ANGLE_OBSERVER_BETA = 0.002f; // 速度校正增益,原0.001微调至0.002
// 旧速度 Kalman 参数保留用于接口兼容;主速度输出现在直接来自 α-β 观测器
/** @brief VELOCITY_KALMAN_INITIAL_STATE 常量定义 */
constexpr float VELOCITY_KALMAN_INITIAL_STATE = 0.0f;
/** @brief VELOCITY_KALMAN_INITIAL_COVARIANCE 常量定义 */
constexpr float VELOCITY_KALMAN_INITIAL_COVARIANCE = 1e-3f;
/** @brief VELOCITY_KALMAN_PROCESS_NOISE_Q 常量定义 */
constexpr float VELOCITY_KALMAN_PROCESS_NOISE_Q =
5e-4f; // 略增大,减少拖尾
/** @brief VELOCITY_KALMAN_MEASUREMENT_NOISE_R 常量定义 */
constexpr float VELOCITY_KALMAN_MEASUREMENT_NOISE_R =
0.05f; // 明显小于旧值,避免压得太死
// 电流卡尔曼滤波器参数
/** @brief CURRENT_KALMAN_INITIAL_STATE 常量定义 */
constexpr float CURRENT_KALMAN_INITIAL_STATE = 0.0f;
/** @brief CURRENT_KALMAN_INITIAL_COVARIANCE 常量定义 */
constexpr float CURRENT_KALMAN_INITIAL_COVARIANCE = 100.0f; // 增大初始协方差
/** @brief CURRENT_KALMAN_PROCESS_NOISE_Q 常量定义 */
constexpr float CURRENT_KALMAN_PROCESS_NOISE_Q = 10.0f; // 降低过程噪声
/** @brief CURRENT_KALMAN_MEASUREMENT_NOISE_R 常量定义 */
constexpr float CURRENT_KALMAN_MEASUREMENT_NOISE_R = 5e-5f; // 增大测量噪声
// PID 配置
/** @brief DEFAULT_current_loop_p 常量定义 */
constexpr float DEFAULT_current_loop_p = 0.1f / 100 * 12; // 电流 P
/** @brief current_loop_Ki 常量定义 */
constexpr float current_loop_Ki = 0.55f; // 电流 P
/** @brief current_loop_Kd 常量定义 */
constexpr float current_loop_Kd = 3e-4f; // 电流 P
/** @brief DEFAULT_vel_loop_p 常量定义 */
constexpr float DEFAULT_vel_loop_p = 0.018f / 100 * 12; // 速度 P
/** @brief vel_loop_Ku 常量定义 */
constexpr float vel_loop_Ku = 3.600000e-03 * 0.7 * 100 / 12;
/** @brief vel_loop_Tu 常量定义 */
constexpr float vel_loop_Tu = 17.0f * 1e-3f;
/** @brief vel_loop_Ki 常量定义 */
constexpr float vel_loop_Ki = 1.2 * vel_loop_Ku / vel_loop_Tu;
/** @brief vel_loop_Kd 常量定义 */
constexpr float vel_loop_Kd = 0.075 * vel_loop_Ku * vel_loop_Tu * 2;
/** @brief DEFAULT_vel_angloop_p 常量定义 */
constexpr float DEFAULT_vel_angloop_p = 0.4f / 100; // 速度 速度 - 角度 P
/** @brief vel_angloop_Ki 常量定义 */
constexpr float vel_angloop_Ki = 5.0f; // 速度 速度 - 角度 I
/** @brief vel_angloop_Kd 常量定义 */
constexpr float vel_angloop_Kd = 5e-05f; // 速度 速度 - 角度 D
/** @brief DEFAULT_angle_angloop_p 常量定义 */
constexpr float DEFAULT_angle_angloop_p =
150.0f / 100 * 12; // 角度 速度 - 角度 P
/** @brief ang_angloop_Ki 常量定义 */
constexpr float ang_angloop_Ki = 0.00f; // 角度 速度 - 角度 I
/** @brief ang_angloop_Kd 常量定义 */
constexpr float ang_angloop_Kd = 8e-04f; // 角度 速度 - 角度 D
/** @brief DEFAULT_angle_loop_p 常量定义 */
constexpr float DEFAULT_angle_loop_p = 60.0f / 100 * 12; // 角度 P
/** @brief DEFAULT_angle_MIT_p 常量定义 */
constexpr float DEFAULT_angle_MIT_p = 100.0f / 100 * 12; // 角度 MIT P
/** @brief angle_MIT_Ki 常量定义 */
constexpr float angle_MIT_Ki = 0.0f;
/** @brief angle_MIT_Kd 常量定义 */
constexpr float angle_MIT_Kd = 8e-04f;
/** @brief DEFAULT_vel_MIT_p 常量定义 */
constexpr float DEFAULT_vel_MIT_p = 5.0f / 100; // 速度 MIT P
/** @brief vel_MIT_Ki 常量定义 */
constexpr float vel_MIT_Ki = 15.0f;
/** @brief vel_MIT_Kd 常量定义 */
constexpr float vel_MIT_Kd = 1e-04f;
/** @brief DEFAULT_current_MIT_p 常量定义 */
constexpr float DEFAULT_current_MIT_p = 0.2f / 100 * 12; // 电流 MIT P
/** @brief current_MIT_Ki 常量定义 */
constexpr float current_MIT_Ki = 0.1f;
/** @brief current_MIT_Kd 常量定义 */
constexpr float current_MIT_Kd = 3e-4f;
// 常量定义
/** @brief SIZE_FLOAT 常量定义 */
constexpr u8 SIZE_FLOAT = sizeof(float);
/** @brief SIZE_U32 常量定义 */
constexpr u8 SIZE_U32 = sizeof(uint32_t);
/** @brief ADC_MAX 常量定义 */
constexpr float ADC_MAX = 65536.0f;
/** @brief PI 常量定义 */
constexpr float PI = 3.14159265358979323846f;
/** @brief INV_PI_3 常量定义 */
constexpr float INV_PI_3 = 3.0f / PI;
/** @brief PI_3 常量定义 */
constexpr float PI_3 = PI / 3.0f;
/** @brief _1_SQRT3 常量定义 */
constexpr float _1_SQRT3 = 0.57735026919f; // 1/sqrt(3)
/** @brief _3PI_2 常量定义 */
constexpr float _3PI_2 = 4.71238898038f;
/** @brief SQRT3 常量定义 */
constexpr float SQRT3 = 1.7320508075688772f;
/** @brief SQRT3DV2 常量定义 */
constexpr float SQRT3DV2 = 0.8660254037844386f; // sqrt(3)/2
/** @brief COS_PI_3 常量定义 */
constexpr float COS_PI_3 = 0.5f;
/** @brief ANGLE_FACTOR 常量定义 */
constexpr float ANGLE_FACTOR = 25.0f / 180.0f * PI;
/** @brief DEG2RAD 常量定义 */
constexpr float DEG2RAD = 1.0f / 180.0f * PI;
/** @brief RAD2DEG 常量定义 */
constexpr float RAD2DEG = 180.0f / PI; // 修正 RAD2DEG 定义,应该是 180/π
/** @brief DEFAULT_VALUE 常量定义 */
constexpr u8 DEFAULT_VALUE = 0;
/** @brief CONFIG_SAVED_NUM 常量定义 */
constexpr u8 CONFIG_SAVED_NUM = 6;
// 三角函数快速计算 LUT
/** @brief LUT_SIZE 常量定义 */
constexpr u16 LUT_SIZE = 1024;
/** @brief LUT_MASK 常量定义 */
constexpr u16 LUT_MASK = (LUT_SIZE - 1);
/** @brief LUT_SCALE 常量定义 */
constexpr u16 LUT_SCALE = (LUT_SIZE / (2.0f * PI));
// CAN 相关
// 注意:以下为 CAN 基础 ID(只保留低 16 位),实际发送/接收时会自动叠加节点 ID
// 到高 16 位 格式:[节点 ID(16 位)][基础 ID(16 位)] 例如:节点 ID=1,发送命令
// ID = (1 << 16) | CANFD_CMD_ID = 0x00010200
/** @brief DEV_CAN0_ID 常量定义 */
constexpr u16 DEV_CAN0_ID = 0x0000;
/** @brief DEV_CAN0_MASK 常量定义 */
constexpr u16 DEV_CAN0_MASK = 0x0000;
/** @brief DEV_CAN_LOOPBACK_ID 常量定义 */
constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;
// 反馈基础 ID
/** @brief CANFD_STATUS_ID 常量定义 */
constexpr u16 CANFD_STATUS_ID = 0x0100; // 状态反馈基础 ID
/** @brief CANFD_CONFIG_ID 常量定义 */
constexpr u16 CANFD_CONFIG_ID = 0x0101; // 配置信息基础 ID
/** @brief CANFD_VERSION_ID 常量定义 */
constexpr u16 CANFD_VERSION_ID = 0x00FF; // 版本信息基础 ID
// 命令基础 ID
/** @brief CANFD_CMD_ID 常量定义 */
constexpr u16 CANFD_CMD_ID = 0x0200; // 控制命令基础 ID
/** @brief CANFD_RESET_ID 常量定义 */
constexpr u16 CANFD_RESET_ID = 0x0301; // 重置命令基础 ID
// 节点 ID 管理基础 ID
/** @brief CANFD_SET_NODE_ID 常量定义 */
constexpr u16 CANFD_SET_NODE_ID = 0x0400; // 设置节点 ID 基础 ID
/** @brief CANFD_GET_NODE_ID 常量定义 */
constexpr u16 CANFD_GET_NODE_ID = 0x0401; // 查询节点 ID 基础 ID
// OTA 相关基础 ID 不受到node ID影响
/** @brief CANFD_BOOT_ID 常量定义 */
constexpr u16 CANFD_BOOT_ID = 0x0000; // BOOT 模式基础 ID (进入 BOOT 使用此 ID)
/** @brief CANFD_OTA_REQ_ID 常量定义 */
constexpr u16 CANFD_OTA_REQ_ID = 0x0100; // OTA 请求基础 ID
/** @brief CANFD_OTA_DATA_ID 常量定义 */
constexpr u16 CANFD_OTA_DATA_ID = 0x0101; // OTA 数据基础 ID
/** @brief CANFD_OTA_ACK_ID 常量定义 */
constexpr u16 CANFD_OTA_ACK_ID = 0x0102; // OTA 确认基础 ID
/** @brief CANFD_OTA_WAIT_ID 常量定义 */
constexpr u16 CANFD_OTA_WAIT_ID = 0x0103; // OTA 等待基础 ID
// ADC
/** @brief ADC_FILTER_SIZE 常量定义 */
constexpr u8 ADC_FILTER_SIZE = 6;
/** @brief BLOCK_SIZE 常量定义 */
constexpr u8 BLOCK_SIZE = ADC_FILTER_SIZE * SIZE_FLOAT;
/** @brief ERROR_ADC_VAL 常量定义 */
constexpr float ERROR_ADC_VAL = 255.0f;
/** @brief MAX_TEMP 常量定义 */
constexpr float MAX_TEMP = 150.0f;
/** @brief MIN_TEMP 常量定义 */
constexpr float MIN_TEMP = -40.0f;
/** @brief MAX_CURRENT 常量定义 */
constexpr float MAX_CURRENT = 40.0f;
/** @brief MIN_CURRENT 常量定义 */
constexpr float MIN_CURRENT = -40.0f;
/** @brief MAX_VCC 常量定义 */
constexpr float MAX_VCC = 65.0f;
/** @brief MIN_VCC 常量定义 */
constexpr float MIN_VCC = -0.1f;
// ang_sensor
/** @brief VEL_FILTER_SIZE 常量定义 */
constexpr u16 VEL_FILTER_SIZE = 4;
/** @brief DEFAULT_COMMAND 常量定义 */
constexpr u16 DEFAULT_COMMAND = 0x0000;
/** @brief FAULT_RECEIVE 常量定义 */
constexpr u16 FAULT_RECEIVE = 0xFFFF;
/** @brief ANGLE_WRAP_THRESHOLD 常量定义 */
constexpr float ANGLE_WRAP_THRESHOLD = 300.0f;
/** @brief ANGLE_WRAP_VALUE 常量定义 */
constexpr float ANGLE_WRAP_VALUE = 360.0f;
/** @brief RAD_FACTOR 常量定义 */
constexpr float RAD_FACTOR = 1.0f / ADC_MAX * 2.0f * PI;
/** @brief ANGLESENS_FACTOR 常量定义 */
constexpr float ANGLESENS_FACTOR = 1.0f / ADC_MAX * 360.0f;
// TIMER2-任务调度
/** @brief TIMER2_PRESCALER 常量定义 */
constexpr int TIMER2_PRESCALER = 119; // 120MHz / 120 = 1MHz
/** @brief TIMER2_PERIOD 常量定义 */
constexpr int TIMER2_PERIOD = 49; // 1 / 1MHz * 50 = 50us
/** @brief MOTOR_PERIOD 常量定义 */
constexpr int MOTOR_PERIOD = 1; // 控制每50us执行一次,无分频
/** @brief TIME_SLICE 常量定义 */
constexpr float TIME_SLICE =
(TIMER2_PERIOD + 1) * (TIMER2_PRESCALER + 1) / 120000000.0f; // 周期
/** @brief TIMER2_FREQUENCY 常量定义 */
constexpr float TIMER2_FREQUENCY = 1 / TIME_SLICE; // 频率
/** @brief MOTOR_FREQUENCY 常量定义 */
constexpr float MOTOR_FREQUENCY = 1 / TIME_SLICE / MOTOR_PERIOD; // 频率
// TIMER1-PWM
/** @brief TIMER1_PRESCALER 常量定义 */
constexpr int TIMER1_PRESCALER = 0; // 不分频,计数器时钟为 120MHz
/** @brief TIMER1_PERIOD 常量定义 */
constexpr int TIMER1_PERIOD = 2999; // 120MHz / (0+1) / (2999+1) = 40kHz计数, 中心对齐实际PWM 20kHz
/** @brief TIMER1_DEFAULT_PULSE 常量定义 */
constexpr int TIMER1_DEFAULT_PULSE = 0;
/** @brief TIMER1_CH3_COMPARE_VALUE 常量定义 */
constexpr int TIMER1_CH3_COMPARE_VALUE =
(TIMER1_PERIOD + 1) * 0.41 - 1; // PWM 周期 41% 位置触发ADC采样
// 齿槽转矩补偿
/** @brief COGGING_TABLE_SIZE 常量定义 */
constexpr u16 COGGING_TABLE_SIZE = 128; // 每电周期采样点数
/** @brief COGGING_COMP_SCALE 常量定义 */
constexpr float COGGING_COMP_SCALE = 0.005f; // 补偿换算系数 V/mA,40mA × 0.005 = 0.2V
// 电压检测参数(基于跌幅检测,不依赖固定额定电压)
// 快速检测层(fast_voltage_check,100us周期):
// - 使用峰值检测算法跟踪当前额定电压(vbus_reference)
// - 当电压相对于基准电压下跌超过 VBUS_DROP_THRESHOLD → 关机
// - 当电压低于绝对下限 VBUS_ABSOLUTE_MIN → 关机
// 慢速管理层(power_manage,~10ms周期):
// - 执行Flash保存
// - 状态恢复判断(电压恢复到基准电压的90%以上)
/** @brief VBUS_DROP_THRESHOLD 常量定义 */
constexpr float VBUS_DROP_THRESHOLD = 5.0f; // 电压跌幅阈值 (V)
/** @brief VBUS_ABSOLUTE_MIN 常量定义 */
constexpr float VBUS_ABSOLUTE_MIN = 12.0f; // 绝对最低电压 (V)
/** @brief VBUS_DEBOUNCE_COUNT 常量定义 */
constexpr u32 VBUS_DEBOUNCE_COUNT = 5; // 快速检测:防抖计数 (5次×100us = 500us)
/** @brief VBUS_RECOVERY_RATIO 常量定义 */
constexpr float VBUS_RECOVERY_RATIO = 0.9f; // 恢复比例(基准电压的90%)
#endif