ARM学习笔记(9)

今天梳理下ARM学习里的ADC相关内容,都是嵌入式入门的基础点。

ADC即模数转换器,核心作用是把温度、压力这类连续的模拟信号,转换成处理器可识别的数字电压值。像LM75温度传感器采集的温度信号就是模拟量,必须经过ADC转换,单片机才能读取处理。

逐次逼近型ADC是最常用的一类,核心逻辑就是逐次逼近法,本质是二分查找。以5V基准电压为例,把电压区间不断对半拆分,让待测电压和区间中间值逐一比较,大于中间值记1,小于则记0,一步步缩小范围,最终逼近真实电压值。

比如待测3.2V、基准5V的场景:第一次和2.5V比较,3.2V更高,最高位记1;接着在上半区间和3.75V比较,3.2V更低,下一位记0;再和3.125V比较......以此类推,数次比较后就能得到对应的数字量。

完整的ADC转换流程分几步:先按设定的采样频率对模拟信号采样,再通过逐次逼近的方式完成量化,把连续的模拟电压映射到离散的数字刻度上,最后编码输出二进制数字结果。采样率也就是每秒采样的次数,单位Hz,按需选择即可。

再说说ADC分辨率,指的是用多少位二进制数来表示转换结果,位数越高,能划分的电压等级越精细,最小可识别的电压变化就越小。常见的有8位(对应256级)、10位(1024级)、12位(4096级),16位的一般多用于DSP场景。

实际电压换算很简单,拿10位ADC、5V基准举个例子:

uint16_t adc_raw = 650; // ADC采样原始值

float vref = 5.0f; // 基准电压

float voltage = (float)adc_raw / 1023 * vref;

采样得到的原始数据通常存在误差,一般都会做滤波处理,常用的滤波算法有均值滤波、高通滤波、低通滤波,对精度要求高的场景还会用到带预测性的卡尔曼滤波。

顺带提两个常用的I2C外设,一个是AT24C02型EEPROM,容量2Kbit即256字节,设备地址0x50;另一个是LM75温度传感器,工作电压2.7V~5.5V,测温范围-55℃~125℃,精度±2~±3℃,9位分辨率对应0.5℃步进,设备地址0x48,温度寄存器地址0x00,读取2字节数据后舍弃低7位,就能得到当前温度值,都是入门常练的器件。

都是很基础的概念,但做嵌入式开发这些都是底层根基,先吃透没坏处。

相关推荐
赵民勇1 小时前
glib-compile-schemas命令详解
linux·运维
铅笔小新z1 小时前
【stm32】中断与异常
stm32·单片机·嵌入式硬件
小小、码农1 小时前
〖Linux文件系统〗:彻底打通文件 IO 全链路
linux·开发语言·数据结构·c++·系统
大侠归来1 小时前
cJSON 源码解析:parse_string 函数深入剖析
linux·网络·算法
小小、码农1 小时前
〖Linux进程间通信〗IPC全家桶:匿名管道、FIFO、共享内存、消息队列与信号量一篇打通
linux·运维·服务器
阳光九叶草LXGZXJ1 小时前
达梦数据库-学习-67-SSL加密认证
linux·运维·数据库·sql·学习·ssl
東隅已逝,桑榆非晚1 小时前
priority_queue的介绍和使用
c++·经验分享·笔记·学习
驭渊的小故事1 小时前
MyBatis 入门:从 JDBC 到优雅操作数据库(一)
笔记·sql·spring
量子-Alex1 小时前
【大模型强化学习后训练】强化学习后训练算力应投向何处?模型规模、搜索、学习与反馈
人工智能·学习