目录

  • 1. 问题概述
  • 2. 问题分析
    • 2.1 钳位二极管
    • 2.2 反向漏电流
  • 3. 复用功能
  • 4. 总结

1. 问题概述

硬件焊接完成后测试程序ADC采集功能,先通过接入3.3V来看下。结果发现三个通道可以采集到0V/3.3V,而另外三个通道在没有接入3.3V时,采集结果并不为0,基本在1V以上。

2. 问题分析

6个通道都是ADC1,对于程序来说,不同通道只是设置下通道号而已,按道理不应该出现部分采集正常,部分采集异常呀?
查了不少资料手册和例程,程序配置上没有发现明显问题。翻出了一块旧电路板,正好使用了出现异常的一个ADC通道。将程序直接下载进去,发现可以采集0V/3V。
对比两块电路板的原理图,发现了差异。可以正常采集的三个通道,外部电路均进行了分压:

而出现问题,浮空时仍然采集到电压的三个通道,外部电路均为直接输入:

顺着这个角度查阅了一些资料,的确有人遇到相同的情况,普遍反应是ADC管脚不要悬空使用。

相当于一个悬浮电压,大概为3.3V的一半。
是因为里面多路开关的特性引起的,开关输入引脚悬空就是个亚稳态。

回想一下,确实以前遇到的都是先分压再接到STM32的IO,一直以为是单纯因为参考电压的限制。这次因为采集电压的压值并不高,且电流非常小,担心会采不准,所以选择了直接接到IO上。不过查看了下手册,并没有找到相关的说明:

哪位大佬看到还希望能够详细解释下


2021.5.31更新
评论区weixin_45464719大佬给出了一种说法:

感觉是单片机内部两个钳位二极管分压引起的,因为IO口悬空,二极管反向漏电流导致IO口电压约等于供电电压的一半!

我的模电书早就卖废纸了,上网重新了解了下钳位二极管和反向漏电流。

2.1 钳位二极管

在端口配置图中,IO管脚有两个二级管:

这是两个钳位二极管,保证IO电压在Vss~VDD之间(忽略二级管的导通电压)。简单理解就是:

  • 当IO大于VDD时,上面的二级管导通,将IO电压限制在VDD;
  • 当IO小于Vss时,下面的二级管导通,将IO电压限制在Vss。

再看下百度百科的专业解释:

2.2 反向漏电流

说完了两个二级管的钳位作用,再简单看下反向漏电流。不细说PN结电场怎么反向的了,反正就是二级管会有反向电流。耶稣来了也是!
出现问题的三个通道,IO浮空,VDD和IO之间反向漏电流,IO和Vss之间反向漏电流,最终两个二级管达到一个分压效果,IO上就有一个二分之一的VDD。


3. 复用功能

刚开始怀疑是没有成功配置成ADC功能。如下图:

第二功能有好多个,如何选择成ADC呢?程序上还真没有针对性的做过配置,查了一番:

PA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种,选择的方法是开启相应外设的时钟,并使其它外设的时钟保持关闭状态。(如何理解STM32单片机引脚的复用功能?)

但是我的程序一直使能了USART2,又开启了ADC。测试结果是可以正常作为ADC来使用的,并不需要关闭USART2的时钟。可能是因为把管脚配置成了模拟输入

4. 总结

越来越发现,单片机程序写了不少,往往更关注业务逻辑,一些细节理解还不到位。一直以为悬空会不稳定,只是对电平输入而言,没想到模拟输入同样存在这个问题。
一位同事之前还用悬空的AD通道来做硬件随机数发生器,看来还是自己的经验不足,要继续努力呀

STM32 ADC没有输入电压时,采集结果不为0相关推荐

  1. STM32——ADC采集

    目录 ADC简介 ADC主要特征 ADC功能框图 ADC引脚 电压输入范围 通道选择 单次转换模式 连续转换模式 转换顺序 规则序列 注入序列 触发源 转换时间 中断 转换结束中断 模拟看门狗中断 D ...

  2. STM32——多通道ADC的DMA方式采集方法

    前言: 最近在调试STM32F205芯片ADC多通道DMA方式采集数据,总结下STM32多通道ADC的DMA方式采集的使用方法. 硬件平台:STM32F205 软件平台:keil v5 函数库:标准库 ...

  3. STM32——ADC

    STM32--ADC 宗旨:技术的学习是有限的,分享的精神是无限的. 一.ADC指标 有 18 个通道,可测量 16 个外部和 2 个内部信号源.各通道的 A/D 转换可以单次.连续.扫描或间断模式执 ...

  4. stm32 ADC hal库实现

    stm32 ADC hal库实现 1.ADC的作用 (1)简介: ADC(Analog-to-Digital Converter),即模拟-数字转换器,可以将连续变化的模拟信号转换为离散的数字信号,进 ...

  5. STM32 ADC 采样 频率的确定

    一 STM32 ADC 采样频率的确定 1.       : 先看一些资料,确定一下ADC 的时钟: (1),由时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步.CLK 控制器为A ...

  6. STM32 ADC转换实验

    摘自:STM32 ADC转换实验 作者:追兮兮 发布时间: 2020-10-29 09:42:24 网址:https://blog.csdn.net/weixin_44234294/article/d ...

  7. STM32 ADC模数转换

    STM32 ADC模数转换 独立模式/双重DMA/三重DMA //使能ADC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //APB2 ...

  8. STM32 ADC单通道与多通道_DMA学习笔记

    转自:https://blog.csdn.net/dmfylb/article/details/72802690 第一部分  ADC单路采集 下面我们将 PC0引脚配置成 AD1的通道10为例进行讲解 ...

  9. STM32 ADC采样

    目录 1.基础概念 2.原理:ADC采样过程分为四步:采样.保持.量化.编码. 3.采样定理 4.采样保持放大器(SHA) 5.ADC电压值转换 6.ADC轮询采样 1.基础概念 ADC 全称:Ana ...

最新文章

  1. 发布Apworks应用开发框架(Alpha版本)
  2. 变种 背包问题_动态规划入门——传说中的零一背包问题
  3. python调用计算器卡死_Python+tkinter使用40行代码实现计算器功能
  4. Linux下搭建Android交叉编译环境
  5. Java Experiment 3 PairProgramming
  6. keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
  7. Redux 主要知识学习总结
  8. Python-flask中数据库连接池DBUtils
  9. 2017 Postgres大象会 TBase可靠性探究ppt
  10. AD画芯片的原理图和封装
  11. SWAT | SWAT源码编译
  12. 锁定计算机后qq能远程吗,如何通过QQ进行远程控制(利用QQ远程协助在不同网络下远程控制电脑)...
  13. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法
  14. 视频监控存储特点分析
  15. 分布式计算模式:Stream
  16. E18-D80NK拆解
  17. 记录微机大作业-----流水灯
  18. 紫光云全面进军公有云的底气何在?
  19. ResNet、残差结构、迁移学习
  20. 从服务上下载下的日志文件,用UltraEdit打开时中文是乱码解决方法

热门文章

  1. 怎么把程序内部坐标转为屏幕坐标,如何将工作空间坐标转换为屏幕坐标?
  2. 护壁桩嵌入深度_钻孔灌注桩嵌岩深度最少多少
  3. asp.net控件全部清空、全部启用、全部禁用方法
  4. 写python的笔记本_python笔记本:更改写入的fi
  5. xpath 取标签下所有文字内容_如何理解葡萄酒标签上的所有内容(下)
  6. 聚类分析应用之市场细分
  7. python绘制曲线y=2x+5_Python Matplotlib 简易教程
  8. 系统学习机器学习之随机场(五)--CRF++源码L-BFGS算法补充
  9. Android NDK开发之 NDK 局部 全局引用
  10. 泛微oa主表赋值明细表_OA系统学习--三