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

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
收藏 评论1 发布时间:2025-5-9 11:26

举报

1个回答
xmshao 最优答案 回答时间:4 天前
假设你的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。

所属标签

相似问题

官网相关资源

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