100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于I2C协议的AHT20温湿度传感器的数据采集

基于I2C协议的AHT20温湿度传感器的数据采集

时间:2020-07-17 01:44:42

相关推荐

基于I2C协议的AHT20温湿度传感器的数据采集

文章目录

一、I2C相关1、I2C总线简介工作原理总线特征2、I2C协议简介软件I2C硬件I2C二者比较二、基于I2C的AHT20温湿度采集实验AHT20简介1、实验要求2、实验元件3、实验过程连接实验元件实验代码烧录程序温湿度采集四、总结

一、I2C相关

1、I2C总线简介

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。I2C总线物理拓扑结构

I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。

工作原理

SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出,需通过上拉电阻接电源VCC。

当总线空闲时,两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路。在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容,而线路中电容会影响总线传输速度。当电容过大时,有可能造成传输错误。所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

总线特征

在硬件上,I2C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为I2C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。

I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。

I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时间。

连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。

总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。

2、I2C协议简介

I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地使用在系统内多个集成电路(IC)间的通讯。

I2C协议包括“软件I2C”和“硬件I2C”

软件I2C

芯片的两个GPIO引脚分别用作SCL及SDA,按照I2C的时序要求,直接控制引脚的输出信号(若是接收数据时则读取 SDA 电平),就可以实现I2C通讯。由于是直接控制GPIO引脚的高低电平产生通讯时序,需要由CPU控制每个时刻的引脚状态,所以称为“软件模拟协议”方式即软件I2C方式。

硬件I2C

硬件I2C对应芯片上的I2C外设,具有相应的I2C驱动电路,其所使用的I2C管脚也是专用的,因而效率要远高于软件模拟的I2C,但是程序较为繁琐。硬件I2C是直接调用内部寄存器进行配置。

对于硬件I2C来说,它需要I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生I2C的通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作负担,并且使软件开发更简单。

二者比较

硬件I2C用法比较复杂,模拟I2C的流程更清楚一些。硬件I2C速度比模拟快,并且可以用DMA。硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册。因为固件I2C的端口是固定的,所以会有所区别。模拟I2C可以在任何管脚上,而硬件只能在固定管脚上。

软件I2C是程序员使用程序控制SCL、SDA线输出高低电平,模拟I2C协议的时序。一般较硬件I2C稳定,但是程序较为繁琐,但不难。 硬件I2C程序员只要调用I2C的控制函数即可,不用直接的去控制SCL、SDA高低电平的输出。但是有些单片机的硬件I2C不太稳定,调试问题较多。

如何区分软件I2C和硬件I2C

可以看底层配置,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否则就是模拟。可以看IIC写函数,看里面有没有调用现成的函数或者给某个寄存器赋值,如果有,则肯定是固件IIC功能,没有的话肯定是数据一个bit一个bit模拟发生送的,肯定用到了循环,则为模拟。根据代码量判断,模拟的代码量肯定比固件的要大。

二、基于I2C的AHT20温湿度采集实验

AHT20简介

AHT20是国内奥松生成的I2C接口的MEMS温湿度传感器,ADC位数为20Bit,具有体积小、精度高、成本低等优点。

由于AHT10/15/20 具有国产化、体积小、精度高、成本低等特点,可以替代 DHT11/DHT12/AM2320/SHT20/SHT30,单芯片价格在¥2~3,体积小巧很轻松嵌入到产品上。

1、实验要求

每隔2秒钟采集一次温湿度数据

并通过串口发送到上位机(win10)

2、实验元件

AHT20集成式温湿度传感器

野火指南者开发板

3、实验过程

连接实验元件

将AHT20温湿度传感器与野火指南者开发板连接

管脚连接:

连接好后如下

实验代码

源代码地址链接:/Thee24LYJ/STM32_AHT20

打开USER文件中的keil文件

main.c程序如下

#include "led.h"#include "delay.h"#include "temhum.h"#include "sys.h"#include "usart.h"int main(void){u32 CT_data[2]={0};volatile float hum=0,tem=0;delay_init();//延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口初始化为115200LED_Init();//LED端口初始化temphum_init();//ATH20初始化 while(1){AHT20_Read_CTdata(CT_data); //不经过CRC校验,直接读取AHT20的温度和湿度数据 hum = CT_data[0]*100*10/1024/1024; //计算得到湿度值(放大了10倍)tem = CT_data[1]*200*10/1024/1024-500;//计算得到温度值(放大了10倍)printf("湿度:%.1f%%\r\n",(hum/10));printf("温度:%.1f度\r\n",(tem/10));printf("\r\n");//延时2s,LED闪烁提示串口发送状态LED=0;delay_ms(1000);LED=1;delay_ms(1000);}}

编译运行,生成.hex文件

烧录程序

用USB线将指南者开发板与电脑相连

打开mcuisp烧录软件,选中要进行烧录的.hex文件,进行如下设置

烧录成功

温湿度采集

打开串口调试助手查看温湿度

每隔2秒钟采集一次温湿度数据:

捂住温湿度传感器,数据发生改变:

四、总结

以上便完成基于I2C硬件协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。