type
date
slug
category
icon
password
一、电流监测
常见的电流检测方式分三种:
- 三电阻方式:程序设计相比单电阻要简单,将三个电阻分别连接至逆变器三个桥臂的下端,在下桥臂打开时进行采样,每次只检测其中两路即可。电压以地电压为中心,正负摆动,因此需要相移电路,并送至运算放大器进行放大。


- 单电阻方式:程序相对复杂,只在电源的地端放置一个检测电阻,在特定的时刻采集电流。检测到的电压只有正值,不需要相移电路,只需要一路运算放大器放大处理,节省成本。

- 双电流互感芯片方式:抗干扰能力强,但成本高。任何时刻都可以采集电流。同样,只需要安装两路即可,通过基尔霍夫电流定律,计算出第三相的电流。
1.1 三相电流采样方法
对于三电阻方式电流采样,只有在逆变器下桥臂打开时,电流会流过检流电阻。触发采样时刻为三相控制 PWM 下桥臂(X、Y、Z)打开。使用该方式,ADC模块需支持三个通道同时采样,这样才能确保采样得到的三相相电流是同一时刻的电流,此时才能保证基尔霍夫定律(Iu+Iv+Iw=0)。

1.2 ADC 触发机制
如何保证准确的触发时刻和动态响应?
可以适用 ADC 硬件触发采样功能,配置 TIMER CH4 为 TRGO 输出,触发ADC采样。这样问题就转化为 TIMER CH4 CCR值动态设置。这里说的动态配置,是指FOC控制时,A、B、C 三相占空比、PWM输出控制的CCR值在动态变化,TIMER CH4 CCR值则需要一直大于CCRmax (占空比最大值,可能是A、B、C 任意一项)。

三相中占空比最大的相的低电平时间,就是留给我们ADC采样的时间。如果某一相的占空比过大,留给我们的时间已经小于采样时间了,那ADC可能会无法采样到电流,或者在 MOS 开启关闭的附近时间采样,这个时候会采到非常严重的尖峰,此时电流采样已经无法正常进行。因此,需要限制最大占空比。
由于电机驱动系统拓扑存在的延迟源,除了死区时间,还有光耦和预驱动器引入的延迟,MOSFET 开关时间,放大器、低通滤波器和 ADC 导致的延迟。当遇到电机噪声过大、效率偏低甚至无法运转等情况,就要考虑电路中的延迟因素导致采样出的电流值不准确。

这些延迟可以根据下表估计,也可通过示波器采样计算出来。
延迟类型 | 典型时间 |
PWM死区时间插入 | 100ns-2µs |
预驱开关延迟 | 约50ns |
放大器延迟 | <1µs |
ADC延迟 | 50ns-200ns |
上面提到:TIMER CH4 CCR 值则需要一直大于CCRmax(占空比最大值,可能是A、B、C 任意一相),且还需考虑到驱动系统中存在的延迟因素,难道我们要动态记录是 A、B、C 三相CCR值,取最大值,再加上延迟值?
这样做未免太麻烦,可以将 TIMER CH4 CCR 设置为 ARR-偏移值来实现
这里可以计算一下,PWM 频率 15kHz,延迟(死区 3us,其他延迟时间参考下图多种延迟源典型延迟时间,保守估计5us,总延迟8us)和采样时间(STM32F103 最短采样周期为 1.17 us)。因此低电平最少保留 ARR-CCR= 9.17 us/ (1/0.015/ARR) = 9.17 us/ (1/0.015/400) = 55。
因为我们的装载值是3500,如果我们设为3500,通道4就会一直处于高电平,没有下降沿也就无法触发ADC。因此我们可以设置成比3500小一点的数,比如3450,但前提是三相最大的装载值不会超过3400左右。不过这里只是打个比方,具体还是要根据自己手上的硬件去细调。
综上,我们可以从如下流程配置来总结ADC触发机制
- 配置 timer CH4 为 TRGO 输出
- timer 的 TRGO 输出用于硬件触发 ADC 采样
- 如果是拥有两个 ADC 模块的可以同时触发进行同时采样
- 判断波形的采样位置,修正 CCR4 数据

1.3 ADC 采样必备知识
下面内容针对STM32 F103
输入通道:规则通道(常用)和注入通道(插队规则通道,先完成注入通道,再继续规则通道)

- 转换顺序:规则序列寄存器有3个,分别为SQR3、SQR2、SQR1。注入序列寄存器JSQR只有一个,最多支持4个通道。
- 触发源:ADC_CR2的 ADON 这个位来控制开始和停止触发转换,ADC_CR2的 EXTSEL[2:0] 和 JEXTSEL[2:0] 位来选择触发源,ADC_CR2的 EXTTRIG 和 JEXTTRIG 这两位来控制激活。
- 注意:ADC3 的规则转换和注入转换的触发源与ADC1/2的有所不同。
- 注意2:TIM1 的 CH4 通道不能触发ADC的规则采样。


- 转换时间:ADC 转换时钟经过 PCLK2 分频,最高为14MHz,常用 12MHz。
- Tconv =采样时间+ 12.5个周期 = 1/12*(1.5+12.5)=1.17us
- 寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0] 位设置不同通道采样时间;
- 数据寄存器:
- 规则数据寄存器只有一个,多通道转换时会被覆盖,常用DMA模式防止数据覆盖;
- 注入数据通道对应着自己的寄存器,不会跟规则寄存器那样产生数据覆盖的问题;
- 规则数据寄存器和注入数据寄存器同样存在对齐问题。
- 中断
- 转换结束中断:规则通道转换结束中断,注入转换通道转换结束中断;
- 模拟看门狗中断:ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断;
- DMA请求:规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求。
示例:
拓展:双 ADC 模式说明
共有6种可能的模式:
- 同步注入模式(
ADC_Mode_InjecSimult
):注入通道组

- 同步规则模式(
ADC_Mode_RegSimult
):规则通道组

- 快速交叉模式(
ADC_Mode_FastInterl
):只适用于规则通道组(通常为一个通道)

- 慢速交叉模式(
ADC_Mode_SlowInterl
):只适用于规则通道组(通常为一个通道)

- 交替触发模式(
ADC_Mode_AlterTrig
):只适用于注入通道组

- 独立模式(
ADC_Mode_Independent
):双ADC不同步工作,每个ADC接口独立工作。
还有可以用下列方式组合使用上面的模式:
- 同步注入模式 + 同步规则模式(
ADC_Mode_RegInjecSimult
)
注:在混合的规则/注入同步模式中,必须转换具有相同时间长度的序列,或保证触发的间隔比2个序列中较长的序列长,否则当较长序列的转换还未完成时,具有较短序列的ADC转换可能会被重启。
- 同步规则模式 + 交替触发模式(
ADC_Mode_RegSimult_AlterTrig
)

- 同步注入模式 + 交叉模式(
ADC_Mode_InjecSimult_FastInterl
和ADC_Mode_InjecSimult_SlowInterl
)

1.4 参考文献
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/phase_current_detection
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!