feat(FOC): 集成ARM数学库优化FOC算法实现

- 引入arm_math.h库以使用ARM优化的数学函数
- 将角度归一化从弧度制改为角度制,使用360.0f替代2*PI
- 使用arm_sin_cos_f32替代查找表实现正弦余弦计算
- 移除注释中的ARM Clark和Park变换函数调用
- 修正机械角度计算中的时间常量为TIMER2_FREQUENCY倒数
- 移除传感器角度到弧度的转换,保持原始角度值
- 激活电流环控制中的Iq/Id计算并发送CAN数据
This commit is contained in:
cbb
2026-01-07 23:13:21 +08:00
parent fccb93dd41
commit 72506ce87d
14 changed files with 133 additions and 452 deletions
+10 -1
View File
@@ -1,4 +1,5 @@
#include "initial.h"
#include "Can.h"
#include "config.h"
#include "flash.h"
#include "gd32c10x.h"
@@ -7,7 +8,6 @@
#include "gd32c10x_rcu.h"
#include <cstdio>
#include <stdint.h>
#include "can.h"
#include <stdio.h>
extern CAN_transmiter CAN0_transmiter; // CAN初始化
@@ -97,9 +97,13 @@ u16 get_reset_cause(void) {
}
void OTA_initial(void) {
// 确认当前APP可用
OTA_SET(n_APP_LATEST_CHECK_ADDR, OTA_AVAL);
OTA_SET(n_APP_LATEST_EN_ADDR, OTA_AVAL);
u8 transmit_data[2] = {0x0A, 0xAC};
// 确认APP可用
CAN0_transmiter.CANFD_AsyncSend(CANFD_OTA_ACK_ID, 2, transmit_data);
volatile u32 *flash_ptr = (volatile u32 *)n_APP_BACKUP_AVAL_ADDR;
u32 back_aval = *flash_ptr;
@@ -108,9 +112,14 @@ void OTA_initial(void) {
// 如果BACK不可用
if (back_aval == OTA_NOT_AVAL) {
std::printf("notaval\r\n");
move_app_data();
} else if (back_aval == OTA_AVAL &&
back_check == OTA_NOT_AVAL) { // BACK已刷写,但未检查
std::printf("aval\r\n");
move_app_data();
}
else {
printf("check\r\n");
}
}