本帖最后由 不语arc 于 2024-12-26 11:39 编辑
1.背景
在上一篇分享中,我提到了一个问题:
为什么U、V两相的运放反相输入端为什么是实际的SUM?官方给出的计算公式,是按照反相输入端接地计算得到的,虽然SUM值不算大。

在这里我对两种情况分别讨论,用实验结果来验证。
2.分组实验
2.1 情况一:U、V两相的运放反相输入端是总电流SUM
重新推理公式,虚短和虚断:



计算得:

因此:其中,Uo为运放输出值,也就是ADC实际采样的值,Uin为采样电阻两端的电压值。

由公式修改ADC采样函数
- typedef struct
- {
- float Ia;
- float Ib;
- float Ic;
- float Ibus;
- float Vbus;
- float VHandle;
-
- uint16_t ADC_Ia;
- uint16_t ADC_Ib;
- uint16_t ADC_Ibus;
-
- uint16_t ADC_Ia_offset;
- uint16_t ADC_Ib_offset;
- uint16_t ADC_Ibus_offset;
-
- uint16_t ADC_Vbus;
- uint16_t ADC_Handle;
- } CURRENT_Def;
-
- #define ADC_V_K 0.0008
- #define VREF 1.65
- #define Voffset 1.605
- #define AM_GAIN 4.86
- #define R_SENSE 0.02
- #define V_GAIN 21
-
- void GetADCvaule(){
- float SUM;
- current.ADC_Ia = (int16_t)ADC_GetValue(CURR_CHANNEL_U);
- current.ADC_Ib = (int16_t)ADC_GetValue(CURR_CHANNEL_V);
- current.ADC_Ibus = (int16_t)ADC_GetValue(IBUS_CHANNEL);
-
- current.Ibus = (ADC_V_K*(current.ADC_Ibus-current.ADC_Ibus_offset) - Voffset) / (AM_GAIN * R_SENSE);
- SUM = current.Ibus * R_SENSE;
- current.Ia = (ADC_V_K*(current.ADC_Ia-current.ADC_Ia_offset) - Voffset + 4.84*SUM) / (AM_GAIN * R_SENSE);
- current.Ib = (ADC_V_K*(current.ADC_Ib-current.ADC_Ib_offset) - Voffset + 4.84*SUM) / (AM_GAIN * R_SENSE);
-
-
- current.Ic = current.Ibus - current.Ia - current.Ib;
-
- current.ADC_Vbus = (int16_t)ADC_GetValue(VDC_CHANNEL);
- current.Vbus = ADC_V_K*(current.ADC_Vbus) * V_GAIN;
-
- current.ADC_Handle = (int16_t)ADC_GetValue(Handle_CHANNEL);
- current.VHandle = ADC_V_K*(current.ADC_Handle);
- }
对电机进行foc控制,将ADC电流波形通过串口打印出来。测试了几组,稳定时波形差不多是这样。
2.2 情况二:U、V两相的运放反相输入端是GND
计算公式如下:
实际执行上述代码的注释部分,求Ia和Ib。
再次实验采样三相电流,打印输出。波形差不多。
3.结论
SUM为Ibus*0.02,由于当前的转速较慢,SUM值较小,未能根据波形判断出反相端 接入情况。后续将继续调试完成高转速下的波形判断,当Ibus电流变大,两种接入情况将一目了然。