1、电角度偏移值是通过一个标定过程确定的一个数值,它代表了当电机转子处于某个参考位置时,编码器读数与期望的电角度之间的差异。这个参考位置通常是在电机转子d轴与定子A相绕组对齐时的位置。
2、通过这个定义,我这里直接给定beta轴电压为零,alpha轴电压一个较小的数据,把转子拉到与A相绕组对齐的位置。相当于施加固定方向的电压;
3、参考代码如下
uint16_t zero_electrical_angle_offset = ELECTRIC_ANGLE_OFFSET;
void electricAngleAlign(void)
{
const float V_ref = 1.0;
const uint8_t pole_pairs = 2;
float Valpha = V_ref;
float Vbeta = 0.0;
SvpwmContorol(&gMotor, Valpha, Vbeta);
HAL_Delay(5000);
uint16_t enc_raw = MT6816_ReadDigitalValue();
zero_electrical_angle_offset = (enc_raw * pole_pairs) % 16384;
SvpwmContorol(&gMotor, 0.0, 0.0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1, 0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2, 0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_3, 0);
}
(1)如何判断代码或者现象是否正确: 在上电初始化相关外设后,执行一次对齐; 之后手动拉动电机转子,再多次执行;转子会被拉到一个固定的位置停下来。 这样基本就确定位置是对齐了
(2)调试时,可多次测量,取平均值; 我这个是14位的编码器,电机两对磁极,每次偏差在50以内,基本就没问题了。

4、偏移值的使用
// 获取当前编码器读数
uint16_t enc_raw = MT6816_ReadDigitalValue();
// 将编码器读数转换为机械角度(0~360°)
float mechanical_angle = (enc_raw / 16384.0) * 360.0;
// 计算电角度(考虑极对数和偏移)
float electrical_angle = ((mechanical_angle * pole_pairs - (zero_electrical_angle_offset / 16384.0 * 360.0)) %% 360.0);
2149

被折叠的 条评论
为什么被折叠?



