1. 无感启动为什么先要"定位"?
无感 FOC 的完整启动序列通常是:初始定位 → 强拖升速 → 切换闭环。上一篇文章《无感强拖过程负载角度分析》讲了强拖,而强拖有一个前提:要么转子已经被拉到已知位置,要么至少知道它大致在哪。
如果完全不知道转子位置就强行拖:
- 拖不动:给定电流矢量恰好落在 q 轴负方向,转矩为零
- 拖反:给定角度超前过多,转子被推向错误方向
- 启动即失步:负载角从"0 或 180°"这种极端值起步,瞬间超过临界角(见 12 号文章),转矩建立不起来
- 带负载时尤其危险:重载下错误定位会直接堵转过流
因此无感启动的第一道工序,就是用一个不依赖反电动势的机制把转子位置"测"出来。六脉冲定位就是其中成本最低、最鲁棒的一种。
| 方法 | 原理 | 特点 |
|---|---|---|
| 对齐法(直流注入) | 注入固定 d 轴电流把转子"吸"到已知角度 | 简单,但会转动、耗时,带载时可能拉不到位 |
| 六脉冲定位 | 6 个短脉冲比较电流响应,利用磁饱和判方向 | 不转动(近零速)、几十 ms 完成、抗负载能力好,本文主角 |
| 高频注入 | 注入高频载波,解调凸极位置 | 精度最高、无噪声,但实现复杂、依赖 Ld≠Lq |
2. 物理基础:磁饱和效应
六脉冲定位不依赖反电动势,也不依赖转子转动,它利用的是磁路的饱和非线性。定子绕组电感不是常数,而是随"脉冲磁场方向与转子磁极方向的关系"变化:
- 脉冲方向与 N 极方向一致(同向)时:定子磁场与永磁磁场叠加,磁路趋于饱和,等效电感 L 变小
- 脉冲方向与 N 极相反时:磁场互相抵消,磁路退出饱和,等效电感 L 变大
- 脉冲方向与磁极轴线垂直(q 轴)时:电感最大(表贴式)
对同一电压幅值 U、同一脉宽 tp 的短脉冲,电流峰值近似为 ipeak ≈ U·tp/L:电感越小,电流峰值越大。因此"哪个方向脉冲电流最大",就说明哪个方向最接近转子 N 极轴线。
ipeak(θp) = I0·[ 1 + k·cos(θp − θr) ]
θp:脉冲电压矢量电角度;θr:转子 N 极电角度;k:磁饱和系数(0.1~0.5,随磁路饱和程度增大);I0:基准电流
注意:ipeak 对 θr 是 cos 函数而非 cos²——这意味着同向电流大、反向电流小,天然具备 N/S 判别能力。这是它与"高频注入测凸极(cos² 对称)"的本质区别:六脉冲不需要额外步骤就能区分磁极极性。
3. 定位流程:六脉冲粗定位 → N/S 判别
完整定位分两步:
脉冲方向(电角度):0°、60°、120°、180°、240°、300°
对应电压矢量:U1(100)、U2(110)、U3(010)、U4(011)、U5(001)、U6(101)
依次向六个方向施加相同的短脉冲(幅值 Upulse、脉宽 tp),采样每个脉冲的电流峰值,得到 i1…i6。电流最大的脉冲方向 θmax 最接近转子 N 极——转子磁极轴线就落在 θmax±30° 的 60° 扇区内。这就是"六脉冲"名字的由来:六个方向刚好把 360° 电角度等分成六个 60° 扇区。
ifwd = ipeak(θmax) ibwd = ipeak(θmax+180°)
ifwd > ibwd → N 极在 θmax 方向;否则在 θmax+180° 方向
原理:磁饱和使同向脉冲电流更大。若需要更高精度(如 <5°),可在判定的方向附近再注入更细密的小幅脉冲做细分扫描(例如 ±30° 内每 5° 一个脉冲,找响应峰值)。
4. 扇区划分与定位结果
| 响应最大方向 θmax | 对应电压矢量 | 转子磁极轴线所在扇区 |
|---|---|---|
| 0° | U1 (100) | −30° ~ +30° |
| 60° | U2 (110) | 30° ~ 90° |
| 120° | U3 (010) | 90° ~ 150° |
| 180° | U4 (011) | 150° ~ 210° |
| 240° | U5 (001) | 210° ~ 270° |
| 300° | U6 (101) | 270° ~ 330° |
粗定位误差 ≤ ±30° 电角度。对无感启动而言,±30° 的初始误差完全可接受——后续强拖时负载角从这个小误差起步,转矩立即建立,电机平稳转起来;切闭环后观测器会快速收敛到真实角度。如果应用对启动方向有严格要求(如防止反转),再加 N/S 判别与细分。
5. 工程参数与实现要点
| 参数 | 推荐取值 | 说明 |
|---|---|---|
| 脉冲幅值 Upulse | 0.2 ~ 0.6 × Udc | 太小则响应差异淹没在噪声里;太大会使转子产生可见转动(脉冲宽度内转子移动超过数度) |
| 脉宽 tp | 0.2 ~ 2 ms | 短到转子来不及显著转动(近零速定位),长到电流稳定可采样;与电气时间常数 L/R 同量级 |
| 电流采样时刻 | 脉冲末端 | 峰值电流在脉冲末尾达到最大;需避开开关噪声(采样窗口放脉冲中后段) |
| 脉冲间隔 | ≥ 3~5 倍电气时间常数 | 让电流衰减回零再发下一个脉冲,避免相互叠加 |
| 限流保护 | 软件限流 ≤ 额定电流 1.5 倍 | 六脉冲本质是"短时直通",必须硬件/软件双重限流防烧功率管 |
| 总耗时 | 20 ~ 60 ms | 6~8 个脉冲 × (脉宽+衰减),远快于对齐法的百毫秒级 |
- 不转动的关键:脉冲产生的平均转矩在正反方向抵消,且脉宽内转子来不及响应——这就是六脉冲"定位但不转动"的优点,特别适合带负载启动(对齐法在重载下会拉不到位甚至失败)
- 多次平均:每个方向可发 2~3 次脉冲取平均,抑制采样噪声与 PWM 抖动
- 与强拖衔接:定位完成后把给定电流角直接设为 θest(N 极方向)再叠加强拖旋转角,负载角从 0 附近平稳起步
- 失效保护:若六路电流响应差异过小(k 太小或采样异常),判定位失败,可回退到对齐法或直接报故障
6. 六脉冲 vs 高频注入 vs 对齐法
| 维度 | 六脉冲定位 | 高频注入 | 直流对齐法 |
|---|---|---|---|
| 转子是否转动 | 几乎不转 | 不转 | 转动并对齐 |
| 定位耗时 | 20~60 ms | 10~50 ms | 100 ms+ |
| 实现复杂度 | 低(6 个脉冲 + 峰值比较) | 高(载波注入/解调) | 低 |
| 抗负载能力 | 强(不依赖转动) | 强 | 弱(重载拉不到位) |
| 精度 | ±30°(细分后可 ±5°) | ±1°~5° | 取决于对齐是否到位 |
| 对电机要求 | 需磁饱和效应(通用) | 需凸极 Ld≠Lq | 通用 |
| 典型用途 | 无感启动前定位 | 低速/零速闭环观测 | 简单场合 |
7. 交互式仿真器:六脉冲定位过程演示
下面这个仿真器演示完整定位过程。拖动滑块设定转子的真实 N 极角度,点击"开始定位":仿真器依次向 0°~300° 六个方向注入脉冲(左侧画布高亮当前脉冲方向,右侧柱状图实时显示电流响应),然后自动做 N/S 判别,最终输出定位结果并与真实角度对比误差。你也可以调节磁饱和系数 k,观察响应差异大小对定位成功率的影响。
仿真器观察要点:
- 响应最大方向:粗定位会选中 6 个脉冲中电流峰值最大的方向 θmax,转子 N 极必落在 θmax±30° 内(对应扇区见表 4)
- N/S 判别:再对比 θmax 与 θmax+180° 两个方向的响应,同向大 → N 极在 θmax;反向大 → N 极在 θmax+180°
- k 的影响:把 k 调小(如 0.1),六个响应差异变小、接近噪声水平,定位容易判错扇区;k 大(0.5)则响应差异显著、定位可靠——这就是为什么磁路饱和越强的电机,六脉冲越好用
- 误差显示:最终定位误差 = |定位角 − 真实角|,粗定位下 ≤ 30°,N/S 判别后误差可能接近 30°(取决于真实角在扇区内的位置),细分扫描可进一步减小
8. C 代码骨架:六脉冲定位核心逻辑
核心流程:六个方向 → 发脉冲采样峰值 → 找最大值 → 正反脉冲判 N/S → 输出角度。
// 六脉冲定位:返回转子 N 极电角度(0~360°)
// 依赖:SetPulseVector(deg, width_ms) 施加指定方向电压脉冲;GetPeakCurrent() 读脉冲电流峰值
static float SixPulseAlign(void)
{
const int N = 6;
const float STEP = 60.0f; // 脉冲方向步进 60°
const uint16_t PULSE_US = 800; // 脉宽 0.8ms
float ipeak[N];
float iMax = 0.0f;
int iBest = 0;
// 1) 粗定位:六个方向脉冲,找电流峰值最大的方向
for (int i = 0; i < N; i++) {
float theta = (float)i * STEP; // 0,60,120,180,240,300°
SetPulseVector(theta, PULSE_US);
ipeak[i] = GetPeakCurrent();
if (ipeak[i] > iMax) { iMax = ipeak[i]; iBest = i; }
WaitCurrentDecay(); // 等待电流衰减回零
}
float thetaMax = (float)iBest * STEP; // 磁极轴线所在 60° 扇区中心
// 2) N/S 判别:同向 vs 反向脉冲,电流大的方向为 N 极
SetPulseVector(thetaMax, PULSE_US);
float iFwd = GetPeakCurrent();
WaitCurrentDecay();
SetPulseVector(thetaMax + 180.0f, PULSE_US);
float iBwd = GetPeakCurrent();
WaitCurrentDecay();
float thetaN = (iFwd > iBwd) ? thetaMax : thetaMax + 180.0f;
if (thetaN >= 360.0f) thetaN -= 360.0f;
return thetaN; // 转子 N 极电角度(误差 ≤ ±30°)
}
// 可选:细分扫描,把误差从 ±30° 缩小到 ±5°
static float SixPulseAlignFine(float thetaCoarse, float k)
{
const float RANGE = 30.0f, GRID = 5.0f;
float thetaBest = thetaCoarse, iBest = 0.0f;
for (float d = -RANGE; d <= RANGE; d += GRID) {
float theta = thetaCoarse + d;
SetPulseVector(theta, 400); // 更小的脉宽,避免转动
float i = GetPeakCurrent();
WaitCurrentDecay();
if (i > iBest) { iBest = i; thetaBest = theta; }
}
return thetaBest;
}
小结:六脉冲定位利用磁饱和效应,用 6 个短时电压脉冲比较电流响应峰值,先锁定转子磁极轴线所在的 60° 扇区,再通过正反脉冲判别 N/S 极,总耗时几十毫秒、转子几乎不转、抗负载能力强,是无感启动最实用的预定位方案。配合上一篇《无感强拖过程负载角度分析》,即可完整覆盖"定位 → 强拖 → 切闭环"的无感启动链路。