在电子设备的开发中,温湿度的监测是一个重要的环节。AHT10 作为一款高精度的温湿度,凭借其出色的性能和广泛的适用性,成为了众多开发者的。而基于 FPGA(现场可编程门阵列)来驱动 AHT10 温,能够充分发挥 FPGA 的灵活性和可定制性,实现高效、准确的温湿度数据采集。下面,我们将详细介绍基于 FPGA 的 AHT10 驱动设计。
AHT10 传感器输出经过标定的数字信号,并通过标准的 I2C 接口传输数据。其相对湿度的分辨率可达 0.024% RH,工作范围为 0~100% RH;温度值的分辨率为 0.01℃,工作范围为 - 40~85℃。该传感器的供电范围为 1.8~3.6V,推荐使用 3.3V 供电。
I2C 通信协议是 AHT10 传感器与 FPGA 进行数据交互的基础。其具体内容如下:
- 起始位:主机在时钟高电平期间拉低总线,表示通信开始。
- 数据位:主机在时钟低电平期间发送数据,在高电平期间保持数据不变;从机在时钟高电平期间采样数据。
- 应答位:主机收到数据后发送应答信号,从机才会发送下一字节数据。
- 停止位:主机在时钟高电平期间释放总线,在低电平期间保持不变,表示通信结束。
可使用的 I2C 通信模式有经典型和高速模式,经典模式时钟周期是 250us,高速模式时钟周期是 100us。


- 上电启动:上电启动传感器后,需要先等待 40ms,让设备开始正常工作。
- 获取状态字节:发送 8’h71 来获取状态字节,通过状态寄存器判断传感器是否已校准。
- 初始化(若未校准):若未校准,发送 8’hE1 进行初始化,然后发送 8’h08 和 8’h00。
- 触发测量:发送 8’hAC,接着发送 8’h33 和 8’h00。
- 等待测量完成:测量命令发送完成后,等待 80ms,用于温湿度的测量。
- 读取状态寄存器:发送命令 8’h71,读取状态寄存器是否处于空闲状态(bit7 => idle)。
- 读取温湿度数值:若处于空闲状态,可直接读取之后六个字节的温湿度数值。

接收到的湿度值和温度值需要进行转换,以得到实际的温湿度数值。
- 相对湿度转换公式:RH[%]=(SRH/220)
- 温度转换公式:
整个模块的设计流程如下:
- 上位机发送命令:上位机通过 UART 发送命令,打开 AHT10 驱动控制模块、显示模块以及串口模块。
- 设备驱动控制:设备驱动控制模块使用 I2C 与 AHT10 进行通信,读取温湿度值。
- 数据处理:将读取的温湿度值先进行数值转换并取整,然后转换成 ASCII 码,方便查看温湿度值。
- 数据输出:将数据缓存到 FIFO 中,当缓存了一组完整的温度值数据后进行输出,可发送给上位机,也可直接通过数码管显示。


I2C 接口模块采用状态机实现数据的读写操作,其状态转移过程如下:
- 从空闲状态可以先发送起始位,再读写一个字节数据,或直接读写一个字节数据。
- 接着进行收发应答位操作。
- 发送停止位,完成一组数据的读写。
数据的传输速率选择为 50M/250 Bps。
AHT10 控制模块负责整个传感器的配置和通信过程,通过状态机实现各个状态的转移,包括启动、初始化、校准检查、触发测量、等待测量完成和读取数据等。
- 数据转换:将温湿度数值按照特定格式转换,例如:
temp_data_r<=(((temp_data?2000)>>12)?(500))
hum_data_r<=((hum_data?1000)>>12) - ASCII 码转换:将转换后的温湿度数据转换成 ASCII 码,方便显示和传输。
- FIFO 缓存与输出:将数据通过 FIFO 缓存完整的 22 字节数据后输出,同时还可以将数据转换成 BCD 码显示到数码管上。