你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ADC差分采样

[复制链接]
Alf·Romeo 提问时间:2025-5-9 11:26 / 已解决

微信图片_20250508154946.png使用的芯片是STM32L431RCT6,原理图中ADC为差分采样,连在单片机的PC0和PC1引脚,我cubeMx中配置的为ADC1的IN1的差分采样,

微信图片_20250508155248.png我现在要计算出通过R27的电流,按照下面的公式计算对吗?

/* 其中,dat为获得的差分通道ADC的值,ref为内部参考电压(单位为mV) */
static float getDiffCurrent(const int16_t dat, float ref)
{
  // float voltage_diff = (dat * ref) / 2048.0f;      // 差分电压(单位:V)
  float voltage_diff = (dat * ref ) / 4095.0f; // 差分电压(单位:mV)
  float current = (voltage_diff / 100.0f) * 1000.0f;        // 电流(单位:mA,R27 = 0.1Ω)
  return current;
}
微信图片_20250508154946.png
微信图片_20250508155248.png
微信图片_20250508154946.png
收藏 评论2 发布时间:2025-5-9 11:26

举报

2个回答
xmshao 最优答案 回答时间:2025-5-9 16:31:01
假设你的VREF+=VDD, VREF-=GND,做差分采样的话,结果还是在0~4095间变化。


不过,转换结果0对应的是INP接GND,INN接VREF时的情形;


结果4095对应的是INP接VREF,INN接GND时的情形;


当INP=INN时的转换结果则是2048;


假设你现在每次的ADC结果放在dat变量里,你计算那个电阻两端的电压时,应该是


ResultF=((int32_t)(dat-2048)/2028.)*vref;  


uint32_t ADC_Buf8];
float ResultF=0.0;


下面我这边的测试结果。
Case 1: VINP=VREF, VINN=GND;
rrr.png



对于第三种情形,我搞一根导线将二者连接起来的,测试结果来看,压差将近5mv。
xmshao 回答时间:2025-6-19 14:39:40

不过,我要补充下。

我测试的这三个点是没问题的,计算也是该那么计算。

但STM32 ADC差分采样时对共模电压要求比较苛刻,原则上测试时要求VIN+VIP=Vref. 更多细节可以结合数据手册和相关资料了解。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版