打印

求教用AD7705测温过程中遇到的问题

[复制链接]
3458|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
winddancer|  楼主 | 2011-9-26 17:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用K型热电偶,mv电压信号经过放大以后作为AD7705的输入。
AD7705的工作模式是单通道,有缓冲,双极性,选择内部增益为32,环境温度用LM75A测量。
首先想请教大家的是以下工作原理对不对:
第一步是通过LM75A采集到环境温度,通过查表,将温度转换成对应的mv电压值;然后再利用AD7705采集到K型热电偶热端的采样值,通过线性转换得到对应的mv电压值;第三步就是把两个电压值加起来,得到的结果通过查表得出实际的温度值。

如果上述工作的原理是对的,我在这个过程中遇到以下几个问题想请教:
1. 将AD7705第一通道的两个输入端AIN+和AIN-短接,即输入端为0mv时,能得到的采样值,假定为0x8020(因为会随着温度变动),在输入端为参考电压2.5V时得到的采样值是0xFFFF(这个是确定的,而且不论增益是多大都是一样),假设我现在采样得到的一个值是0x9000,那我要计算输入电压时是否就按照下面这个线性转换公式计算:
realmvlot=(0x9000-0x8020)*2500/(0xFFFF-0x8020)?
还是需要考虑增益?
总感觉这里的0x8020和0x9000是经过32倍放大的,而0xFFFF却好像和增益没有什么关系,所以不应该这样线性化,而应该是另外再找到一点来取代满标度这点来做线性化?

2. 我在采样0mv电压对应的AD值时,直接用导线将输入端短接得到的采样值(0x8020)和在室温下接上热电偶的热端得到的采样值(0x83xx)有一定的差距,我的理解是:此时热电偶的热端和冷端同处一个室温环境,热端输出应该也是0mv(实际测量也是0mv),那此时得到的采样值应该也是0x8020才对。这样的理解不知是否正确,请各位指正。

3. 即使在用导线直接将输入端短接时,随着温度的变化,采样得到的值总有一定的变化(温度相差一度时,值相差10左右),这是不是就是所谓的温漂?虽然热电偶的冷端和热端有一点距离,但是不超过一米,而且也是用补偿线连接过来的,另外在每次读取7705的数据前都有做一个自校准,不知道该怎么解决这个问题(主要是从软件上)?

4. 在看7705的datasheet的时候除了看到自校准,还看到系统校准,于是在开始的时候也试着做过零标度和满标度校准,做零标度时能够读到一个24位的数据,但是做满标度校准的时候始终无法得到一个24位的数据,后来在网上也看到有人说温漂不是靠校准来解决的,所以就放弃了。
但还是把校准的程序贴出来,请做过的大虾们指教一下。
ResetAD7705();

//首先做自校准
WriteByte7705( SETREG_WCMD );
WriteByte7705( SLFClb );  //自校准,32倍增益,buf=1,双极性
DelayNS(5);
while( (IO1PIN & AD_DRDY) == AD_DRDY)
{
  ;
}
//然后做零标度校准
WriteByte7705( SETREG_WCMD );  //select setup register for writing
WriteByte7705( ZSClb );    //zero calibration
DelayNS(5);
while( (IO1PIN & AD_DRDY) == AD_DRDY)
{
  ;
}
//读取24位零标度数据并将它写入零标度寄存器
WriteByte7705( OFFSET_RCMD );
ZSData = ReaddWord7705();
WriteByte7705(OFFSET_WCMD);
WriteddWord7705(ZSData);
//做满标度校准
WriteByte7705( SETREG_WCMD );  //select setup register for writing
WriteByte7705( FSClb );    //full calibration
DelayNS(5);
while( (IO1PIN & AD_DRDY) == AD_DRDY)
{
  ;
}
//读取24位满标度数据并写入满标度寄存器
WriteByte7705( GAIN_RCMD );
FSData = ReaddWord7705();
WriteByte7705(GAIN_WCMD);
WriteddWord7705(FSData);

不知道上面出现偏差的问题是否必须要用系统校准来消除?

从开始做这个东西断断续续都有快半年了,始终过不去,请达人释疑,万分感谢!

相关帖子

沙发
gx_huang| | 2011-9-26 18:26 | 只看该作者
没有用过7705,但是可以就测量原理告诉你实际步骤:
1、传感器短路,也就是输入0mV电平(对应0度),记录YL=ADC值。
2、传感器输入满度时电压,比如50mV(假设对应1000度),记录YH=ADC值。
3、接入实际传感器,测得Y=ADC值。如果冷端温度是0,传感器是线性的,则:
   温度T=(Y-YL)*1000/(YH-YL)
    并且知道在0度附近,温度变化1度对应的ADC值是(YH-YL)/1000。
4、假设冷端温度不是0,是X度,假设传感器基本是线性的,则对应的ADC值是X*(YH-YL)/1000
    也就是新的Y=Y+X*(YH-YL)/1000
   再根据第3步的公式计算温度就可以了。
5、注意:由于传感器是非线性的,冷端补偿和后续计算都要考虑非线性的影响。
   这些都是纯粹的数学功底了,就不说了。

使用特权

评论回复
板凳
winddancer|  楼主 | 2011-9-27 20:04 | 只看该作者
多谢gx_huang的回复!
你说的这些其实都可以算作是数学问题,这部分原理我也知道的。
只是我就想具体到热电偶的应用以及AD7705这块片子应用问题。
不过还是要谢谢你的解答。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

1

粉丝