总结:
传感器分两种有数字量传感器和模拟量传感器。数字量直接连接单片机的数字接口,他们通过一些数字通信协议传输数据。模拟量的是接模拟引脚,通过与所测量物理量成比例的电压信号来读取数据
在最近的毕设过程中,用到了DHT11温湿度传感器,偶然间想到,它连接的单片机的数字引脚,在我的印象中数字引脚只能接收发送高低电平,然后就不太明白他是怎么实现读取具体的数据,查阅之后,记录如下。
目录
一、单片机的数字接口
单片机的数字接口通常指的是单片机上的通用输入输出(GPIO)引脚。这些引脚可以被配置成输入或输出模式:
1.输出模式:当GPIO配置为输出模式时,单片机可以通过这些引脚向外部设备发送高电平或低电平信号。这可以用来控制LED灯、继电器、光耦合器等。
2.输入模式:当GPIO配置为输入模式时,单片机可以读取由外部设备发送到这些引脚的数字信号,通常是高电平或低电平。例如,它可以检测按钮是否被按下、是否有其他设备发送信号等。
GPIO引脚处理的信号是数字信号,也就是说它们只能识别两种状态:高电平(通常对应于单片机的供电电压,如3.3V或5V)和低电平(通常是0V)。
此外,一些单片机的GPIO引脚还支持特殊的功能,包括:
- PWM(脉冲宽度调制)输出,用于模拟模拟信号,例如调控电机速度或LED亮度。
- 外部中断输入,用于响应外部事件触发的中断。
- 串行通讯接口,如I2C、SPI和UART,这些接口可以通过特定的GPIO引脚实现。
- 特定的定时器或计数器功能。
需要注意的是,不同的单片机,其GPIO的具体电压等级和承受的电流能力可能会有所不同,使用时需要参照单片机的数据手册以确保正确安全地操作。
如果单片机的数字接口设置成输入模式,它读取外部设备发来的高电平或低电平,那单片机是怎么用数字接口读取温度传感器数据的呢?
二、读取数字量传感器数据
与数字接口相连的是数字量传感器,数字温度传感器通常通过数字信号方式与单片机通信。这些传感器内部已经将温度值转换为数字格式,通过以下几种常见的数字通讯协议之一来传输数据:
1.SPI(串行外设接口):一种同步串行数据总线,通常需要四根线,其中包括MISO(主设备输入/从设备输出)、MOSI(主设备输出/从设备输入)、SCK(时钟信号)和CS(片选信号)。
2.I2C(Inter-Integrated-Circuit):一种同步、多主设备的串行通信总线,通常需要两条线:SDA(数据线)和SCL(时钟线)。
3.1-Wire:一种由DallasSemiconductor设计的串行通信总线系统,只需要一条数据线来进行通信。
4.UART(通用异步收发传输器):用于异步串行通信。
2.1 DS18B20温度传感器
例如,使用DS18B20温度传感器(它使用1-Wire通讯协议),单片机通过GPIO引脚发送特定的序列来初始化传感器,然后按照1-Wire协议以数字形式读取温度数据。
这里是一个读取数字温度传感器数据的基本步骤:
1.初始化通讯协议:首先,单片机需要通过其数字接口初始化与温度传感器通信的协议(如SPI、I2C、1-Wire等)。
2.发送读取命令:单片机通过该数字接口发送读取命令给温度传感器。
3.传感器响应:温度传感器根据单片机发送的命令,将其内部测得的温度值转化为数字数据,并通过刚才初始化的通信协议发送给单片机。
4.单片机读取数据:单片机通过设置好的数字接口读取传送过来的数字数据。
5.数据处理:单片机接收到数字数据后,可能需要进行一些转换(如根据传感器手册给出的转换公式将原始数字数据转换为温度值),最后单片机得到一个温度的数字表示,可以用于显示、存储或进一步的处理。
需要注意的是,温度传感器的类型和使用的通讯协议不同,具体的实现细节和步骤也会有所不同。总之,单片机通过GPIO引脚与数字温度传感器通信,并能读取转换后的数字温度数据以用于后续处理。
2.2 DHT11温湿度传感器
DHT11是一款常用的温湿度传感器,它使用的是一种简化的单总线协议,这种协议不是像I2C或SPI这样的标准通讯协议,而是DHT11特有的通信方式。它只需要单片机上的一个GPIO引脚即可进行数据的发送和接收。
这里是DHT11数据通信的基本步骤:
1.启动信号:单片机将数字IO引脚配置为输出模式,并输出低电平,持续18毫秒以上,以确保DHT11能检测到启动信号。
2.等待DHT11响应:单片机输出启动信号后,将GPIO引脚配置为输入模式,并等待DHT11的响应。
3.DHT11响应信号:DHT11检测到启动信号后,会保持低电平一段时间(约20-40微秒),然后拉高电平(约40微秒),接着再次拉低电平,这表示DHT11开始传输数据。
4.数据传输:DHT11以40个比特的形式发送数据。每个比特的起始都是50微秒的低电平,高电平的持续时间则表示比特的值。如果高电平维持约70微秒,那么比特值为1;如果高电平维持约26-28微秒,则比特值为0。
5.数据格式:传输的40位数据包括湿度整数部分、湿度小数部分、温度整数部分、温度小数部分以及校验和。
6.数据接收:单片机必须正确地测量每个比特的高电平持续时间,以解码出二进制数据。
7.校验和验证:最后一个字节是前四个字节的简单求和校验和。单片机读取数据后,会计算这四个字节的和,并与校验和字节进行比对,以验证数据的完整性。
在这个过程中,时序的控制非常重要,因为DHT11对信号的时间敏感度很高。通常情况下,对于不同的单片机平台都会有针对DHT11通信协议编写好的库或例程,可以直接调用这些库来读取数据,避免直接处理复杂的时序问题。
三、读取模拟量传感器数据
模拟传感器通常输出一个与所测量物理量成比例的电压信号,单片机通过其内部的模拟/数字转换器(ADC)来读取这个模拟信号,并将其转换成数字值以供进一步处理。以下是模拟传感器与单片机模拟引脚相连时读取数据的一般步骤:
1.连接传感器:将模拟传感器的输出引脚连接到单片机的ADC引脚上。如果传感器需要供电,还需要连接适当的电源和地线。
2.配置ADC:在单片机上配置ADC模块。这通常包括设置参考电压(用于确定转换后的数字值的最大和最小值)、选择适当的分辨率(如10位、12位等)、设置采样速率等。
3.校正:如果需要,执行任何必要的校正步骤来确保ADC读数的准确性。
4.启动转换:通过设置单片机上的相应控制寄存器来启动AD转换。
5.等待转换完成:这可能包括轮询一个状态位,直到它表示转换已完成,或者如果ADC支持中断,则等待转换完成中断。
6.读取值:一旦转换完成,从ADC数据寄存器中读取数字值。
7.数据转换:将读取的数字值转换为实际的物理量。这通常涉及将ADC值映射到传感器的输出范围,并考虑到分辨率和参考电压。例如,如果ADC是10位的,它可以输出0到1023之间的值(2^10=1024)。如果参考电压是5V,那么一个读数为512的值表示传感器测量的电压接近2.5V。
8.使用数据:处理转换后的数据,如显示、存储或用于某种控制逻辑。
ADC读取模拟信号的精确细节(包括初始化步骤、执行转换的确切方式和读取值)将依赖于所使用的单片机的具体硬件和软件接口。查看单片机的数据手册和参考文档通常是了解如何实现这些步骤的必要步骤。