共2条
1/1 1 跳转至页
AD7416 我的论文:AD7416的应用
问
AD7416的应用
刘军珺
在某些高灵敏度光电转换中,温度对光电转换器件增益影响较大,因此必须将器件及其放大电路放置在恒定温度环境中,以提高系统的稳定性。
AD7416是AD公司推出的10位数字温度传感器,其内部包括温度传感器和10位模数转换器,可将感应温度转换为0.25 ℃量化间隔的数字信号。其贴片封装体积小,适合应用在这种场所。
1. 电路原理图
如图1所示,恒温系统共有四大部分组成,单片机从数字温度传感器获取控制点的温度,如若温度高于设定温度,则启动制冷电路;若低于设定温度,则启动加热电路,以保证控制点的温度为恒定值,温度通过显示电路显示当前温度。系统原理如图2所示。
系统采用单片机89C2051,P1.2、P1.5分别接AD7416的SDA、SCL,获取10位数字温度值,通过PDC-401LMC四位液晶显示,P3.3、P3.7控制半导体热磁片加热或制冷。
2. AD7416的管脚及应用
AD7416贴片封装管脚如图3所示
表1 管脚说明
管 脚
名 称 说 明
1 SDA 双向串行数据线(开漏)
2 SCL 输入,串行时钟线
3 OTI 输出,
4 GND 接地端
5\6\7 A2\A1\A0 输入,串行总线可编程地址码
8 +VDD 电源+2.7V-+5.5V
在实际使用中,电路中我们只使用1只AD7416,因此我们将A0、A1、A2接地,使其地址为000。
AD7416 内部有5个寄存器,地址指针寄存器、温度值寄存器、工作方式设置寄存器、TOTI设置寄存器、THYST设置寄存器。我们在使用中,只使用了地址指针寄存器和温度值寄存器,在这里,我们对这两个寄存器做一详细的介绍。
2.1 地址指针寄存器(address pointer register)
地址指针寄存器是8位寄存器,其高6位为0,低2位P1P0规定如下:
P1P0为00:指向温度值寄存器(temperature value register)(只读、上电缺省);
P1P0为01:指向工作方式设置寄存器(configuration register)(可读可写);
P1P0为10:指向TOTI设置寄存器(TOTI setpoint register)(可读可写);
P1P0为11:指向THYST设置寄存器(THYST setpoint register)(可读可写);
2.2 温度值寄存器(temperature value register)
温度值寄存器是16位、只读寄存器,高10位为温度值,低6为无用。
温度值及对应的数字输出:
-128℃ 10 0000 0000
-125℃ 10 0000 1100
-100℃ 10 0111 0000
-75℃ 10 1101 0100
-50℃ 11 0011 1000
-25℃ 11 1001 1100
0℃ 00 0000 0000
+0.25℃ 00 0000 0001
+10℃ 00 0010 1000
+25℃ 00 0110 0100
+50℃ 00 1100 1000
+75℃ 01 0010 1100
+100℃ 01 1001 0000
+125℃ 01 1111 0100
+127℃ 01 1111 1100
3. AD7416的时序及I2C总线
SCL串行时钟总线脉冲周期t1>2.5us,在SCL的上升沿AD7416读总线上的数据,总线上的数据的产生到读数据间隔t2应满足t2>50ns;在SCL的下降沿AD7416送数据,SCL下降沿和数据位的产生的时间间隔t3满足t3<0;SCL、SDA脉冲的上升、下降延时时间应小于90ns,如图4所示:
AD7416的数据通讯使用的为I2C总线,它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。由于AD7416的总线接口已集成在片内,而89C2051不具备I2C总线,可以使用I2C总线接口扩展器件PCD8584扩展出I2C总线接口,或者采用软件程序模拟I2C总线的时序来完成接口功能。我们采用了后者来实现。
I2C总线可以构成多主数据传送系统,但只有带CPU的器件可以成为主器件。主器件发送时钟、启动位、数据工作方式,从器件则接收时钟及数据工作方式。接收或发送则根据数据的传送方向决定。I2C总线上数据传送时的启动、结束和有效状态都由SDA、SCL的电平状态决定,在I2C总线规约中启动和停止条件规定如下:
启动条件:在SCL为高电平时,SDA出现一个下降沿则启动I2C总线。
停止条件:在SCL为高电平时,SDA出现一个上升沿则停止使用I2C总线。
除了启动和停止状态,在其余状态下,SCL的高电平都对应于SDA的稳定数据状态。
每一个被传送的数据位由SDA线上的高、低电平表示,对于每一个被传送的数据位都在SCL线上产生一个时钟脉冲。在时钟脉冲为高电平其间,SDA线上的数据必须稳定,否则被认为是控制信号。SDA数据只能在时钟脉冲SCL为低电平期间改变。启动条件后总线为“忙”,在结束信号过后的一定时间总线被认为是“空闲”的。在启动和停止条件之间可传送的数据不受限制,但每个字节必须为8位。首先传送最高位,采用串行传送方式,但在每个字节之后必须跟一个响应位。主器件收发每个字节后产生一个时钟应答脉冲,在这期间,发送器必须保证SDA为高,由接收器将SDA拉低,称为应答信号(ACK)。主器件为接收器时,在接收了最后一个字节之后不发应答信号,也称为非应答信号(NOT ACK)。当从器件不能再接收另外的字节时也会出现这种情况。I2C总线的数据传送格式如图5所示:
I2C总线中每个器件都有自己唯一确定的地址,启动条件后主机发送的第一个字节就是被读写的从器件的地址,其中第8位为方向位,“0”(W)表示主器件发送,“1”(R)表示主器件接收。总线上每个器件在启动条件后都把自己的地址与前7位相比较,如相同则器件被选中,产生应答,并根据读写位决定在数据传送中时接收还是发送。无论是主发、主收还是从发、从收都是有主器件控制。在主发送方式下,有主器件线发出启动信号(S),接着发从器件的7位地址(SLA)和表明主器件发送的方向位1(R),即这个字节为SLA+R。在发送完这个字节后,P1.6(SCL)继续输出时钟,通过P1.7(SDA)接收从器件发来的串行数据。主器件每接收到一个字节后都要发送一个应答信号(A)。当全部数据都发送或接收完毕后,主器件应发出停止信号(P)。
4. 软件编程
我们在实际应用中,首先要由89C2051向AD7416写数据,使其地址指针为00H,即指向温度寄存器;然后89C2051要求AD7416发送温度寄存器的数值,并接收AD7416发送的数值。
使用汇编语言,89C2051和AD7416通讯的源程序:
1.89C2051向AD7416的地址指针寄存器写入00H,使其指向温度值寄存器:
ADWRITE:
LCALL ADSTAR ;“1001000”开始启动
LCALL BIT0 ;“0” 写
LCALL ADACK ;AD7416应答
LCALL ADP ;向地址指针寄存器写入“000000”
LCALL BIT0
LCALL BIT0 ;“00”为温度值寄存器
LCALL ADACK ;AD7416应答
CLR P1.2
NOP
NOP
SETB P1.5 ;结束
SETB P1.2
RET
ADSTAR:
SETB P1.5 ;开始启动
SETB P1.2
NOP
CLR P1.2
CLR P1.5
LCALL BIT1 ;“1001” “000”为本AD7416的地址
LCALL BIT0
LCALL BIT0
LCALL BIT1
LCALL BIT0
LCALL BIT0
LCALL BIT0
RET
ADACK:
SETB P1.5
NOP
NOP
CLR P1.5
NOP
RET
BIT0:
CLR P1.2
SETB P1.5
NOP
CLR P1.5
RET
BIT1:
SETB P1.2
SETB P1.5
NOP
CLR P1.5
RET
2.89C2051向AD7416读温度值
ADREAD:
LCALL ADSTAR
LCALL BIT1 ;1 READ
LCALL ADACK
LCALL RECEIV ;接收高8位
MOV 20H,A
LCALL ADACK
LCALL RECEIV ;接收低2位
ANL A,#0C0H
MOV 21H,A
LCALL BIT1
CLR P1.5
CLR P1.2
NOP
NOP
SETB P1.5 ;结束
SETB P1.2
RET
RECEIV:
MOV A,#00H
MOV R2,#08H
ADRLOOP:
JNB P1.2,ADBIT0
SETB C
AJMP RET2
NOP
NOP
NOP
JNB P1.2,ADBIT0
SETB C
AJMP RET2
ADBIT0:
CLR C
RET2:
SETB P1.5
RLC A
NOP
CLR P1.5
DJNZ R2,ADRLOOP
RET
3.数据处理
在实际应用过程中,我们发现接收的温度值稳定性欠佳,必须经过数据处理。我们采用了多次平均的方法,效果很好。在实际的计算中,为了避免复杂的计算,采用移位计算的方法切实可行。通过64×64=4096次平均后,测温精度可达到0.1℃,源程序如下:
MEASURE:
MOV R3,#00H
MOV R4,#00H
MOV R6,#64
MLOPT:
MOV R0,#00H
MOV R1,#00H
MOV R7,#64
MLOP:
LCALL DELAY
LCALL ADREAD
LCALL SHIFT
MOV A,R0
ADD A,20H
JNC ML
INC R1
ML: MOV R0,A
MOV A,R1
ADD A,26H
MOV R1,A
DJNZ R7,MLOP
MOV 21H,R0
MOV 20H,R1
LCALL SHIFT
MOV A,R3
ADD A,20H
JNC MTL
INC R4
MTL:
MOV R3,A
MOV A,R4
ADD A,26H
MOV R4,A
DJNZ R6,MLOPT
MOV 21H,R3
MOV 20H,R4
RET
SHIFT:
CLR C
MOV 26H,#00H
MOV R2,#02H
MOV A,21H
ANL A,#0C0H
SHILOP:
MOV A,21H
RLC A
MOV 21H,A
MOV A,20H
RLC A
MOV 20H,A
MOV A,26H
RLC A
MOV 26H,A
DJNZ R2,SHILOP
RET
答 1: 多少年前的东西阿? 答 2: 是呀,五年前的东西,晒太阳时翻出来了不过硬件软件都经过验证,已经是个小产品了 答 3: ADT75是新出的,和AD7416兼容,呵呵,是12位的 答 4: 有要的可以写mail给我里面有个I2C,我当时调了一周
答 5: 以前是发表在什么地方的? 答 6: 写好了,没有发表所以就拿到21来了
AD7416的应用
刘军珺
在某些高灵敏度光电转换中,温度对光电转换器件增益影响较大,因此必须将器件及其放大电路放置在恒定温度环境中,以提高系统的稳定性。
AD7416是AD公司推出的10位数字温度传感器,其内部包括温度传感器和10位模数转换器,可将感应温度转换为0.25 ℃量化间隔的数字信号。其贴片封装体积小,适合应用在这种场所。
1. 电路原理图
单 片 机 |
数字温度传感器 |
温度控制电路 |
温度显示电路 |
图1 恒温电路组成框图 |
如图1所示,恒温系统共有四大部分组成,单片机从数字温度传感器获取控制点的温度,如若温度高于设定温度,则启动制冷电路;若低于设定温度,则启动加热电路,以保证控制点的温度为恒定值,温度通过显示电路显示当前温度。系统原理如图2所示。
系统采用单片机89C2051,P1.2、P1.5分别接AD7416的SDA、SCL,获取10位数字温度值,通过PDC-401LMC四位液晶显示,P3.3、P3.7控制半导体热磁片加热或制冷。
2. AD7416的管脚及应用
AD7416贴片封装管脚如图3所示
表1 管脚说明
管 脚
名 称 说 明
1 SDA 双向串行数据线(开漏)
2 SCL 输入,串行时钟线
3 OTI 输出,
4 GND 接地端
5\6\7 A2\A1\A0 输入,串行总线可编程地址码
8 +VDD 电源+2.7V-+5.5V
在实际使用中,电路中我们只使用1只AD7416,因此我们将A0、A1、A2接地,使其地址为000。
AD7416 内部有5个寄存器,地址指针寄存器、温度值寄存器、工作方式设置寄存器、TOTI设置寄存器、THYST设置寄存器。我们在使用中,只使用了地址指针寄存器和温度值寄存器,在这里,我们对这两个寄存器做一详细的介绍。
2.1 地址指针寄存器(address pointer register)
地址指针寄存器是8位寄存器,其高6位为0,低2位P1P0规定如下:
P1P0为00:指向温度值寄存器(temperature value register)(只读、上电缺省);
P1P0为01:指向工作方式设置寄存器(configuration register)(可读可写);
P1P0为10:指向TOTI设置寄存器(TOTI setpoint register)(可读可写);
P1P0为11:指向THYST设置寄存器(THYST setpoint register)(可读可写);
2.2 温度值寄存器(temperature value register)
温度值寄存器是16位、只读寄存器,高10位为温度值,低6为无用。
温度值及对应的数字输出:
-128℃ 10 0000 0000
-125℃ 10 0000 1100
-100℃ 10 0111 0000
-75℃ 10 1101 0100
-50℃ 11 0011 1000
-25℃ 11 1001 1100
0℃ 00 0000 0000
+0.25℃ 00 0000 0001
+10℃ 00 0010 1000
+25℃ 00 0110 0100
+50℃ 00 1100 1000
+75℃ 01 0010 1100
+100℃ 01 1001 0000
+125℃ 01 1111 0100
+127℃ 01 1111 1100
3. AD7416的时序及I2C总线
SCL串行时钟总线脉冲周期t1>2.5us,在SCL的上升沿AD7416读总线上的数据,总线上的数据的产生到读数据间隔t2应满足t2>50ns;在SCL的下降沿AD7416送数据,SCL下降沿和数据位的产生的时间间隔t3满足t3<0;SCL、SDA脉冲的上升、下降延时时间应小于90ns,如图4所示:
AD7416的数据通讯使用的为I2C总线,它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。由于AD7416的总线接口已集成在片内,而89C2051不具备I2C总线,可以使用I2C总线接口扩展器件PCD8584扩展出I2C总线接口,或者采用软件程序模拟I2C总线的时序来完成接口功能。我们采用了后者来实现。
I2C总线可以构成多主数据传送系统,但只有带CPU的器件可以成为主器件。主器件发送时钟、启动位、数据工作方式,从器件则接收时钟及数据工作方式。接收或发送则根据数据的传送方向决定。I2C总线上数据传送时的启动、结束和有效状态都由SDA、SCL的电平状态决定,在I2C总线规约中启动和停止条件规定如下:
启动条件:在SCL为高电平时,SDA出现一个下降沿则启动I2C总线。
停止条件:在SCL为高电平时,SDA出现一个上升沿则停止使用I2C总线。
除了启动和停止状态,在其余状态下,SCL的高电平都对应于SDA的稳定数据状态。
每一个被传送的数据位由SDA线上的高、低电平表示,对于每一个被传送的数据位都在SCL线上产生一个时钟脉冲。在时钟脉冲为高电平其间,SDA线上的数据必须稳定,否则被认为是控制信号。SDA数据只能在时钟脉冲SCL为低电平期间改变。启动条件后总线为“忙”,在结束信号过后的一定时间总线被认为是“空闲”的。在启动和停止条件之间可传送的数据不受限制,但每个字节必须为8位。首先传送最高位,采用串行传送方式,但在每个字节之后必须跟一个响应位。主器件收发每个字节后产生一个时钟应答脉冲,在这期间,发送器必须保证SDA为高,由接收器将SDA拉低,称为应答信号(ACK)。主器件为接收器时,在接收了最后一个字节之后不发应答信号,也称为非应答信号(NOT ACK)。当从器件不能再接收另外的字节时也会出现这种情况。I2C总线的数据传送格式如图5所示:
I2C总线中每个器件都有自己唯一确定的地址,启动条件后主机发送的第一个字节就是被读写的从器件的地址,其中第8位为方向位,“0”(W)表示主器件发送,“1”(R)表示主器件接收。总线上每个器件在启动条件后都把自己的地址与前7位相比较,如相同则器件被选中,产生应答,并根据读写位决定在数据传送中时接收还是发送。无论是主发、主收还是从发、从收都是有主器件控制。在主发送方式下,有主器件线发出启动信号(S),接着发从器件的7位地址(SLA)和表明主器件发送的方向位1(R),即这个字节为SLA+R。在发送完这个字节后,P1.6(SCL)继续输出时钟,通过P1.7(SDA)接收从器件发来的串行数据。主器件每接收到一个字节后都要发送一个应答信号(A)。当全部数据都发送或接收完毕后,主器件应发出停止信号(P)。
4. 软件编程
我们在实际应用中,首先要由89C2051向AD7416写数据,使其地址指针为00H,即指向温度寄存器;然后89C2051要求AD7416发送温度寄存器的数值,并接收AD7416发送的数值。
使用汇编语言,89C2051和AD7416通讯的源程序:
1.89C2051向AD7416的地址指针寄存器写入00H,使其指向温度值寄存器:
ADWRITE:
LCALL ADSTAR ;“1001000”开始启动
LCALL BIT0 ;“0” 写
LCALL ADACK ;AD7416应答
LCALL ADP ;向地址指针寄存器写入“000000”
LCALL BIT0
LCALL BIT0 ;“00”为温度值寄存器
LCALL ADACK ;AD7416应答
CLR P1.2
NOP
NOP
SETB P1.5 ;结束
SETB P1.2
RET
ADSTAR:
SETB P1.5 ;开始启动
SETB P1.2
NOP
CLR P1.2
CLR P1.5
LCALL BIT1 ;“1001” “000”为本AD7416的地址
LCALL BIT0
LCALL BIT0
LCALL BIT1
LCALL BIT0
LCALL BIT0
LCALL BIT0
RET
ADACK:
SETB P1.5
NOP
NOP
CLR P1.5
NOP
RET
BIT0:
CLR P1.2
SETB P1.5
NOP
CLR P1.5
RET
BIT1:
SETB P1.2
SETB P1.5
NOP
CLR P1.5
RET
2.89C2051向AD7416读温度值
ADREAD:
LCALL ADSTAR
LCALL BIT1 ;1 READ
LCALL ADACK
LCALL RECEIV ;接收高8位
MOV 20H,A
LCALL ADACK
LCALL RECEIV ;接收低2位
ANL A,#0C0H
MOV 21H,A
LCALL BIT1
CLR P1.5
CLR P1.2
NOP
NOP
SETB P1.5 ;结束
SETB P1.2
RET
RECEIV:
MOV A,#00H
MOV R2,#08H
ADRLOOP:
JNB P1.2,ADBIT0
SETB C
AJMP RET2
NOP
NOP
NOP
JNB P1.2,ADBIT0
SETB C
AJMP RET2
ADBIT0:
CLR C
RET2:
SETB P1.5
RLC A
NOP
CLR P1.5
DJNZ R2,ADRLOOP
RET
3.数据处理
在实际应用过程中,我们发现接收的温度值稳定性欠佳,必须经过数据处理。我们采用了多次平均的方法,效果很好。在实际的计算中,为了避免复杂的计算,采用移位计算的方法切实可行。通过64×64=4096次平均后,测温精度可达到0.1℃,源程序如下:
MEASURE:
MOV R3,#00H
MOV R4,#00H
MOV R6,#64
MLOPT:
MOV R0,#00H
MOV R1,#00H
MOV R7,#64
MLOP:
LCALL DELAY
LCALL ADREAD
LCALL SHIFT
MOV A,R0
ADD A,20H
JNC ML
INC R1
ML: MOV R0,A
MOV A,R1
ADD A,26H
MOV R1,A
DJNZ R7,MLOP
MOV 21H,R0
MOV 20H,R1
LCALL SHIFT
MOV A,R3
ADD A,20H
JNC MTL
INC R4
MTL:
MOV R3,A
MOV A,R4
ADD A,26H
MOV R4,A
DJNZ R6,MLOPT
MOV 21H,R3
MOV 20H,R4
RET
SHIFT:
CLR C
MOV 26H,#00H
MOV R2,#02H
MOV A,21H
ANL A,#0C0H
SHILOP:
MOV A,21H
RLC A
MOV 21H,A
MOV A,20H
RLC A
MOV 20H,A
MOV A,26H
RLC A
MOV 26H,A
DJNZ R2,SHILOP
RET
答 1: 多少年前的东西阿? 答 2: 是呀,五年前的东西,晒太阳时翻出来了不过硬件软件都经过验证,已经是个小产品了 答 3: ADT75是新出的,和AD7416兼容,呵呵,是12位的 答 4: 有要的可以写mail给我里面有个I2C,我当时调了一周
答 5: 以前是发表在什么地方的? 答 6: 写好了,没有发表所以就拿到21来了
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |