0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

51 驱动 TM7705 模块 AD 采集

jf_88434166 来源:jf_88434166 作者:jf_88434166 2026-05-06 10:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、TM7705 简介

在这里插入图片描述

TM7705 是应用于低频测量的 2/3 通道的模拟前端。该器件可以接受直接来自传感器的低电平的输入信号,然后产生串行的数字输出。利用 Σ-Δ 转换技术实现了 16 位无丢失代码性能。选定的输入信号被送到一个基于模拟调制器的增益可编程专用前端。片内数字滤波器处理调制器的输出信号。通过片内控制寄存器可调节滤波器的截止点和输出更新速率,从而对数字滤波器的第一个陷波进行编程。TM7705 是双通道全差分模拟输入,带有一个差分基准输入。
TM7705 是用于智能系统、微控制器系统和基于 DSP 系统的理想产品。其串行接口可配置为三线接口。增益值、信号极性以及更新速率的选择可用串行输入口由软件来配置。该器件还包括自校准和系统校准选项,以消除器件本身或系统的增益和偏移误差。

特点:
2个全差分输入通道的ADC
16位无丢失代码
0.003%非线性
可编程增益前端
增益:1~128
三线串行接口
有对模拟输入缓冲的能力
2.7~3.3V或4.75~5.25V工作电压
3V电压时,最大功耗为1mW
等待电流的最大值为8μA

二、引脚功能

SCLK串行时钟
MCLK IN时钟信号输入
MCLK OUT反相时钟信号输出
CS片选
RESET复位
AIN1+差分模拟输入通道 1 的正输入端
AIN2+差分模拟输入通道 2 的正输入端
AIN1-差分模拟输入通道 1 的负输入端
AIN2-差分模拟输入通道 2 的负输入端
REF IN基准输入端
DRDY逻辑输出
DOUT串行数据输出端
DIN串行数据输入端
VDD电源电压,+2.7V~+5.25V
GND内部电路的地电位基准点

三、寄存器介绍

TM7705 片内包括 8 个寄存器,这些寄存器通过器件的串行口访问

1.通信寄存器 (RS2、RS1、RS0 = 0、0、0)

通信寄存器是一个 8 位寄存器,既可以读出数据也可以把数据写进去。所有与器件的通信必须从写该寄存器开始。写上去的数据决定下一次读操作或写操作在哪个寄存器上发生。一旦在选定的寄存器上完成了下一次读操作或写操作,接口返回到通信寄存器接收一次写操作的状态。这是接口的默认状态,在上电或复位后,TM7705 就处于这种默认状态等待对通信寄存器一次写操作。
在这里插入图片描述
在这里插入图片描述

2.设置寄存器(RS2、RS1、RS0 = 0、0、1)

设置寄存器是一个 8 位寄存器,它既可以读数据又可将数据写入
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

3.时钟寄存器(RS2、RS1、RS0 = 0、1、0)

时钟寄存器是一个可以读/写数据的 8 位寄存器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.数据寄存器 (RS2、RS1、RS0 = 0、1、1)

数据寄存器是一个 16 位只读寄存器,它包含了来自 TM7705 最新的转换结果。如果通信寄存器将器件设置成对该寄存器写操作,则必定会实际上发生一次写操作以使器件返回到准备对通信寄存器的写操作,但是向器件写入的 16 位数字将被 TM7705 忽略。

5.测试寄存器 (RS2、RS1、RS0 = 1、0、0)

测试寄存器用于测试器件时。建议用户不要改变测试寄存器的任何位的默认值 (上电或复位时自动置入全 0),否则当器件处于测试模式时,不能正确运行。

6.零标度校准寄存器 (RS2、RS1、RS0 = 1、1、0)

TM7705 包含几组独立的零标度寄存器,每个零标度寄存器负责一个输入通道。它们皆为 24 位读/写寄存器,24 位数据必须被写之后才能传送到零标度校准寄存器。零标度寄存器和满标度寄存器连在一起使用,组成一个寄存器对。每个寄存器对对应一对通道,见表 7。当器件被设置成允许通过数字接口访问这些寄存器时,器件本身不再访问寄存器系数以使输出数据具有正确的尺度。结果,在访问校准寄存器 (无论是读/写操作 )后,从器件读得的第一个输出数据可能包含不正确的数据。此外,数据校准期间,校准寄存器不能进行写操作。这类事件可以通过以下方法避免:在校准寄存器开始工作前,将模式寄存器的 FSYNC位置为高电平,任务结束后,又将其置为低电平。

7.满标度校准寄存器 (RS2、RS1、RS0 = 1、1、1)

TM7705 包含几个独立的满标度寄存器,每个满标度寄存器负责一个输入通道。它们皆为 24 位读/写寄存器,24 位数据必须被写之后才能传送到满标度校准寄存器。满标度寄存器和零标度寄存器连在一起使用,组成一个寄存器对。每个寄存器对对应一对通道,见表 7。当器件被设置成允许通过数字接口访问这些寄存器时,器件本身不再访问寄存器系数以使输出数据具有正确的尺度。结果,在访问校准寄存器 (无论是读/写操作 )后,从器件读得的第一个输出数据可能包含不正确的数据。此外,数据校准期间,校准寄存器不能进行写操作。这类事件可以通过以下方法避免:在校准寄存器开始工作前,将模式寄存器的 FSYNC位置为高电平,任务结束后,又将其置为低电平。

四、部分功能介绍

1.模拟输入

TM7705 包括 2 个模拟输入对,即 AIN(+ ), AIN (-)和 AIN2(+),AIN2(-)。输入对提供可编程增益、可处理单、双极性输入信号的差分输入通道。应注意,双极性输入信号以各自的 AIN(- )端为参考。 TM7705 包括 3 个伪差分模拟输入对,AIN 1 、AIN2 和 AIN3,这些输入对以器件的 COMMON 输入端为参考。
无论是单极性还是双极性电压,TM7705 的模拟输入端都能接受。双极性输入并不表示器件能够处理模拟输入端的负电压,因为模拟输入电压不能小于-30mV,以确保器件的正常工作。输入通道是全差分的。因此,对于 TM7705,AIN(+)输入电压以各自的 AIN 1(-)为基准;对于 TM7706,加到模拟输入通道的电压以 COMMON 为基准

2.基准输入

REFIN(+)和 REFIN(-)为 TM7705 提供差分基准输入功能,差分输入的共模范围是 GND~VDD。当TM7705 以 5V 电源电压工作时,基准电压为+2.5V;电源电压为 3V 时,基准电压为+1.225V。当 VREF 降至 1V 时,TM7705 仍然可以工作,但随着性能的降低,输出噪声会变大。为确保器件能够准确无误的工作,必须使 REFIN(+)大于 REFIN(-)

3.校准

TM7705 提供了多种校准选择,具体选择哪种校准可以由设臵寄存器的 MD1 和 MD0 位来编程。一旦给 MD1 和 MD0 位写入数据,一个校准周期就开始了。通过校准消除器件上产生的偏移和增益误差。当工作环境温度和电压发生变化时,就应对器件进行例行校准,若选定的增益、滤波器陷波或单极性/双极性输入范围发生变化时。也应进行校准。校准分为自校准和系统校准。对选定的通道进行全域校准时,片上微控制器必须在两种不同的输入状态下记录调制器的输出,也就是 “零标度”和 “满标度”点

五、时序

在这里插入图片描述

六.TM7705 的配置流程

在这里插入图片描述

七、程序

main.C

#include "bsp.h"
#include "reg52.h"
#include "string.h"
#include "stdio.h"
static void TM7705_Demo(void);
void main(void)
{
	bsp_Init();     /* 初始化底层硬件。 该函数在 bsp.c文件 */

	TM7705_Demo();
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_Demo
*	功能说明: 定时读取TM7705的ADC值,并打印到串口。请通过PC机串口工具查看结果。
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_Demo(void)
{
	uint16_t adc1, adc2;
	bsp_InitTM7705();			/* 初始化配置TM7705 */
	TM7705_CalibSelf(1);		/* 自校准。执行时间较长,约180ms */		
	adc1 = TM7705_ReadAdc(1);				
	TM7705_CalibSelf(2);		/* 自校准。执行时间较长,约180ms */
	adc2 = TM7705_ReadAdc(2);	
	while (1)
	{	
		  bsp_Idle();		
			adc1 = TM7705_ReadAdc(1);	/* 执行时间 80ms */		
			adc2 = TM7705_ReadAdc(2);	/* 执行时间 80ms */
		/* 打印采集数据 */
		{
			int volt1, volt2;
			/* 计算实际电压值(近似估算的),如需准确,请进行校准 */
			volt1 = ((int32_t)adc1 * 5000) / 65535;
			volt2 = ((int32_t)adc2 * 5000) / 65535;
			/* 打印ADC采样结果 */	
			printf("CH1=%5ld (%5dmV) CH2=%5ld (%5dmV)r", (long int)adc1, volt1, (long int)adc2, volt2);
		}
	}
}

TM7705 .C

#include "bsp.h"
#define SOFT_SPI		/* 定义此行表示使用GPIO模拟SPI接口 */
//#define HARD_SPI		/* 定义此行表示使用CPU的硬件SPI接口 */
/* 通道1和通道2的增益,输入缓冲,极性 */
#define __CH1_GAIN_BIPOLAR_BUF	(GAIN_1 | UNIPOLAR | BUF_EN)
#define __CH2_GAIN_BIPOLAR_BUF	(GAIN_1 | UNIPOLAR | BUF_EN)
#if !defined(SOFT_SPI) && !defined(HARD_SPI)
#error "Please define SPI Interface mode : SOFT_SPI or HARD_SPI"
#endif
#ifdef SOFT_SPI		/* 软件SPI */
	/* 定义GPIO端口 */
	sbit CS     = P1^0;
	sbit RESET  = P1^1;
	sbit DIN    = P1^2;
	sbit SCK    = P1^3;
	sbit DOUT   = P1^4;
	sbit DRDY	= P1^5;
	/* 定义口线置0和置1的宏 */
	#define CS_0()		CS = 0
	#define CS_1()		CS = 1
	#define RESET_0()	RESET = 0
	#define RESET_1()	RESET = 1
	#define DI_0()		DIN = 0
	#define DI_1()		DIN = 1
	#define SCK_0()		SCK = 0 
	#define SCK_1()		SCK = 1
	#define DO_IS_HIGH()	(DOUT != 0)
	#define DRDY_IS_LOW()	(DRDY == 0)
#endif
#ifdef HARD_SPI		/* 硬件SPI */
	#error "Don't surport Hard SPI Interface mode"
#endif
/* 通信寄存器bit定义 */
enum
{
	/* 寄存器选择  RS2 RS1 RS0  */
	REG_COMM	= 0x00,	/* 通信寄存器 */
	REG_SETUP	= 0x10,	/* 设置寄存器 */
	REG_CLOCK	= 0x20,	/* 时钟寄存器 */
	REG_DATA	= 0x30,	/* 数据寄存器 */
	REG_ZERO_CH1	= 0x60,	/* CH1 偏移寄存器 */
	REG_FULL_CH1	= 0x70,	/* CH1 满量程寄存器 */
	REG_ZERO_CH2	= 0x61,	/* CH2 偏移寄存器 */
	REG_FULL_CH2	= 0x71,	/* CH2 满量程寄存器 */
	/* 读写操作 */
	WRITE 		= 0x00,	/* 写操作 */
	READ 		= 0x08,	/* 读操作 */
	/* 通道 */
	CH_1		= 0,	/* AIN1+  AIN1- */
	CH_2		= 1,	/* AIN2+  AIN2- */
	CH_3		= 2,	/* AIN1-  AIN1- */
	CH_4		= 3		/* AIN1-  AIN2- */
};
/* 设置寄存器bit定义 */
enum
{
	MD_NORMAL		= (0 < < 6),	/* 正常模式 */
	MD_CAL_SELF		= (1 < < 6),	/* 自校准模式 */
	MD_CAL_ZERO		= (2 < < 6),	/* 校准0刻度模式 */
	MD_CAL_FULL		= (3 < < 6),	/* 校准满刻度模式 */
	GAIN_1			= (0 < < 3),	/* 增益 */
	GAIN_2			= (1 < < 3),	/* 增益 */
	GAIN_4			= (2 < < 3),	/* 增益 */
	GAIN_8			= (3 < < 3),	/* 增益 */
	GAIN_16			= (4 < < 3),	/* 增益 */
	GAIN_32			= (5 < < 3),	/* 增益 */
	GAIN_64			= (6 < < 3),	/* 增益 */
	GAIN_128		= (7 < < 3),	/* 增益 */
	/* 无论双极性还是单极性都不改变任何输入信号的状态,它只改变输出数据的代码和转换函数上的校准点 */
	BIPOLAR			= (0 < < 2),	/* 双极性输入 */
	UNIPOLAR		= (1 < < 2),	/* 单极性输入 */
	BUF_NO			= (0 < < 1),	/* 输入无缓冲(内部缓冲器不启用) */
	BUF_EN			= (1 < < 1),	/* 输入有缓冲 (启用内部缓冲器) */
	FSYNC_0			= 0,
	FSYNC_1			= 1		/* 不启用 */
};
/* 时钟寄存器bit定义 */
enum
{
	CLKDIS_0	= 0x00,		/* 时钟输出使能 (当外接晶振时,必须使能才能振荡) */
	CLKDIS_1	= 0x10,		/* 时钟禁止 (当外部提供时钟时,设置该位可以禁止MCK_OUT引脚输出时钟以省电 */
	/*
		2.4576MHz(CLKDIV=0 )或为 4.9152MHz (CLKDIV=1 ),CLK 应置 “0”。
		1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 该位应置  “1”
	*/
	CLK_4_9152M = 0x08,
	CLK_2_4576M = 0x00,
	CLK_1M 		= 0x04,
	CLK_2M 		= 0x0C,
	FS_50HZ		= 0x00,
	FS_60HZ		= 0x01,
	FS_250HZ	= 0x02,
	FS_500HZ	= 0x04,
	/*
		四十九、电子秤应用中提高TM7705 精度的方法
			当使用主时钟为 2.4576MHz 时,强烈建议将时钟寄存器设为 84H,此时数据输出更新率为10Hz,即每0.1S 输出一个新数据。
			当使用主时钟为 1MHz 时,强烈建议将时钟寄存器设为80H, 此时数据输出更新率为4Hz, 即每0.25S 输出一个新数据
	*/
	ZERO_0		= 0x00,
	ZERO_1		= 0x80
};

static void TM7705_SyncSPI(void);
static void TM7705_Send8Bit(uint8_t _data);
static uint8_t TM7705_Recive8Bit(void);
static void TM7705_WriteByte(uint8_t _data);
static void TM7705_Write3Byte(uint32_t _data);
static uint8_t TM7705_ReadByte(void);
static uint16_t TM7705_Read2Byte(void);
static uint32_t TM7705_Read3Byte(void);
static void TM7705_WaitDRDY(void);
static void TM7705_ResetHard(void);
static void TM7705_Delay(void);
/*
*********************************************************************************************************
*	函 数 名: bsp_InitTM7705
*	功能说明: 配置STM32的GPIO和SPI接口,用于连接 TM7705
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void bsp_InitTM7705(void)
{
#ifdef SOFT_SPI		/* 软件SPI */
	/* 配置REST口线为推挽输出,缺省输出高电平 */
	/* 配置CS口线为推挽输出,缺省输出高电平 */
	/* 配置SCK口线为推挽输出,缺省输出高电平 */
	/* 配置DIN口线为推挽输出,缺省输出高电平 */
	/* 配置DOUT口线为输入浮空模式 */
	/* 配置DOUT口线为输入上拉模式 */
#endif
	bsp_DelayMS(10);
	TM7705_ResetHard();		/* 硬件复位 */
	/*
		在接口序列丢失的情况下,如果在DIN 高电平的写操作持续了足够长的时间(至少 32个串行时钟周期),
		TM7705 将会回到默认状态。
	*/
	bsp_DelayMS(5);
	TM7705_SyncSPI();		/* 同步SPI接口时序 */
	bsp_DelayMS(5);
	/* 配置时钟寄存器 */
	TM7705_WriteByte(REG_CLOCK | WRITE | CH_1);			/* 先写通信寄存器,下一步是写时钟寄存器 */
	TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_50HZ);	/* 刷新速率50Hz */
	//TM7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);	/* 刷新速率500Hz */
	/* 每次上电进行一次自校准 */
	TM7705_CalibSelf(1);	/* 内部自校准 CH1 */
	bsp_DelayMS(5);
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_Delay
*	功能说明: CLK之间的延迟,时序延迟. 对于51,可以不延迟
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_Delay(void)
{
	//uint16_t i;
	//for (i = 0; i < 5; i++);
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_ResetHard
*	功能说明: 硬件复位 TM7705芯片
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_ResetHard(void)
{
	RESET_1();
	bsp_DelayMS(1);
	RESET_0();
	bsp_DelayMS(2);
	RESET_1();
	bsp_DelayMS(1);
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_SyncSPI
*	功能说明: 同步TM7705芯片SPI接口时序
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_SyncSPI(void)
{
	/* AD7705串行接口失步后将其复位。复位后要延时500us再访问 */
	CS_0();
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	CS_1();
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_Send8Bit
*	功能说明: 向SPI总线发送8个bit数据。 不带CS控制。
*	形    参: _data : 数据
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_Send8Bit(uint8_t _data)
{
	uint8_t i;
	for(i = 0; i < 8; i++)
	{
		if (_data & 0x80)
		{
			DI_1();
		}
		else
		{
			DI_0();
		}
		SCK_0();
		_data < <= 1;
		TM7705_Delay();
		SCK_1();
		TM7705_Delay();
	}
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_Recive8Bit
*	功能说明: 从SPI总线接收8个bit数据。 不带CS控制。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static uint8_t TM7705_Recive8Bit(void)
{
	uint8_t i;
	uint8_t read = 0;
	for (i = 0; i < 8; i++)
	{
		SCK_0();
		TM7705_Delay();
		read = read< < 1;
		if (DO_IS_HIGH())
		{
			read++;
		}
		SCK_1();
		TM7705_Delay();
	}
	return read;
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_WriteByte
*	功能说明: 写入1个字节。带CS控制
*	形    参: _data :将要写入的数据
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_WriteByte(uint8_t _data)
{
	CS_0();
	TM7705_Send8Bit(_data);
	CS_1();
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_Write3Byte
*	功能说明: 写入3个字节。带CS控制
*	形    参: _data :将要写入的数据
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_Write3Byte(uint32_t _data)
{
	CS_0();
	TM7705_Send8Bit((_data > > 16) & 0xFF);
	TM7705_Send8Bit((_data > > 8) & 0xFF);
	TM7705_Send8Bit(_data);
	CS_1();
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_ReadByte
*	功能说明: 从AD芯片读取一个字(16位)
*	形    参: 无
*	返 回 值: 读取的字(16位)
*********************************************************************************************************
*/
static uint8_t TM7705_ReadByte(void)
{
	uint8_t read;
	CS_0();
	read = TM7705_Recive8Bit();
	CS_1();
	return read;
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_Read2Byte
*	功能说明: 读2字节数据
*	形    参: 无
*	返 回 值: 读取的数据(16位)
*********************************************************************************************************
*/
static uint16_t TM7705_Read2Byte(void)
{
	uint16_t read;
	CS_0();
	read = TM7705_Recive8Bit();
	read < <= 8;
	read += TM7705_Recive8Bit();
	CS_1();
	return read;
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_Read3Byte
*	功能说明: 读3字节数据
*	形    参: 无
*	返 回 值: 读取到的数据(24bit) 高8位固定为0.
*********************************************************************************************************
*/
static uint32_t TM7705_Read3Byte(void)
{
	uint32_t read;
	CS_0();
	read = TM7705_Recive8Bit();
	read < <= 8;
	read += TM7705_Recive8Bit();
	read < <= 8;
	read += TM7705_Recive8Bit();
	CS_1();
	return read;
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_WaitDRDY
*	功能说明: 等待内部操作完成。 自校准时间较长,需要等待。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
static void TM7705_WaitDRDY(void)
{
	uint32_t i;
	for (i = 0; i < 8000; i++)
	{
		if (DRDY_IS_LOW())
		{
			break;
		}
	}
	if (i >= 8000)
	{
		printf("TM7705_WaitDRDY() 芯片应答超时 ...rn");		/* 调试语句. 用语排错 */
		printf("重新同步SPI接口时序rn");		/* 调试语句. 用语排错 */
		TM7705_SyncSPI();		/* 同步SPI接口时序 */
		bsp_DelayMS(5);
	}
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_WriteReg
*	功能说明: 写指定的寄存器
*	形    参:  _RegID : 寄存器ID
*			  _RegValue : 寄存器值。 对于8位的寄存器,取32位形参的低8bit
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_WriteReg(uint8_t _RegID, uint32_t _RegValue)
{
	uint8_t bits;
	switch (_RegID)
	{
		case REG_COMM:		/* 通信寄存器 */
		case REG_SETUP:		/* 设置寄存器 8bit */
		case REG_CLOCK:		/* 时钟寄存器 8bit */
			bits = 8;
			break;
		case REG_ZERO_CH1:	/* CH1 偏移寄存器 24bit */
		case REG_FULL_CH1:	/* CH1 满量程寄存器 24bit */
		case REG_ZERO_CH2:	/* CH2 偏移寄存器 24bit */
		case REG_FULL_CH2:	/* CH2 满量程寄存器 24bit*/
			bits = 24;
			break;
		case REG_DATA:		/* 数据寄存器 16bit */
		default:
			return;
	}
	TM7705_WriteByte(_RegID | WRITE);	/* 写通信寄存器, 指定下一步是写操作,并指定写哪个寄存器 */
	if (bits == 8)
	{
		TM7705_WriteByte((uint8_t)_RegValue);
	}
	else	/* 24bit */
	{
		TM7705_Write3Byte(_RegValue);
	}
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_ReadReg
*	功能说明: 写指定的寄存器
*	形    参:  _RegID : 寄存器ID
*			  _RegValue : 寄存器值。 对于8位的寄存器,取32位形参的低8bit
*	返 回 值: 读到的寄存器值。 对于8位的寄存器,取32位形参的低8bit
*********************************************************************************************************
*/
uint32_t TM7705_ReadReg(uint8_t _RegID)
{
	uint8_t bits;
	uint32_t read;
	switch (_RegID)
	{
		case REG_COMM:		/* 通信寄存器 */
		case REG_SETUP:		/* 设置寄存器 8bit */
		case REG_CLOCK:		/* 时钟寄存器 8bit */
			bits = 8;
			break;
		case REG_ZERO_CH1:	/* CH1 偏移寄存器 24bit */
		case REG_FULL_CH1:	/* CH1 满量程寄存器 24bit */
		case REG_ZERO_CH2:	/* CH2 偏移寄存器 24bit */
		case REG_FULL_CH2:	/* CH2 满量程寄存器 24bit*/
			bits = 24;
			break;
		case REG_DATA:		/* 数据寄存器 16bit */
		default:
			return 0xFFFFFFFF;
	}

	TM7705_WriteByte(_RegID | READ);	/* 写通信寄存器, 指定下一步是写操作,并指定写哪个寄存器 */
	if (bits == 16)
	{
		read = TM7705_Read2Byte();
	}
	else if (bits == 8)
	{
		read = TM7705_ReadByte();
	}
	else	/* 24bit */
	{
		read = TM7705_Read3Byte();
	}
	return read;
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_CalibSelf
*	功能说明: 启动自校准. 内部自动短接AIN+ AIN-校准0位,内部短接到Vref 校准满位。此函数执行过程较长,
*			  实测约 180ms
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_CalibSelf(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 自校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 --- 时间较长,约180ms */
	}
	else if (_ch == 2)
	{
		/* 自校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道2 */
		TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成  --- 时间较长,约180ms */
	}
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_SytemCalibZero
*	功能说明: 启动系统校准零位. 请将AIN+ AIN-短接后,执行该函数。校准应该由主程序控制并保存校准参数。
*			 执行完毕后。可以通过 TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 读取校准参数。
*	形    参: _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_SytemCalibZero(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
	else if (_ch == 2)
	{
		/* 校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
}

/*
*********************************************************************************************************
*	函 数 名: TM7705_SytemCalibFull
*	功能说明: 启动系统校准满位. 请将AIN+ AIN-接最大输入电压源,执行该函数。校准应该由主程序控制并保存校准参数。
*			 执行完毕后。可以通过 TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 读取校准参数。
*	形    参:  _ch : ADC通道,1或2
*	返 回 值: 无
*********************************************************************************************************
*/
void TM7705_SytemCalibFull(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 校准CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
	else if (_ch == 2)
	{
		/* 校准CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 写通信寄存器,下一步是写设置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 启动自校准 */
		TM7705_WaitDRDY();	/* 等待内部操作完成 */
	}
}
/*
*********************************************************************************************************
*	函 数 名: TM7705_ReadAdc1
*	功能说明: 读通道1或2的ADC数据
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
uint16_t TM7705_ReadAdc(uint8_t _ch)
{
	uint8_t i;
	uint16_t read = 0;
	/* 为了避免通道切换造成读数失效,读2次 */
	for (i = 0; i < 2; i++)
	{
		TM7705_WaitDRDY();		/* 等待DRDY口线为0 */
		if (_ch == 1)
		{
			TM7705_WriteByte(0x38);
		}
		else if (_ch == 2)
		{
			TM7705_WriteByte(0x39);
		}
		read = TM7705_Read2Byte();
	}
	return read;
}

八、实验现象

IN1+输入5V,IN1-接GND
IN2+输入3.3V,IN2-接GND

在这里插入图片描述
IN1+输入3.3V,IN1-接1.8V
IN2+ ,IN2- 悬空
在这里插入图片描述
需要工程及资料可以留言邮箱!!

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5621

    浏览量

    130461
  • tm7705
    +关注

    关注

    0

    文章

    4

    浏览量

    8898
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NI高带宽动态信号采集模块所有通道损坏维修 #NI板卡 #NI模块 #NI板卡维修

    采集模块
    安泰仪器维修
    发布于 :2026年05月06日 16:05:09

    探索LM7705评估板:低噪声负偏置发生器的应用与设计

    探索LM7705评估板:低噪声负偏置发生器的应用与设计 作为电子工程师,我们经常会接触到各种各样的评估板,它们就像是我们探索新技术和新产品的钥匙。今天,我们就来深入了解一下德州仪器(Texas
    的头像 发表于 04-21 12:20 200次阅读

    MX7705:16位低功耗2通道Sigma - Delta ADC的全方位解析

    MX7705:16位低功耗2通道Sigma - Delta ADC的全方位解析 在电子设计领域,模数转换器(ADC)是连接模拟世界和数字世界的关键桥梁。MX7705作为一款16位低功耗2通道
    的头像 发表于 04-09 17:30 649次阅读

    惠斯通电桥测量模块信号采集 支持恒压与恒流驱动

    模块
    稳控自动化
    发布于 :2026年04月03日 14:08:41

    深入剖析AD7705/AD7706:低功耗、高性能的16位Σ-Δ ADC

    深入剖析AD7705/AD7706:低功耗、高性能的16位Σ-Δ ADC 在电子设计领域,模拟到数字的转换是一个关键环节,它直接影响着系统的性能和精度。今天,我们将深入探讨Analog
    的头像 发表于 04-02 11:45 195次阅读

    类似51单片机可以能驱动智能显示模块吗?

    51单片机就可以驱动智能显示模块吗?
    发表于 01-19 15:50

    EVAL-6ED2231S12TM1评估板:开启电机驱动新世界

    EVAL-6ED2231S12TM1是一款用于评估1200V SOI三相栅极驱动器6ED2231S12T以及EasyPACK™ 1B 1200V CoolSiC™ MOSFET模块FS55MR12W1M1H_B11的功率评估板
    的头像 发表于 12-20 11:35 2610次阅读

    避免踩坑:选择4K TYPE-C还是TYPE-C采集模块的关键因素

    4K TYPE-C视频采集模块与TYPE-C采集模块之间的区别不仅在于分辨率的差异,还包括对接相机与输入输出接口等多个方面。在选择采集
    的头像 发表于 12-16 16:01 723次阅读
    避免踩坑:选择4K TYPE-C还是TYPE-C<b class='flag-5'>采集</b><b class='flag-5'>模块</b>的关键因素

    INSTABEND TM 086高性能微波组件:灵活互联的理想之选

    INSTABEND TM 086高性能微波组件:灵活互联的理想之选 在电子工程领域,微波组件的性能和特性对于整个系统的运行至关重要。今天,我们就来详细探讨一下INSTABEND TM 086高性能
    的头像 发表于 12-15 09:40 592次阅读

    INSTABEND TM 086高性能微波组件:设计与应用全解析

    INSTABEND TM 086是一款专为射频电路板、模块和外壳面板之间的互连而设计的柔性同轴微波组件。它的独特之处在于,其电缆可以在连接器后方
    的头像 发表于 12-12 15:55 721次阅读
    INSTABEND <b class='flag-5'>TM</b> 086高性能微波组件:设计与应用全解析

    MCU数据采集模块的数据处理和分析能力如何?

    MCU数据采集模块的数据处理和分析能力如何?在现代化结构物安全监测领域,MCU数据采集模块扮演着至关重要的角色。它不仅仅是数据的“搬运工”,更是具备初步处理与分析能力的智能终端,是实现
    的头像 发表于 12-02 16:03 583次阅读
    MCU数据<b class='flag-5'>采集</b><b class='flag-5'>模块</b>的数据处理和分析能力如何?

    ‌车载电机驱动IC NCV7705/NCV7706技术解析

    安森美 (onsemi) NCV7705/NCV7706车镜模块驱动器集成电路 (IC) 是用于汽车车身控制系统的强大驱动器IC。 该安森美 (onsemi) IC设计用于控制车辆前门
    的头像 发表于 11-21 16:46 918次阅读
    ‌车载电机<b class='flag-5'>驱动</b>IC NCV<b class='flag-5'>7705</b>/NCV7706技术解析

    两张采集模块应如何使用

    文章主要介绍了思迈科华(Smacq)的M系列采集模块如何进行多个模块的共同采集
    的头像 发表于 07-10 15:50 951次阅读
    两张<b class='flag-5'>采集</b><b class='flag-5'>模块</b>应如何使用

    快速带你了解!Profinet模块和PLC的使用流程!#profinet #plc #数据采集卡 #采集模块

    数据采集
    西安阿尔泰电子科技发展有限公司
    发布于 :2025年05月30日 13:32:55

    温度采集模块在线感知环境变化

    温度采集模块作为环境监测系统的核心感知单元,正以数字化触角深入人类活动的各个领域。这种由高精度传感器、智能处理单元和无线通信技术构成的微型化设备,通过持续采集温度参数,构建起环境监测网络的感知
    的头像 发表于 05-14 14:40 950次阅读