ADC模拟转换器

【ADC简介】

  • ADC(Analog-Digital Converter)模拟数字转换器,简称AD转换器
  • 应用于波形生成领域,例如信号发生器,音频解码芯片等
  • 可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁:STM32主要是数字电路,只有高低电平,没有电压多少的概念
  • 工作模式:逐次逼近型
  • 关键参数分辨率:12位AD值,表示范围是0~(2^12-1),既量化结果范围是0~4095
  • 关键参数转换频率:从AD转换开始到产生结果需要1us的时间,对应AD转换的频率是1MHz。这是STM32ADC的最快转换频率。
  • 18个输入通道,可测量16个外部(也就是GPIO口,在引脚上直接接模拟信号)和2个内部信号源(内部温度传感器和内部参考电压)
  • 规则组和注入组两个转换单元:可以列一个组,一次性启动一个组,连续转换多个值
  • 模拟看门狗自动监测输入电压范围

【逐次逼近型ADC】:先理解ADC0809的内部结构

  1.  这是一个独立的8位逐次逼近型ADC芯片
  2. 通过(通道选择开关)选中(8路输入通道)其中的一路进行转换
  3. 想要知道待测电压对应的编码数据,用逐次逼近的方法来比较:利用电压比较器判断两个输入信号电压的大小关系,输出一个高低电平指示谁大谁小。输入分别是DAC的电压输出端和待测电压。其中DAC是数模转换器,可以输出数据对应的电压。依次调整比较,使得DAC的输入数据是外部电压的编码数据。电压调节的过程由逐次逼近寄存器SAR完成。
  4. EOC(End Of Convert)结束信号。STAR表示给一个输入脉冲开始转换。CLOCK代表ADC时钟

【STM32的逐次逼近型ADC】

 

  • 前方模数转换器执行逐次比较的过程,比较结果存放在数据寄存器中,其中:规则组:一次可以选择16个通道,列组连续转换效率很高,但只有一个数据寄存器,需要配合DMA实现。注入组:一次可以选择4个通道,数据寄存器有4个,不用担心数据覆盖的问题
  • 触发ADC开始转换的信号有两种:软件触发和硬件触发(触发源主要来源于定时器)

     通过设置右边的寄存器来选择触发信号

  • ADC预分频器只能选择6和8分频

 【ADC基本结构图】

【输入通道】 

ADC12_INO = ADC1和ADC2的IN0都在PA0上

 【规则组的4种转换模式】

单次转换,非扫描模式:退化为简单选中一个通道的方式,没有用到菜单列表,触发转换后对选中的一个通道进行模数转换,转换完成后结果放在数据寄存器里,同时给EOC标志位置1,转换结束。

连续转换,非扫描模式:还是简单选中一个通道的方式,但结束后不会停止,立刻开始下一轮转换,然后一直持续下去。只需要触发一次。

单次转换,扫描模式:每次转换结束后会停下来。但使用菜单列表,每个位置可以选择各自的通道,也可以重复。初始化结构体时也会用参数定义通道数目。每次触发后依次对菜单列表中的通道位置进行AD转换,结果都放在数据寄存器中,为了防止被覆盖需要用DMA及时读取数据。通道转换完成后产生EOC信号,转换结束。

连续转换,扫描模式:一次转换结束后哦,立刻开始下一次转换

间断模式:在扫描过程中,每隔几个转换就暂停一次,需要再次触发才能继续

【触发控制】

  •  具体是引脚还是定时器需要用AFIO重映射来确定
  • 触发信号的选择可以通过设置右边寄存器来完成

【数据对齐】

ADC转换结果是12位,而数据寄存器是16位的,需要将数据对齐。一般使用右对齐。

【转换时间】

AD转换的步骤:采样,保持,量化,编码

 采样时间指采样保持花费的时间,ADC周期 = 经过RCC分频后的ADCCLK

【硬件电路连接】

 电位器:三个接口分别是接负,接IO口,接正

【单次转换非扫描】

 【连续转换非扫描】不需要不断触发,也不需要等待完成

 

posted @   整点薯条拯救一切  阅读(327)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示