ARM架构学习9——LM75温度传感器+ADC转换器
一、AT24C02跨页写入问题及代码优化
- 发现当写入数据超过单页8字节边界时会出现数据回滚错误,原因是AT24C02在跨页写操作时必须先发送STOP信号再重新发送START信号。
- 在循环写入过程中加入判断逻辑:若当前地址(REG + i + 1)为8的整数倍且非最后一个字节,则插入STOP后再重新START,并更新寄存器地址为下一页起始地址。
- 针对不同容量型号(如24C04/08)需使用双字节地址指针的问题,优化函数接口,增加regLen参数指定地址长度(1或2字节),并通过循环配合右移操作实现多字节地址的正确发送。
二、LM75温度传感器接入与驱动开发
- 新实验器件LM75温度传感器的基本参数:工作电压2.7~5.5V,通过A0/A1/A2引脚配置从机地址,默认焊接至GND形成地址90h(左移后为81h)。
- 说明其核心寄存器包括只读温度寄存器(地址0x00),读取16位数据后需右移7位并乘以0.5得到实际温度值。
- I2C读取时序无需修改底层驱动,只需调整从机地址和寄存器地址即可复用现有代码框架。
三、开发环境与调试注意事项
- 警告移植的printf函数不支持浮点数输出(%f格式符无效),直接使用会导致程序卡死。
- 指出进行浮点运算前必须启用FPU协处理器,在启动文件start.s中调用enable_FPU函数,否则执行浮点指令将引发CPU死机。
- 建议分步调试:先验证原始寄存器值是否能正确读取并随温度变化,再处理数据转换和显示逻辑。
四、ADC模数转换器原理详解
- ADC的核心作用是将模拟电压信号转换为数字量,而物理量(如温度、光照)需先通过传感器转换为电压信号。
ADC的分类:
- 逐次比较ADC:精度上优于flash型ADC,速度优于双积分型ADC
- 双积分型ADC:
- flash型ADC:
- 逐次逼近型ADC:
- 逐次逼近型ADC的工作原理:利用比较器不断将参考电压二分并与待测电压比较,逐步逼近真实值。
- N位ADC的分辨率由2^N决定,采样结果可通过公式“ADC原始值 × 参考电压 / 2^N”计算得出实际电压。
- 解释了ADC的关键参数:量程(由参考电压决定)和分辨率(即ADC位数),并说明超出量程会导致削顶现象。
- V=adc原始值*参考电压/2~(adc位数)
- adc:量程:指的是adc能转换的模拟电压的范围,由参考电压决定。
- 分辨率:adc的位数。
- 提到对于超量程或微弱信号,可通过设计分压电路或放大电路进行信号调理。
五、IMX6ULL芯片ADC模块特性与寄存器配置
光照传感器原理:(光敏电阻)
- 开发板所用ADC为线性逐次逼近型,支持8/10/12位分辨率,最高采样率达1MSPS。
- 核心板原理图,确定ADC参考电压采用差分引脚(VDDA_ADC3P3H/L)以提高抗干扰能力和精度。
- ADC拥有10个外部输入通道(IN0-IN9),可通过多路选择开关进行通道切换。
- 解读关键寄存器功能:
- 控制寄存器(HC0):用于使能中断和选择输入通道,强调首次切换通道需执行“伪切换”操作以触发采样。
- 状态寄存器(R0):包含COCO标志位,表示一次转换完成,是读取数据的前提条件。
- 数据寄存器(R0):存储12位ADC原始值,低12位有效。
- 配置寄存器(CFG):可配置数据溢出覆盖使能、硬件平均功能(支持4/8/32样本平均)和高速采样模式。
- ADC具备自校准功能,可在使用前执行以提高测量精度。