feat(PID): 调整速度与角度环PID参数

更新了FOC控制器中的速度环和角度环PID参数以改善控制响应,并微调电流环参数提升稳定性。

feat(Filter): 改进卡尔曼滤波器初始化逻辑及速度计算方式
引入系统运行时间计数器,修正编码器角度和速度卡尔曼滤波器的初始化流程,并基于实际时间间隔优化角速度估算精度。

refactor(Filter): 移动成员变量声明顺序
调整`EncoderAngleKalman`类中`last_angle`成员变量的访问权限和声明位置,增强封装性和可读性。

feat(Flash): 新增Flash EEPROM功能支持
添加FlashEEPROM类及相关头文件,支持电机角度等关键数据掉电保存,并在CAN通信复位时进行角度存储操作。

refactor(Timer): 优化定时器配置和中断优先级设置
删除冗余的TIMER3定义,修改TIMER1中断服务函数可见性,并调整NVIC子优先级分配,确保中断响应合理有序。

feat(AngleSensor): 完善角度传感器初始化与角度设定接口
重构角度传感器初始化方法并新增角度设置函数,支持从Flash读取初始角度值并与减速比结合应用。

feat(Health): 实现母线电压监测与保护策略
新增电源管理函数,在母线电压异常下降时自动关闭电机输出,防止因供电不足导致设备损坏。
This commit is contained in:
cbb
2025-12-16 22:39:39 +08:00
parent 839a32ff04
commit 7371f97882
19 changed files with 516 additions and 57 deletions
+4 -13
View File
@@ -14,8 +14,6 @@
constexpr int TIMER2_PRESCALER = 119; // 120MHz / 120 = 1MHz
constexpr int TIMER2_PERIOD = 99; // 1MHz / 100 = 100us
constexpr int TIMER3_PRESCALER = 119; // 120MHz / 120 = 1MHz
constexpr int TIMER3_PERIOD = 9999; // 1MHz / 10000 = 100Hz = 10ms
constexpr int TIMER1_PRESCALER = 0; // 不分频,计数器时钟为120MHz
constexpr int TIMER1_PERIOD = 5999; // 120MHz / (0+1) / (5999+1) = 20kHz
@@ -25,13 +23,13 @@ constexpr int TIMER1_CH2_PULSE = 0;
constexpr int TIMER1_CH3_COMPARE_VALUE =
(TIMER1_PERIOD + 1) * 0.5 - 1; // PWM周期50%位置触发中断
static u32 total_us100_counter = 0; // 总计数器,每100微秒增加1
volatile u32 total_us100_counter = 0; // 总计数器,每100微秒增加1
extern u16 adc_value[7];
extern FOC_Controlroller FOC;
extern TaskScheduler scheduler;
extern CAN_transmiter CAN0_transmiter;
// 添加系统运行时间计数器
static volatile std::u64 system_runtime_us = 0;
extern u32 cnt_test;
/**
* @brief 设置引脚中断优先级
@@ -44,7 +42,7 @@ void nvic_config(void) {
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
/* 使能TIMER2中断,设置抢占优先级为1,子优先级为1 */
nvic_irq_enable(TIMER2_IRQn, 0, 1);
nvic_irq_enable(TIMER1_IRQn, 0, 1);
nvic_irq_enable(TIMER1_IRQn, 0, 2);
}
/**
@@ -99,13 +97,6 @@ void User_timer_init(void) {
nvic_config();
}
/*!
\brief 获取系统运行时间(毫秒)
\param[in] none
\param[out] none
\retval 系统运行时间,单位为毫秒
*/
uint64_t get_system_runtime_us(void) { return system_runtime_us; }
/**
* @brief TIMER2中断处理函数
@@ -277,7 +268,7 @@ void timer1_pwm_config(void) {
* @brief TIMER1中断处理函数
* @return void
*/
extern "C" void TIMER1_IRQHandler(void) {
void TIMER1_IRQHandler(void) {
// 检查CH3比较中断标志并处理
if (timer_interrupt_flag_get(TIMER1, TIMER_INT_FLAG_CH3) != RESET) {
// 清除CH3比较中断标志