【ADS867x】双极输入范围 14 位 500kSPS 4/8 通道、单电源 SAR ADC

news2024/11/20 1:39:17

器件特性

  • 具有集成模拟前端的 14 位模数转换器 (ADC)
  • 具有自动和手动扫描功能的 4 通道、8 通道多路复用器
  • 通道独立可编程输入:
    • ±10.24V、±5.12V、±2.56V、±1.28V、±0.64V
    • 10.24V、5.12V、2.56V、1.28V
  • 5V 模拟电源:1.65V 到 5V I/O 电源
  • 恒定的阻性输入阻抗:1MΩ
  • 输入过压保护:高达 ±20V
  • 低漂移的片上 4.096V 基准电压
  • 出色的性能:
    • 500kSPS 的总吞吐量
    • 差分非线性 (DNL):±0.2 最低有效位 (LSB);最大积分非线性 (INL):±0.25 LSB
    • 增益误差和偏移误差的漂移均较低
    • 信噪比 (SNR):85dB;总谐波失真 (THD):–100dB
    • 低功耗:65mW
  • AUX 输入 → 直接连接到 ADC 输入
  • ALARM → 每通道的高低阈值
  • SPI- 兼容接口,支持菊花链连接
  • 工业温度范围:-40°C 至 125°C
  • TSSOP-38 封装 (9.7mm × 4.4mm)

在这里插入图片描述

器件应用

  • 电力自动化
  • 保护中继器
  • PLC 模拟输入模块

器件说明

ADS8674 和 ADS8678 是基于 14 位逐次逼近寄存器 (SAR) 模数转换器 (ADC) 的 4 通道、8 通道集成数据采集系统,工作吞吐量达 500kSPS。 这些器件提供了用于各输入通道的集成模拟前端电路(过压保护高达 ±20V)、支持自动和手动两种扫描模式的 4 通道或 8 通道多路复用器、以及低温度漂移的片上 4.096V 基准电压。 这些器件由单个 5V 模拟电源供电,每个输入通道均可支持真正的双极输入范围((±10.24V、 ±5.12V、±2.56V、±1.28V 和 ±0.64V)和单极输入范围(0V 至 10.24V、0V 至 5.12V、0V 至 2.56V 以及 0V 至 1.28V)。 模拟前端在所有输入范围内的增益均经过了精确调整,以确保高直流精度。 输入范围的选择可通过软件进行编程,各通道输入范围的选择相互独立。 该器件提供了一个 1MΩ 的恒定阻性输入阻抗(无论所选输入范围为何)。

ADS8674 和 ADS8678 为数字主机提供了一个兼容串行外设接口 (SPI) 的简单串行接口,同时支持以菊花链方式连接多个器件。 数字电源可提供 1.65V 到 5.25V 范围内的电压,因此可直接连接各种主机控制器。

引脚配置和功能

在这里插入图片描述

数字接口配置

在这里插入图片描述

驱动示例

以 ADS8674 为例,手动采集模式

  • ads8674.h
/**
 * Copyright (c) 2022-2023,HelloAlpha
 * 
 * Change Logs:
 * Date           Author       Notes
 */
#ifndef __ADS8674_H__
#define __ADS8674_H__

#include "spi_ctrl.h"

/* Command Register */
#define NO_OP           0X0000
#define STDBY           0X8200
#define PWR_DN          0X8300
#define RST             0X8500
#define AUTO_RST        0XA000
     
#define MAN_CH_0        0XC000
#define MAN_CH_1        0XC400
#define MAN_CH_2        0XC800
#define MAN_CH_3        0XCC00
#define MAN_AUX         0XE000

/* Program Register */ 
#define AUTO_SEQ_EN                 0X01
#define Channel_Power_Down          0X02
#define Feature_Select              0X03
#define Channel_0_Input_Range       0X05
#define Channel_1_Input_Range       0X06
#define Channel_2_Input_Range       0X07
#define Channel_3_Input_Range       0X08

#define WRITE       1
#define READ        0

/****Stype of SPI rxData****/	
#define	WR_REG_DATA_NOT_USE     0
#define WR_CMD_DATA_NOT_USE     0
#define WR_REG_DATA             1
#define WR_CMD_DATA             2

/******ADS8674 Control******/
#define CH3_EN              0X08
#define CH2_EN              0X04
#define CH1_EN              0X02
#define CH0_EN              0X01

#define CH3_PD              0X08
#define CH2_PD              0X04
#define CH1_PD              0X02
#define CH0_PD              0X01
 
#define VREF_25_25          0X00
#define VREF_125_125        0X01
#define VREF_0625_0625      0X02
#define VREF_0_25           0X05
#define VREF_0_125          0X06

/*** For SPI Bus Control ***/
#define ADS8674_START_COMMUNICATION     SPI_START_COMMUNICATION
#define ADS8674_END_COMMUNICATION       SPI_STOP_COMMUNICATION

void ADS8674_SPI_ReadWrite_xBytes(uint8_t *txData, uint8_t *rxData, uint32_t dataLength);
void ADS8674_SPI_Write_CommandRegister(uint32_t command);
void ADS8674_SPI_Write_ProgramRegister(uint32_t address, uint32_t data);
void ADS8674_SPI_Read_ProgramRegister(uint32_t address);
void ADS8674_Set_Auto_RST_Mode(void);
void ADS8674_Set_Auto_Scan_Sequence(uint32_t sequence);
void ADS8674_Set_CH_Range_Select(uint32_t channel, uint32_t range);
void ADS8674_Get_AUTO_RST_Mode_Data(void);
void ADS8674_Get_Manual_Mode_Data(uint32_t channel);
void ADS8674_Init(void);
uint32_t ADS8674_Read_CH(uint32_t channel);

extern uint8_t  ADS8674_rxBuf_4Byte[4];
extern uint8_t ADS8674_rxBuf_16Byte[16];
extern uint8_t  Return_Data_Format;

#endif
  • ads8674.c
/**
 * Copyright (c) 2022-2023,HelloAlpha
 * 
 * Change Logs:
 * Date           Author       Notes
 */
#include "ads8674.h"
#include "sleep.h"

#define DELAY_TIME      500
#define ADS_DELAY(...)	usleep(__VA_ARGS__)

uint8_t ADS8674_rxBuf_4Byte[4];
uint8_t ADS8674_rxBuf_16Byte[16];
uint8_t Return_Data_Format = 0;

void ADS8674_SPI_ReadWrite_xBytes(uint8_t *txData, uint8_t *rxData, uint32_t dataLength)
{
    ADS8674_START_COMMUNICATION;
    for(uint8_t i = 0; i < dataLength; i++)
    {
        rxData[i] = SOFT_SPI_RW_MODE1(txData[i]);
    }
    ADS8674_END_COMMUNICATION;
}

void ADS8674_SPI_Write_CommandRegister(uint32_t command)
{
    uint8_t sendData_Temp[4];
    sendData_Temp[0] = (command & 0XFF00) >> 8;
    sendData_Temp[1] = command & 0X00FF;
    ADS8674_SPI_ReadWrite_xBytes(sendData_Temp, ADS8674_rxBuf_4Byte, 4);
}

void ADS8674_SPI_Write_ProgramRegister(uint32_t address, uint32_t data)
{
    uint8_t sendData_Temp[4];
    sendData_Temp[0] = (address << 1) | WRITE;
    sendData_Temp[1] = data;
    ADS8674_SPI_ReadWrite_xBytes(sendData_Temp, ADS8674_rxBuf_4Byte, 4);
}

void ADS8674_SPI_Read_ProgramRegister(uint32_t address)
{
    static uint8_t sendData_Temp[4];
    sendData_Temp[0] = (address) << 1 | READ;
    sendData_Temp[1] = 0xFF;
    ADS8674_SPI_ReadWrite_xBytes(sendData_Temp, ADS8674_rxBuf_4Byte, 4);
}

void ADS8674_Set_Auto_RST_Mode(void)
{
    Return_Data_Format = WR_CMD_DATA_NOT_USE;
    ADS8674_SPI_Write_CommandRegister(AUTO_RST);
}

void ADS8674_Set_Auto_Scan_Sequence(uint32_t sequence)
{
    Return_Data_Format = WR_REG_DATA_NOT_USE;
    ADS8674_SPI_Write_ProgramRegister(AUTO_SEQ_EN, sequence);
}

void ADS8674_Set_CH_Range_Select(uint32_t channel, uint32_t range)
{
    Return_Data_Format = WR_REG_DATA_NOT_USE;
    ADS8674_SPI_Write_ProgramRegister(channel, range);
}

void ADS8674_Get_AUTO_RST_Mode_Data(void)
{
    Return_Data_Format = WR_CMD_DATA;
    ADS8674_SPI_Write_CommandRegister(0x00);	
}

void ADS8674_Get_Manual_Mode_Data(uint32_t channel)
{
    Return_Data_Format = WR_CMD_DATA;
    ADS8674_SPI_Write_CommandRegister(channel);
}

uint32_t ADS8674_Read_CH(uint32_t channel)
{
	// 1. send MAN_Ch_n command
	ADS8674_Get_Manual_Mode_Data(channel);
    ADS_DELAY(DELAY_TIME);

	// 2. send NO_OP command (0x0000), read data
    ADS8674_SPI_Write_CommandRegister(NO_OP);
    ADS_DELAY(DELAY_TIME);
	
    uint32_t ADC_Value = ((uint32_t)(ADS8674_rxBuf_4Byte[0] & 0x01) << 24) + 
        ((ADS8674_rxBuf_4Byte[1]) << 16) + ((ADS8674_rxBuf_4Byte[2]) << 8) + 
        ADS8674_rxBuf_4Byte[3];
	return ADC_Value;
}

void ADS8674_Init(void)
{
	ADS8674_SPI_Write_CommandRegister(STDBY);
	ADS_DELAY(DELAY_TIME);
    ADS8674_Set_Auto_Scan_Sequence(0x00);
    ADS_DELAY(DELAY_TIME);
    ADS8674_SPI_Write_ProgramRegister(Channel_Power_Down, 0);
    ADS_DELAY(DELAY_TIME);
    ADS8674_SPI_Write_ProgramRegister(Feature_Select, 0);
    ADS_DELAY(DELAY_TIME);
    ADS8674_Set_CH_Range_Select(Channel_0_Input_Range, VREF_0_25);
    ADS_DELAY(DELAY_TIME);
    ADS8674_Set_CH_Range_Select(Channel_1_Input_Range, VREF_0_25);
    ADS_DELAY(DELAY_TIME);
    ADS8674_Set_CH_Range_Select(Channel_2_Input_Range, VREF_0_25);
    ADS_DELAY(DELAY_TIME);
    ADS8674_Set_CH_Range_Select(Channel_3_Input_Range, VREF_0_25);
    ADS_DELAY(DELAY_TIME);
}

获取数据手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Dialog之DialogFragment详解与使用

一、介绍 在Android开发过程中&#xff0c;经常会有弹窗业务&#xff0c;在正常的弹窗业务中&#xff0c;常用到的是Dialog&#xff0c;Dialog的原理也是通过将view&#xff0c;添加到Dialog中。Dialog自身是一个独立的窗口&#xff0c;和Activity一样&#xff0c;有自己的wind…

C++面试题

试题一 请问如下函数调用了什么构造函数和析构函数&#xff0c;以及调用的顺序是什么&#xff1f; 如果 fun函数里写成 return s1 s2 有什么变化&#xff1f; string fun(strings1, string s2) {string tmp s1 s2;return tmp; } int main() {string s fun(s1, s2);retur…

AI来势汹汹,这份「生存计划」请查收!

AIGC即人工智能生产内容&#xff0c;最近可太火了&#xff0c;但是火了这么久&#xff0c;有些人都没明白到底为什么火&#xff1f;甚至不明所以觉得“AI替代XX”&#xff0c;小编认为没必要焦虑&#xff0c;一起来看一下吧。 AI工具们一日千张图、3小时写一本书、2分钟构建一个…

论文导读 | 大语言模型中应用到的强化学习算法

摘要 在最近取得广泛关注的大规模语言模型&#xff08;LLM&#xff09;应用强化学习&#xff08;RL&#xff09;进行与人类行为的对齐&#xff0c;进而可以充分理解和回答人的指令&#xff0c;这一结果展现了强化学习在大规模NLP的丰富应用前景。本文介绍了LLM中应用到的RL技术…

《NFT区块链进阶指南一》Remix部署Solidity ERC721合约(NFT合约)到Etherscan

文章目录 一、部署合约1.1 无构造参数合约部署1.2 有构造参数合约部署 二、合约详情三、部署提示 本篇为NFT区块链高级部分&#xff0c;在阅读之前需了解&#xff1a;Remix、Metamask、Etherscan、Solidity、Openzeppelin、ERC721合约 一、部署合约 1.1 无构造参数合约部署 智…

maven入门学习

简介 maven是基于ant升级的&#xff0c;apache的自动化构建工具、项目管理工具 Maven – Welcome to Apache Maven maven使用pom.xml进行配置 maven项目可以更方便的实现导jar包、拆分项目 idea默认集成了maven 下载安装 下载maven&#xff0c;在官网&#xff08;Maven –…

如何设计电商SPU与SKU表以及相关的表?

一、先了解SPU及SKU的相关概念&#xff1a; 我们在开发电商项目时&#xff0c;必须首先要了解两个概念&#xff0c;SPU与SKU是什么&#xff1f;这也是设计一个好的电商系统的必要前提。商系统实现了什么功能&#xff0c;大数情况下都是和商品模块相关联的。因此商品模块本身的…

Python基础入门(3)—— 什么是函数递归、字典、集合、文件操作、异常处理?

文章目录 01 | &#x1f698;函数 && 递归&#x1f694;函数&#x1f694;递归 02 | &#x1f698;字典03 | &#x1f698;集合04 | &#x1f698;文件05 | &#x1f698;异常处理06 | &#x1f698;习题 Better late than never. 迟做总比不做好;晚来总比不来好。 01 …

M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包

M302A-CW&#xff0f;BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包-内有教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的…

MFP450 基础飞行平台问世,支持室内室外无GPS环境飞行

无人机开发入门&#xff0c;我们需要一个怎样的基础飞行平台&#xff1f; 开源无人机的发展日新月异&#xff0c;但遗憾的是&#xff0c;在PX4和FMT生态中&#xff0c;还很少看到一个稳定可靠的基础飞行平台。目前国内市场的选择不多&#xff0c;还是以DIY为主&#xff0c;尤其…

GEE:使用 ROC 曲线和 AUC 评估分类算法性能

作者:CSDN @ _养乐多_ 在机器学习和遥感数据分析领域,评估分类算法的性能是关键任务之一。Google Earth Engine(GEE)平台提供了丰富的遥感数据和分析工具,结合 ROC(接收者操作特征)曲线和 AUC(曲线下面积)分析,可以有效评估分类算法的准确性和可靠性。 本文将介绍如…

基于阻塞队列实现异步秒杀

文章目录 1 异步秒杀思路2 Redis完成秒杀资格判断3 基于阻塞队列实现秒杀优化总结 1 异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分…

搞懂 API,跨域资源贡献 (CORS )和安全性问题

在 Web 应用开发中&#xff0c;API 是应用程序和其他系统之间进行数据交互的主要方式。 跨域资源共享&#xff08;CORS&#xff09;是一种常见的处理跨域请求的技术&#xff0c;但同时也带来了一些安全性问题。我将分享 CORS 技术及其安全性问题。 跨域资源共享&#xff08;COR…

django CBV 与 DRF APIView源码分析

django CBV源码分析 在django框架中&#xff0c;视图层中的逻辑即可以使用函数处理也可以使用类进行处理&#xff0c;如果在视图层中使用函数处理请求&#xff0c;就是FBV(function base views)&#xff0c;如果在视图层中使用类处理请求&#xff0c;就是CBV(class base views…

Windows无法完成格式化怎么办?正确的3个解决方法!

案例&#xff1a;Windows无法完成格式化怎么办 【由于我的U盘使用时间过长&#xff0c;很多文件都是不需要的&#xff0c;我想将其格式化&#xff0c;但插入电脑后&#xff0c;Windows根本无法完成格式化&#xff0c;这是为什么呢&#xff1f;我应该怎么做呢&#xff1f;求答案…

谁想和我一起做低代码平台!一个可以提升技术,让简历装x的项目

序言 正如文章标题所述&#xff0c;最近一段时间低代码这个概念非常的火&#xff0c;但其实在不了解这个东西的时候觉得它真的很炫酷&#xff0c;从那时就萌生了做一个低代码平台的想法。 但随着时间的变化&#xff0c;现在市面上低代码各个业务方向的平台都有了&#xff0c;可…

算法训练第二周题解汇总

A - AABCC [ABC300D] AABCC - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 大意&#xff1a; 题解&#xff1a; 就是纯暴力题&#xff0c;由于 a<b<c&#xff0c;所以≤N&#xff0c;a<500&#xff1b;<N&#xff0c;c<。先用埃筛预处理&#xff0c;然后枚举的…

hutool工具

目录 官网 简介 pom.xml EscapeUtil使用 HttpRequest使用 官网 Hutool参考文档 简介 Hutool 是一个小而全的 Java工具类库&#xff0c;通过静态方法封装&#xff0c;降低相关API的学习成本&#xff0c;提高工作效率&#xff0c;涵盖了Java开发开发中的方方面面 使用 Hu…

Java入门指南:从零开始的基础语法

java语言概述 Java是一种高级编程语言&#xff0c;最初由Sun Microsystems&#xff08;现在是Oracle Corporation的一部分&#xff09;在1995年推出。Java以其简单、可移植和安全的特性而闻名&#xff0c;并广泛用于各种应用程序开发&#xff0c;从桌面应用程序到移动应用程序和…

Linux如何卸载或者删除docker

1.查看当前docker状态: systemctl status docker 2.如果是运行状态则停掉: systemctl stop docker 3.查看yum安装的docker文件包: yum list installed |grep docker ​ 删除所有安装的docker文件包 yum -y remove docker.x86_64 其他的docker相关的安装包同样删除操作&#xf…