4、电流采样与调理电路:相电流采样方案、运放电路设计、ADC配置、采样时序与同步

好,咱们进入第四讲。这一讲我估计是很多人做FOC时第一个踩坑的地方。电流采不准,后面所有算法都是白搭。你想想看,你算出来的转矩、磁链全是基于电流反馈的,源头数据就错了,后面PID调得再好也没用。

我刚开始做FOC那会儿,就吃过这个亏。板子画好了,程序写好了,电机转起来嗡嗡响,但就是力矩不稳。查了三天,最后发现是采样时刻没对准PWM载波,采到的全是开关噪声。嗯,从那以后,我对采样时序就特别敏感了。

4.1 相电流采样方案

先说方案。FOC需要至少两相电流,第三相可以通过基尔霍夫定律算出来。常用的采样方式有三种:

  • 单电阻采样:成本最低,但算法复杂,低速性能差。我一般只在玩具级产品上用。
  • 双电阻采样:主流方案,性价比高。两相各用一个采样电阻,配合运放放大后送ADC。
  • 三电阻采样:精度最高,但成本也高。多用于伺服驱动器这类高端场合。

我个人习惯,做通用FOC驱动器首选双电阻方案。为什么?因为它在成本和性能之间取得了很好的平衡。你只要把采样电阻放在下桥臂MOS管的源极和地之间,就能在PWM导通时采集到相电流。

关键点:采样电阻的阻值选择要谨慎。阻值大了,发热严重,还会影响电机效率;阻值小了,信号太微弱,容易被噪声淹没。我一般按这个经验公式来选:

Rshunt = Vref / (Imax × Gain × 0.8)

其中Vref是ADC参考电压,Gain是运放增益,留20%余量防止饱和。

4.2 运放电路设计

采样电阻上的信号通常只有几十毫伏,必须经过运放放大后才能送ADC。这里我踩过的坑可不少。

运放选型上,我推荐用差分放大器或者仪表放大器。为什么?因为电机驱动回路里共模电压很高,普通单端运放根本扛不住。我记得有一次用了LM358,结果输出全是乱的,后来换成INA240,问题立刻解决了。

电路设计时要注意几点:

  • 偏置电压:FOC需要检测正负电流,所以运放输出要加一个Vref/2的偏置,把信号抬到ADC量程中间。
  • 滤波电容:在运放输出端加一个RC低通滤波,截止频率设在1MHz左右,滤掉高频开关噪声。
  • 保护二极管:运放输入端对地和电源各加一个肖特基二极管,防止负电压损坏运放。

我的小技巧:运放供电最好用独立的LDO,别直接从驱动电源上取电。驱动部分的开关噪声会通过电源耦合到运放里,你辛辛苦苦布的线就白费了。

4.3 ADC配置

ADC配置这块,DSP的灵活性很高,但参数设不对,采样结果就是废的。

以TI的C2000系列为例,ADC配置主要关注这几个参数:

参数 推荐值 说明
分辨率 12位 够用,16位太慢
采样窗口 80ns~200ns 取决于输入阻抗
转换时钟 25MHz~50MHz 太高了精度下降
触发源 ePWM SOC 与PWM同步

我习惯把采样窗口设得稍大一点,比如160ns。虽然转换速度会慢一些,但采样电容能充分充电,精度更有保障。你想想看,FOC的控制周期通常是50μs~100μs,多花几十纳秒采样根本不影响性能。

// 以TMS320F280049为例,ADC配置代码片段
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNAL_MODE_SINGLE);
AdcSetSampleWindow(ADC_ADCA, ADC_CH_ADCIN0, 16);  // 16个ADC时钟周期
AdcSetSampleWindow(ADC_ADCA, ADC_CH_ADCIN1, 16);
AdcSetSOCTrigger(ADC_ADCA, ADC_SOC0, ADC_TRIGGER_EPWM1_SOCA);
AdcSetSOCTrigger(ADC_ADCA, ADC_SOC1, ADC_TRIGGER_EPWM1_SOCB);

4.4 采样时序与同步

这一节是重中之重。采样时序搞不对,前面所有努力都白费。

FOC的电流采样必须在PWM周期的特定时刻进行。为什么?因为电流在PWM开关瞬间会有很大的尖峰,那是MOS管开关产生的共模噪声。如果你在开关时刻采样,采到的根本不是真实的相电流。

正确的做法是:在PWM载波的波谷或者波峰处采样。这时候所有开关管都处于导通或关断的稳定状态,电流信号最干净。

我曾经犯过的错:有一次为了赶项目进度,我把采样触发点设在了PWM的上升沿。结果电机低速时电流波形全是毛刺,FFT分析出来一堆高频分量。后来改成在载波波谷采样,波形立刻干净了。这个教训让我记住了:采样时序比采样精度更重要。

具体实现上,我一般这样安排:

  1. PWM计数器采用增减计数模式,产生对称PWM波形。
  2. 在计数器值为0(波谷)时触发ADC采样。
  3. ADC转换完成后触发DMA,自动把结果搬到内存里。
  4. 在PWM周期中断里读取电流值,进行FOC计算。

这样做的好处是:采样时刻固定,不受软件执行时间抖动的影响。你想想看,如果靠软件定时器去触发采样,中断响应时间不确定,采样点就会飘来飘去,电流环的带宽就上不去。

还有一个细节:双电阻采样需要两相同时采样。因为FOC计算需要同一时刻的电流值,如果A相和B相采样时间差了几个微秒,算出来的电流矢量就是错的。DSP的ADC模块通常支持多通道同步采样,记得把这个功能用上。

总结一下时序要点

  • 采样点选在PWM波谷或波峰
  • 两相电流同步采样
  • 用硬件触发,不用软件定时
  • 采样窗口避开开关瞬态

好了,这一讲的内容就这些。电流采样看起来是硬件的事,但实际上是软硬件协同设计的关键环节。你把这部分搞扎实了,后面的电流环调试就会顺风顺水。下一讲我们聊聊电流环的PI参数整定,那又是另一门学问了。