1. 从一块AMC1306说起:为什么电机控制里电流采样这么难搞
搞电机控制的人都有一个共识:算法写得再漂亮,电流采样一塌糊涂,整个系统就是空中楼阁。我做了七八年电机驱动,从最早的 shunt 电阻加运放方案,到后来用霍尔传感器,再到近几年大量上马的 Sigma-Delta ADC 隔离采样方案,踩过的坑可以说能写一本书。今天这篇内容,就围绕AMC1306这颗隔离式 Sigma-Delta 调制器,把从电流采样到电机控制的全流程讲透,尤其是那些 datasheet 上不会写、但实际调试中一定会遇到的问题。
先说清楚这个内容适合谁看。如果你正在用 C2000 系列 DSP(比如 F28379D、F280049)做电机控制,或者你在用 STM32 做 FOC 但发现电流波形总是有毛刺、噪声大、低速时采样不准,那这篇内容就是写给你的。如果你刚开始接触 Sigma-Delta ADC,搞不清楚 SDFM 和 SAR ADC 的区别,也没关系,我会从最基础的概念讲起,用生活化的类比帮你建立直觉。
Sigma-Delta ADC和普通 SAR ADC 最大的区别在于:它不是直接“测量”一个瞬时值,而是通过过采样和噪声整形,把量化噪声推到高频段,再用数字滤波器把有用信号提取出来。打个比方,SAR ADC 像是用一把尺子量长度,量一次就出结果;Sigma-Delta ADC 像是用一把不太精确的尺子量一万次,然后取统计平均,虽然单次不准,但平均下来精度极高。AMC1306 就是后者,它输出的是 1-bit 的比特流,需要 DSP 端的 SDFM(Sigma-Delta Filter Module)模块来解码。
这个方案的核心优势是什么?隔离和精度。电机驱动里,电流采样点通常在逆变桥的下桥臂或者相线上,共模电压极高,而且开关噪声巨大。AMC1306 的隔离栅能扛住 7kV 峰值电压,输入端是差分输入,配合合适的滤波电路,能在强干扰环境下把电流信号干净地送到控制器侧。但问题也恰恰出在这里:Sigma-Delta 调制器的输出是比特流,SDFM 的配置参数(如 OSR、滤波器类型、采样时序)直接决定了最终采样的带宽、延迟和噪声性能。配错了,要么噪声大得没法用,要么延迟高得让电流环震荡。
我见过太多项目,硬件设计照抄 TI 的参考设计,AMC1306 的输入端滤波电容随便放一个 100nF,SDFM 的 OSR 设成 256,结果一上电电机就啸叫。为什么?因为输入滤波的截止频率和 SDFM 的采样率不匹配,导致高频噪声混叠到基带;或者 OSR 太高,群延迟太大,电流环相位裕度不够。这些细节,才是实战中最要命的东西。
接下来的内容,我会按照“整体设计思路→核心细节解析→实操过程→常见问题排查”的顺序展开。每一部分都会结合我实际调试过的项目经验,给出具体的参数计算、配置代码和避坑技巧。你可以把这篇文章当成一个完整的实战指南,从选型、电路设计、DSP 配置到电机控制调试,一步步跟着做。
2. 整体设计与思路拆解:为什么选 AMC1306 而不是霍尔或 shunt
2.1 三种电流采样方案的横向对比
在电机控制里,电流采样方案无非三种: shunt 电阻加运放、霍尔电流传感器、隔离式 Sigma-Delta 调制器。每种方案都有它的适用场景,选错了不是不能用,而是会花大量时间在补偿和滤波上。
| 方案类型 | 典型器件 | 精度 | 隔离 | 带宽 | 成本 | 适用场景 |
|---|---|---|---|---|---|---|
| Shunt + 运放 | INA240 | 高 | 无 | 高 | 低 | 低压小功率,共模干扰小 |
| 霍尔传感器 | ACS712 | 中 | 有 | 中 | 中 | 中低压,对精度要求不高 |
| 隔离 Sigma-Delta | AMC1306 | 极高 | 有 | 可调 | 高 | 高压大功率,高精度 FOC |
Shunt 方案最大的问题是共模电压。下桥臂采样时,shunt 两端电压很小(通常几十 mV),但共模电压在开关瞬间会跳到母线电压。运放需要极高的共模抑制比和快速恢复能力,否则采样窗口内根本采不到有效值。霍尔传感器解决了隔离问题,但精度受温度漂移影响大,而且带宽有限,在高速电机里相位延迟明显。
AMC1306 的方案本质上是把“隔离”和“高精度”两个需求同时满足了。它的输入端是一个差分放大器,输出端是 1-bit 比特流,通过电容隔离栅传输。隔离栅的寄生电容很小,共模瞬态抗扰度(CMTI)能做到 100kV/μs 以上,这意味着即使逆变桥开关瞬间产生极高的 dv/dt,也不会干扰到输出比特流。这一点是 shunt 加运放方案很难做到的。
2.2 Sigma-Delta 调制器的工作原理与 SDFM 解码
AMC1306 内部的核心是一个二阶 Sigma-Delta 调制器。它的工作过程可以这样理解:输入信号先减去一个反馈的 DAC 输出,得到误差信号;误差信号经过积分器,再经过比较器,输出 1-bit 的比特流;这个比特流又反馈回去驱动 DAC。整个环路让输出比特流的平均值跟踪输入信号,而量化噪声被整形到高频段。
关键点来了:AMC1306 输出的比特流,密度与输入电压成正比。输入 0V 时,比特流是 50% 占空比的方波;输入正电压时,高电平密度增加;输入负电压时,低电平密度增加。DSP 端的 SDFM 模块要做的事情,就是对比特流进行数字滤波和抽取,把 1-bit 流转换成多 bit 的采样值。
SDFM 的滤波器通常是一个 Sinc 滤波器(Sinc1、Sinc2、Sinc3 可选),它的阶数和 OSR(过采样率)决定了滤波器的频率响应。Sinc3 滤波器对工频干扰有很好的抑制,但群延迟也最大。OSR 越高,输出数据的有效位数越多,但采样率越低,延迟越大。这个权衡关系,是配置 SDFM 时最核心的决策。
2.3 系统架构设计:从采样点到电流环
一个完整的电流采样链路是这样的:电机相线或下桥臂 → shunt 电阻或直接接入 AMC1306 差分输入 → AMC1306 输出比特流 → DSP 的 SDFM 模块 → 数字滤波器输出电流值 → Clarke/Park 变换 → PID 电流环 → PWM 输出。
在这个链路里,有几个关键的设计决策:
第一,采样点选择。下桥臂采样最简单,但只能在 PWM 下桥臂导通时采样,采样窗口受占空比限制。相线采样可以任意时刻采样,但需要三个独立的隔离通道,成本高。我个人的经验是,如果母线电压不超过 400V,下桥臂采样加 AMC1306 是最优解;如果电压更高或者需要三电阻采样,那就得考虑相线方案。
第二,SDFM 时钟配置。AMC1306 的时钟输入范围是 5MHz 到 20MHz,时钟频率决定了比特流的速率。SDFM 模块的调制器时钟必须与 AMC1306 的时钟同步,否则会出现采样错误。通常的做法是用 DSP 的 EPWM 模块产生一个 20MHz 的时钟,同时送给 AMC1306 和 SDFM。
第三,滤波器参数选择。OSR 和滤波器阶数的选择,需要根据电流环带宽来定。一般来说,电流环带宽在 1kHz 到 2kHz 之间,SDFM 的输出采样率至少要是带宽的 10 倍以上,也就是 10kHz 到 20kHz。如果 OSR 设为 256,调制器时钟 20MHz,那么输出采样率就是 20MHz / 256 = 78.125kHz,这个速率足够快。但如果用 Sinc3 滤波器,群延迟大约是 3 个采样周期,也就是 38.4μs,对应相位延迟在 1kHz 时约为 13.8 度,这个延迟在电流环里是可以接受的。
3. 核心细节解析与实操要点:AMC1306 外围电路与 SDFM 配置
3.1 输入端滤波电路:不是随便放个电容就行
AMC1306 的输入端是一个差分输入,内部等效为一个开关电容采样网络。这意味着输入端需要合适的 RC 滤波,既要滤除高频噪声,又不能影响建立时间。
典型的输入滤波电路是这样的:在 AMC1306 的 INP 和 INN 之间并联一个差分电容 Cdiff,然后在 INP 和 INN 分别对地接共模电容 Ccm。差分电容的作用是滤除差分噪声,共模电容的作用是滤除共模噪声。但这里有个坑:共模电容的不匹配会转换成差分噪声。如果 INP 对地的电容是 1nF,INN 对地的电容是 1.2nF,那么共模噪声就会因为不匹配而变成差分信号,直接干扰采样结果。
我的经验是,共模电容的容差要控制在 5% 以内,最好用 C0G 材质的电容。差分电容的容值通常在 100pF 到 1nF 之间,具体值取决于 shunt 电阻和信号带宽。截止频率的计算公式是:
f_c = 1 / (2 * π * R * C)
其中 R 是 shunt 电阻,C 是差分电容。假设 shunt 电阻是 1mΩ,差分电容是 1nF,那么截止频率是 159MHz,这个频率太高了,根本起不到滤波作用。实际上,AMC1306 的输入阻抗很低,差分输入阻抗大约在 20kΩ 左右,所以滤波电阻主要是 AMC1306 的输入阻抗。更准确的计算要考虑 AMC1306 的输入等效电路,但简单估算时可以用 20kΩ 作为 R。
如果 R = 20kΩ,C = 1nF,那么 f_c = 1 / (2 * π * 20000 * 1e-9) ≈ 8kHz。这个截止频率对于电流采样来说太低了,会滤掉有用的电流信号。所以差分电容通常取 100pF 左右,对应的截止频率是 80kHz,这个比较合理。
注意:AMC1306 的输入端不能直接接 shunt 电阻,中间需要加一个 RC 滤波网络。滤波电阻通常取 10Ω 到 100Ω,差分电容取 100pF 到 1nF。具体值要根据 shunt 电阻和电流环带宽来调整。
3.2 SDFM 模块的时钟与数据同步
SDFM 模块的时钟配置是整个链路里最容易出错的地方。AMC1306 需要一个外部时钟输入,这个时钟的频率决定了比特流的速率。SDFM 模块需要一个调制器时钟,这个时钟必须与 AMC1306 的时钟同源,否则会出现采样错误。
在 C2000 系列 DSP 里,通常用 EPWM 模块产生一个 20MHz 的时钟信号,通过 GPIO 输出到 AMC1306 的 CLKIN 引脚,同时这个时钟信号内部连接到 SDFM 模块的调制器时钟输入。这样就能保证时钟同步。
但这里有个细节:EPWM 产生的时钟信号,占空比通常是 50%,但 AMC1306 对时钟的占空比要求是 40% 到 60%,所以 50% 是安全的。另外,EPWM 的时钟输出需要配置为推挽输出,不能是开漏输出,否则上升沿会变缓,导致 AMC1306 无法正常识别。
SDFM 模块的数据输入引脚需要配置为同步模式,并且要设置合适的采样边沿。AMC1306 的数据输出在时钟的下降沿更新,所以 SDFM 应该在时钟的上升沿采样数据。这个时序关系在 TI 的文档里有详细说明,但实际配置时很容易搞反。
3.3 滤波器参数计算:OSR、阶数与群延迟的权衡
SDFM 的滤波器参数选择,直接决定了电流采样的噪声性能和相位延迟。这里我用一个实际的例子来说明。
假设调制器时钟是 20MHz,电流环带宽是 1.5kHz,PWM 频率是 10kHz。我们需要选择 OSR 和滤波器阶数。
首先,SDFM 的输出采样率 f_s = f_mod / OSR。如果 OSR = 256,那么 f_s = 78.125kHz。这个采样率远高于电流环带宽,满足奈奎斯特采样定理。
其次,Sinc3 滤波器的群延迟大约是 3 / f_s = 38.4μs。在 1.5kHz 时,相位延迟是 360 * 1500 * 38.4e-6 ≈ 20.7 度。这个相位延迟会降低电流环的相位裕度,如果电流环的相位裕度本来就不高,可能会导致震荡。
如果改用 Sinc2 滤波器,群延迟大约是 2 / f_s = 25.6μs,相位延迟在 1.5kHz 时约为 13.8 度。Sinc2 的滤波效果比 Sinc3 差一些,但对工频干扰的抑制仍然足够。
如果 OSR 降到 128,f_s = 156.25kHz,Sinc3 的群延迟是 19.2μs,相位延迟在 1.5kHz 时约为 10.4 度。但 OSR 降低会导致有效位数减少,噪声性能变差。
我的建议是:对于大多数电机控制应用,OSR = 256,Sinc3 滤波器是一个比较平衡的选择。如果电流环带宽要求更高,可以降到 OSR = 128,Sinc2 滤波器。如果对噪声要求极高,可以升到 OSR = 512,但要注意群延迟的影响。
| OSR | 滤波器阶数 | 输出采样率 | 群延迟 | 1.5kHz 相位延迟 | 有效位数 |
|---|---|---|---|---|---|
| 128 | Sinc2 | 156.25kHz | 12.8μs | 6.9° | 12-13 bit |
| 256 | Sinc3 | 78.125kHz | 38.4μs | 20.7° | 14-15 bit |
| 256 | Sinc2 | 78.125kHz | 25.6μs | 13.8° | 13-14 bit |
| 512 | Sinc3 | 39.06kHz | 76.8μs | 41.5° | 15-16 bit |
提示:有效位数是估算值,实际值取决于 AMC1306 的噪声性能和 SDFM 的配置。TI 的 datasheet 里有详细的噪声曲线,可以参考。
4. 实操过程与核心环节实现:从硬件焊接 to 电机转起来
4.1 硬件准备与关键器件选型
先列一下我实际项目中用到的关键器件清单:
- AMC1306M05:输入范围 ±50mV,适合 shunt 电阻采样。如果 shunt 电阻是 1mΩ,50mV 对应 50A 电流。
- Shunt 电阻:选用 1mΩ、1% 精度、低温漂的合金电阻,功率至少 3W。注意 shunt 电阻的寄生电感要小,否则高频时会产生额外压降。
- RC 滤波:差分电容 100pF C0G,共模电容 1nF C0G,滤波电阻 22Ω。
- 隔离电源:AMC1306 的高压侧需要独立的 5V 电源,通常用一个小型隔离 DC-DC 模块,比如 B0505S。
- C2000 DSP:我用的是 F28379D,SDFM 模块有 4 个通道,足够三相电流加母线电压采样。
焊接时要注意:AMC1306 的隔离栅两侧的 GND 必须完全分开,高压侧 GND 和低压侧 GND 之间的爬电距离要满足安规要求。PCB 布局时,AMC1306 要尽量靠近 shunt 电阻,减少输入走线长度,避免引入额外噪声。
4.2 SDFM 模块的初始化和配置代码
下面是我在 F28379D 上实际使用的 SDFM 初始化代码,基于 TI 的 driverlib 库。代码里包含了时钟配置、滤波器参数设置和中断配置。
#include "driverlib.h" #include "device.h" // SDFM 初始化函数 void initSDFM(void) { // 配置 SDFM 时钟 // SDFM 模块时钟来源于 PLL,这里设置为 20MHz SDFM_setModulatorClock(SDFM1_BASE, 20000000); // 配置 SDFM 通道 1 // 输入引脚:SD1_D1 (GPIO 配置为 SDFM 功能) // 滤波器类型:Sinc3 // OSR:256 SDFM_configChannel(SDFM1_BASE, SDFM_CHANNEL_1, SDFM_FILTER_SINC3, 256, SDFM_SHIFT_0, SDFM_DATA_FORMAT_16BIT); // 配置比较器(可选,用于过流保护) SDFM_configComparator(SDFM1_BASE, SDFM_CHANNEL_1, SDFM_COMPARATOR_THRESHOLD_HIGH, 30000, SDFM_COMPARATOR_THRESHOLD_LOW, -30000); // 使能 SDFM 通道 SDFM_enableChannel(SDFM1_BASE, SDFM_CHANNEL_1); // 配置中断 SDFM_enableInterrupt(SDFM1_BASE, SDFM_CHANNEL_1); Interrupt_register(INT_SDFM1, &sdfm1ISR); Interrupt_enable(INT_SDFM1); } // SDFM 中断服务函数 __interrupt void sdfm1ISR(void) { // 读取电流采样值 int16_t current_raw = SDFM_getFilterOutput(SDFM1_BASE, SDFM_CHANNEL_1); // 转换为实际电流值 // AMC1306M05 输入范围 ±50mV,16bit 输出范围 ±32768 // Shunt 电阻 1mΩ,所以 50mV 对应 50A // 电流值 = current_raw * 50A / 32768 float current = (float)current_raw * 50.0f / 32768.0f; // 清除中断标志 SDFM_clearInterruptFlag(SDFM1_BASE, SDFM_CHANNEL_1); Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP5); }这段代码里有几个关键点需要解释。第一,SDFM_setModulatorClock设置的是 SDFM 模块内部的调制器时钟频率,这个频率必须与 AMC1306 的外部时钟一致。第二,SDFM_configChannel里的 OSR 参数是 256,滤波器类型是 Sinc3,这与前面的分析一致。第三,SDFM_SHIFT_0表示不对输出数据进行移位,如果发现数据范围不对,可以调整这个参数。
4.3 电流环 PID 参数整定与调试步骤
电流环的 PID 参数整定,是电机控制里最考验经验的部分。我的调试步骤通常是这样的:
第一步,开环测试。先不接电机,或者让电机处于自由状态,给一个固定的 PWM 占空比,观察电流采样值是否正常。如果采样值跳动很大,说明硬件滤波或 SDFM 配置有问题,先解决采样问题。
第二步,电流闭环测试。给电流环一个阶跃指令,比如从 0A 跳到 1A,观察电流响应。如果响应有超调,减小比例增益 Kp;如果响应太慢,增大 Kp。积分增益 Ki 通常从很小的值开始,逐渐增大,直到消除稳态误差。
第三步,带宽测试。给电流环一个正弦指令,频率从 100Hz 逐渐增加到 2kHz,观察电流跟随情况。如果高频时相位延迟太大,说明 SDFM 的群延迟影响了电流环带宽,需要降低 OSR 或改用 Sinc2 滤波器。
我实际调试时,Kp 通常从 0.5 开始,Ki 从 0.01 开始。对于 1mΩ shunt、50A 量程的系统,Kp 在 1.0 左右,Ki 在 0.05 左右比较合适。但具体值取决于电机参数和母线电压,需要实际调试。
注意:电流环的采样时刻必须与 PWM 同步。通常在下桥臂导通的中点采样,这样可以避开开关噪声。SDFM 的输出采样率是 78.125kHz,PWM 频率是 10kHz,所以每个 PWM 周期有 7.8 个 SDFM 采样值。可以在 PWM 中断里读取最新的 SDFM 值,或者用 SDFM 的滤波器输出直接触发 PWM 更新。
5. 常见问题与排查技巧实录:那些让我熬夜的坑
5.1 电流采样噪声大、波形毛刺多
这是最常见的问题。表现是电流波形上叠加了高频噪声,FFT 分析能看到开关频率及其谐波。原因通常有三个:输入滤波不足、SDFM 配置不当、PCB 布局问题。
排查步骤:先用示波器看 AMC1306 的输入引脚,如果输入信号本身就有很多毛刺,说明滤波不够。增加差分电容或共模电容,但要注意截止频率不能太低。如果输入信号干净,但 SDFM 输出噪声大,说明 SDFM 的 OSR 太低或滤波器阶数不够。提高 OSR 或改用 Sinc3 滤波器。如果以上都正常,检查 PCB 布局,AMC1306 的输入走线是否太长,是否靠近开关节点。
我遇到过一个案例:客户用 AMC1306 采样下桥臂电流,噪声特别大。后来发现是 shunt 电阻的 Kelvin 连接没做好,采样点直接接在 shunt 的焊盘上,而不是用 Kelvin 走线。重新设计 PCB 后,噪声降低了 20dB。
5.2 电机低速时电流采样不准、转矩脉动大
低速时,电流环的采样窗口很窄,如果 SDFM 的群延迟太大,采样值跟不上电流变化,就会导致转矩脉动。解决方法是降低 OSR,提高 SDFM 的输出采样率,减少群延迟。或者改用相线采样,这样可以在任意时刻采样,不受 PWM 占空比限制。
另一个原因是低速时反电动势很小,电流环的增益需要调整。如果 Kp 太大,低速时容易震荡;如果 Kp 太小,响应又太慢。我的经验是,低速时适当降低 Kp,增大 Ki,同时提高 PWM 频率,减小电流纹波。
5.3 SDFM 数据溢出或跳变
SDFM 的输出是 16bit 有符号数,如果输入信号超过 AMC1306 的量程,输出会饱和。如果发现数据跳变,先检查 shunt 电阻是否选得太小,导致电流超过量程。另外,SDFM 的移位参数设置不对,也会导致数据范围异常。比如SDFM_SHIFT_0时,输出范围是 ±32768;如果设置成SDFM_SHIFT_2,输出范围就变成 ±8192。
还有一个隐蔽的问题:AMC1306 的时钟频率如果偏离标称值太多,SDFM 的解码会出错。用示波器测量 AMC1306 的 CLKIN 引脚,确认频率在 5MHz 到 20MHz 之间,且占空比在 40% 到 60% 之间。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 电流噪声大 | 输入滤波不足 | 示波器看 AMC1306 输入 | 增加差分/共模电容 |
| 电流噪声大 | SDFM OSR 太低 | 检查 SDFM 配置 | 提高 OSR 或改用 Sinc3 |
| 低速转矩脉动 | SDFM 群延迟大 | 计算相位延迟 | 降低 OSR,改用 Sinc2 |
| 数据跳变 | 输入超量程 | 检查 shunt 电阻 | 增大 shunt 或减小电流 |
| 数据跳变 | 时钟不同步 | 测量 CLKIN 频率 | 确保时钟同源 |
| 电流环震荡 | PID 参数不当 | 阶跃响应测试 | 降低 Kp,调整 Ki |
| 采样值偏置 | 共模电容不匹配 | 测量共模电容 | 使用 5% 容差 C0G |
5.5 几个容易被忽略的实操心得
第一个心得:AMC1306 的电源去耦很重要。高压侧的 5V 电源和低压侧的 3.3V 电源都需要就近放置去耦电容,通常是 100nF 加 10μF 的组合。如果去耦不好,比特流会出现误码,导致采样值偶尔跳变。
第二个心得:SDFM 的输入引脚要配置为同步模式。如果配置成异步模式,数据采样会与调制器时钟不同步,导致采样错误。这个在 TI 的例程里通常已经配置好了,但自己写代码时容易忽略。
第三个心得:电流环的采样时刻要避开开关瞬间。即使 SDFM 有滤波器,开关瞬间的 dv/dt 仍然可能通过寄生电容耦合到输入端。我的做法是在 PWM 下桥臂导通的中点触发 SDFM 读取,这样采样点离开关瞬间最远,噪声最小。
第四个心得:调试时先用直流电流源验证采样精度。不要一上来就接电机,先用一个可调直流电源加一个功率电阻,给 shunt 通一个已知电流,观察 SDFM 的输出是否线性。这样可以排除硬件问题,再调试软件。
6. 从采样到控制:把整个链路串起来
6.1 电流环与速度环的配合
电流采样只是第一步,最终目的是让电机转起来。电流环是内环,速度环是外环。电流环的带宽通常是速度环的 5 到 10 倍。如果电流环带宽是 1.5kHz,速度环带宽就是 150Hz 到 300Hz。
速度环的反馈来自编码器或霍尔传感器。如果编码器分辨率低,速度环的带宽就不能太高,否则速度反馈的量化噪声会被放大。我的经验是,速度环的 Kp 和 Ki 要根据编码器分辨率来调整。比如 1000 线编码器,速度环带宽不要超过 200Hz。
6.2 FOC 算法中的电流采样时序
FOC 算法需要三相电流,通常用两个电流传感器采样两相,第三相通过基尔霍夫电流定律计算。采样时刻必须在 PWM 周期的特定点,通常是下桥臂导通的中点。如果 SDFM 的输出采样率是 78.125kHz,PWM 频率是 10kHz,那么每个 PWM 周期有 7.8 个 SDFM 采样值。可以在 PWM 中断里读取最新的 SDFM 值,或者用 SDFM 的滤波器输出直接触发 PWM 更新。
这里有个细节:SDFM 的输出是连续更新的,但 PWM 中断是周期性的。如果 SDFM 的输出在 PWM 中断之间更新了多次,读取的值可能不是最新的。我的做法是在 PWM 中断里读取 SDFM 的滤波器输出寄存器,这个寄存器在每次 SDFM 采样完成后更新,读取的是最新值。
6.3 实际项目中的参数记录
我在一个 48V、1kW 的 BLDC 项目里,实际使用的参数如下:
- AMC1306M05,shunt 电阻 1mΩ
- SDFM 调制器时钟 20MHz,OSR 256,Sinc3 滤波器
- SDFM 输出采样率 78.125kHz
- PWM 频率 10kHz,死区时间 500ns
- 电流环 Kp = 1.2,Ki = 0.08
- 速度环 Kp = 0.5,Ki = 0.02
- 电流环带宽实测约 1.8kHz,相位裕度 45 度
这套参数在低速时转矩脉动小于 5%,高速时电流波形干净,开关噪声抑制良好。当然,不同的电机和母线电压需要重新整定,但可以作为起点参考。
6.4 后续扩展方向
如果你已经跑通了这套方案,可以考虑几个扩展方向。一是加入母线电压采样,用 AMC1306 的另一个通道,实现母线电压前馈补偿。二是加入过流保护,利用 SDFM 的比较器功能,在电流超过阈值时直接触发 PWM 关断。三是尝试更高的 OSR 和更高级的滤波器,比如 Sinc4 或自定义 FIR 滤波器,进一步提升精度。
我个人在实际操作中的体会是,Sigma-Delta 电流采样方案的门槛主要在硬件设计和 SDFM 配置,一旦跑通,稳定性和精度远超传统方案。但调试过程中一定要有耐心,先用直流验证,再上电机,逐步排查问题。最后再分享一个小技巧:如果发现电流采样有固定频率的干扰,先检查开关频率和 SDFM 采样率是否成整数倍关系,有时候调整一下 PWM 频率就能避开干扰。