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

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

相关推荐
GeW1 小时前
新质生产力路线图:从Linux到数据库,企业落地要点都在这
linux
果壳science1 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
IMPYLH1 小时前
Linux 系统备份与镜像
linux·服务器·网络
qetfw1 小时前
Bash 字符串处理:参数展开、序列与脚本执行方式
linux·开发语言·chrome·bash
hhwyqwqhhwy1 小时前
设备树之 provider 和 consumer
java·linux·前端
桀人2 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
aaa最北边2 小时前
Linux 上的交叉编译
linux·运维·服务器
大叔学Linux3 小时前
FreeRTOS任务切换笔记
arm开发·笔记
小张成长计划..3 小时前
【Linux】27:日志
linux·运维·服务器
别动我齐刘海3 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人