当前位置: 首页 > news >正文

ADS1220高精度ADC(TI)——应用 源码

文章目录

    • 德州仪器ADS1220概述
    • 资料
    • 引脚&封装
    • 布线
    • 寄存器
      • 配置寄存器0(00h)
      • 配置寄存器1(01h)
      • 配置寄存器2(02h)
      • 配置寄存器3(03h)
    • 连续转换流程
    • 驱动源码
      • ads1220.c
      • ads1220.h

德州仪器ADS1220概述

  • 高性能 24 位Δ-Σ 模数转换器(ADC)

  • 支持两个差分输入或四个单端输入

  • 集成了低噪声可编程增益放大器(PGA)、双可编程激励电流源、电压基准、振荡器、低侧开关以及精密温度传感器

  • 支持高达 2000 SPS 的采样速率,并能在单周期内完成稳定转换

  • 其数字滤波器在 20SPS 采样频率下可同时抑制 50Hz 和 60Hz 干扰

  • 内部 PGA 提供高达 128V/V 的增益,特别适用于小型传感器信号测量

  • 器件支持伪差分或全差分信号测量,并可通过配置禁用内部 PGA,在保持高输入阻抗的同时提供最高 4V/V 增益,实现单端测量

  • 在禁用 PGA 的占空比模式下,器件功耗可低至 120µA

  • ADS1220 采用 VQFN-16 或 TSSOP-16 封装,工作温度范围为 -40°C 至 +125°C,适用于严苛环境下的精密测量应用。

资料

ADS1220 DATASHEET

引脚&封装

请添加图片描述
请添加图片描述

布线

在这里插入图片描述
在AIN0和AIN1之间、AIN2和AIN3之间、REFP0和REFN0之间的外围都是两个电阻三个电容,其作用如下:

  • 抗混叠滤波
    差分电容与电阻构成一阶RC滤波器,用于限制高频噪声和混叠效应。Δ-Σ ADC的调制器以高频(如256kHz)采样输入信号,未衰减的高频成分会混叠到通带,导致测量误差。
  • 共模噪声抑制
    共模电容用于衰减共模噪声。差分电容应比共模电容大10倍,以避免电容不匹配将共模噪声转为差分噪声。
  • 保护ADC输入
    外部滤波器电阻还限制输入过压时的电流,保护内部ESD二极管。

寄存器

在这里插入图片描述

配置寄存器0(00h)

  • MUX[3:0] :输入多路复用器配置,选择差分/单端输入组合或系统监测功能(如电源/基准监测)。
    单端测量需禁用PGA,差分测量可启用PGA高增益。
  • GAIN[2:0] :设置PGA增益(1至128),禁用PGA时仅支持增益1/2/4。
    低噪声放大器,用于放大微小传感器信号(如热电偶/RTD)。
  • PGA_BYPASS:禁用和旁路PGA以扩展共模电压范围(AVSS-0.1V至AVDD+0.1V)。
    单端信号测量或需宽共模电压时启用。 当PGA旁路时,内部放大器被禁用,牺牲增益换取更宽输入范围。

配置寄存器1(01h)

  • DR[2:0]:选择数据速率(5SPS至2kSPS),随工作模式(正常/占空比/Turbo)变化。
  • MODE[1:0]:设置工作模式(正常/占空比/Turbo)。
  • CM:转换模式选择(单次/连续)。
  • TS:启用内部温度传感器模式。
  • BCS:控制10μA烧毁电流源,用于传感器故障检测。
    烧毁电流源用于检测传感器开路(拉至满量程)或短路(近零读数),但会引入测量误差,精密测量需禁用以避免干扰。

配置寄存器2(02h)

  • VREF[1:0] :选择基准源(内部2.048V/外部基准/电源)。
  • 50/60[1:0] :配置FIR滤波器抑制50Hz/60Hz工频干扰。
    启用抑制会限制数据速率(仅20SPS或5SPS下有效)。
    未启用时(50/60[1:0]=00),滤波器带宽更宽,适合高频信号但抗干扰能力下降。
  • PSW:控制低侧电源开关(AIN3/REFN1至AVSS)。
  • IDAC[2:0] :设置激励电流源输出(10μA至1.5mA)。
    典型应用是为RTD(电阻温度检测器)等传感器提供精确的激励电流,通过将IDAC1和IDAC2分别接入RTD的两条引线,利用匹配的电流抵消引线电阻产生的压降误差。
    IDAC合规电压是电流源输出端电压需≤AVDD-0.9V,否则精度下降。

配置寄存器3(03h)

  • I1MUX[2:0]:路由IDAC1至指定引脚(AINx或基准输入)。
  • I2MUX[2:0]:路由IDAC2至指定引脚(AINx或基准输入)。
  • DRDYM:选择DRDY指示模式(仅专用引脚或复用DOUT/DRDY)。
  • 保留位:固定写0。

连续转换流程

  1. 上电:延迟以允许电源稳定并完成上电复位(最小50 µs)。
  2. 配置SPI接口:将微控制器的SPI接口配置为模式1(CPOL = 0CPHA = 1)。
  3. 配置片选引脚:如果片选(CS)引脚未永久接地,将连接到CS的微控制器GPIO配置为输出。
  4. 配置数据准备好引脚:将连接到DRDY引脚的微控制器GPIO配置为下降沿触发的中断输入。
  5. 拉低片选信号:将CS拉低以选中设备。
  6. 延迟CSSC时间:延迟至少td(CSSC)的时间。
  7. 发送复位命令:发送复位命令(06h),确保设备在上电后正确复位。
  8. 延迟复位时间:延迟至少50 µs + 32 * t(CLK)的时间。
  9. 写入寄存器配置:使用WREG命令(43h, 08h, 04h, 10h, 和00h)写入相应的寄存器配置。
  10. 可选配置验证:作为可选的验证步骤,使用RREG命令(23h)读回所有配置寄存器。
  11. 启动转换:发送START/SYNC命令(08h),以连续转换模式启动转换。
  12. 延迟SCCS时间:延迟至少td(SCCS)的时间。
  13. 释放片选信号:将CS拉高以重置串行接口。
  14. 数据读取循环,循环执行以下操作:
    14.1 等待DRDY引脚变为低电平。
    14.2 将CS拉低。
    14.3 延迟至少td(CSSC)的时间。
    14.4 发送24个SCLK上升沿,以从DOUT/DRDY读取转换数据。
    14.5 延迟至少td(SCCS)的时间。
    14.6 将CS拉高。
  15. 进入待机模式
    15.1 将CS拉低。
    15.2 延迟至少td(CSSC)的时间。
    15.3 发送POWERDOWN命令(02h),停止转换并将设备置于待机模式。
    15.4 延迟至少td(SCCS)的时间。
    15.5 将CS拉高。

注:上面的步骤14.1中,等待DRDY引脚变为低电平,但在一些应用中,DRDY引脚可能没有接入MCU。
这种情况可以等待DOUT/DRDY引脚变为低电平,以确认ADC已经完成转化。
但需要注意先拉低片选,再去等待DOUT/DRDY引脚变为低电平。
.
在这里插入图片描述

驱动源码

ads1220.c

/********************************************************************************* @file    ads1220.c* @author  zjq* @brief   ads1220 bsp*******************************************************************************/
#include "ads1220.h"
#include "Gpio.h"
#include "spi.h"/* Cmd ***********************************************************************/
const uint8_t ADS1220_CMD_RESET     = 0x06;
const uint8_t ADS1220_CMD_START     = 0x08;
const uint8_t ADS1220_CMD_RDATA     = 0x10;
const uint8_t ADS1220_CMD_PWR_DOWN  = 0x02;
const uint8_t ADS1220_CMD_READ_REG  = 0x20;
const uint8_t ADS1220_CMD_WRITE_REG = 0x40;/* Static Function ***********************************************************/
static ADS1220_StatusTypedef ADS1220_SPI_Write(uint8_t const *pWrite, uint8_t len);
static ADS1220_StatusTypedef ADS1220_SPI_Receive(uint8_t *pRecv, uint8_t len);
static ADS1220_StatusTypedef ADS1220_WriteRegister(uint32_t regStartAddr, uint32_t regNum, uint8_t *pData);
static ADS1220_StatusTypedef ADS1220_ReadRegister(uint32_t regStartAddr, uint32_t regNum, uint8_t *pData);/*** @brief Use SPI Write to ADS1220* @param pWrite* @param len* @retval ADS1220 Status*/
static ADS1220_StatusTypedef ADS1220_SPI_Write(uint8_t const *pWrite, uint8_t len)
{for (uint8_t i = 0; i < len; i++){if (HAL_OK != HAL_SPI_Transmit(&hspi3, &pWrite[i], 1, 10)){return ADS1220_FAIL;}}return ADS1220_OK;
}/*** @brief Use SPI Read From ADS1220* @param pRecv* @param len* @retval ADS1220 Status*/
static ADS1220_StatusTypedef ADS1220_SPI_Receive(uint8_t *pRecv, uint8_t len)
{uint8_t temp = 0xff;for (uint8_t i = 0; i < len; i++){if (HAL_OK != HAL_SPI_TransmitReceive(&hspi3, &temp, &pRecv[i], 1, 10)){return ADS1220_FAIL;}}return ADS1220_OK;
}/*** @brief Write ADS1220 Register* @param regStartAddr* @param regNum* @param pData* @retval ADS1220 Status*/
static ADS1220_StatusTypedef ADS1220_WriteRegister(uint32_t regStartAddr, uint32_t regNum, uint8_t *pData)
{ADS1220_CS_LOW();HAL_Delay(10);uint8_t temp = ((regStartAddr << 2) & 0x0c);temp |= (regNum - 1) & 0x03;temp |= ADS1220_CMD_WRITE_REG;if (ADS1220_OK != ADS1220_SPI_Write(&temp, 1)){return ADS1220_FAIL;}if (ADS1220_OK != ADS1220_SPI_Write(pData, regNum)){return ADS1220_FAIL;}ADS1220_CS_HIGH();return ADS1220_OK;
}/*** @brief Read ADS1220 Register* @param regStartAddr* @param regNum* @param pData* @retval ADS1220 Status*/
static ADS1220_StatusTypedef ADS1220_ReadRegister(uint32_t regStartAddr, uint32_t regNum, uint8_t *pData)
{ADS1220_CS_LOW();HAL_Delay(5);uint8_t temp = ((regStartAddr << 2) & 0x0c);temp |= (regNum - 1) & 0x03;temp |= ADS1220_CMD_READ_REG;if (ADS1220_OK != ADS1220_SPI_Write(&temp, 1)){return ADS1220_FAIL;}if (ADS1220_OK != ADS1220_SPI_Receive(pData, regNum)){return ADS1220_FAIL;}ADS1220_CS_HIGH();return ADS1220_OK;
}/* Global Function ***********************************************************//*** @brief Initialize ADS1220* @param void* @note* @retval void*/
void ADS1220_Init(void)
{MX_SPI3_Init();ADS1220_Reset();
}/*** @brief Select ADS1220 channel* @param  chl* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Channal_Sel(uint8_t chl)
{static uint8_t recvTemp[4] = {0};static uint8_t sendTemp[4] = {0};switch (chl){case ADS1220_CH0:sendTemp[0] = MUX_P_AIN0_N_AVSS;break;case ADS1220_CH1:sendTemp[0] = MUX_P_AIN1_N_AVSS;break;case ADS1220_CH2:sendTemp[0] = MUX_P_AIN2_N_AVSS;break;case ADS1220_CH3:sendTemp[0] = MUX_P_AIN3_N_AVSS;break;}sendTemp[0] |= GAIN_1 | PGA_BYPASS;sendTemp[1] = DR_45SPS | MODE_NORMAL | CM_SINGLE | TS_OFF | BCS_OFF;sendTemp[2] = VREF_EXT_REF0_PINS | FIR_50_60 | PSW_OPEN | IDAC_OFF;sendTemp[3] = I1MUX_DISABLED | I2MUX_DISABLED | DRDY_ON_DOUT_DRDY;ADS1220_WriteRegister(0x00, 4, sendTemp);HAL_Delay(5);ADS1220_ReadRegister(0x00, 4, recvTemp);for (uint8_t i = 0; i < 4; i++){if (sendTemp[i] != recvTemp[i]){return ADS1220_FAIL;}}return ADS1220_OK;
}/*** @brief Start ADS1220 ADC convert* @param  void* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Start(void)
{ADS1220_CS_LOW();if (ADS1220_OK != ADS1220_SPI_Write(&ADS1220_CMD_START, 1)){ADS1220_CS_HIGH();return ADS1220_FAIL;}ADS1220_CS_HIGH();return ADS1220_OK;
}/*** @brief Reset ADS1220* @param  void* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Reset(void)
{ADS1220_CS_LOW();if (ADS1220_OK != ADS1220_SPI_Write(&ADS1220_CMD_RESET, 1)){ADS1220_CS_HIGH();return ADS1220_FAIL;}ADS1220_CS_HIGH();return ADS1220_OK;
}/*** @brief Wait ADS1220 DRDY pin* @param  timeout* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Wait_DRDY(uint8_t timeout)
{uint32_t beginTime = HAL_GetTick();ADS1220_CS_LOW();HAL_Delay(5);while ((HAL_GetTick() - beginTime) < timeout){if (ADS1220_DRDY_RDY == ADS1220_DRDY_GET()){ADS1220_CS_HIGH();return ADS1220_OK;}}ADS1220_CS_HIGH();return ADS1220_FAIL;
}/*** @brief Read ADS1220 ADC convert result* @param  void* @note* @retval Convert result*/
int32_t ADS1220_Read_Data(void)
{uint8_t  temp[3]   = {0};uint32_t returnVal = 0;ADS1220_CS_LOW();if (ADS1220_OK != ADS1220_SPI_Write(&ADS1220_CMD_RDATA, 1)){return 0;}if (ADS1220_OK != ADS1220_SPI_Receive(temp, 3)){return 0;}ADS1220_CS_HIGH();returnVal = (temp[0] << 16) | (temp[1] << 8) | (temp[2]);if (returnVal & 0x800000){returnVal |= 0xff000000;}return returnVal;
}/*** @brief ADS1220 ADC convert once and read result* @param  chl* @note* @retval Convert result*/
int32_t ADS1220_ReadConvertOnce(uint8_t chl)
{ADS1220_Channal_Sel(chl);ADS1220_Start();ADS1220_Wait_DRDY(30);return ADS1220_Read_Data();
}

ads1220.h

/********************************************************************************* @file    ads1220.h* @author  zjq* @brief   ads1220 bsp*******************************************************************************/
#ifndef __ADS_1220_H
#define __ADS_1220_H#include "stdint.h"
#include "sys.h"/* 函数返回值 */
typedef enum
{ADS1220_OK   = 0x00U,ADS1220_FAIL = 0x01U,
} ADS1220_StatusTypedef;/* 通道选择 */
#define ADS1220_CH0          (0)
#define ADS1220_CH1          (1)
#define ADS1220_CH2          (2)
#define ADS1220_CH3          (3)/* Reg0 [7:4]MUX */
#define MUX_P_AIN0_N_AIN1    (0X00U)
#define MUX_P_AIN0_N_AIN2    (0X10U)
#define MUX_P_AIN0_N_AIN3    (0X20U)
#define MUX_P_AIN1_N_AIN2    (0X30U)
#define MUX_P_AIN1_N_AIN3    (0X40U)
#define MUX_P_AIN2_N_AIN3    (0X50U)
#define MUX_P_AIN1_N_AIN0    (0X60U)
#define MUX_P_AIN3_N_AIN2    (0X70U)
#define MUX_P_AIN0_N_AVSS    (0X80U)
#define MUX_P_AIN1_N_AVSS    (0X90U)
#define MUX_P_AIN2_N_AVSS    (0XA0U)
#define MUX_P_AIN3_N_AVSS    (0XB0U)
#define MUX_P_REFP_N_REFN    (0XC0U)
#define MUX_P_AVDD_N_AVSS    (0XD0U)
#define MUX_PN_SHORT_HALFVDD (0XE0U)
/* Reg0 [3:1]GAIN */
#define GAIN_1               (0X00U)
#define GAIN_2               (0X02U)
#define GAIN_4               (0X04U)
#define GAIN_8               (0X06U)
#define GAIN_16              (0X08U)
#define GAIN_32              (0X0AU)
#define GAIN_64              (0X0CU)
#define GAIN_128             (0X0EU)
/* Reg0 [0]PGA_BYPASS */
#define PGA_BYPASS           (0X01U)
#define PGA_AMP              (0X00U)
/* Reg1 [7:5]DR */
#define DR_20SPS             (0X00U)
#define DR_45SPS             (0X20U)
#define DR_90SPS             (0X40U)
#define DR_175SPS            (0X60U)
#define DR_330SPS            (0X80U)
#define DR_600SPS            (0XA0U)
#define DR_1000SPS           (0XC0U)
/* Reg1 [4:3]MODE */
#define MODE_NORMAL          (0X00U)
#define MODE_DUTY            (0X08U)
#define MODE_TURBO           (0X10U)
/* Reg1 [2]CM */
#define CM_SINGLE            (0X00U)
#define CM_CONTINUE          (0X04U)
/* Reg1 [1]TS */
#define TS_ON                (0X02U)
#define TS_OFF               (0X00U)
/* Reg1 [0]BCS */
#define BCS_ON               (0X01U)
#define BCS_OFF              (0X00U)
/* Reg2 [7:6]VREF */
#define VREF_INTERNAL        (0X00U)
#define VREF_EXT_REF0_PINS   (0X40U)
#define VREF_EXT_REF1_PINS   (0X80U)
#define VREF_AVDD            (0XC0U)
/* Reg2 [5:4]50/60 */
#define FIR_NONE             (0X00U)
#define FIR_50_60            (0X10U)
#define FIR_50               (0X20U)
#define FIR_60               (0X30U)
/* Reg2 [3]PSW */
#define PSW_OPEN             (0X00U)
#define PSW_CLOSES           (0X08U)
/* Reg2 [2:0]IDAC */
#define IDAC_OFF             (0X00U)
#define IDAC_10uA            (0X01U)
#define IDAC_50uA            (0X02U)
#define IDAC_100uA           (0X03U)
#define IDAC_250uA           (0X04U)
#define IDAC_500uA           (0X05U)
#define IDAC_1000uA          (0X06U)
#define IDAC_1500uA          (0X07U)
/* Reg3 [7:5]I1MUX */
#define I1MUX_DISABLED       (0X00U)
#define I1MUX_AIN0           (0X20U)
#define I1MUX_AIN1           (0X40U)
#define I1MUX_AIN2           (0X60U)
#define I1MUX_AIN3           (0X80U)
#define I1MUX_REFP0          (0XA0U)
#define I1MUX_REFN0          (0XC0U)
/* Reg3 [4:2]I2MUX */
#define I2MUX_DISABLED       (0X00U)
#define I2MUX_AIN0           (0X04U)
#define I2MUX_AIN1           (0X08U)
#define I2MUX_AIN2           (0X0CU)
#define I2MUX_AIN3           (0X10U)
#define I2MUX_REFP0          (0X14U)
#define I2MUX_REFN0          (0X18U)
/* Reg3 [1]DRDYM */
#define DRDY_ON_DOUT_DRDY    (0X02U)
#define DRDY_ON_DRDY_ONLY    (0X00U)/* Global Function ***********************************************************/
/*** @brief Initialize ADS1220* @param void* @note* @retval void*/
void ADS1220_Init(void);/*** @brief Select ADS1220 channel* @param  chl* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Channal_Sel(uint8_t chl);/*** @brief Start ADS1220 ADC convert* @param  void* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Start(void);/*** @brief Reset ADS1220* @param  void* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Reset(void);/*** @brief Wait ADS1220 DRDY pin* @param  timeout* @note* @retval ADS1220 Status*/
ADS1220_StatusTypedef ADS1220_Wait_DRDY(uint8_t timeout);/*** @brief Read ADS1220 ADC convert result* @param  void* @note* @retval Convert result*/
int32_t ADS1220_Read_Data(void);/*** @brief ADS1220 ADC convert once and read result* @param  chl* @note* @retval Convert result*/
int32_t ADS1220_ReadConvertOnce(uint8_t chl);#endif

相关文章:

ADS1220高精度ADC(TI)——应用 源码

文章目录 德州仪器ADS1220概述资料引脚&封装布线寄存器配置寄存器0&#xff08;00h&#xff09;配置寄存器1&#xff08;01h&#xff09;配置寄存器2&#xff08;02h&#xff09;配置寄存器3&#xff08;03h&#xff09; 连续转换流程驱动源码ads1220.cads1220.h 德州仪器A…...

mysql-Java手写分布式事物提交流程

准备 innodb存储引擎开启支持分布式事务 set global innodb_support_axon分布式的流程 详细流程&#xff1a; XA START ‘a’; 作用&#xff1a;开始一个新的XA事务&#xff0c;并分配一个唯一的事务ID ‘a’。 说明&#xff1a;在这个命令之后&#xff0c;所有后续的SQL操…...

红黑树:数据世界的平衡守护者

在 C 算法的神秘森林里&#xff0c;红黑树是一棵充满智慧的 “魔法树”。它既不像普通二叉搜索树那样容易失衡&#xff0c;也不像 AVL 树对平衡要求那么苛刻。作为 C 算法小白&#xff0c;今天就和大家一起深入探索红黑树的奥秘&#xff0c;看看它是如何成为数据世界的平衡守护…...

哈夫曼树完全解析:从原理到应用

目录 一、核心概念 二、构造全流程解析 三、编码生成机制 四、C语言实现关键代码 五、核心特性深度解读 六、现代应用场景 七、压缩实战演示 一、核心概念 哈夫曼树&#xff08;最优二叉树&#xff09;是带权路径长度&#xff08;WPL&#xff09;最短的树形结构&#x…...

如何在 Windows 命令提示符中创建多个文件夹和多个文件

如何在 Windows 命令提示符中创建多个文件夹和多个文件 虽然大多数用户习惯使用 Windows 图形界面来创建文件夹&#xff0c;但如果你需要一次性创建多个文件夹或文件&#xff0c;如同在类Unix系统中可以使用mkdir和touch命令一样&#xff0c;windows下也有创建目录和文件的对应…...

【Java】Spring的声明事务在多线程场景中失效问题。

大家都知道Spring的声明式事务在多线程当中会失效&#xff0c;来看一下如下案例。 按照如下方式&#xff0c;b()方法抛出异常,由于父子线程导致事务失效&#xff0c;a()会成功插入,但是b()不会。 因此成功插入一条数据&#xff0c;事务失效。 Component public class UserServ…...

多平台图标设计与管理的终极解决方案

IconWorkshop Pro 是一款由Axialis团队开发的专业图标设计与制作软件&#xff0c;专注于为设计师、开发者及企业用户提供高效且灵活的图标创作解决方案。该软件凭借其强大的功能与跨平台适配性&#xff0c;成为Windows、macOS、iOS、Android等多系统图标设计的首选工具之一。 …...

【搭建Node-RED + MQTT Broker实现AI大模型交互】

搭建Node-RED MQTT Broker实现AI大模型交互 搭建Node-RED MQTT Broker实现AI大模型交互一、系统架构二、环境准备与安装1. 安装Node.js2. 安装Mosquitto MQTT Broker3. 配置Mosquitto4. 安装Node-RED5. 配置Node-RED监听所有网络接口6. 启动Node-RED 三、Node-RED流程配置1. …...

小结: js 在浏览器执行原理

浏览器多进程与多线程 现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现&#xff0c;以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析&#xff1a; ------------------- ------------------- -----------…...

C++核心编程--2 引用

引用就是给变量起别名&#xff0c;操作引用就等于操作原始变量。 2.1 引用基本用法 int var 10; int & r_var var; 2.2 注意事项 声明时必须初始化不允许更改引用指向的原始变量 2.3 引用作为函数参数传递 简化指针修饰函数参数 2.4 引用作为函数返回值 不要返回…...

音频/AI/BLE/WIFI/玩具/商业等方向的论坛网站总结

我爱音频网 我爱音频网 - 我们只谈音频&#xff0c;丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 中国人工智能学会 中国人工智能学会 (caai.cn) AIIA人工智能网 https://www.aiiaw.com/ 世界人工智能论坛 世界人工智能论坛 - (amtbbs.org) 36氪 36氪_让一部分人先…...

告别碎片化!MCP 带来 AI Agent 开发生态的革命性突破

引言&#xff1a; 在当今的智能客服系统开发中&#xff0c;开发者常常面临一个棘手的挑战&#xff1a;需要整合用户的 CRM 数据、知识库和实时聊天记录。然而&#xff0c;由于缺乏统一的标准&#xff0c;每个团队都不得不手动实现这些集成。这不仅延长了开发周期&#xff0c;还…...

centos7部署mysql5.7

1.下载mysql的官方yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安装yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm3.安装秘钥文件 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20224.安装mysql5.7…...

linux dbus

Linux D-Bus(Desktop Bus)是一种进程间通信(IPC)机制,主要用于Linux桌面环境和系统服务之间的消息传递。它允许不同的应用程序或系统组件以高效、安全的方式相互通信,是现代Linux桌面(如GNOME、KDE)的核心基础设施之一。 1. D-Bus 的核心概念 消息总线(Message Bus):…...

计量——异方差的检验及其修正

目录 1.异方差的检验 1 BP检验 2white检验 2.异方差的修正 1.异方差的检验 1 BP检验 选择检验方法&#xff1a;BP BP检验的实际步骤&#xff08;非机器&#xff09;&#xff1a; 1.y对所有x进行回归&#xff0c;得到残差u。计算残差的平方u^2 2.u^2对所有x进行回归&#…...

操作系统学习笔记第3章 内存管理(灰灰题库)

1. 单选题 某页式存储管理系统中&#xff0c;主存为 128KB&#xff0c;分成 32 块&#xff0c;块号为 0、1、2、3、…、31。某作业有 5 块&#xff0c;其页号为 0、1、2、3、4&#xff0c;被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70]&#xff08;其中方括号中…...

vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)

canvas-editor-vue 这是canvas-editor项目的vue版本,我封装成组建了,当然了这是个已经把canvas-editor封装好的的Vue项目 项目地址GitHub地址:GitHub - aini-aini/canvas-editor-vue: this is a project than can be used in vue project as Componentthis is a project than…...

人体肢体工作识别-一步几个脚印从头设计数字生命——仙盟创梦IDE

人体肢体识别是借助计算机视觉、传感器等技术&#xff0c;对人体各肢体的位置、动作、姿态等进行检测与分析的技术。其在医疗健康、智能交互、运动训练、安全监控等多个领域具有重要价值&#xff0c; 示例代码 import cv2 import mediapipe as mp import numpy as np import c…...

【重磅】配电网智能软开关和储能联合规划

目录 1 主要内容 目标函数 数据说明 节点系统图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《具有源荷不平衡特性的配电网智能软开关和储能联合规划》部分模型&#xff0c;未考虑聚类分析和分布鲁棒部分&#xff0c;就智能软开关和储能联合规划部分进行了…...

实验6 电子邮件

实验6 电子邮件 1、实验目的 理解电子邮件系统基本结构 理解客户端和服务器端&#xff0c;以及服务器之间的通信 分析理解SMTP&#xff0c;POP3协议 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要求&#xff1a;Linux/ Windows 操作系统 3、实验内容…...

NHANES指标推荐:OBS

文章题目&#xff1a;Association between oxidative balance score and all-cause and cancer-specific mortality among cancer survivors DOI&#xff1a;10.3389/fimmu.2025.1541675 中文标题&#xff1a;癌症幸存者氧化平衡评分与全因死亡率和癌症特异性死亡率之间的关联 …...

python-修改图片背景色

在Python中&#xff0c;可以使用图像处理库&#xff08;如OpenCV或Pillow&#xff09;来修改图片的背景色。通常&#xff0c;修改背景色的流程包括以下步骤&#xff1a; 1、对图片进行分割&#xff0c;识别前景和背景。 2、对背景区域进行颜色替换。 下面是两种实现方法&#x…...

数据结构与算法--顺序表--单链表

一 顺序表 需要指向存储位置的基地址分配一段连续的内存用length记录实际的元素的个数&#xff0c;也即顺序表的长度&#xff0c;因为顺序表是允许删除和插入元素的不需要定义数组 1.1 普通结构体数组实现版本&#xff0c;实现白色的点以一定的步长移除画面&#xff0c;大量fo…...

MATLAB安装全攻略:常见问题与解决方案

MATLAB安装常见问题与解决方案 一、系统兼容性验证 安装前需确认操作系统满足MATLAB版本要求&#xff1a; Windows 10版本1903及以上&#xff08;64位&#xff09;macOS Monterey 12.6及以上Ubuntu 22.04 LTS及以上 验证命令示例&#xff1a; # Linux系统验证 lsb_release…...

constexpr 关键字的意义(入门)

author: hjjdebug date: 2025年 05月 15日 星期四 16:03:33 CST description: constexpr 关键字的意义(入门) constexpr 是c11 引入的一个关键字, 代表了一种属性. 文章目录 1. constexpr 修饰的变量, 在编译期间就可以得到其数值.2. constexpr 修饰的函数, 可以在编译期间被调…...

aptitude 深度教程:从基础到生产实践

目录 一、aptitude 基础:核心概念与环境准备 1.1 aptitude 是什么? 1.2 安装与环境配置 二、aptitude 核心操作:从命令行到交互式界面 2.1 命令行基础操作 2.2 交互式界面(TUI)入门 三、高级功能:依赖管理与版本控制 3.1 依赖冲突解决实战 3.2 版本锁定与降级 3…...

嵌入式开发学习日志(数据结构--双链表)Day21

一、双链表 1.定义 双向链表是在单链表的每个结点中&#xff0c;再设置一个指向其钱去节点的指针域。 2、声明文件 3、创建表头 4、头插 5、 遍历 6、尾插、 7、指定插 8、查找 9、修改 10.、删除 11、逆序 12、销毁链表 13、main.c 三、扩展&#xff1a;工程管理工具&#…...

抢购Python代码示例与技术解析

引言&#xff1a;抢购系统的技术挑战 在当今电子商务高度发达的时代&#xff0c;抢购活动已成为各大电商平台吸引用户的重要手段。然而&#xff0c;高并发、低延迟的抢购场景对系统设计提出了严峻挑战。本文将提供一个完整的Python抢购代码示例&#xff0c;并深入分析其技术实…...

undefined reference to CPUAllocatorSingleton::instance

它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量&#xff0c;但没有提供它的定义。 这个错误是链接器无法找到 CPUAllocatorSingleton::instance 的定义。它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量&#xff0c;但没有提供它的定…...

【c语言】动态内存分配

文章标题 一、为什么要进行动态内存管理二、malloc和free2.1. malloc2.2. free2.3. 举例 三、calloc和realloc3.1. calloc3.2. realloc 四、常见的动态内存错误4.1. 对NULL指针的解引用操作4.2. 对动态开辟空间的越界访问4.3. 对非动态开辟内存使用free释放4.4. 使用free释放⼀…...

深入理解JavaScript中的闭包:原理、应用与常见问题

引言 闭包(Closure)是JavaScript中一个既强大又容易让人困惑的概念。理解闭包对于成为一名优秀的JavaScript开发者至关重要。本文将深入探讨闭包的工作原理、实际应用场景以及常见问题&#xff0c;帮助你彻底掌握这一重要概念。 什么是闭包&#xff1f; 闭包是指那些能够访问…...

IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖

2025 MVNOs 世界大会于5月12日至14日在奥地利维也纳举行&#xff0c;汇聚了来自50多个国家的550余位行业领袖&#xff0c;共同探讨移动虚拟网络运营商&#xff08;MVNO&#xff09;领域的变革趋势。本届大会聚焦数字化转型、技术创新与战略合作&#xff0c;其中IPLOOK凭借其创新…...

为什么elasticsearch配置文件JVM配置31G最佳

Elasticsearch的JVM堆内存配置为32GB被视为最佳实践&#xff0c;主要基于以下综合技术原理和性能优化考量&#xff1a; 1. ‌JVM指针压缩机制优化内存效率‌ 当堆内存≤32GB时&#xff0c;JVM启用‌对象指针压缩&#xff08;Compressed Ordinary Object Pointers, COOP&#…...

单片机开发软件

目录 纯编码 vscode Ardunio Keil 1. 集成化开发环境&#xff08;IDE&#xff09; 2. 多架构芯片支持 3. 高效的代码生成与优化 4. 强大的调试与仿真功能 5. 丰富的库函数与生态系统 6. 教育与企业级适用性 典型应用场景 半编码半图形化 STM32CUBEIED 1. 图形化配置…...

Java随机生成邀请码 (包含字母大小写+数字)

前言: 目前我们生成的是6位包含数字和大小写字母的随机邀请码, 并且代码中已经有了处理冲突的机制确保了邀请码的唯一性如(①生成随机邀请码后会检查数据库中是否已存在②如果存在冲突,会尝试最多10次重新生成③如果多次尝试仍失败&#xff0c;会使用"U"用户ID派生的…...

mybatis-plus配置逻辑删除

在实体类中标记软删除字段使用注解 TableLogic 标记该字段为软删除字段 import com.baomidou.mybatisplus.annotation.*;public class YourEntity {// ...其他字段TableLogicprivate Integer isDeleted;// getter/setter }yml配置 # 逻辑已删除值 logicDeleteValue: 2 # 逻辑…...

第二十五天打卡

常见报错类型 try-except-else-finally 语句 首先执行try语句&#xff0c;若正确直接执行else语句 若try语句发生错误&#xff0c;则判断错误类型&#xff0c;执行错误类型对应的except语句&#xff0c;不执行else语句 finally语句无条件执行&#xff0c;多用于资源保存&…...

JESD204 ip核使用与例程分析(一)

JESD204 ip核使用与例程分析(一) JESD204理解JESD204 与JESD204 PHY成对使用原因JESD204B IP核JESD204B IP核特点JESD204B IP核配置第一页第二页第三页第四页JESD204 PHY IP核配置第一页第二页JESD204理解 JESD204B是一种针对ADC、DAC设计的传输接口协议。此协议包含四层, …...

Synchronized详解及高频面试问答

目录 JVM简述 Synchronized详解及面试高频问答 而synchronized是什么&#xff0c;可以解决什么问题&#xff1f; synchronized怎么使用&#xff1f; 锁升级升级了什么&#xff1f; 为什么要这样做锁升级&#xff1f; 锁升级的过程是怎样的&#xff1f;为什么会有偏向锁&…...

【LLIE专题】基于码本先验与生成式归一化流的低光照图像增强新方法

GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval&#xff08;2024&#xff0c;ECCV&#xff09; 专题介绍一、研究背景二、GLARE方法阶段一&#xff1a;正常光照代码本学习&#xff08;Normal-Light Codebook Learning&#xff09…...

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…...

Linux云计算训练营笔记day08(MySQL数据库)

Linux云计算训练营笔记day08&#xff08;MySQL数据库&#xff09; 目录 Linux云计算训练营笔记day08&#xff08;MySQL数据库&#xff09;数据准备修改更新update删除delete数据类型1.整数类型2.浮点数类型(小数)3.字符类型4.日期5.枚举: 表头的值必须在列举的值里选择拷贝表复…...

从基础到实习项目:C++后端开发学习指南

在当今技术快速迭代的背景下&#xff0c;后端开发作为软件工程的核心支柱持续发挥着关键作用。C凭借其卓越的性能表现和系统级控制能力&#xff0c;依然是构建高性能后端服务的首选语言之一。本文将系统性地解析现代C后端开发的核心技术体系&#xff0c;包括从语言特性精要到架…...

jedis+redis pipeline诡异的链接损坏、数据读取异常问题解决

文章目录 问题现象栈溢出&#xff08;不断的重连&#xff09;读取超时未知响应尝试读取损坏的链接读取到的数据和自己要读的无关&#xff0c;导致空指针、类型转换错误&#xff0c;数据读取错乱 问题写法问题分析修复注意点 问题现象 栈溢出&#xff08;不断的重连&#xff09…...

十、HQL:排序、联合与 CTE 高级查询

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月15日 专栏&#xff1a;Hive教程 Apache Hive 作为大数据领域主流的数据仓库解决方案&#xff0c;其查询语言 HQL (Hive Query Language) 是数据分析师和工程师日常工作的核心。除了基础的 SELECT-FROM-WHERE&#xff0c;HQ…...

数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)

目录 一 斐波那契数列&#xff08;递归算法&#xff09; 定义 原理 二 冒泡排序 定义 排序思路 函数原型 参数详解&#xff1a; 算法分析&#xff1a; 1. 使用函数库的qsort函数 2. 自定义冒泡排序 三 选择排序 定义 排序思路 四 插入排序 定义 排序思路 五 快速…...

NetSuite CSV导入Item Fulfillment的功能测试

上一篇我们说过如何通过CSV导入更新IF上的Department/Class信息&#xff0c;这篇是来测试一下如果SO在Pending Fulfillment的状态下通过CSV导入IF&#xff0c;这个新版本的一个功能&#xff0c;刚好将测试的过程与结果与大家分享~ 准备文件 External ID是外部ID&#xff1b; …...

网络原理 | 网络基础概念复习

目录 网络中的重要概念 IP地址 端口号 协议 五元组 协议分层 OSI七层网络模型 TCP/IP 五层&#xff08;四层&#xff09;模型 网络设备所在的分层 封装和分用 网络中的重要概念 IP地址 IP地址主要用于标识网络主机、其他网络设备的网络地址。在网络数据传输中&#…...

Vsan数据恢复——Vsan上虚拟机不可用,虚拟机组件信息破坏的数据恢复

Vsan数据恢复环境&#xff1a; 一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用&#xff0c;存储内的数据丢失。 Vsan数据恢复过程&#xff1a; 1、将故障存储设备断电&#xff0c;将存储内的硬盘编号后取出。硬件工程师检测后没有发…...

V837s-LAN8720A网口phy芯片调试

目录 前言 一、LAN8720A 芯片概述 二、硬件连接 三、设备树配置 四、内核配置 五、网口调试 总结 前言 在嵌入式系统开发中,网络连接是至关重要的一部分。v837s开发板搭载了LAN8720A系列的网口PHY芯片,用于实现以太网连接。在开发过程中,对于网口的稳定性和性能的调试至…...