您的位置:  首页 > 技术杂谈 > 正文

嘿,ADC,帮我翻译一下它说啥

2023-03-01 16:00 https://my.oschina.net/u/5443273/blog/8374526 中移物联OneOS 次阅读 条评论

ADC (Analog-to-Digital Converter) 指模数转换器,是指将连续变化的模拟信号转换为离散的数字信号的器件,能够实现将光、温度、湿度等等模拟信号转换为数字信号,进而进行处理和感知。ADC 有逐次逼近型、积分型、压频变换型、分级型和流水线型等等,适合于各种低速、高速、瞬态、基带调解、电子测量等不同场合,应用十分广泛。本文将对常见的ADC类型及其特点进行介绍,并实例演示如何在系统中进行配置使用。

一、ADC分类即特点

1.1逐次逼近型

逐次逼近型ADC是一种直接ADC,由比较器、数模转换器和逐次逼近寄存器以及控制电路组成。每当测试开始时,它逐个产生比较电压,逐次与输入电压分别比较,以逐渐逼近的方式进行模数转换,其转换过程类似于天枰。每次均从最大的砝码开始试放,将砝码与被测物体比较,若物体轻于该砝码,则砝码移去,选择下一个砝码比较,若物体重于该砝码,则砝码保留,增加下一个砝码再比较。以此类推直至增减完最小的砝码,天平上保留的砝码重量相加则为物体重量。逐次逼近型ADC原理同理,将输入的模拟信号与不同大小的参考电压进行比较,最终得出输入模拟量的对应值。

逐次逼近型ADC电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时传感器产生的信号在进行模数转换之前需要进行调理,导致价格偏高。

1.2积分型

积分型ADC是一种通过使用积分器将未知的输入电压转换成数字表示的一种模-数转换器,由模拟积分器、比较器和技术单元组成。未知的输入电压施加在积分器的输入端,并且持续一个固定的时间段,然后用一个已知的反向电压施加到积分器,这样持续到积分器输出归零。这样,输入电压的计算结果实际是参考电压的一个函数,定时上升阶段时间和测得的下降阶段时间。下降阶段时间的测量通常是以转换器的时钟为单位,所以积分时间越长,分辨率越高。

积分型ADC优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,转换速率低。因此,这些转换器通常的典型应用就是数字电压计和其他需要高精度测量的仪表,不适用于音频或信号处理的场合应用。

1.3压频变换型

压频变换型ADC通过间接转换方式实现模数转换,ADC首先将输入的模拟信号转换为频率,然后利用计数器将频率转换为数字量,根据其原理,只要采样的时间从理论上讲这种AD的分辨率几乎可以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。

其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。

1.4流水线型

流水线型ADC有多个连续的步骤,每个步骤都是在处理上一个步骤转换出来的信号,最终得到一系列的数字采样值,从而实现将模拟信号转换为数字信号的功能。它将模拟信号经过一系列步骤,每一步实现一个特定功能,最终得到一系列数字采样值。具体来说,流水线型ADC包括输入滤波器、量化器、数据暂存器、插值器和增益校正等模块。输入滤波器用于滤除模拟信号中的频率噪声;量化器会将模拟信号量化成一系列数字采样值;数据暂存器用于缓存量化后的采样值;插值器用于通过对采样值的插值处理得到更精确的采样值;增益校正模块用于对采样值进行增益校正。

流水线结构模数转换器( ADC) 相对于其他结构 ADC 来说, 最大优势在于它在精度、速度、功耗等方面的很好平衡,其精度较高,转换速度较快,功耗较低且芯片面积较小。

二、ADC 工程配置

ADC用处如此广泛,作为物联网操作系统OneOS怎能不支持呢?下面小编将和大家一起进行ADC工程配置,让ADC做一个优秀的翻译官,和我们一起感受世界~

2.1 建立工程文件

如果在提供的 OneOS 源码中已经有适合的 DEMO 工程,则生成工程后可以直接使用;如果没有请参照快速开始中的操作指南,构建一个适合的工程。以下配置均以万耦一代开发板(STM32L475)为例,STM32 的 ADC 目前只支持单通道模式,即任意时刻只能访问获得一个通道的有效数据。

2.2 使用STM32CubeMX配置硬件

1.打开 OneOS\projects\xxxxx(project文件夹)\board\CubeMX_Config 下的 CUBE 工程文件,按照具体的需求进行配置;

ADC 单通道模式下,可以开启多个 ADC,如打开了三个 ADC,按照 ADC 的名称进行注册,每个 ADC 可以配置开启多个通道,通道顺序号和配置一致,但是任意时刻只能访问一个通道,配置实际上是配置好对应的引脚的参数。

2.配置 ADC 通道,并配置 ADC 通道参数;

  • Analog 标题下是模拟外设信息,选择 ADC 外设;
  • Mode 标题下是通道信息,选择通道模式;
  • ADC_Setings 需要根据实际使用进行配置;
  • ADC_Regular_ConversionMode 等 ADC 通道配置参数不需要进行配置,实际使用时调用默认参数,修改需要在 drv_adc.c 的 stm32_adc_get_channel_config 函数中添加(STM32 官方工具和 ADC 自身使用有限制导致);
  • 右侧的芯片示意图上根据需要配置硬件引脚。

3.点击 Clock Configuration 检查时钟配置,然后点击 GENERATE CODE 生成 STM32CubeMX 工程代码。

2.3 配置和生成工程

1.在对应的 OneOS\projects\xxxxx(project文件夹) 目录下打开 OneOS-Cube 工具,在命令行输入oos config打开可视化配置界面;

2.如下图示,通过Enter键、方向键和空格键选择 (Top) → Drivers→ MISC 下的 Using ADC device drivers 选项;

(Top) → Drivers→ MISC
                                      OneOS Configuration
[*] Using push button device drivers
[*] Using led device drivers
[ ] Using buzzer device drivers
[*] Using ADC device drivers
[ ] Using DAC device drivers
[ ] Using PWM device drivers
[ ] Using Input Capture device drivers
[ ] Using Pulse Encoder device drivers

3.通过 Esc 键退出配置界面,退出时选择保存;

4.在命令行输入 oos init -i keil 命令,构建工程。

2.4 工程编译及实现

1.打开对应的 OneOS\projects\xxxxx(project文件夹) 目录下的 project.uvprojx 工程文件;

2.将测试代码 OneOS\demos\driver\adc test.c(详细代码见末尾)添加到工程中;

3.编译并下载工程,运行程序;

4.打开串口工具如 xshell 等,通信成功后,输入对应的测试指令;

5.通过硬件调节电压,即可观察到不断回读 ADC 采样电压值(电压值单位 mv)。 测试如下:

sh />adc_sample adc1 1
adc1 channle 1 voltage value: 514
adc1 channle 1 voltage value: 1010

更详细的API介绍欢迎前往OneOS官网文档中心查看。

文档中心 (10086.cn)

OneOS源码仓库:https://gitee.com/cmcc-oneos/OneOS

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接