日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51 驅(qū)動 TM7705 模塊 AD 采集

jf_88434166 ? 來源:jf_88434166 ? 作者:jf_88434166 ? 2026-05-06 10:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、TM7705 簡介

在這里插入圖片描述

TM7705 是應(yīng)用于低頻測量的 2/3 通道的模擬前端。該器件可以接受直接來自傳感器的低電平的輸入信號,然后產(chǎn)生串行的數(shù)字輸出。利用 Σ-Δ 轉(zhuǎn)換技術(shù)實(shí)現(xiàn)了 16 位無丟失代碼性能。選定的輸入信號被送到一個基于模擬調(diào)制器的增益可編程專用前端。片內(nèi)數(shù)字濾波器處理調(diào)制器的輸出信號。通過片內(nèi)控制寄存器可調(diào)節(jié)濾波器的截止點(diǎn)和輸出更新速率,從而對數(shù)字濾波器的第一個陷波進(jìn)行編程。TM7705 是雙通道全差分模擬輸入,帶有一個差分基準(zhǔn)輸入。
TM7705 是用于智能系統(tǒng)、微控制器系統(tǒng)和基于 DSP 系統(tǒng)的理想產(chǎn)品。其串行接口可配置為三線接口。增益值、信號極性以及更新速率的選擇可用串行輸入口由軟件來配置。該器件還包括自校準(zhǔn)和系統(tǒng)校準(zhǔn)選項(xiàng),以消除器件本身或系統(tǒng)的增益和偏移誤差。

特點(diǎn):
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復(fù)位
AIN1+差分模擬輸入通道 1 的正輸入端
AIN2+差分模擬輸入通道 2 的正輸入端
AIN1-差分模擬輸入通道 1 的負(fù)輸入端
AIN2-差分模擬輸入通道 2 的負(fù)輸入端
REF IN基準(zhǔn)輸入端
DRDY邏輯輸出
DOUT串行數(shù)據(jù)輸出端
DIN串行數(shù)據(jù)輸入端
VDD電源電壓,+2.7V~+5.25V
GND內(nèi)部電路的地電位基準(zhǔn)點(diǎn)

三、寄存器介紹

TM7705 片內(nèi)包括 8 個寄存器,這些寄存器通過器件的串行口訪問

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

通信寄存器是一個 8 位寄存器,既可以讀出數(shù)據(jù)也可以把數(shù)據(jù)寫進(jìn)去。所有與器件的通信必須從寫該寄存器開始。寫上去的數(shù)據(jù)決定下一次讀操作或?qū)懖僮髟谀膫€寄存器上發(fā)生。一旦在選定的寄存器上完成了下一次讀操作或?qū)懖僮鳎涌诜祷氐酵ㄐ偶拇嫫鹘邮找淮螌懖僮鞯臓顟B(tài)。這是接口的默認(rèn)狀態(tài),在上電或復(fù)位后,TM7705 就處于這種默認(rèn)狀態(tài)等待對通信寄存器一次寫操作。
在這里插入圖片描述
在這里插入圖片描述

2.設(shè)置寄存器(RS2、RS1、RS0 = 0、0、1)

設(shè)置寄存器是一個 8 位寄存器,它既可以讀數(shù)據(jù)又可將數(shù)據(jù)寫入
在這里插入圖片描述在這里插入圖片描述
在這里插入圖片描述

3.時鐘寄存器(RS2、RS1、RS0 = 0、1、0)

時鐘寄存器是一個可以讀/寫數(shù)據(jù)的 8 位寄存器
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

4.數(shù)據(jù)寄存器 (RS2、RS1、RS0 = 0、1、1)

數(shù)據(jù)寄存器是一個 16 位只讀寄存器,它包含了來自 TM7705 最新的轉(zhuǎn)換結(jié)果。如果通信寄存器將器件設(shè)置成對該寄存器寫操作,則必定會實(shí)際上發(fā)生一次寫操作以使器件返回到準(zhǔn)備對通信寄存器的寫操作,但是向器件寫入的 16 位數(shù)字將被 TM7705 忽略。

5.測試寄存器 (RS2、RS1、RS0 = 1、0、0)

測試寄存器用于測試器件時。建議用戶不要改變測試寄存器的任何位的默認(rèn)值 (上電或復(fù)位時自動置入全 0),否則當(dāng)器件處于測試模式時,不能正確運(yùn)行。

6.零標(biāo)度校準(zhǔn)寄存器 (RS2、RS1、RS0 = 1、1、0)

TM7705 包含幾組獨(dú)立的零標(biāo)度寄存器,每個零標(biāo)度寄存器負(fù)責(zé)一個輸入通道。它們皆為 24 位讀/寫寄存器,24 位數(shù)據(jù)必須被寫之后才能傳送到零標(biāo)度校準(zhǔn)寄存器。零標(biāo)度寄存器和滿標(biāo)度寄存器連在一起使用,組成一個寄存器對。每個寄存器對對應(yīng)一對通道,見表 7。當(dāng)器件被設(shè)置成允許通過數(shù)字接口訪問這些寄存器時,器件本身不再訪問寄存器系數(shù)以使輸出數(shù)據(jù)具有正確的尺度。結(jié)果,在訪問校準(zhǔn)寄存器 (無論是讀/寫操作 )后,從器件讀得的第一個輸出數(shù)據(jù)可能包含不正確的數(shù)據(jù)。此外,數(shù)據(jù)校準(zhǔn)期間,校準(zhǔn)寄存器不能進(jìn)行寫操作。這類事件可以通過以下方法避免:在校準(zhǔn)寄存器開始工作前,將模式寄存器的 FSYNC位置為高電平,任務(wù)結(jié)束后,又將其置為低電平。

7.滿標(biāo)度校準(zhǔn)寄存器 (RS2、RS1、RS0 = 1、1、1)

TM7705 包含幾個獨(dú)立的滿標(biāo)度寄存器,每個滿標(biāo)度寄存器負(fù)責(zé)一個輸入通道。它們皆為 24 位讀/寫寄存器,24 位數(shù)據(jù)必須被寫之后才能傳送到滿標(biāo)度校準(zhǔn)寄存器。滿標(biāo)度寄存器和零標(biāo)度寄存器連在一起使用,組成一個寄存器對。每個寄存器對對應(yīng)一對通道,見表 7。當(dāng)器件被設(shè)置成允許通過數(shù)字接口訪問這些寄存器時,器件本身不再訪問寄存器系數(shù)以使輸出數(shù)據(jù)具有正確的尺度。結(jié)果,在訪問校準(zhǔn)寄存器 (無論是讀/寫操作 )后,從器件讀得的第一個輸出數(shù)據(jù)可能包含不正確的數(shù)據(jù)。此外,數(shù)據(jù)校準(zhǔn)期間,校準(zhǔn)寄存器不能進(jìn)行寫操作。這類事件可以通過以下方法避免:在校準(zhǔn)寄存器開始工作前,將模式寄存器的 FSYNC位置為高電平,任務(wù)結(jié)束后,又將其置為低電平。

四、部分功能介紹

1.模擬輸入

TM7705 包括 2 個模擬輸入對,即 AIN(+ ), AIN (-)和 AIN2(+),AIN2(-)。輸入對提供可編程增益、可處理單、雙極性輸入信號的差分輸入通道。應(yīng)注意,雙極性輸入信號以各自的 AIN(- )端為參考。 TM7705 包括 3 個偽差分模擬輸入對,AIN 1 、AIN2 和 AIN3,這些輸入對以器件的 COMMON 輸入端為參考。
無論是單極性還是雙極性電壓,TM7705 的模擬輸入端都能接受。雙極性輸入并不表示器件能夠處理模擬輸入端的負(fù)電壓,因?yàn)槟M輸入電壓不能小于-30mV,以確保器件的正常工作。輸入通道是全差分的。因此,對于 TM7705,AIN(+)輸入電壓以各自的 AIN 1(-)為基準(zhǔn);對于 TM7706,加到模擬輸入通道的電壓以 COMMON 為基準(zhǔn)

2.基準(zhǔn)輸入

REFIN(+)和 REFIN(-)為 TM7705 提供差分基準(zhǔn)輸入功能,差分輸入的共模范圍是 GND~VDD。當(dāng)TM7705 以 5V 電源電壓工作時,基準(zhǔn)電壓為+2.5V;電源電壓為 3V 時,基準(zhǔn)電壓為+1.225V。當(dāng) VREF 降至 1V 時,TM7705 仍然可以工作,但隨著性能的降低,輸出噪聲會變大。為確保器件能夠準(zhǔn)確無誤的工作,必須使 REFIN(+)大于 REFIN(-)

3.校準(zhǔn)

TM7705 提供了多種校準(zhǔn)選擇,具體選擇哪種校準(zhǔn)可以由設(shè)臵寄存器的 MD1 和 MD0 位來編程。一旦給 MD1 和 MD0 位寫入數(shù)據(jù),一個校準(zhǔn)周期就開始了。通過校準(zhǔn)消除器件上產(chǎn)生的偏移和增益誤差。當(dāng)工作環(huán)境溫度和電壓發(fā)生變化時,就應(yīng)對器件進(jìn)行例行校準(zhǔn),若選定的增益、濾波器陷波或單極性/雙極性輸入范圍發(fā)生變化時。也應(yīng)進(jìn)行校準(zhǔn)。校準(zhǔn)分為自校準(zhǔn)和系統(tǒng)校準(zhǔn)。對選定的通道進(jìn)行全域校準(zhǔn)時,片上微控制器必須在兩種不同的輸入狀態(tài)下記錄調(diào)制器的輸出,也就是 “零標(biāo)度”和 “滿標(biāo)度”點(diǎn)

五、時序

在這里插入圖片描述

六.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();     /* 初始化底層硬件。 該函數(shù)在 bsp.c文件 */

	TM7705_Demo();
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Demo
*	功能說明: 定時讀取TM7705的ADC值,并打印到串口。請通過PC機(jī)串口工具查看結(jié)果。
*	形    參:無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Demo(void)
{
	uint16_t adc1, adc2;
	bsp_InitTM7705();			/* 初始化配置TM7705 */
	TM7705_CalibSelf(1);		/* 自校準(zhǔn)。執(zhí)行時間較長,約180ms */		
	adc1 = TM7705_ReadAdc(1);				
	TM7705_CalibSelf(2);		/* 自校準(zhǔn)。執(zhí)行時間較長,約180ms */
	adc2 = TM7705_ReadAdc(2);	
	while (1)
	{	
		  bsp_Idle();		
			adc1 = TM7705_ReadAdc(1);	/* 執(zhí)行時間 80ms */		
			adc2 = TM7705_ReadAdc(2);	/* 執(zhí)行時間 80ms */
		/* 打印采集數(shù)據(jù) */
		{
			int volt1, volt2;
			/* 計(jì)算實(shí)際電壓值(近似估算的),如需準(zhǔn)確,請進(jìn)行校準(zhǔn) */
			volt1 = ((int32_t)adc1 * 5000) / 65535;
			volt2 = ((int32_t)adc2 * 5000) / 65535;
			/* 打印ADC采樣結(jié)果 */	
			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,	/* 設(shè)置寄存器 */
	REG_CLOCK	= 0x20,	/* 時鐘寄存器 */
	REG_DATA	= 0x30,	/* 數(shù)據(jù)寄存器 */
	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- */
};
/* 設(shè)置寄存器bit定義 */
enum
{
	MD_NORMAL		= (0 < < 6),	/* 正常模式 */
	MD_CAL_SELF		= (1 < < 6),	/* 自校準(zhǔn)模式 */
	MD_CAL_ZERO		= (2 < < 6),	/* 校準(zhǔn)0刻度模式 */
	MD_CAL_FULL		= (3 < < 6),	/* 校準(zhǔn)滿刻度模式 */
	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),	/* 增益 */
	/* 無論雙極性還是單極性都不改變?nèi)魏屋斎胄盘柕臓顟B(tài),它只改變輸出數(shù)據(jù)的代碼和轉(zhuǎn)換函數(shù)上的校準(zhǔn)點(diǎn) */
	BIPOLAR			= (0 < < 2),	/* 雙極性輸入 */
	UNIPOLAR		= (1 < < 2),	/* 單極性輸入 */
	BUF_NO			= (0 < < 1),	/* 輸入無緩沖(內(nèi)部緩沖器不啟用) */
	BUF_EN			= (1 < < 1),	/* 輸入有緩沖 (啟用內(nèi)部緩沖器) */
	FSYNC_0			= 0,
	FSYNC_1			= 1		/* 不啟用 */
};
/* 時鐘寄存器bit定義 */
enum
{
	CLKDIS_0	= 0x00,		/* 時鐘輸出使能 (當(dāng)外接晶振時,必須使能才能振蕩) */
	CLKDIS_1	= 0x10,		/* 時鐘禁止 (當(dāng)外部提供時鐘時,設(shè)置該位可以禁止MCK_OUT引腳輸出時鐘以省電 */
	/*
		2.4576MHz(CLKDIV=0 )或?yàn)?4.9152MHz (CLKDIV=1 ),CLK 應(yīng)置 “0”。
		1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 該位應(yīng)置  “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,
	/*
		四十九、電子秤應(yīng)用中提高TM7705 精度的方法
			當(dāng)使用主時鐘為 2.4576MHz 時,強(qiáng)烈建議將時鐘寄存器設(shè)為 84H,此時數(shù)據(jù)輸出更新率為10Hz,即每0.1S 輸出一個新數(shù)據(jù)。
			當(dāng)使用主時鐘為 1MHz 時,強(qiáng)烈建議將時鐘寄存器設(shè)為80H, 此時數(shù)據(jù)輸出更新率為4Hz, 即每0.25S 輸出一個新數(shù)據(jù)
	*/
	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);
/*
*********************************************************************************************************
*	函 數(shù) 名: 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();		/* 硬件復(fù)位 */
	/*
		在接口序列丟失的情況下,如果在DIN 高電平的寫操作持續(xù)了足夠長的時間(至少 32個串行時鐘周期),
		TM7705 將會回到默認(rèn)狀態(tài)。
	*/
	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 */
	/* 每次上電進(jìn)行一次自校準(zhǔn) */
	TM7705_CalibSelf(1);	/* 內(nèi)部自校準(zhǔn) CH1 */
	bsp_DelayMS(5);
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Delay
*	功能說明: CLK之間的延遲,時序延遲. 對于51,可以不延遲
*	形    參: 無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Delay(void)
{
	//uint16_t i;
	//for (i = 0; i < 5; i++);
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_ResetHard
*	功能說明: 硬件復(fù)位 TM7705芯片
*	形    參: 無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_ResetHard(void)
{
	RESET_1();
	bsp_DelayMS(1);
	RESET_0();
	bsp_DelayMS(2);
	RESET_1();
	bsp_DelayMS(1);
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_SyncSPI
*	功能說明: 同步TM7705芯片SPI接口時序
*	形    參: 無
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_SyncSPI(void)
{
	/* AD7705串行接口失步后將其復(fù)位。復(fù)位后要延時500us再訪問 */
	CS_0();
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	TM7705_Send8Bit(0xFF);
	CS_1();
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Send8Bit
*	功能說明: 向SPI總線發(fā)送8個bit數(shù)據(jù)。 不帶CS控制。
*	形    參: _data : 數(shù)據(jù)
*	返 回 值: 無
*********************************************************************************************************
*/
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();
	}
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Recive8Bit
*	功能說明: 從SPI總線接收8個bit數(shù)據(jù)。 不帶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;
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_WriteByte
*	功能說明: 寫入1個字節(jié)。帶CS控制
*	形    參: _data :將要寫入的數(shù)據(jù)
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_WriteByte(uint8_t _data)
{
	CS_0();
	TM7705_Send8Bit(_data);
	CS_1();
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Write3Byte
*	功能說明: 寫入3個字節(jié)。帶CS控制
*	形    參: _data :將要寫入的數(shù)據(jù)
*	返 回 值: 無
*********************************************************************************************************
*/
static void TM7705_Write3Byte(uint32_t _data)
{
	CS_0();
	TM7705_Send8Bit((_data > > 16) & 0xFF);
	TM7705_Send8Bit((_data > > 8) & 0xFF);
	TM7705_Send8Bit(_data);
	CS_1();
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_ReadByte
*	功能說明: 從AD芯片讀取一個字(16位)
*	形    參: 無
*	返 回 值: 讀取的字(16位)
*********************************************************************************************************
*/
static uint8_t TM7705_ReadByte(void)
{
	uint8_t read;
	CS_0();
	read = TM7705_Recive8Bit();
	CS_1();
	return read;
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Read2Byte
*	功能說明: 讀2字節(jié)數(shù)據(jù)
*	形    參: 無
*	返 回 值: 讀取的數(shù)據(jù)(16位)
*********************************************************************************************************
*/
static uint16_t TM7705_Read2Byte(void)
{
	uint16_t read;
	CS_0();
	read = TM7705_Recive8Bit();
	read < <= 8;
	read += TM7705_Recive8Bit();
	CS_1();
	return read;
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_Read3Byte
*	功能說明: 讀3字節(jié)數(shù)據(jù)
*	形    參: 無
*	返 回 值: 讀取到的數(shù)據(jù)(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;
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_WaitDRDY
*	功能說明: 等待內(nèi)部操作完成。 自校準(zhǔn)時間較長,需要等待。
*	形    參: 無
*	返 回 值: 無
*********************************************************************************************************
*/
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() 芯片應(yīng)答超時 ...rn");		/* 調(diào)試語句. 用語排錯 */
		printf("重新同步SPI接口時序rn");		/* 調(diào)試語句. 用語排錯 */
		TM7705_SyncSPI();		/* 同步SPI接口時序 */
		bsp_DelayMS(5);
	}
}

/*
*********************************************************************************************************
*	函 數(shù) 名: 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:		/* 設(shè)置寄存器 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:		/* 數(shù)據(jù)寄存器 16bit */
		default:
			return;
	}
	TM7705_WriteByte(_RegID | WRITE);	/* 寫通信寄存器, 指定下一步是寫操作,并指定寫哪個寄存器 */
	if (bits == 8)
	{
		TM7705_WriteByte((uint8_t)_RegValue);
	}
	else	/* 24bit */
	{
		TM7705_Write3Byte(_RegValue);
	}
}
/*
*********************************************************************************************************
*	函 數(shù) 名: 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:		/* 設(shè)置寄存器 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:		/* 數(shù)據(jù)寄存器 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;
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_CalibSelf
*	功能說明: 啟動自校準(zhǔn). 內(nèi)部自動短接AIN+ AIN-校準(zhǔn)0位,內(nèi)部短接到Vref 校準(zhǔn)滿位。此函數(shù)執(zhí)行過程較長,
*			  實(shí)測約 180ms
*	形    參:  _ch : ADC通道,1或2
*	返 回 值: 無
*********************************************************************************************************
*/
void TM7705_CalibSelf(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 自校準(zhǔn)CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_SELF | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成 --- 時間較長,約180ms */
	}
	else if (_ch == 2)
	{
		/* 自校準(zhǔn)CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道2 */
		TM7705_WriteByte(MD_CAL_SELF | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成  --- 時間較長,約180ms */
	}
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_SytemCalibZero
*	功能說明: 啟動系統(tǒng)校準(zhǔn)零位. 請將AIN+ AIN-短接后,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
*			 執(zhí)行完畢后。可以通過 TM7705_ReadReg(REG_ZERO_CH1) 和  TM7705_ReadReg(REG_ZERO_CH2) 讀取校準(zhǔn)參數(shù)。
*	形    參: _ch : ADC通道,1或2
*	返 回 值: 無
*********************************************************************************************************
*/
void TM7705_SytemCalibZero(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 校準(zhǔn)CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成 */
	}
	else if (_ch == 2)
	{
		/* 校準(zhǔn)CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_ZERO | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成 */
	}
}

/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_SytemCalibFull
*	功能說明: 啟動系統(tǒng)校準(zhǔn)滿位. 請將AIN+ AIN-接最大輸入電壓源,執(zhí)行該函數(shù)。校準(zhǔn)應(yīng)該由主程序控制并保存校準(zhǔn)參數(shù)。
*			 執(zhí)行完畢后。可以通過 TM7705_ReadReg(REG_FULL_CH1) 和  TM7705_ReadReg(REG_FULL_CH2) 讀取校準(zhǔn)參數(shù)。
*	形    參:  _ch : ADC通道,1或2
*	返 回 值: 無
*********************************************************************************************************
*/
void TM7705_SytemCalibFull(uint8_t _ch)
{
	if (_ch == 1)
	{
		/* 校準(zhǔn)CH1 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_1);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_FULL | __CH1_GAIN_BIPOLAR_BUF | FSYNC_0);/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成 */
	}
	else if (_ch == 2)
	{
		/* 校準(zhǔn)CH2 */
		TM7705_WriteByte(REG_SETUP | WRITE | CH_2);	/* 寫通信寄存器,下一步是寫設(shè)置寄存器,通道1 */
		TM7705_WriteByte(MD_CAL_FULL | __CH2_GAIN_BIPOLAR_BUF | FSYNC_0);	/* 啟動自校準(zhǔn) */
		TM7705_WaitDRDY();	/* 等待內(nèi)部操作完成 */
	}
}
/*
*********************************************************************************************************
*	函 數(shù) 名: TM7705_ReadAdc1
*	功能說明: 讀通道1或2的ADC數(shù)據(jù)
*	形    參: 無
*	返 回 值: 無
*********************************************************************************************************
*/
uint16_t TM7705_ReadAdc(uint8_t _ch)
{
	uint8_t i;
	uint16_t read = 0;
	/* 為了避免通道切換造成讀數(shù)失效,讀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;
}

八、實(shí)驗(yàn)現(xiàn)象

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

在這里插入圖片描述
IN1+輸入3.3V,IN1-接1.8V
IN2+ ,IN2- 懸空
在這里插入圖片描述
需要工程及資料可以留言郵箱??!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5621

    瀏覽量

    130461
  • tm7705
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8898
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    NI高帶寬動態(tài)信號采集模塊所有通道損壞維修 #NI板卡 #NI模塊 #NI板卡維修

    采集模塊
    安泰儀器維修
    發(fā)布于 :2026年05月06日 16:05:09

    探索LM7705評估板:低噪聲負(fù)偏置發(fā)生器的應(yīng)用與設(shè)計(jì)

    探索LM7705評估板:低噪聲負(fù)偏置發(fā)生器的應(yīng)用與設(shè)計(jì) 作為電子工程師,我們經(jīng)常會接觸到各種各樣的評估板,它們就像是我們探索新技術(shù)和新產(chǎn)品的鑰匙。今天,我們就來深入了解一下德州儀器(Texas
    的頭像 發(fā)表于 04-21 12:20 ?199次閱讀

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

    MX7705:16位低功耗2通道Sigma - Delta ADC的全方位解析 在電子設(shè)計(jì)領(lǐng)域,模數(shù)轉(zhuǎn)換器(ADC)是連接模擬世界和數(shù)字世界的關(guān)鍵橋梁。MX7705作為一款16位低功耗2通道
    的頭像 發(fā)表于 04-09 17:30 ?646次閱讀

    惠斯通電橋測量模塊信號采集 支持恒壓與恒流驅(qū)動

    模塊
    穩(wěn)控自動化
    發(fā)布于 :2026年04月03日 14:08:41

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

    深入剖析AD7705/AD7706:低功耗、高性能的16位Σ-Δ ADC 在電子設(shè)計(jì)領(lǐng)域,模擬到數(shù)字的轉(zhuǎn)換是一個關(guān)鍵環(huán)節(jié),它直接影響著系統(tǒng)的性能和精度。今天,我們將深入探討Analog
    的頭像 發(fā)表于 04-02 11:45 ?195次閱讀

    類似51單片機(jī)可以能驅(qū)動智能顯示模塊嗎?

    51單片機(jī)就可以驅(qū)動智能顯示模塊嗎?
    發(fā)表于 01-19 15:50

    EVAL-6ED2231S12TM1評估板:開啟電機(jī)驅(qū)動新世界

    EVAL-6ED2231S12TM1是一款用于評估1200V SOI三相柵極驅(qū)動器6ED2231S12T以及EasyPACK? 1B 1200V CoolSiC? MOSFET模塊FS55MR12W1M1H_B11的功率評估板
    的頭像 發(fā)表于 12-20 11:35 ?2602次閱讀

    避免踩坑:選擇4K TYPE-C還是TYPE-C采集模塊的關(guān)鍵因素

    4K TYPE-C視頻采集模塊與TYPE-C采集模塊之間的區(qū)別不僅在于分辨率的差異,還包括對接相機(jī)與輸入輸出接口等多個方面。在選擇采集
    的頭像 發(fā)表于 12-16 16:01 ?713次閱讀
    避免踩坑:選擇4K TYPE-C還是TYPE-C<b class='flag-5'>采集</b><b class='flag-5'>模塊</b>的關(guān)鍵因素

    INSTABEND TM 086高性能微波組件:靈活互聯(lián)的理想之選

    INSTABEND TM 086高性能微波組件:靈活互聯(lián)的理想之選 在電子工程領(lǐng)域,微波組件的性能和特性對于整個系統(tǒng)的運(yùn)行至關(guān)重要。今天,我們就來詳細(xì)探討一下INSTABEND TM 086高性能
    的頭像 發(fā)表于 12-15 09:40 ?592次閱讀

    INSTABEND TM 086高性能微波組件:設(shè)計(jì)與應(yīng)用全解析

    INSTABEND TM 086是一款專為射頻電路板、模塊和外殼面板之間的互連而設(shè)計(jì)的柔性同軸微波組件。它的獨(dú)特之處在于,其電纜可以在連接器后方
    的頭像 發(fā)表于 12-12 15:55 ?721次閱讀
    INSTABEND <b class='flag-5'>TM</b> 086高性能微波組件:設(shè)計(jì)與應(yīng)用全解析

    MCU數(shù)據(jù)采集模塊的數(shù)據(jù)處理和分析能力如何?

    MCU數(shù)據(jù)采集模塊的數(shù)據(jù)處理和分析能力如何?在現(xiàn)代化結(jié)構(gòu)物安全監(jiān)測領(lǐng)域,MCU數(shù)據(jù)采集模塊扮演著至關(guān)重要的角色。它不僅僅是數(shù)據(jù)的“搬運(yùn)工”,更是具備初步處理與分析能力的智能終端,是實(shí)現(xiàn)
    的頭像 發(fā)表于 12-02 16:03 ?578次閱讀
    MCU數(shù)據(jù)<b class='flag-5'>采集</b><b class='flag-5'>模塊</b>的數(shù)據(jù)處理和分析能力如何?

    ?車載電機(jī)驅(qū)動IC NCV7705/NCV7706技術(shù)解析

    安森美 (onsemi) NCV7705/NCV7706車鏡模塊驅(qū)動器集成電路 (IC) 是用于汽車車身控制系統(tǒng)的強(qiáng)大驅(qū)動器IC。 該安森美 (onsemi) IC設(shè)計(jì)用于控制車輛前門
    的頭像 發(fā)表于 11-21 16:46 ?913次閱讀
    ?車載電機(jī)<b class='flag-5'>驅(qū)動</b>IC NCV<b class='flag-5'>7705</b>/NCV7706技術(shù)解析

    兩張采集模塊應(yīng)如何使用

    文章主要介紹了思邁科華(Smacq)的M系列采集模塊如何進(jìn)行多個模塊的共同采集
    的頭像 發(fā)表于 07-10 15:50 ?949次閱讀
    兩張<b class='flag-5'>采集</b><b class='flag-5'>模塊</b>應(yīng)如何使用

    快速帶你了解!Profinet模塊和PLC的使用流程!#profinet #plc #數(shù)據(jù)采集卡 #采集模塊

    數(shù)據(jù)采集
    西安阿爾泰電子科技發(fā)展有限公司
    發(fā)布于 :2025年05月30日 13:32:55

    溫度采集模塊在線感知環(huán)境變化

    溫度采集模塊作為環(huán)境監(jiān)測系統(tǒng)的核心感知單元,正以數(shù)字化觸角深入人類活動的各個領(lǐng)域。這種由高精度傳感器、智能處理單元和無線通信技術(shù)構(gòu)成的微型化設(shè)備,通過持續(xù)采集溫度參數(shù),構(gòu)建起環(huán)境監(jiān)測網(wǎng)絡(luò)的感知
    的頭像 發(fā)表于 05-14 14:40 ?949次閱讀
    霞浦县| 衡东县| 克什克腾旗| 婺源县| 库尔勒市| 永靖县| 睢宁县| 温泉县| 武城县| 侯马市| 乌什县| 神木县| 中牟县| 安乡县| 柯坪县| 通山县| 曲沃县| 泸水县| 苏尼特左旗| 临城县| 仙桃市| 突泉县| 腾冲县| 山东省| 稷山县| 新乐市| 洛隆县| 绥滨县| 岑巩县| 诏安县| 磐安县| 尉氏县| 石景山区| 开江县| 曲水县| 鸡东县| 鸡泽县| 夏津县| 突泉县| 岳阳县| 永登县|