基于FPGA驱动DS18B20
文章目录
一、 目的
通过ds18b20实现基本的温度采集
二、 原理
1. 理论原理
1.rs232串口
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。UART是一种通用的数据通信协议,也是异步串行通信口(串口)的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。它包括了RS 232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。
串口作为常用的三大低速总线(UART、SPI、IIC)之一,在设计众多通信接口和调试时占有重要地位。但UART和SPI、IIC不同的是,它是异步通信接口,异步通信中的接收方并不知道数据什么时候会到达,所以双方收发端都要有各自的时钟,在数据传输过程中是不需要时钟的,发送方发送的时间间隔可以不均匀,接受方是在数据的起始位和停止位的帮助下实现信息同步的。而SPI、IIC是同步通信接口,同步通信中双方使用频率一致的时钟,在数据传输过程中时钟伴随着数据一起传输,发送方和接收方使用的时钟都是由主机提供的。
UART通信只有两根信号线,一根是发送数据端口线叫tx(Transmitter),一根是接收数据端口线叫rx(Receiver),对于PC来说它的tx要和对于通讯设备来说的rx连接,同样PC的rx要和通讯设备的tx连接,如果是两个tx或者两个rx连接那数据就不能正常被发送出去和接收到,所以不要弄混,记住rx和tx都是相对自身主体来讲的。UART可以实现全双工,即可以同时进行发送数据和接收数据。
RS232是UART的一种,没有时钟线,只有两根数据线,分别是rx和tx,这两根线都是1bit位宽的。其中rx是接收数据的线,tx是发送数据的线。
rx位宽为1bit,PC机通过串口调试助手往FPGA发8bit数据时,FPGA通过串口线rx一位一位地接收,从最低位到最高位依次接收,最后在FPGA里面位拼接成8比特数据。
tx位宽为1bit,FPGA通过串口往PC机发8bit数据时,FPGA把8bit数据通过tx线一位一位的传给PC机,从最低位到最高位依次发送,最后上位机通过串口助手按照RS232协议把这一位一位的数据位拼接成8bit数据。
串口数据的发送与接收是基于帧结构的,即一帧一帧的发送与接收数据。每一帧除了中间包含8bit有效数据外,还在每一帧的开头都必须有一个起始位,且固定为0;在每一帧的结束时也必须有一个停止位,且固定为1,即最基本的帧结构(不包括校验等)有10bit。在不发送或者不接收数据的情况下,rx和tx处于空闲状 态,此时rx和tx线都保持高电平,如果有数据帧传输时,首先会有一个起始位,然后是8bit的数据位,接着有1bit的停止位,然后rx和tx继续进入空闲状态,然后等待下一次的数据传输。
2. ds18b20
DS18B20使用的是1-Wire总线协议,该总线协议仅需一个控制信号进行通信。在该总线系统中,微控制器(主设备)通过设备的64位序列号来识别该总线上的设备,因为每个设备的序列号都是不同的。DS18B20可以无需外部电源供电,当数据线DQ为高时由数据线为设备供电。当总线拉高时给内部电容(Cpp)充电 ,当总线拉低时由该电容给设备供电。这种由总线给设备供电的方式称为“寄生电源”。此外,DS18B20也可以由外部电源通过VDD供电。
DS18B20的核心功能是直接温度—数字测量。其温度转换可由用户自定义为9、10、11、12位,精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率,若不设置则默认为12位的转换精度。若要测量温度,主设备必须向DS18B20发送温度转换命令[44h]才能开始温度转换。温度转换后,转换的 温度值将会保存在高速缓存器的温度寄存器中。只有通过读高速缓存器命令[BEh]才能将数据读出,数据通过1-Wire总线传输,传输顺序为低位到高位依次传输。温度数据中包含“符号”(S)位,表示温度的正负。
DS18B20的温度输出数据是在摄氏度下校准的;若是在华氏度下应用的话,可以用查表法或者常规的数据换算。温度以一个16位标志扩展二进制补码的形式存储在温度寄存器中。符号标志位(S)温度的正负极性:若S=0,则为正数;若S=1,则为负数。如果DS18B20被定义为12位的转换精度,温度寄存器中所有位都将包含有效数据。若定义为11位转换精度,则bit 0(最低位)为未定义的。若定义为10位转换精度,则bit 0和bit 1为未定义的。若定义9位转换精度,则bit 0、bit 1和bit 2为未定义的。
高速缓存器中第四个字节即为配置寄存器;用户通过改变R1和R0的值来配置DS18B20的分辨率。上电默认为R1=1以及R0=1(12位分辨率)。需要注意的是转换时间与分辨率时间是有关系的。另外寄存器中最高位和低5位作为内部使用而保留使用,不可被写入。
R1 | R0 | 转换位数 | 最大转换时间 |
---|---|---|---|
0 | 0 | 9 | 93.75ms (tconv/8) |
0 | 1 | 10 | 187.5ms (tconv/4) |
1 | 0 | 11 |