【RTD】AD7793驱动程序

2023-05-16

文章目录

  • 1 前言
  • 2 AD7793驱动程序
    • 2.1 spi访问接口
    • 2.2 寄存器和常用配置值
    • 2.3 初始化
    • 2.4 原始数据获取
    • 2.5 阻值换算
  • 3 使用
  • 4 完整工程代码


1 前言

  前面文章主要描述AD7793分别与两线、三线、四线RTD连接电路原理图,及相关阻值计算方法。本文简要说明AD7793驱动程序,如何通过代码精确获取到当前RTD阻值。得到RTD阻值,进而可以通过查表法,对RTD【阻值—温度】表匹配,获得当前温度值。


相关文章:

【RTD】铂电阻测温原理与具体方法
【RTD】AD7793三线式铂电阻PT100/PT1000应用
【RTD】AD7793四线式铂电阻PT100/PT1000应用
【RTD】AD7793两线式铂电阻PT100/PT1000应用
【RTD】AD7793驱动程序
【RTD】二分法查找和分段线性插值算法在RTD中应用


2 AD7793驱动程序

测试平台:

  • MCU:STM32F1
  • SPI:SPI1(PAA、PA6、PA7)
  • CS:PA1
  • 支持:两线、三线、四线RTD

2.1 spi访问接口

  spi总线借助原有的封装接口(详情参考该文章),只需指定片选函数即可。

/* 片选函数 */
static void ad7793_spi_cs(uint8_t state)
{
    if (state)
    {
		GPIO_SetBits(GPIOA, GPIO_Pin_1);
	}
    else
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_1);
	}
}

/* 注册spi总线接口 */
int8_t ad7793_init(struct spi_bus_device *spi_bus)
{	
    GPIO_InitTypeDef GPIO_InitStructure;
	
	if (NULL == spi_bus)
	{
		return -1;
	}
	
    /* spi cs */ 
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);
	GPIO_SetBits(GPIOA, GPIO_Pin_1);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
    GPIO_Init(GPIOA, &GPIO_InitStructure);
	
    /* device init */
    ad7793_spi_dev[0].spi_cs  = ad7793_spi_cs;
    ad7793_spi_dev[0].spi_bus = spi_bus;

	return 0;
}

  调用spi总线接口实现AD7793 寄存器访问接口,后续读写寄存器都通过下面函数实现。更改为私有spi或者第三方驱动接口,只需更改里面的spi函数即可

/* 写任意位寄存器 */
static uint8_t ad7793_spi_write(uint8_t addr, uint8_t *pbuf, uint8_t size)
{
	spi_send_then_send(&ad7793_spi_dev[0], &addr, 1, pbuf, size);
	return size;
}

/* 写8位寄存器 */
static uint8_t ad7793_spi_write_byte(uint8_t addr, uint8_t data)
{
	ad7793_spi_write(addr, &data, 1);
	return 0x01;
}

/* 写16位寄存器 */
static uint8_t ad7793_spi_write_word(uint8_t addr, uint16_t data)
{
  	uint8_t buf[2] = {0};
	
	buf[0] = (data>>8)&0xff;
	buf[1] = data&0xff;
	ad7793_spi_write(addr, &buf[0], 2);
	
	return 0x02;
}

/* 写24位寄存器 */
static uint8_t ad7793_spi_write_3byte(uint8_t addr, uint32_t data)
{
  	uint8_t buf[3] = {0};
	
	buf[0] = (data>>16)&0xff;
	buf[1] = (data>>8)&0xff;
	buf[2] = data&0xff;
	ad7793_spi_write(addr, &buf[0], 3);
	
	return 0x03;
}

/* 读任意位寄存器 */
static uint8_t ad7793_spi_read(uint8_t addr, uint8_t *pbuf, uint8_t size)
{
	spi_send_then_recv(&ad7793_spi_dev[0], &addr, 1, pbuf, size);
	
	return size;	
}

2.2 寄存器和常用配置值

  我们把寄存器和常用寄存器配置值通过宏定义出来,后续配置时,通过“或”("|")的方式进行快速配置,并且提高可读性。

/* 寄存器 */
#define REG_COMM_STA	0x00	 /* 8bit,写时为通讯寄存器/读时为状态寄存器 */  
#define REG_MODE		0x08	 /* 16bit,模式寄存器 */
#define REG_CONFIG		0x10	 /* 16bit,配置寄存器 */
#define	REG_DATA		0x18     /* 24bit,数据寄存器 */
#define REG_ID			0x20	 /* 8bit,芯片ID寄存器 */
#define	REG_IO			0x28	 /* 8bit,IO寄存器	*/
#define	REG_IMBL		0x30	 /* 24bit,失调寄存器 */
#define	REG_FULL		0x38	 /* 24bit,满量程寄存器 */

/* 读写指令 */
#define READ_EN			0x40	 /* 读使能 */
#define	CONTINUE_READ	0x20	 /* 连续读 */

/* 工作模式配置 */
#define	CONTINUE_CONVER	0x0000	 /* 连续转换,默认 */
#define	SINGLE_CONVER	0x2000	 /* 单次转换 */
#define	IDLE_MODE	    0x4000	 /* 空闲模式 */
#define	LOW_POWER_MODE	0x6000	 /* 省电模式 */
#define	IZL_CALIBRATION	0x8000	 /* 内部零电平校准 */
#define	IFC_CALIBRATION	0xA000	 /* 内部满量程校准 */
#define	SZL_CALIBRATION	0xC000	 /* 系统零电平校准 */
#define	SFC_CALIBRATION	0xE000	 /* 系统满量程校准 */

/* 恒流源配置 */
#define CURRENT_OUT1_1	0x00	/* 两路电流正常输出到IO1、IO2 */
#define CURRENT_OUT1_2	0x04	/* 两路电流输出IO1、IO2互换 */
#define CURRENT_OUT1	0x08	/* 两路电流叠加输出到IO1,只对10uA和210uA有效 */
#define CURRENT_OUT2	0x0C	/* 两路电流叠加输出到IO2,只对10uA和210uA有效 */
#define CURRENT_10UA	0x01	/* 10uA电流 */
#define CURRENT_210UA	0x02	/* 210uA电流 */
#define CURRENT_1MA	    0x03	/* 1mA电流 */

/* 放大器配置 */
#define	BIPOLAR		0x0000	 /* 双极性 */
#define	UNIPOLAR	0x1000	 /* 单极性 */
#define GAIN_1      0x0000	 /* 增益1~128 */
#define GAIN_2      0x0100	 
#define GAIN_4      0x0200	 
#define GAIN_8      0x0300	 
#define GAIN_16     0x0400	 
#define GAIN_32     0x0500	 	
#define GAIN_64     0x0600	   
#define GAIN_128    0x0700	 

/* ADC配置 */
#define OUTER_VREF  0x0000	 /* 外部参考源 */
#define INNER_VREF  0x0080 	 /* 内部参考源 */
#define NO_BUF		0x0000	 /* 无缓存 */
#define USE_BUF		0x0010	 /* 使用缓存 */
#define AIN_CH1     0x0000	 /* 检测通道1~3 */
#define AIN_CH2     0x0001	
#define AIN_CH3     0x0002	

2.3 初始化

  AD7793寄存器初始化,决定后续数据计算的过程。基本而且关键的配置包括:

  • 抑制比
  • 检测极性
  • 放大器增益
  • ADC参考源
  • 检测通道
  • 激励恒流源输出
static void ad7793_register_init(void)
{
  	uint16_t mode = 0x00;
	
	/* read chip id */
	ad7793_spi_read(REG_ID, &s_ad7793_info.id, 1);
	
	/* 65db抑制 */
  	ad7793_spi_write_word(REG_MODE, 0x000A);

	if (s_ad7793_info.mode&MODE_UNIPOLAR)
	{
		mode |= MODE_UNIPOLAR;
	}
	else if (s_ad7793_info.mode&MODE_BIPOLAR)
	{
		mode |= MODE_BIPOLAR;
	}
	
	if (s_ad7793_info.gain > GAIN_128)
	{
		s_ad7793_info.gain = GAIN_128;
	}
	mode |= s_ad7793_info.gain;

	/* 双极性/无增益/外部参考源/无缓存/通道AIN1 */
	ad7793_spi_write_word(REG_CONFIG, mode|OUTER_VREF|NO_BUF|AIN_CH1);

	/* 210uA恒流源输出 */
	ad7793_spi_write_byte(REG_IO, CURRENT_OUT1_1|CURRENT_210UA);
}

2.4 原始数据获取

  从数据寄存器读取的数据即为实际检测的AD值。读取数据前,应先查询状态寄存器,根据状态寄存器判断数据转换完毕,才执行读取数据寄存器,确保数据有效性。

int8_t ad7793_read_data(int32_t *ad_value)
{
  	int8_t ret = 0;
	uint8_t temp = 0;
	uint8_t buf[3] = {0};
	
	ad7793_spi_read(REG_COMM_STA|READ_EN, &temp ,1);/* 读取转换完成状态 */
	
	if (0xbf == (temp|0xbf))
	{
		ad7793_spi_read(REG_DATA|READ_EN, &buf[0] ,3);
		*ad_value = ((buf[0]<<16) | (buf[1]<<8) | buf[2])&0xffffff;
	}
	else
	{
		/* todo,出错? */
	  	ret = -1;
	}
	return ret;
}

2.5 阻值换算

  该函数作了自适应,根据选定的模式进行计算。支持:

  • 两线、三线、四线RTD
  • 增益大小
  • 单极性、双极性
  • 参考电阻【Ref】阻值
int8_t ad7793_read_resistance(float *resistance)
{
  	int8_t ret = 0;
	int32_t ad_value = 0;
	uint8_t gain = 0;
	
	if (0 != ad7793_read_data(&ad_value))
	{
		return -1;
	}
	
	gain = 0x01<<(s_ad7793_info.gain>>8);	/* 计算增益 */
	
	/* 根据不同模式计算 */
	if (s_ad7793_info.mode&MODE_BIPOLAR)
	{
		*resistance = (float)s_ad7793_info.ref *(ad_value/0x7fffff-1) / gain;
	}
	else if (s_ad7793_info.mode&MODE_UNIPOLAR)
	{
		*resistance = (float)s_ad7793_info.ref * ad_value / 0xffffff / gain;
	}
	
	if (s_ad7793_info.mode&MODE_3LINE_RTD)
	{/* 三线RTD需要两路恒流源 */
		*resistance *= 2;
	}
	
	return ret;
}

3 使用

  驱动程序支持两线、三线、四线RTD,使用前只需根据原理图和相关参数指定struct _ad7793_info的参数即可,芯片id参数无需指定,初始化时从id寄存器获取。

struct _ad7793_info
{
	uint8_t mode;	/* 工作模式 */
	uint16_t ref;   /* 参考电阻阻值, Ω */
	uint16_t gain;  /* 增益 */
	uint8_t id;		/* 芯片id */
};

例子,一个四线RTD测量例子:
static struct _ad7793_info s_ad7793_info =
{
	.mode = MODE_BIPOLAR|MODE_4LINE_RTD,/* 双精度/4线RTD */
	.ref = 2000,	/* 2kΩ */
	.gain = GAIN_1, /* no gain */
};

  实际使用过程,还需根据具体电路、测量数据等,调整增益、电流大小、抑制参数等等,以达到最佳测量效果。

4 完整工程代码


【1】https://github.com/Prry/drivers-for-mcu

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【RTD】AD7793驱动程序 的相关文章

  • 【RTD】AD7793三线式铂电阻PT100/PT1000应用

    文章目录 1 AD7793简介2 AD7793 三线式铂电阻测量2 1 阻值计算 3 小结 相关文章 xff1a RTD 铂电阻测温原理与具体方法 RTD AD7793三线式铂电阻PT100 PT1000应用 RTD AD7793四线式铂电
  • 【RTD】AD7793两线式铂电阻PT100/PT1000应用

    文章目录 1 前言2 AD7793 两线式铂电阻测量2 1 阻值计算 3 小结 1 前言 上一篇文章描述的是RTD驱动芯片AD7793与四线式RTD连接使用方法 本文描述两线式RTD与AD7793的使用 相关文章 xff1a RTD 铂电阻
  • Linux设备驱动程序学习(19)-USB 驱动程序(四)

    编写 USB 驱动程序 xff08 本部分的一些示例源码来自drivers usb usb skeleton c xff0c 它是Linux内核为我们提供的最基础的USB驱动程序 xff0c USB骨架程序 xff09 驱动程序把驱动对象注
  • Linux驱动——设备树

    在对总线设备驱动进行详细说明时可以看出 虽然总线设备驱动可以实现驱动和设备分离 但是总线设备驱动引发另外的一个问题就是在相同的芯片不同的开发板上 当外设资源不同时需要在不同的设备文件中去定义引脚 这样就导致开发板中保留大量设备文件 为了解决
  • 【电脑蓝屏】—— inaccessible boot device

    文章目录 一 问题描述 二 问题出现场景及原因分析 1 重装系统后出现该蓝屏情况 三 问题解决方法 附件 一 问题描述 蓝屏提示 inaccessible boot device 二 问题出现场景及原因分析 1 重装系统后出现该蓝屏情况 设
  • STM32常用小驱动

    STM32常用小驱动 灯控及蜂鸣器驱动 按键消抖使用例子 蜂鸣器控制列子 数据处理校验计算类 因为疫情 最近在做红外温度检测设备 一些设备组合控制逻辑 灯控及蜂鸣器驱动 支持循环响 响多少次 响多少秒 FILE misc drv c Cre
  • 计算机操作系统的启动与加载过程

    注 uboot 嵌入式系统的bootloader 包含了BIOS的功能 相当于PC机的BIOS 引导程序
  • 程序、进程、线程联系以及进程和线程的区别和联系

    程序和进程的区别与联系 程序是一组有序的指令集合是一个静态的概念 一个程序由一组指令组成 以二进制方式存在存储器中 进程是程序及其数据在计算机上的一次运行活动 是一个动态的概念 进程的运行实体是程序 离开的程序的进程没有意义 进程是由程序
  • Ubuntu linux 手动编译安装 Realtek 8852 无线网卡驱动 非常简单 添加Manjaro教程

    由于8852是刚出的支持wifi6的无线网卡 因此只有Windows驱动 而Linux 用只能自己编译驱动 好在不麻烦 本驱动置只支持5 4及以上内核 请确认 安装必要工具 sudo apt get update sudo apt get
  • 外设驱动库开发笔记3:AD527x系列数字电位器驱动

    在一些时候我们需要使用精度更高的数字电位器来实现我们的应用 我们经常使用AD527x系列数字电位器来实现这类应用 在通常情况下 AD527x系列数字电位器完全能够满足要求 为了减少重复工作 在这里我们将分系并实现AD527x系列数字电位器的
  • 罗技驱动检测不到设备?解决方法

    罗技旗下的鼠标是很多用户都在使用的设备 需要用户安装驱动程序才能够运行 而近期有些小伙伴遇到了罗技驱动检测不到设备的情况 这该如何处理 纯净之家 win7纯净版系统 win7 ghost 纯净版 方法一 1 检测不到设备也有可能不是驱动的问
  • 【imx6ull】视频监控项目(usb摄像头+ffmepeg)

    文章目录 前言 1 总体方案介绍 2 配置v4l2驱动与UVC驱动 3 v4l2应用编程测试摄像头 4 ffmepg移植 总结 前言 参考视频 韦东山老师手把手带你从0开始自己做一个视频监控系统 1 总体方案介绍 这篇文章写的很好 很容易理
  • 主板中的Win10/win8.1 WHQL支持是否要开启

    主板中的Win10 win8 1 WHQL支持是否要开启 在新式的电脑主板上会有Windows 10 8 1 WHQL支持开启的选项 这个选项的开启和关闭分别代表什么意义呢 这其实还要从UEFI和Legacy两种不同BIOS的说起 Lega
  • rk3288 6222b 模组调试 (rtl8822cs)--wifi

    rtl8822cs 模块 wifi调试 记录 任务 在rk3288 android7 1 上移植配置 rtl8822cs 的wifi模块 思路 将厂商给的 wifi 驱动换上 并在 内核中 修改对应 makefile 和 Kconfig 以
  • linux驱动开发(四):ioctl()函数

    前文中我们介绍了应用程序通过使用虚拟文件系统VFS提供的接口 来控制字符驱动程序 完成字符驱动设备的open close read write操作 但是如果我们想进行除此以外的其他操作 拓展一些file operations给出的接口中没有
  • 应用程序如何调用驱动

    以write函数举例 详细调用流程 insmod驱动程序 申请设备名 设备号以及指定fops方法 这些可以在 proc devices中获得 从 proc devices中获得主设备号 并使用mknode命令来建立设备节点文件 这是通过主设
  • “Failed to initialize NVML

    Checking nvidia driver version with error Failed to initialize NVML GPU access blocked by the operating system 解决办法 360安
  • 应用层与驱动层通信DeviceIoControl

    驱动层与应用层通信是通过DeviceIoControl 符号定义 define DEVICE NAME L Device myDriver Driver Name define SYMBOLIC LINK NAME L DosDevices
  • linux系统把驱动编译成.ko模块 insmod动态加载

    介绍 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中 这样当 Linux 内核启动的时候就会自动运行驱动程序 第二种就是将驱动编译成模块 Linux 下模块扩展名为 ko 在Linux 内核启动以后使用 insm
  • 如何使用 Pyrtd/pythoncom 解决“pywintypes.com_error”?

    我正在尝试使用pyrtd https code google com p pyrtd Python模块用于获取可以通过RTD在Excel中获取的信息 但是 当我尝试运行示例 python 脚本 http code google com p

随机推荐

  • 华为路由器交换机常用命令(随时补充更新)

    一 视图切换 lt huawei gt 用户视图 huawei 系统视图 xff0c 在用户视图状态下输入sys进入 xff0c 在系统视图下输入quit或者return返回用户视图 huawei g0 0 1 端口视图 xff0c 从系统
  • 01路径规划问题的相关理论

    目录 1 旅行商问题 2 有能力约束的车辆路径问题 3 车辆路径主要要素特征 4 约束条件分析 5 带时间窗的车辆路径问题 6 车辆路径问题求解算法 7 小节 1 旅行商问题 旅行商问题 xff08 Traveling Saleman Pr
  • 时序数据库-3-[IoTDB]的安装与使用

    IoTDB官方文档手册 Apache IoTDB xff08 物联网数据库 xff09 是一体化收集 存储 管理与分析物联网时序数据的软件系统 Apache IoTDB 采用轻量式架构 xff0c 具有高性能和丰富的功能 xff0c 并与A
  • 【强烈推荐】基于STM32的TFT-LCD各种显示实现(内容详尽含代码)

    前言 xff1a TFT LCD模块作为人们日常生活中常见屏幕类型之一 xff0c 使用的受众面非常广阔 例如 xff1a 显示各个传感器数值 xff0c 显示精美界面 xff0c 多级化菜单系统等等都不离不开他的身影 可以说学会TFT L
  • 时序数据库-4-[IoTDB]的python3操作

    从采集到存储 xff1a 时序数据库到底怎么处理时间 xff1f iotdb官方文档手册 1 容器安装iotdb 可以使用docker volume create命令创建 docker 卷 此命令将在 var lib docker volu
  • [汇总]基于ESP32的四旋翼无人机开发纪实

    文章目录 一 项目说明1 已实现功能2 硬件配置 二 ESPlane2 0 开发笔记三 相关传感器驱动移植四 参考链接 ESPlane 项目更名为 ESP Drone 现已公开代码仓库和文档 代码仓库 xff1a https github
  • [填坑]Ubuntu安装显卡专有驱动后鼠标键盘无法使用

    问题描述 我在两个地方遇到了同样的问题 xff0c 解决方法也如出一辙 xff0c 由于没有研究源码 xff0c 暂不清楚原因 问题1描述 xff1a 为了解决Ubuntu下笔记本功耗问题 xff0c 在网友建议下我安装了bumblebee
  • uniapp-前后端开发app-系列01开篇

    系列文章目录 文章目录 系列文章目录前言一 开发工具 xff1f 二 项目架构三 具体内容实现 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 随着app和小程序的发展 有没有开发一个模版 其他端程序都能用 uniap
  • TypeError: iter() returned non-iterator of type

    在使用Python迭代器时出现错误 xff1a class Fibs def init self self a 61 0 self b 61 1 def next self self a self b 61 self b self a 43
  • 【Linux应用编程】一个异步信号处理引起死锁问题的思考

    文章目录 1 前言2 为什么会产生死锁2 1 死锁2 2 分析2 3 结论 3 避免死锁4 举一反三5 死锁例子代码6 参考文章 1 前言 最近在维护别人的代码时 xff0c 遇到一个线程死锁问题 xff0c 一番折腾 xff0c 最终定位
  • 【RT-Thread】SGM706独立看门狗软件包

    文章目录 1 简介1 1 目录结构1 2 许可证 2 芯片介绍3 支持情况4 使用说明4 1 依赖4 2 获取软件包4 3 初始化4 4 启动看门狗4 5 msh finsh测试查看设备注册通过msh启动看门狗 5 注意事项6 联系方式 1
  • 利用tldr工具再也不怕记不住Linux命令

    文章目录 1 前言2 tldr3 安装4 使用 1 前言 linux命令非常多 xff0c 少用的命令往往易忘记 xff0c 甚至常用的语法较为复杂的命令也不好记住 当然有些太复杂的命令也不需要死记硬背 xff0c 我们往往会借助man命令
  • C++中的二阶构造函数

    文章目录 1 前言2 二阶构造3 总结 1 前言 构造函数用于创建对象时对象成员的初始化 xff0c 如赋初值 申请内存 加载文件等 xff0c 即是自动完成对象的初始化任务 在C 43 43 语言中 xff0c 构造函数执行顺序是 xff
  • open函数簇与fopen函数簇区别和用法

    文章目录 1 前言2 open与fopen区别2 1 标准不同2 2 层次不同2 3 适用对象不同 xff08 返回值不同 xff09 2 4 缓冲区2 5 效率不同 3 使用方法3 1 open3 2 fopen 1 前言 linux系统
  • 基于STM32的OLED多级菜单GUI实现(简化版智能手表)

    前言 xff1a 本文的OLED多级菜单UI 为一个综合性的STM32小项目 xff0c 使用多传感器 与OLED显示屏 实现智能终端 的效果 项目中的多级菜单UI使用了较为常见的结构体索引法 去实现功能与功能之间的来回切换 xff0c 搭
  • 【RTD】铂电阻测温原理与具体方法

    文章目录 1 基本原理2 铂电阻2 1 铂电阻测温原理2 2 铂电阻类型和测量方法2 2 1 两线式铂电阻2 2 2 三线式铂电阻2 2 3 四线式铂电阻 3 小结 相关文章 xff1a RTD 铂电阻测温原理与具体方法 RTD AD779
  • 【RTD】AD7793三线式铂电阻PT100/PT1000应用

    文章目录 1 AD7793简介2 AD7793 三线式铂电阻测量2 1 阻值计算 3 小结 相关文章 xff1a RTD 铂电阻测温原理与具体方法 RTD AD7793三线式铂电阻PT100 PT1000应用 RTD AD7793四线式铂电
  • 【RTD】AD7793四线式铂电阻PT100/PT1000应用

    文章目录 1 前言2 AD7793 四线式铂电阻测量2 1 阻值计算 3 小结 1 前言 上一篇文章描述的是RTD驱动芯片AD7793特点 xff0c 以及其与三线式RTD连接使用方法 本文描述四线式RTD与AD7793的使用 相关文章 x
  • 【RTD】AD7793两线式铂电阻PT100/PT1000应用

    文章目录 1 前言2 AD7793 两线式铂电阻测量2 1 阻值计算 3 小结 1 前言 上一篇文章描述的是RTD驱动芯片AD7793与四线式RTD连接使用方法 本文描述两线式RTD与AD7793的使用 相关文章 xff1a RTD 铂电阻
  • 【RTD】AD7793驱动程序

    文章目录 1 前言2 AD7793驱动程序2 1 spi访问接口2 2 寄存器和常用配置值2 3 初始化2 4 原始数据获取2 5 阻值换算 3 使用4 完整工程代码 1 前言 前面文章主要描述AD7793分别与两线 三线 四线RTD连接电