feat(FOC): 实现电角度零位自动校准并修复ADC采样干扰问题
- 新增FlashEEPROM用于保存零位校准角,掉电不丢失 - 实现安全的零位校准算法:运行中禁止校准、对齐后重新采样、保存到Flash - 重构ADC架构:分离ADC0(PWM同步电流采样)和ADC1(VBUS/DRV温度轮询) - 解决ADC采样冲突:移除ADC0的regular连续扫描,避免与注入组抢占资源 - 修复VBUS电压读取错误:从DMA缓冲区改为直接ADC1单次转换 - 修正开环控制Uq幅值限幅逻辑,保留符号避免反转时抖动 - 更新CAN协议:电流数据改为有符号16位打包,支持负电流传输 - 调整版本号至v26.8.16.7
This commit is contained in:
@@ -38,6 +38,29 @@ static inline void pack_u16_to_bytes(u8 *buffer, u16 offset, u16 value) {
|
||||
buffer[offset + 1] = (u8)((value >> 8) & 0xFF);
|
||||
}
|
||||
|
||||
// 将 mA 电流值饱和转换为 int16 后按小端打包。
|
||||
// DBC 中 U/V/W current 定义为 signed int16([-32768,32767] mA);
|
||||
// 相电流有正有负,此前用 u16() 打包负值被削成 0,上位机波形下半周丢失。
|
||||
/**
|
||||
* @brief pack_current_s16_to_bytes 函数
|
||||
* @param[in] buffer 参数
|
||||
* @param[in] offset 参数
|
||||
* @param[in] value_mA 参数
|
||||
* @return void
|
||||
*/
|
||||
static inline void pack_current_s16_to_bytes(u8 *buffer, u16 offset,
|
||||
float value_mA) {
|
||||
short value;
|
||||
if (value_mA > 32767.0f) {
|
||||
value = 32767; // 饱和,避免 float→int 超范围截断环绕
|
||||
} else if (value_mA < -32768.0f) {
|
||||
value = -32768;
|
||||
} else {
|
||||
value = (short)value_mA;
|
||||
}
|
||||
pack_u16_to_bytes(buffer, offset, (u16)value);
|
||||
}
|
||||
|
||||
// 添加辅助函数用于将 float 类型数据打包到 u8 数组中
|
||||
/**
|
||||
* @brief pack_float_to_bytes 函数
|
||||
|
||||
Reference in New Issue
Block a user