fix(FOC): 修复角度控制中的冗余CAN传输与传感器角度获取错误
- 修正速度控制中角度传感器数据读取错误,使用current_sensorangle替代getRawAngle - 在Timer中断中统一使用angle_control进行角度闭环控制 - 完善角度传感器类的角度读取逻辑,增加current_angle_deg和current_angle_rad成员变量 - 添加getcurrent_sensorangle接口用于获取当前原始角度值
This commit is contained in:
@@ -210,6 +210,8 @@ float angle_sensor::read_sensorAngle(void) {
|
||||
// 使用DMA发送命令并接收数据
|
||||
if (!spi_rw_half_word_dma(SPI0, DEFAULT_COMMAND, &u16data)) {
|
||||
SPI_CS_DISABLE();
|
||||
current_angle_deg = u16data * ANGLE_FACTOR;
|
||||
current_angle_rad = u16data * RAD_FACTOR;
|
||||
return u16data * ANGLE_FACTOR;
|
||||
} else {
|
||||
SPI_CS_DISABLE();
|
||||
@@ -223,17 +225,16 @@ float angle_sensor::read_sensorAngle(void) {
|
||||
* @return 累积角度值
|
||||
*/
|
||||
float angle_sensor::update(void) {
|
||||
|
||||
float currentAngle = read_sensorAngle();
|
||||
read_sensorAngle();
|
||||
|
||||
if (m_firstUpdate) {
|
||||
m_lastAngle = currentAngle;
|
||||
m_lastAngle = current_angle_deg;
|
||||
m_firstUpdate = false;
|
||||
return m_cumulativeAngle;
|
||||
}
|
||||
|
||||
// 计算角度变化
|
||||
float delta = currentAngle - m_lastAngle;
|
||||
float delta = current_angle_deg - m_lastAngle;
|
||||
|
||||
// 处理角度绕回情况(0度和360度之间的跳变)
|
||||
// 如果变化超过180度,说明发生了绕回
|
||||
@@ -249,7 +250,7 @@ float angle_sensor::update(void) {
|
||||
velocity[VEL_FILTER_SIZE - 1] = delta * VELOCITY_SCALE;
|
||||
|
||||
m_cumulativeAngle += delta;
|
||||
m_lastAngle = currentAngle;
|
||||
m_lastAngle = current_angle_deg;
|
||||
|
||||
return m_cumulativeAngle;
|
||||
}
|
||||
@@ -288,6 +289,14 @@ float angle_sensor::getRawVelocity(void) const {
|
||||
return velocity_filted / (VEL_FILTER_SIZE - 1);
|
||||
// return velocity[VEL_FILTER_SIZE - 1];
|
||||
}
|
||||
/**
|
||||
* @brief 获取角度值(原始级)
|
||||
* @return 角度值(原始级)
|
||||
*/
|
||||
float angle_sensor::getcurrent_sensorangle(void) const {
|
||||
return current_angle_deg;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 重置累积角度值
|
||||
|
||||
Reference in New Issue
Block a user