616|3

41

帖子

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电流变大,两种接入情况将一目了然。

 

查看本帖全部内容,请登录或者注册

最新回复

解决问题给力呀,10天破案,用心了,期待继续分享优秀作品,给你点赞了!   详情 回复 发表于 2025-2-4 21:43
点赞 关注
 
 

回复
举报

41

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

  破案了,采样的UI是被SUM抬高了的,所以,在运放的反向输入端接SUM也就对应了 减去SUM偏置。所以 求ADC实际采样值,就等效了情况二,直接使用情况二的公式即可。

点评

解决问题给力呀,10天破案,用心了,期待继续分享优秀作品,给你点赞了!  详情 回复 发表于 2025-2-4 21:43

赞赏

1

查看全部赞赏

 
 
 

回复

7145

帖子

11

TA的资源

版主

板凳
 
不语arc 发表于 2025-1-6 17:01   破案了,采样的UI是被SUM抬高了的,所以,在运放的反向输入端接SUM也就对应了 减去SUM偏置。所以 求 ...

解决问题给力呀,10天破案,用心了,期待继续分享优秀作品,给你点赞了!

点评

лл  详情 回复 发表于 2025-2-10 09:58
 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

4
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
Microchip 直播|利用motorBench开发套件高效开发电机磁场定向控制方案 报名中!
直播主题:利用motorBench开发套件高效开发电机磁场定向控制方案
直播时间:2025年3月25日(星期二)上午10:30-11:30
快来报名!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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