feat(FOC): 添加电源电压更新功能

在 FOC 控制器中新增 `update_power` 方法,用于实时获取母线电压,
提升控制系统对电源状态的感知能力。

feat(CAN): 优化 CAN 配置与通信处理
将 CAN 相关宏定义改为 constexpr 常量,并引入角度转换因子。
修正接收数据解析方式,增强通信稳定性与精度。

feat(angle_sensor): 实现角度累积与绕回处理
重写角度传感器驱动,支持角度连续测量与自动绕回处理。
新增 `update`、`getAngle` 和 `reset` 接口,提高角度读取准确性。

feat(main): 增加角度传感器磁感应强度测试
在主函数初始化阶段调用磁感应强度检测函数,辅助判断传感器工作状态。
This commit is contained in:
cbb
2025-11-02 01:54:01 +08:00
parent 0c5ab9c1d8
commit 974b8e6675
9 changed files with 79 additions and 66 deletions
+10 -10
View File
@@ -13,11 +13,11 @@
#include <stdio.h>
#include <stdlib.h>
#define DEV_CAN0_ID 0x0000
#define DEV_CAN0_MASK 0x0000
#define CANX CAN0
#define DEV_CAN_LOOPBACK_ID 0x0000
constexpr u16 CANX = CAN0;
constexpr u16 DEV_CAN0_ID = 0x0000;
constexpr u16 DEV_CAN0_MASK = 0x0000;
constexpr u16 DEV_CAN_LOOPBACK_ID = 0x0000;
constexpr float ANGLE_FACTOR = 25.0f / 360.0f * 2.0f * 3.14159265358979323846f;
extern CAN_transmiter CAN0_transmiter;
extern FOC_Controlroller FOC;
@@ -430,15 +430,13 @@ void CAN_transmiter::update(void) {
mcu_temp = sampler.get_mcu_temp() * 100;
motor_temp = sampler.get_drv_temp() * 100;
Power_Voltage = sampler.get_vbus_voltage() * 1000;
rt_angle_union.f = KTH7823.readAngle();
rt_angle_union.f = KTH7823.getAngle();
rt_velocity_union.f = 0.0f;
Status_code = (gpio_input_bit_get(GPIOB, GPIO_PIN_2) == SET) ? 0 : 1;
Target_Control_Mode = FOC.control_mode;
controller_Mode = FOC.control_mode;
target_angle_union.f = FOC.target_angle;
target_velocity_union.f = FOC.target_velocity;
u_current_union.f = sampler.get_current('U') * 1000;
w_current_union.f = sampler.get_current('W') * 1000;
v_current_union.f = sampler.get_current('V') * 1000;
@@ -675,10 +673,12 @@ void CAN_transmiter::communication_check() {
}
FOC.target_angle =
unpack_bytes_to_float(receive_message.rx_data, 7).f;
FOC.target_velocity =
target_velocity_union.f =
unpack_bytes_to_float(receive_message.rx_data, 11).f;
FOC.target_velocity = target_velocity_union.f * ANGLE_FACTOR;
can0_receive_flag = RESET;
}
can0_receive_flag = RESET;
}
}