STM32应用实例十五:STM32的ADC通道间干扰的问题
最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题。以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化。
首先来说明一下此次的软硬件环境,MCU采用的是STM32F103VET6,ADC采用自带的ADC1,使用通道6和7。在软件方面,我们使用版本为1.4的HAL库,使用DMA方式采集。
接下来,我们描述一下现象。在下边有两幅截图,左边是只给第二路输入为100%时输入显示99.962%。而右边的图是在第一路输入也添加100%输入时显示的结果,第一路输入为99.9643%而第二路输入变成了100.0418%。


这个影响在只需要显示数值时,没有特别的要求可以忽略,但在控制中有时可能会引起不必要的波动。正好我们此次要求较高,但因周期很急,硬件采用了原来项目中类式的电路,就出现了这一问题。修改硬件肯定是来不及的,只能是想其他办法尽量修正。
1、问题的分析
我们首先收集数据分析,在一路输入为0的情况下,另一路输入0-100%的输入观察第一路的信号变化。分别在55.5个时钟周期和239.5个时钟周期的采样频率下,获得一个通道对另一个通道的影响数据,如下图所示:


由以上两幅图我们可以发现,采样周期越长通道间的相互干扰就越小,反之则越大。一个同到的输入信号越强烈则在另一个通道上在成的干扰信号越强烈,反之则越小。如上图所示,我们对数据作曲线拟合,我们发现最多3次多项式姐可以很好的近似表示他们的关系。
2、相应的措施
有了上述对通道间相互干扰的数据关系的认识,一般来说本通道的输入与输出间应该是一个线性关系,但实际上总会有写偏差,我们测得数据的实际情况同样作曲线拟合。我们发现数据剧本是符合线性关系的,但为了更精确我们也可采用高次多项式,一般三次多项式完全就可满足,如下图所示:

经过上面的分析我们以2个通道为例来获得最终结果。两个同道的输入设为:[X1,X2],两个通道我们想得到的输出为:[Y1,Y2],而两输入对Y1的影响为:[A1,B1],两个输入对Y2的影响为:[A2,B2]。则其函数关系可表示为:Y1=A1*X1+B1*X2和Y2=A2*X2+B2*X1,其中各变量及系数均为向量,根据所想要采取的解析函数确定。
在本次项目中,我们采用三次多项式函数来拟合,所以根据三次多项式来确定上述量及解析目标量。
3、最终的结果
解析完成后,我们再做测试,量通道件的相互干扰可以减少到1%以下,想要完全消除有困难,毕竟只是软件处理。
最终的解决办法是在硬件电路上消除这干扰,如在要求较高时,尽量不要采用MCU自带的ADC和DAC来做模拟量的输入输出。
欢迎关注:

STM32应用实例十五:STM32的ADC通道间干扰的问题的更多相关文章
- STM32应用实例十:简析STM32 I2C通讯死锁问题
I2C接口是一种使用非常普遍的MCU与外部设备的接口方式,在STM32中也集成了I2C接口,我们也常常使用它来与外围的传感器等设备通讯. 最近在我们使用STM32F1VET6读取压力和温湿度传感器数据 ...
- STM32应用实例十四:利用光敏二极管实现光度测量
最近我们在开发臭氧发生器时,需要监测生成的臭氧的浓度,于是想到使用光度计来测量.因为不同浓度的臭氧对管的吸收作用是不相同的,于是检测光照强度的变化就可以得到相应的浓度数据. 1.硬件设计 此次光照度检 ...
- android 学习随笔二十五(动画:补间动画)
补间动画(TweenAnimation) * 原形态变成新形态时为了过渡变形过程,生成的动画就叫补间动画(为了让对象从初始状态向结束状态改变的过程更加自然而自动生成的动画效果)* 位移.旋转.缩放.透 ...
- 【STM32】用DMA实现多路ADC通道数据采集
今天尝试了下STM32的ADC采样,并利用DMA实现采样数据的直接搬运存储,这样就不用CPU去参与操作了. 找了不少例子参考,ADC和DMA的设置了解了个大概,并直接利用开发板来做一些实验来验证相关的 ...
- OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- python3.4学习笔记(二十五) Python 调用mysql redis实例代码
python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础十五> 输入框组
Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
随机推荐
- Oracle 数据库监听配置和服务
-- 补充说明 如果要远程连接192.168.10.44上的oracle,那么192.168.10.44服务器必须启动TNSListener.(配置文件 listener.ora) PLSQL Dev ...
- PPT制作
0.[整体风格]整体风格统一 界面排版 0.1 字体大小: 0.2 字体颜色: 0.3 字体的种类统一(不是指只取一种字体)) 1.[表达]结构化表达: 2.[取色]取色风格统一: 技巧:主色不超过三 ...
- HMM拓扑与转移模型
<Topology> <TopologyEntry> <ForPhones> 1 2 3 4 5 6 7 8 </ForPhones> < ...
- Spark思维导图之内存管理
- 4-13 object类,继承和派生( super) ,钻石继承方法
1,object 类 object class A: ''' 这是一个类 ''' pass a = A() print(A.__dict__) # 双下方法 魔术方法 创建一个空对象 调用init方法 ...
- IIS7配置Gzip压缩
II7中自带了gzip功能,理论上应该比ii6配置起来应该简单一点,但是容易出的问题比较多.有的II7配置web服务器角色的时候可能没有安装启用动态内容压缩,所以这个钩子是灰色的,需要再次安装. 如图 ...
- NPOI2.2.0.0实例详解(九)—设置EXCEL单元格【时间格式】
原文:http://blog.csdn.net/xxs77ch/article/details/50245391 using System; using System.Collections.Gene ...
- vprintf printf区别
参考链接: https://zhidao.baidu.com/question/237458625.html
- CPU火焰图
y轴:栈深度 x轴:cpu时间 长方形:一个栈(方法) 长度:出现在监视器中的时长(占用cpu的时间) 其他:从左到右的顺序只是按字母排序,无其他意义 火焰图就是看顶层的哪个函数占据的宽度最大.只要有 ...
- 20165337岳源 预备作业3:Linux安装及命令入门
安装虚拟机 按照基于VirtualBox虚拟机安装Ubuntu图文教程的步骤安装虚拟机,遇到的问题通过同学的帮助也得到了解决.例如:虚拟机无法选择64位系统. 常用的Linux命令 Tab 补全命令. ...