新增 EncoderAngleKalman 类以处理编码器角度噪声,改善角度反馈质量,并配合速度滤波器提供更准确的速度估算。 perf(CAN): 优化CAN数据打包与状态标识字段 改进 pack_u16_to_bytes 等函数实现方式,使用 reinterpret_cast 提高效率; 扩展 Status_code 为多个独立状态位,增强诊断能力。 feat(FOC): 添加电机锁止和停止功能 新增 drv_stop 和 drv_hold 方法用于控制电机占空比,支持紧急制动与角度保持。优化了FOC控制器的接口设计,提升安全性和可控性。 fix(filter): 修正中值滤波器数组大小动态分配问题 将 medium_filter 函数中的排序数组改为使用传入参数 size 动态定义,避免固定大小带来的资源浪费或越界风险,提高滤波精度和稳定性。 chore(project): 移除冗余文件及代码清理 移除了 thermal.cpp/h 文件及相关引用,调整项目结构,删除未使用的全局变量定义、注释和头文件包含,精简系统初始化流程。
51 lines
1.0 KiB
C++
51 lines
1.0 KiB
C++
#include "initial.h"
|
|
#include "Timer.h"
|
|
#include "ang_sensor.h"
|
|
#include <stdint.h>
|
|
|
|
|
|
void GPIO_config(void) {
|
|
// 使能GPIOB时钟
|
|
rcu_periph_clock_enable(RCU_GPIOB);
|
|
// 配置PB2为输入引脚,用于读取电机状态
|
|
gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
|
|
}
|
|
|
|
/* retarget the C library printf function to the USART */
|
|
u8 USART0_init() {
|
|
gd_eval_com_init(EVAL_COM0);
|
|
return 1;
|
|
}
|
|
|
|
/*!
|
|
\brief configure the watchdog peripheral
|
|
\param[in] none
|
|
\param[out] none
|
|
\retval none
|
|
*/
|
|
u8 watchdog_init(u32 time) {
|
|
u8 status = 0;
|
|
/* configure FWDGT counter clock: 40KHz(IRC40K) / 64 = 0.625 KHz */
|
|
/* time = reload_value / clock_frequency */
|
|
status = fwdgt_config(time * 0.625, FWDGT_PSC_DIV64);
|
|
fwdgt_enable();
|
|
return status;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief driver输出初始化
|
|
*/
|
|
void driver_init(void) {
|
|
timer1_gpio_config();
|
|
timer1_pwm_config();
|
|
TIMER3_config();
|
|
}
|
|
|
|
int fputc(int ch, FILE *f) throw() {
|
|
usart_data_transmit(EVAL_COM0, (uint8_t)ch);
|
|
while (RESET == usart_flag_get(EVAL_COM0, USART_FLAG_TBE))
|
|
;
|
|
return ch;
|
|
}
|