67|0

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【极海APM32M3514电机通用评估板】ADC电流采样 公式推理与验证 [复制链接]

 
本帖最后由 不语arc 于 2024-12-26 11:39 编辑

1.背景

在上一篇分享中,我提到了一个问题:

为什么U、V两相的运放反相输入端为什么是实际的SUM?官方给出的计算公式,是按照反相输入端接地计算得到的,虽然SUM值不算大。

 

在这里我对两种情况分别讨论,用实验结果来验证。

2.分组实验

2.1 情况一:U、V两相的运放反相输入端是总电流SUM

重新推理公式,虚短和虚断:

\frac{1.65-U_{+} }{10k} =\frac{U_{+}-U_{in} }{2k}

 

\frac{U_{o} -U_{-}}{9.671k} =\frac{U_{-} -SUM }{2k}

 

U_{+}=U_{-}

计算得:

U_{0}=4.86\times U_{in}+1.605-4.84\times SUM

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

 

U_{in}= \frac{U_{o}-1.605 +4.84\times SUM}{4.86}

 

由公式修改ADC采样函数

typedef struct
{
    float Ia; // Phase A current
    float Ib; // Phase B current
    float Ic; // Phase C current
		float Ibus;
    float Vbus;
		float VHandle;	//0-3.3的范围

    uint16_t ADC_Ia; // Phase A Voltage(I*R)
    uint16_t ADC_Ib; // Phase B Voltage
    uint16_t ADC_Ibus; // SUM Voltage
    
    uint16_t ADC_Ia_offset; // 电流零点偏置
    uint16_t ADC_Ib_offset; // 电流零点偏置
    uint16_t ADC_Ibus_offset; // 电流零点偏置
	
		uint16_t ADC_Vbus; // Phase bus Voltage
		uint16_t ADC_Handle; 
} CURRENT_Def; 

#define ADC_V_K   0.0008  // 3.3/4096.0  // ADC 与电压转换系数
#define VREF 			1.65		//参考电压偏置
#define Voffset		1.605		//偏置电压大小
#define AM_GAIN 	4.86  //运放放大倍数
#define R_SENSE   0.02  //Ω 采样电阻
#define V_GAIN  	21		//(100+100+10)/10

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.Ia = (ADC_V_K*(current.ADC_Ia-current.ADC_Ia_offset) - Voffset) / (AM_GAIN * R_SENSE);
//			current.Ib = (ADC_V_K*(current.ADC_Ib-current.ADC_Ib_offset) - Voffset) / (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); //0-3.3的范围
}

对电机进行foc控制,将ADC电流波形通过串口打印出来。测试了几组,稳定时波形差不多是这样。

     

  

 

2.2 情况二:U、V两相的运放反相输入端是GND

计算公式如下:

  

实际执行上述代码的注释部分,求Ia和Ib。

再次实验采样三相电流,打印输出。波形差不多。

   

 

3.结论

SUM为Ibus*0.02,由于当前的转速较慢,SUM值较小,未能根据波形判断出反相端 接入情况。后续将继续调试完成高转速下的波形判断,当Ibus电流变大,两种接入情况将一目了然。

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/3 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表