嵌入式硬件第九弹——ARM(5)

6.I2C(IIC)

6.1 概念

6.1.1 IIC

同步串行半双工通信总线

6.1.2 IIC 硬件设计注意事项

开漏输出+上拉电阻

6.1.3 引脚输出模式表

  • 输出模式规则:

  • 推挽模式:只允许 1、2 输出方式,不允许 msl、ms2 同时打开或关闭

  • 开漏模式:只允许 2、3 输出方式,不允许 1 导通

6.2 时序

6.2.1 I2C

  1. start 信号:在总线空闲时(高电平),主机在时钟线 (SCL) 为高电平时,在数据线 (SDA) 上产生一个下降沿,称之为起始信号。
  2. 发送数据
    1. 发送数据时从机地址 + 数据流向位
    2. 发送数据时遵循 MSB 优先原则(高位优先)
    3. 在 SCL 为低电平时,只允许发送方改变数据 SDA 线,接收方不得采样 SDA
    4. 在 SCL 为高电平时,只允许接收方采样数据 SDA 线,发送方需保证 SDA 稳定。
  3. 应答 (9clock)
    1. ACK:应答(真人回复),8 个数据位 + 1 个应答位
    2. NACK:非应答(自动回复),第 9 个 SCL 为低电平时,发送方 SDA 输出高电平
  4. stop 信号:在主机不需要再通信时,主机在时钟线 (SCL) 为高电平时,在数据线 (SDA) 上产生一个上升沿,称之为停止信号。

6.2.2 一次通信

A:数据流向位

0:主机发送,从机接收

1:从机发送,主机接收

7. ADC

7.1 什么是ADC

ADC是模数转换器(Analog-to-Digital Converter)的缩写,是一种将连续变化的模拟信号 (比如电压、电流、温度转化的模拟电信号)转换成离散的数字信号的电子器件 / 电路。它是模拟系统和数字系统之间的核心桥梁,数字设备(如 MCU、处理器)无法直接识别模拟信号,需通过 ADC 将其量化为二进制数字后,才能进行采集、处理、存储和传输,常见于电压采集、传感器数据读取等场景。

7.2 ADC基准电压

ADC的基准电压是ADC进行模数转换的参考标准电压,是ADC量化模拟输入电压的 "标尺"ADC的所有量化结果,都是以基准电压为上限(单极性 ADC)或上下限(双极性 ADC)得到的相对值,基准电压的精度、稳定性直接决定 ADC 的转换精度------若基准电压漂移、波动,即使输入模拟信号不变,ADC的数字输出结果也会偏差。主流MCU的ADC基准电压可采用内部基准(如芯片自带 1.2V、2.5V、3.3V)或外部精准基准源,实际应用中需根据采集需求选择稳定的基准电压。

7.3 ADC 的工作原理

ADC的核心工作原理是采样、保持、量化、编码 四个核心步骤,将连续的模拟电压转化为二进制数字,核心是把模拟输入电压与基准电压做比例比较,再将比例值转化为离散的数字量,通用流程如下:

  1. 采样:按固定的采样频率,对连续变化的模拟输入信号进行 "快照",抽取离散的模拟电压值;

  2. 保持:将采样得到的瞬时电压值保持一段时间,保证后续量化过程中电压稳定,避免因信号变化导致量化误差;

  3. 量化 :将保持的模拟电压与基准电压进行比例运算,把连续的电压值映射为离散的整数等级(量化等级由 ADC 分辨率决定),这一步是 ADC 产生误差(量化误差)的核心环节;

  4. 编码 :将量化得到的整数等级,转化为数字系统可识别的二进制代码(也可扩展为 BCD 码等),最终输出数字信号。补充:不同类型的 ADC(如逐次逼近型、SAR 型、积分型、流水线型)核心结构不同,但均围绕这四个步骤实现,其中逐次逼近型 ADC 是 MCU 中最常用的类型(如 IMX6ULL、STM32 的片上 ADC)。

7.4 ADC 的分辨率

7.1.1 ADC分辨率

ADC 的分辨率是指ADC 能区分的最小模拟电压变化量 ,表征 ADC 对模拟信号的精细识别能力 ,通常以二进制位数(bit)表示。** ****分辨率的位数决定了 ADC 的量化等级数,**位数越高,量化等级越多,能识别的最小电压变化量越小,转换精度越高。

7.1.2 常见的分辨率

MCU / 专用 ADC 中常见的分辨率以 8/10/12 位为主,工业高精度采集会用到 16/18/24 位,具体分类:

  • 低分辨率:8 位,量化等级 256 级,多用于对精度要求较低的场景(如简易电压检测、灯光亮度采集);

  • 中分辨率:10 位、12 位,量化等级分别为 1024 级、4096 级,是嵌入式领域最常用的分辨率(如 IMX6ULL、STM32 系列片上 ADC 多为 12 位,满足工业常规采集、传感器数据读取需求);

  • 高分辨率:16 位、18 位,量化等级 65536 级、262144 级,用于工业高精度采集(如精密温度、压力、称重传感器);

  • 超高分辨率:24 位,量化等级超 1600 万级,多用于高端精密测控、仪器仪表等对精度要求极高的场景。

7.5 ADC 实际应用选择原则

  1. 首先看量程:确保要测量的信号电压范围在 ADC 的量程之内。如果信号太小,需要先用运放放大;如果信号太大,需要用电阻分压。
  2. 然后看分辨率:根据需要的测量精细度选择位数。例如,测量锂电池电压 (3.0V-4.2V),一个 12 位的 ADC(有 4096 个等级)可能就足够了,正常选 10 位。
  3. 最后看精度:在对测量结果的绝对准确性要求极高的场合(如精密仪器、科学测量),必须仔细研究数据手册中的精度指标(偏移误差、增益误差、INL、DNL),而不能只看它的位数,高精度的 ADC 价格也更高。
相关推荐
charlie1145141912 小时前
嵌入式C++教程实战之Linux下的单片机编程(6):从点亮第一盏LED开始 —— 我们为什么要用现代C++写STM32
linux·c语言·开发语言·c++·stm32·单片机
嵌入式×边缘AI:打怪升级日志2 小时前
IMX6ULL 的 LED 操作方法
stm32·单片机·嵌入式硬件
三佛科技-134163842122 小时前
家用电子血压计方案开发MCU控制芯片
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
仰泳之鹅2 小时前
【stm32进阶】定时器+ADC+DMA+乒乓缓冲区
stm32·单片机·嵌入式硬件
进击的小头2 小时前
第4篇:嵌入式处理器内核全解析:ARM Cortex-M_R_A系列核心差异与选型指南
arm开发·单片机·嵌入式硬件
Heartache boy13 小时前
野火STM32_HAL库版课程笔记-手动建立工程模板与CubeMX后续用法(重要)
笔记·stm32·单片机·嵌入式硬件
可乐鸡翅好好吃17 小时前
UUID----私有服务与公有服务
嵌入式硬件
Wave84517 小时前
Freertos中PendSV与sysTick
单片机·嵌入式硬件
jghhh0117 小时前
带红外抄板和LCD显示的单相电能表设计
stm32·单片机·嵌入式硬件