0x01. Components

1. 编码器 Encoder

AS5600

AS5600arrow-up-right 是一个 12 bit I2C 通讯绝对角度磁编码器,支持最大 1000 kHz (I2C Fast Mode Plus) I2C 通讯速率。

AS5600 支持重复读操作,因此只需要初始化时传送一个 I2C 写入帧,将目标寄存器地址写入,之后只需反复发送 I2C 读取帧即可重复读取目标寄存器的最新值。

AS5047P

2. 驱动模块 PowerStage

常见电机驱动的 PWM 频率为 10 kHz ~30 kHz,频率太低就会进入人耳能够识别的频率,会产生可闻噪声 (人耳可识别的频率范围为 20 Hz ~ 20 kHz),而 PWM 频率太高又会增加 MOSFET 的开关损耗。

我们使用 center-aligned PWM 模式,这样每个周期 MOSFET 只会开关一次,相比 edge-aligned 下的每周期两次会减少很多开关损耗。

同时,因为我们使用的是双侧 NMOS 的驱动模式,因此 Hi-side 有最大的开启时间,否则 bootstrap 电路的电容电荷会流失,使 Hi-side 错误地关闭。因此,PWM 占空比不能占满 100%。我们留出 2% 的冗余空间,因此 PWM 输出范围即为 2% - 98%。

2.1 电流采样

我们使用的是连接在 Lo-side MOSFET 后面的采样电阻,因此只有当 Lo-side MOSFET 打开时我们才能正确地进行电流采样,因此我们需要将 ADC 和 TIM 同步。我们选用 TIM 闲置的一路产生内部 PWM 信号,并将计数器阈值设置为 TIM 的 ARR - 1。由此,我们实现在 TIM 计数器达到最高的时候,PWM 输出都为 0 的时刻开始 ADC 采样。

同样,因为我们需要采样三相电流,所以必须保证三相 Lo-side MOSFET 都有打开的时刻。上文所述的 2% - 98% 保障了这点,使我们有相对充裕的采样时间。

3. 电机 Motor

3.1 电机级对 Motor Pole Pair

常见的 BLDC 电机都由多极对构成,磁极极对遵循以下规律:

ekJM2.jpg

电机的磁极对数量为 0.5 x 转子上磁铁数量

例如,下方这个电机的磁极对数量为 14。

Untitled

我们可以将磁极对数量视为电机自带的减速器。

在最简单的 1 磁极对 (2 个磁极) 情况下,我们按照 SVPWM 驱动电角度旋转一周,电机的机械角度也会旋转一圈,减速比为 1:1。

在 14 磁极对 (28 磁极) 情况下,电角度旋转一周,机械角度旋转 1/14 圈,减速比即为 1:14。

因为最终我们希望我们对于电机控制器的输入是扭矩,而不是电流,所以我们还需要将它们转化一下:

τ=8.3×IqKV\tau = \frac{8.3 \times I_q}{K_V}
Iq=τKV8.3I_q = \frac{\tau K_V}{8.3}

How to estimate the torque of a BLDC (PMSM) electric motor using only its Kv and current drawarrow-up-right

3.2 电机初始化校准 Motor Calibration

因为机械固定的误差,电机线圈的电角度和编码器角度之间会存在一个误差,因此我们需要使用一个初始化流程来检测这个误差。

在初始化流程中,我们首先将电机电角度设定到 0 位置,并使用开环控制输出一个特定的相电压。为了使电机能够准确旋转到对应的 0 位置上,我们需要将电流设定为一个相对较大的值。更优雅的做法是逐步增加相电压,并检测编码器读数是否变化,从而确定转子是否就位。

在电机旋转到 0 位置上后,这时编码器读取的数值就是电机电角度和编码器角度的误差值了。但由于电机和编码器之间还存在一个 n_pole_pair 倍的减速比,所以实际的电角度误差为

fluxangleoffset=encoder×n_pole_pair\angle_{flux-angle-offset} = \angle_{encoder} \times n\_pole\_pair

Last updated