# ADC 模数转换器 - [概要](#概要) - [ADC是什么](#adc是什么) - [ADC引脚定义](#adc引脚定义) - [machine.ADC API详解](#machineadc-api详解) - [宏定义](#宏定义) - [类](#类) - [构建ADC](#构建adc) - [函数](#函数) - [设置平均算法采样次数](#设置平均算法采样次数) - [ADC测量电压范围](#ADC测量电压范围) - [ADC采样](#adc采样) - [示例](#示例) ## 概要   本文档介绍 `ADC` 的概念,以及 `OpenHarmony` 中 `Python` 的 `ADC` 接口。`Waffle NanoV1` 的 `ADC` 模块具有以下功能特点: - 输入时钟 3MHz,12bit 采样精度,单通道采样频率<200KHz。 - 共 8 个通道,支持软件配置 0~7 任意通道使能,逻辑按通道编号先低后高发起切换,每个通道采样 1 个数,通道切换时会使 ADC 电路进行 1 次复位处理。 - 支持对 ADC 采样数据进行平均滤波处理,平均次数支持 1(不进行平均)、2、4、8;多通道时,每个通道接收 N 个数据(平均滤波个数)再切换通道。 ### ADC是什么 - `ADC` 的英文全称是`Analog / Digital Converter`,是将模拟信号转换为数字信号的转换器,ADC是单片机读取传感器信号的常见方式。 - 日常生活中的信号,例如光照强度,声波,电池电压 这些都是模拟值。 想对模拟信号(电压,光照强度,声波)进行测量,用数字信号进行表达,这个时候需要**ADC** 模拟数字信号转换器。 ## ADC通用方法集合   `ADC`接口定义了完成`ADC`传输的通用方法集合,包括: - `ADC`初始化 - 设置平均算法采样次数 - 读取`ADC`采样数据 ## ADC引脚定义   有7个引脚有`ADC`功能,分别对应`ADC`的7个通道。(注意,在`Waffle Nano`中 `9`、`10`号引脚作为与板载传感器沟通的主要线路,`3`,`4`号引脚作为`REPL`的主要线路,**这四个引脚已被使用,无法用作别的功能**) | 引脚 | 功能 | | ------ | ---- | | pin 12 | ADC0 | | pin 4 | ADC1 | | pin 5 | ADC2 | | pin 7 | ADC3 | | pin 9 | ADC4 | | pin 11 | ADC5 | | pin 13 | ADC6 | ## machine.ADC API详解   使用 `from machine import ADC` 导入 `machine` 模块的模数转换类 `ADC`   再使用 `TAB` 按键来查看 `ADC` 中所包含的内容: ```python >>>from machine import ADC >>>ADC. read EQU_MODEL_1 EQU_MODEL_2 EQU_MODEL_4 EQU_MODEL_8 EQU_MODEL_BUTT equ ``` ### 宏定义   下面的宏定义用于配置pin,也就是将对应编号的真实的管脚配置成输入或者输出或者其他模式。 | 宏定义 | 含义 | | -------------------- | ----------------------- | | ADC.EQU_MODEL_1 | 平均算法的采样次数为1次 | | ADC.EQU_MODEL_2 | 平均算法的采样次数为2次 | | ADC.EQU_MODEL_4 | 平均算法的采样次数为4次 | | ADC.EQU_MODEL_8 | 平均算法的采样次数为8次 | | ADC.EQU_MODEL_BUTT | 平均算法的采样次数阀值 | ### 类   class machine.ADC(channel) 可传入参数: - `channel`:ADC通道 ### 构建ADC   示例: ```python >>> from machine import ADC,Pin >>> adc=ADC(Pin(7)) #将Pin 7 设置为ADC ``` ### 函数   在接下来的示例中, 构造`ADC`对象adc来列举其函数。 ```python adc=ADC(Pin(7)) ``` #### 设置平均算法采样次数   `adc.equ(mode)`   函数说明:设置平均算法采样次数,返回True代表设置成功。   mode : - ADC.EQU_MODEL_1 — 采样1次 - ADC.EQU_MODEL_2 — 采样2次 - ADC.EQU_MODEL_4 — 采样4次 - ADC.EQU_MODEL_8 — 采样8次 - ADC.EQU_MODEL_BUTT — 采样阀值   示例: ```python >>> from machine import ADC,Pin >>> adc=ADC(Pin(7)) #将Pin 7 设置为ADC >>> adc.equ(ADC.EQU_MODEL_8) #设置ADC平均算法的采样次数为8次 True ``` #### ADC测量电压范围   默认电压为`3.3V`,引脚不可能超过管脚电压**3.3v**。 #### ADC采样   `adc.read()`   函数说明:进行`ADC`采样,返回采样数据   示例: ```python >>>from machine import ADC,Pin >>>adc=ADC(Pin(7)) #将GPIO 7 设置为ADC >>>adc.read()#采样 996 ``` ## 示例   `将waffle nano`的一些`GPIO`引脚设置成`ADC`,看其电压变化如何。 ```python from machine import ADC,Pin adc=ADC(Pin(7)) adc.equ(ADC.EQU_MODEL_8) adc.read() ``` - 第一行导入 `machine` 模块的硬件类 `Pin` 和数模转换类 `ADC` - 第二行把`waffle nano` 7号引脚设置为默认的`GPIO` 功能,并作为参数创建为 `ADC` 对象 - 第三行设置 `ADC` 的平均计算的采样次数为 `8` 次 - 第四行读取采样值