ADN8810

ADN8810总结

1.简介

在这里插入图片描述
​ ADN8810是高精度12位电流源低噪声长期稳定电流输出从0ma到300ma输出故障指示低漂移可编程最大电流24引脚,4mm × 4mm LFCSP 3线串行接口。

2.引脚说明

在这里插入图片描述

ADN8810的SB引脚可以主动控制是否需要输出电流,在高电平的时候输出电流。

3.通讯格式与时序

在这里插入图片描述
需要注意的是A3必须是逻辑低电平,数据传输时RSET始终应保持逻辑高,只有需要复位时,将其拉低40ns以上再拉高即可复位数据寄存器输出0ma。

4.实例

由于时序比较简单,官方并未给出对应的驱动程序,本人使用STM32平台HAL库完成该芯片的驱动。

#ifndef __ADN8810_H
#define __ADN8810_H

/*

Io = Code*(Vref/4096)*(1/Rsn)*(Rsn/150000+0.1)

*/
#define CS_H		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define CS_L		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
//#define SCLK_H	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET)
//#define SCLK_L	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET)
//#define SDI_H		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_SET)
//#define SDI_L		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_6, GPIO_PIN_RESET)
#define RESET_H	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET)
#define RESET_L	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET)
#define SB_H		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);
#define SB_L 		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET);

#include "main.h"

#define VREF  4.096 //单位V

#define RSN    1.63 //单位Ω
#define KI     RSN*61440/((RSN+1500)*VREF)   // mA   
//#define 
extern SPI_HandleTypeDef hspi1;
void ADN8810_OUT_Current(uint8_t ADDR,double Current);
void delay100ns(void);
void ADN8810_Write(uint8_t ADDR, uint16_t DACdata);

typedef enum{
	ADN8810_ADDR0 = 0x00,

}ADN8810_ADDR;

typedef struct{
	char          Info[20];
	ADN8810_ADDR  ADDR;
	double        Current_Target;
	double        Currenr_Measure; 
}ADN8810;

#endif


#include "ADN8810.h"
void delay100ns(void)
{
	__NOP();__NOP();__NOP();__NOP;__NOP();__NOP();__NOP();__NOP();
}	

void ADN8810_Write(uint8_t ADDR, uint16_t DACdata)
{
	  uint16_t SendValue;
	  DACdata &=0x0fff;//高四位清0
	  SendValue = ADDR;
	  SendValue = SendValue <<12;//ADDR左移12位到SendValue的高四位
	  SendValue = SendValue + DACdata;	

		CS_L;
		//开始传输数据
		HAL_SPI_Transmit(&hspi1,(uint8_t *)&SendValue,1,10);
	 	HAL_Delay(10);	
		//拉高CS
		CS_H;
}

void ADN8810_OUT_Current(uint8_t ADDR,double Current)
{
	uint32_t DATA0;
	DATA0 = (Current*KI);
	
	if(DATA0>=0x0fff)
	{
		DATA0 = 0x0fff;
	}
	ADN8810_Write(ADDR,DATA0);
}

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  /* USER CODE BEGIN 2 */
  CS_H;
  RESET_H;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		
		CACurren=(int)(100/300.0*4095);
		ADN8810_Write(0x00,CACurren);  
        //SB_H;  //SB在硬件设计上已经拉高了,所以这里不使用
    HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}


  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于驱动5个ADN8810的情况,您需要确保每个ADN8810器件都有足够的电源供应和控制信号。以下是一种可能的连接方案: 1. 电源供应:首先,您需要提供足够的电源来为这五个ADN8810器件提供电源。每个ADN8810都需要一个5V的电源,并且最大工作电流为50mA。您可以使用一个适当的电源单元或电源管理器件来为它们提供稳定的电源。 2. 控制信号:ADN8810器件有多个控制引脚需要连接。这些引脚包括时钟信号(CLK)、数据信号(DATA)和使能信号(EN)。对于5个ADN8810器件,您需要确保每个器件的控制信号连接到正确的信号源。您可以使用一个多路复用器(MUX)或者GPIO扩展器等来扩展您的微控制器的IO口,以满足这些连接要求。 3. 数据输入:您可以通过将数据输入连接到其中一个ADN8810器件的DATA引脚来将数据传输到这五个器件。然后,通过时钟信号(CLK)依次将数据传输到其他四个器件。 请注意,上述方案是基于每个ADN8810器件的独立控制。如果您需要同步操作这五个器件,您可能需要使用更复杂的控制电路或者使用专门的驱动芯片。 此外,为了确保驱动正常,您还需要遵循ADN8810的数据手册和引脚定义,以正确连接电源和信号线,并配置器件的相关寄存器或寄存器位。建议在设计和连接之前详细阅读ADN8810的数据手册以获取更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值