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位,就能得到当前温度值,都是入门常练的器件。

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

相关推荐
Godspeed Zhao3 小时前
从零开始学AI25——无监督学习之层次聚类
学习·机器学习·聚类
默|笙4 小时前
【Linux网络】网络层协议 IP(1)理解报头、网段划分
linux·网络·tcp/ip
修己xj7 小时前
nslookup 使用指南:两种模式与常用查询技巧
linux
唠玖馆9 小时前
文件系统详解
linux·文件系统·ext2
shimly1234569 小时前
(done) 嵌入式硬件电路图 (2) 熟悉常用元器件
嵌入式硬件
GeW9 小时前
当Linux内核开始“确定性”,制造高端化才有了底层语法
linux
David猪大卫10 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger10 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
星恒随风10 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
fengci.11 小时前
CTF2MISC中等部分
开发语言·前端·学习