I2C、FPU 与 ADC 嵌入式开发核心知识点总结
一、I2C 代码优化与应用多字节寄存器地址兼容支持不同长度的器件寄存器地址1字节、2字节等通过倒序循环从高位到低位依次发送寄存器地址的每个字节每写入一个字节后等待发送完成标志异常时直接终止传输。LM75 温度传感器读取器件地址0x48温度寄存器地址0x00寄存器长度1字节单次读取2字节温度数据。数据处理将2字节缓存拼接为16位原始值右移7位后乘以0.5得到摄氏温度值对应0.5℃分辨率。二、ARM FPU 浮点单元使能汇编配置通过配置协处理器与FPU寄存器开启硬件浮点运算步骤如下读写CPACR寄存器将CP10、CP11域设置为完全访问权限0xF 20开放浮点协处理器访问。向FPEXC寄存器写入EN位0x40000000正式使能FPU功能。清零FPSCR寄存器所有标志位初始化浮点运算状态。三、ADC 核心知识点1. 基础概念与核心参数ADC定义模拟-数字转换器Analog-to-Digital Converter将连续变化的模拟电压信号转换为离散的数字信号供数字系统处理。基础术语模拟信号物理世界中连续变化的物理量温度、压力、电压等。数字信号离散、不连续的量化电信号。传感器探测外界物理量并将其转换为电信号电压/电流的器件。核心参数基准电压ADC量化的参考标准决定测量上限IMX6ULL由ADC_VREFH引脚提供。量程ADC可测量的输入电压范围由参考电压决定输入超量程会导致信号削顶失真甚至损坏器件。分辨率ADC的位数代表量化精细程度常见8位、10位、12位、16位N位ADC对应$2^N$个量化等级。精度测量结果的实际准确程度包含偏移误差、增益误差、INL积分非线性、DNL微分非线性等指标与分辨率不完全等同。2. 逐次逼近型ADC工作原理架构定位速度与精度均衡的主流方案速度远快于双积分型ADC精度高于Flash型ADC。核心逻辑采用二分法思想从最高位到最低位依次用基准分压与待测电压比较逐位确定数字量的每一位类似天平称重。转换示例8位ADC / 5V参考 / 3.8V待测初始用1/2满量程2.5V比较待测电压更高则该位记1基准叠加下一级权重1.25V反之记0并减去对应权重。依次对1/8、1/16 … 1/256权重电压做比较逐位判定0或1。最终得到8位量化结果1100 00100xC2 / 十进制194。电压换算通用公式$$V_{实际电压} \frac{ADC采样值}{2^{ADC位数}} \times 参考电压$$ 例12位ADC、3.3V参考时采样值n对应的电压为 $V \frac{n}{4096} \times 3.3V$。3. IMX6ULL ADC硬件与寄存器硬件资源10路模拟输入通道ADC1_IN0 ~ ADC1_IN9对应引脚GPIO1_IO00 ~ GPIO1_IO09。独立参考电压输入引脚ADC_VREFH。时钟源选择ADICLK00IPG时钟01IPG时钟二分频10保留11异步时钟ADACK。核心寄存器功能寄存器类型关键位与功能控制寄存器 HC0AIEN转换完成中断控制、ADCH通道选择切换通道自动触发一次转换状态寄存器 HSCOCO0转换完成标志1转换完成0转换进行中结果寄存器 R0低12位存放最终转换结果CDATA配置寄存器 CFG配置数据覆盖、硬件平均、触发方式、参考源、采样时间、功耗、分辨率、时钟分频通用控制寄存器 GCCAL写1启动校准读0表示校准完成、连续转换使能、硬件平均使能、DMA使能等通用状态寄存器 GSCALF校准失败标志0校准成功1校准失败需写1清零自动校准ADC内置校准机制可修正内部误差初始化时向CAL位写1启动硬件自动完成后清零该位。4. 信号调理与分压计算当被测电压不匹配ADC量程时需先做信号调理微弱信号0.001~0.02V通过运算放大器放大后再采集。高压信号通过电阻分压电路降压分压公式 $$V_{ADC输入} U_{总电压} \times \frac{R_t}{R_t R_0}$$ 其中$R_0$为分压电阻$R_t$为被测端电阻。5. 数据滤波方法ADC采样易受噪声干扰常用滤波算法均值滤波、高斯滤波、中值滤波、卡尔曼滤波、高通滤波、低通滤波。 嵌入式场景最常用均值滤波通过多次采样取平均值平滑随机噪声。6. 软件开发流程配置ADC时钟、引脚复用、参考源、分辨率、采样时间等参数。启动ADC校准等待校准完成标志。选择采样通道等待转换完成查询COCO位。读取结果寄存器执行滤波处理与电压换算。7. ADC选型原则看量程确保被测电压在量程范围内信号过小加运放放大信号过大加分压电路。看分辨率根据测量精度需求选择位数例如锂电池电压测量用12位ADC即可满足。看精度高精度场景需重点关注数据手册中的偏移误差、增益误差、INL、DNL等实际精度指标。