1、三相电流采样
上图为 U 相电流采集电路(U、V、W 三相同理,这里只以 U 相为例),其中R17 为采样电阻(20mR),当有电流 I 流过采样电阻时,采样电阻上就会产生一个电压,电压大小为: I*0.02Ω(20mR)。使用 I-V 表示电流 I 经过采样电阻后形成的电压,所以 U相的电压,我们使用 I-V_U 表示。
那么现在只需要测出电压 I-V_U 的值,就可以换算出 U 相电流,但是这里有一个问题,假设 U 相电流为 10A,此时电压 I-V_U = 10 * 0.02 V = 0.2V,同理当电流为 20A 时,求得的电压值 I-V_U = 0.4V,可以看到当电流比较大的情况下,求得的电压值是非常小的,不利于我们的 ADC 采集,考虑到 ADC 的精度问题,所以我还需将电压经过差分放大电路放大后在来采集,如下图:
由上图得出该差分放大电路的放大倍数为:Diff = 12K/(1K+1K)= 6 倍, 并有一抬升电压 1.25V,所以电压放大后的输出为: AMP_IU = 6 * ( 0.02*I ) + 1.25V。由于AMP_IU 是接到电机开发板的 ADC 引脚的,所以该值是已知的,此时就可以计算出 U 相电流 I 的值。
1.1实际应用
1、电机停机状态下,通过ADC1_CH8(PB0)检测AMP_IU电压对应的ADC值,计算电压值AMP_IU电压 = ADC值 * 3.3 / 4096,此时电压值即偏置电压;
2、当电机旋转时,继续检测AMP_IU电压对应的ADC值, 计算AMP_IU电压AMP_IU电压 = ADC值 * 3.3 / 4096
3、采样电压放大,放大倍数= 12 / (1+1) = 6倍
4、得到输出电压:AMP_IU = (6*0.02Ω* I) + 1.25V
5、采集输出电压计算实际电流I ;I = ( 旋转时电压 -- 偏置电压 ) / 0.12 A
2、电源电压采样
驱动板的供电电压 POWER 经过电阻分压后进入 LMV358 的 A 路运放,该运放为电压跟随电路,所以 1 脚输出电压 VBUS 和电阻分压的值相同,即 VBUS = POWER/(12K+12K+1K)*1K,当 ADC 采集到 VBUS 电压后就可以计算出 POWER 电压。
2.1实际应用
第一步:使用ADC1_CH9(PB1)采集VBUS点的电压,即
VBUS = ADC_CH9(PB1) * 3.3 / 4096
第二步:电压跟随电路 VBUS = POWER * 1/(12+12+1)
第三步:采集输出电压计算实际电压POWER = VBUS * 25
最终得到:
POWER = 25* ADC_CH9(PB1) * 3.3 / 4096
3、控制器温度采样
上图为温度检测电路,可以看到,NTC 电阻和固定的 4.7K 电阻分压,然后接入B 路运放,B 路运放也是电压跟随电路,所以此时 VTMEP = 3.3V/(Rt+4.7K)*4.7K,通过ADC 采集 VTMEP 的电压后就可以算出 Rt 的值,其中 Rt 就表示 NTC 电阻在当前温度下的电阻值。从 NTC 电阻的数据手册可以找到温度计算公式:T1=1 / ( In (Rt/R0) / B + 1/T2 ),这里的 T1 和 T2 指的是 K 度即开尔文温度,K 度 = 273.15(绝对温度) + 摄氏度;其中:
⚫ T2 :273.15 + 25(25 摄氏度下的 K 度值)
⚫ T1 :实际温度
⚫ Rt :热敏电阻在 T1 温度下的阻值;
⚫ R0 :热敏电阻在 T2 常温下的标称阻值;
⚫ B 值:热敏电阻的重要恒定参数;
其中 T1 是我们需要求解的温度值,Rt 的大小由前面的温度采集电路可以算出,其他的参数都是可以在数据手册中查找得出,代入温度求解公式即可算出T1温度值,注意该值为K度。
3.1实际应用
第一步:使用ADC1_CH0(PA0)采集VTEMP点的电压,VTEMP = ADC1_CH0(PA0) * 3.3 / 4096
第二步:电压跟随电路,VTEMP = 3.3 * 4700 /(Rt + 4700)
第三步:采集VTEMP计算此时热敏电阻的阻值Rt
Rt = ( 3.3 * 4700 )/ VTEMP - 4700
第四步:根据Rt算出实际温度值
实际温度 T1=1 / ( In (Rt/R0) / B + 1/T2 )