4、电流采样:相电流采样方法、采样电阻布局、ADC同步触发

好,咱们接着聊FOC算法里一个特别关键的环节——电流采样。说实话,很多做机器人关节的工程师,算法调得挺溜,但一上电机就抖,或者力矩输出有毛刺。我敢说,十有八九是电流采样这块没处理好。

电流采样,说白了就是FOC算法的“眼睛”。你想想看,算法要算力矩,得先知道电机里实际流了多少电流。如果这个“眼睛”是近视的、散光的,那后面的PI调节器、SVPWM输出,全都会跑偏。我个人习惯把电流采样比作“做饭时的尝咸淡”——菜好不好吃,全凭这一口。

4.1 相电流采样方法

常见的相电流采样方法,主要有三种:单电阻采样双电阻采样三电阻采样。咱们一个一个说。

4.1.1 三电阻采样

这是最直接、最“老实”的方法。在电机三相的下桥臂,各串联一个采样电阻。每次PWM周期里,你都能同时读到三相电流。好处是啥?精度高,算法简单,不需要复杂的重构逻辑。

但缺点也很明显——成本高、PCB面积大。而且三个电阻的阻值和温漂必须严格匹配,否则你采出来的三相电流之和不为零,会引入额外的误差。我在做一款协作机器人关节时,就吃过这个亏。当时为了省成本,用了三个不同批次的电阻,结果低速运行时力矩波动特别大。后来全换成同一批次、0.1%精度的电阻,问题才解决。

4.1.2 双电阻采样

这是目前工业界最主流的方法。只在下桥臂的两相(通常是U相和V相)放采样电阻,W相的电流通过基尔霍夫电流定律算出来:Iw = -(Iu + Iv)。

这样做的好处是省了一个电阻,成本降低,PCB布局也更宽松。但有个坑——当PWM占空比接近0%或100%时,你采样的时间窗口会变得非常窄,甚至消失。这就是所谓的“不可采样区域”。

⚠️ 避坑指南: 我曾经在调试一个低压伺服项目时,发现电机在低速大扭矩时电流波形突然畸变。查了两天才发现,是PWM占空比太小时,采样窗口被“吃掉”了。后来我调整了PWM的移相策略,强制在非采样区插入一个最小采样时间,才搞定。

4.1.3 单电阻采样

这个就有点“极限操作”了。只用一个电阻,放在直流母线上。通过在一个PWM周期内,在不同时刻多次采样,然后重构出三相电流。优点是成本极低,适合对成本敏感的家电、小功率应用。

但缺点也很要命——重构算法复杂,对ADC采样速度和CPU算力要求高。而且低速时重构精度很差。我个人不建议在机器人关节这种对动态响应要求高的场合用单电阻。你想想看,关节电机经常要正反转切换,单电阻在那会儿根本采不准。

采样方法 电阻数量 精度 成本 适用场景
三电阻 3 高精度伺服、机器人关节
双电阻 2 中高 工业驱动、协作机器人
单电阻 1 中低 家电、风扇、低端应用

4.2 采样电阻布局

嗯,这里要注意。采样电阻的布局,直接决定了你采到的信号质量。很多新手画PCB时,觉得“不就是个电阻嘛,随便放”。结果一上电,噪声大得离谱。

我总结了几条硬性规则:

  • 差分走线:采样电阻两端的信号,一定要用差分线直接连到ADC输入端。千万不要经过其他过孔或长距离绕线。我见过有人把采样信号绕了半块板子,结果采出来的全是共模噪声。
  • 开尔文连接:采样电阻的电流路径和电压检测路径要分开。说白了,就是不要让大电流流过检测线。否则,PCB铜箔的寄生电阻会引入额外压降,导致采样偏大。
  • 靠近电机端子:采样电阻尽量靠近电机驱动器的输出端子。离得越远,走线电感越大,高频噪声越容易耦合进来。
  • 地平面处理:采样电阻下方的地平面要挖空,或者至少不要有连续的铜皮。否则,高频开关噪声会通过寄生电容耦合到采样信号上。
💡 我的小技巧: 我习惯在采样电阻两端并联一个100pF的C0G电容。这个电容能滤掉一些高频毛刺,但又不会影响电流信号的带宽。注意,千万别用X7R或Y5V,它们的容值会随电压变化,反而引入误差。

4.3 ADC同步触发

最后,也是最容易被忽视的一环——ADC什么时候采?

FOC算法里,电流采样必须在PWM周期的特定时刻进行。为什么?因为PWM开关会产生巨大的共模噪声和地弹噪声。如果你在开关瞬间采样,那采到的不是电流,是“噪声大杂烩”。

正确的做法是:在PWM载波的波峰或波谷处触发ADC采样。这时候,所有开关管都处于稳定导通或关断状态,母线电压和地平面都相对干净。

具体怎么实现?大多数MCU都支持PWM定时器与ADC的硬件联动。比如STM32的HRTIM或高级定时器,可以配置一个触发事件,在定时器计数到0或ARR值时,自动启动ADC转换。

// 伪代码示例:配置PWM与ADC同步触发
// 假设PWM频率为20kHz,载波周期50us
// 在PWM计数到0时触发ADC

TIM_HandleTypeDef htim1;
ADC_HandleTypeDef hadc1;

// 配置定时器更新事件作为ADC触发源
hadc1.Instance = ADC1;
hadc1.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING;

// 配置定时器的TRGO为更新事件
htim1.Instance = TIM1;
htim1.Init.Period = 1000; // 假设ARR=1000
HAL_TIMEx_MasterConfigSynchronization(&htim1, TIM_TRGO_UPDATE);

这里有个细节:采样窗口的宽度。ADC采样需要时间,比如12位ADC,采样周期通常需要几个时钟周期。你要确保采样窗口完全落在PWM的“安静区”内。如果PWM占空比很小,采样窗口可能会被挤到开关噪声区域。

🔑 关键点总结:
  • 双电阻采样是机器人关节的“黄金标准”
  • 采样电阻布局要遵循开尔文连接和差分走线
  • ADC触发必须与PWM载波同步,避开开关噪声
  • 采样窗口宽度要留足余量,避免被“吃掉”

好了,关于电流采样,咱们就聊到这儿。下一章我会讲电流环的PI参数整定,那可是个“玄学”活儿,到时候咱们再细聊。