FOC中PLL的点乘法

一、核心原理:用"猜的方向"检测"测量信号"

首先理解这两个关键向量:

1. 估算向量(我们猜的方向)

我们用当前猜测的角度θ_est,构造一个向量:

复制代码
估算向量 = [cos(θ_est), sin(θ_est)]

这个向量永远在单位圆上,长度为1。

例子

  • 猜转子在0° → 向量是[1, 0](指向右边)

  • 猜转子在30° → 向量是[0.866, 0.5](30°方向)

  • 猜转子在90° → 向量是[0, 1](指向上边)

2. 测量向量(实际测量到的信号)

从电机测量到的信号[Ain, Bin],这个向量的方向反映了转子真实位置。

二、关键技巧:让测量向量在猜对时指向特定方向

在高频注入中,我们对测量信号做了特殊处理,使得:

  • 当猜对时 (θ_est = θ_real),测量向量指向[0, 1]方向

  • 当猜错时 ,测量向量会偏离 [0, 1]方向

为什么是[0, 1]?

这是工程设计的约定。理论上可以指向任何固定方向,但选择[0, 1](垂直向上)比较方便。

三、具体例子计算(一步一步来)

假设真实转子在30°,我们来比较两种情况。

情况1:完全猜对 ✅

  • 真实角度:θ_real = 30°

  • 我们猜的:θ_est = 30°

  • 测量向量:[Ain, Bin] = [0, 1](因为猜对了,信号指向垂直方向)

计算误差:

复制代码
估算向量 = [cos(30°), sin(30°)] = [0.866, 0.5]
测量向量 = [0, 1]

点乘 = 0.866×0 + 0.5×1 = 0.5

等等!不是应该为0吗?

这里有个小调整:实际中我们会减掉0.5,使得猜对时误差为0。

调整后:

复制代码
误差 = 点乘 - 0.5 = 0.5 - 0.5 = 0

所以猜对时,误差为0!

情况2:猜错了(猜20°,实际30°)❌

  • 真实角度:30°

  • 我们猜的:20°(差了10°)

  • 测量向量:因为猜错了,测量向量不再是[0, 1]

在猜20°时,测量向量会是多少?

关键 :测量向量会有一个水平分量。当猜的角度比实际小时,这个分量是正的。

假设测量向量是:[0.17, 0.98]

  • 注意:它不完全是[0, 1]

  • 有了一个小的水平分量0.17

计算误差:

复制代码
估算向量 = [cos(20°), sin(20°)] = [0.94, 0.342]
测量向量 = [0.17, 0.98]

点乘 = 0.94×0.17 + 0.342×0.98 = 0.16 + 0.335 = 0.495
调整后误差 = 0.495 - 0.5 = -0.005

误差是-0.005!负数!

情况3:猜大了(猜40°,实际30°)❌

  • 猜40°,实际30°(差了-10°)

  • 测量向量会有负的水平分量 ,比如[-0.17, 0.98]

计算:

复制代码
估算向量 = [cos(40°), sin(40°)] = [0.766, 0.643]
测量向量 = [-0.17, 0.98]

点乘 = 0.766×(-0.17) + 0.643×0.98 = -0.13 + 0.63 = 0.5
调整后误差 = 0.5 - 0.5 = 0
等等,这是巧合吗?不,让我们仔细算:
0.766×(-0.17) = -0.13022
0.643×0.98 = 0.63014
和 = 0.49992 ≈ 0.5
调整后误差 ≈ 0

咦?误差接近0,这不对!

这是因为当误差较大时,情况更复杂。实际上,误差函数是正弦函数,不是线性的。

四、数学真相:误差是正弦函数

真正的误差公式其实是:

复制代码
误差 = K × sin(θ_real - θ_est) = K × sin(Δθ)

其中Δθ是真实角度减去猜测角度。

正弦函数的特性:

  1. 当Δθ=0时,sin(0)=0 → 误差=0

  2. 当Δθ很小时,sin(Δθ)≈Δθ → 误差与角度差成正比

  3. 当Δθ>0时,sin(Δθ)>0 → 误差为正

  4. 当Δθ<0时,sin(Δθ)<0 → 误差为负

用实际数字验证(假设K=1):

  • Δθ=0° → sin(0°)=0 → 误差=0

  • Δθ=10° → sin(10°)=0.174 → 误差=+0.174

  • Δθ=-10° → sin(-10°)=-0.174 → 误差=-0.174

  • Δθ=90° → sin(90°)=1 → 误差=1

  • Δθ=-90° → sin(-90°)=-1 → 误差=-1

五、我们的点乘公式就是正弦函数

经过复杂的数学推导(这里不展开),我们的点乘公式:

复制代码
ThetaErr = CosVal * Ain + SinVal * Bin

在特定条件下,就等于:

复制代码
ThetaErr = 常数 × sin(θ_real - θ_est)

这就是为什么点乘能算出角度误差!

六、图形化理解

想象一个单位圆:

复制代码
Y轴(0,1)
           ↑
           |   真实转子位置
           |     /
           |    / Δθ (角度差)
           |   /
           |  /
           | /
估算位置---O------> X轴
  1. 我们在单位圆上标出估算位置(用θ_est)

  2. 从估算位置到真实位置有一个角度差Δθ

  3. 测量向量[Ain, Bin]会指向一个与Δθ相关的方向

  4. 点乘结果 = sin(Δθ)

七、实际控制中的工作方式

步骤1:初始化

假设我们完全不知道转子在哪,随便猜个角度,比如0°。

步骤2:第一次测量

  • 注入高频电压

  • 测量电流响应

  • 计算[Ain, Bin]

  • 用当前猜测角度计算误差

例子

  • 猜0°,实际在30°

  • 计算误差 = sin(30°-0°) = sin(30°) = 0.5

  • 误差是+0.5,说明我们猜的角度太小了

步骤3:调整猜测

  • 误差+0.5 → 要增加猜测角度

  • 增加多少?由PI控制器决定

  • 假设PI输出角速度ω=10°/秒

  • 下一时刻:新角度 = 0° + 10°×采样时间

步骤4:再次测量

  • 新角度10°,实际30°

  • 新误差 = sin(30°-10°) = sin(20°) = 0.34

  • 误差从0.5降到0.34,说明我们靠近了

步骤5:继续调整

一直调整,直到误差趋近于0。

八、为什么点乘能产生正弦函数?

这是因为高频注入的特殊处理。简单来说:

  1. 注入高频旋转电压

  2. 测量高频电流响应

  3. 这个响应包含转子位置信息

  4. 通过特定的解调方法,得到[Ain, Bin]

  5. 当用估算角度与[Ain, Bin]点乘时,数学上就等于sin(Δθ)

九、总结

误差计算公式:

复制代码
ThetaErr = CosVal * Ain + SinVal * Bin

实际上计算的是:

复制代码
ThetaErr = 常数 × sin(真实角度 - 估算角度)

物理意义

  • 结果为正 → 猜的角度偏小 → 要增大

  • 结果为负 → 猜的角度偏大 → 要减小

  • 结果为零 → 猜对了 → 保持

这就实现了一个角度追踪器

  1. 注入信号探测

  2. 用猜测角度计算误差

  3. 根据误差方向调整猜测

  4. 重复直到误差为0

最终,即使我们一开始完全不知道 转子在哪,也能通过这个闭环过程找到并跟踪转子位置。这就是高频注入无传感器控制的核心原理。

相关推荐
逐步前行2 小时前
STM32_DMA_寄存器操作
stm32·单片机·嵌入式硬件
Hello World . .4 小时前
51单片机基础外设:中断、定时器/计数器(PWM控制蜂鸣器、电机)
单片机·嵌入式硬件·51单片机
WangLanguager5 小时前
foc最终要求的是相电压,还是线电压
单片机
LCG元5 小时前
基于STM32CubeMX的HAL库串口通信与DMA传输深度优化
stm32·单片机·嵌入式硬件
嵌入小生0076 小时前
硬件 --- GPIO/中断/定时器/蜂鸣器
单片机·嵌入式硬件·定时器·pwm·gpio·蜂鸣器·中断
forAllforMe6 小时前
LAN9252 从机模式寄存器的配置代码示例
stm32·单片机·嵌入式硬件
不想起床&6 小时前
51单片机
单片机·嵌入式硬件·51单片机
我在人间贩卖青春6 小时前
单片机复位源
单片机·嵌入式硬件·复位源
项目題供诗6 小时前
51单片机入门-温度传感器DS18B20(十三)
单片机·嵌入式硬件·51单片机