【嵌入式硬件芯片开发笔记】4-20mA DAC芯片AD5421配置流程

news2024/11/19 1:39:40

【嵌入式硬件芯片开发笔记】4-20mA DAC芯片AD5421配置流程
16位、串行输入、环路供电、4 mA至20 mA DAC
可用于HART协议相关电路 同AD5700配合使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
AD5421的SPI和普通的不一样
回读时要发两段 CS中间拉高一次

数据在SCLK上升沿逐个输出,而且在 SCLK下降沿有效
固CPOL为低电平,CPHA为2 edge
可选择开启CRC校验

在这里插入图片描述
一般接的是4-20mA

在加载DAC、强制报警电流、复位、启动VLOOP/温度测量 或无操作命令字节后写入的16 Bits数据字为无关位
上电后寄存器复位,看门狗开启,默认值1s,在1s内没有收到SPI信号,则FAULT置高。

开始运行

  1. 发送RESET命令,延时50us
  2. 读写寄存器操作
  3. 最后开启功能

初始化

  1. 环路电流为4-20mA,通过读写DAC控制器可以输出环路电流大小,输出20mA就是写入0xFFFF
    在这里插入图片描述
  2. 写入控制寄存器,使其为0xFC00,禁用看门狗,不进行写入故障回读,检测到SPI故障时不将环路电流驱动至报警值,其他默认
    D8、D7可配置ADC测量功能
    在这里插入图片描述
  3. 故障寄存器只读,可以读取故障,同时FAULT引脚置高时为故障,读故障寄存器后,自动复位
  4. 失调、增益调整寄存器,用于配置偏移
  5. 发送加载DAC命令,输出电流
  6. 开启ADC,控制寄存器D7置1,,发送ADC读取命令,在故障寄存器内读ADC状态

代码例程

/*!
 * @brief       	操作AD5421
 *
 * @param 	[in]	hspi: AD5421对应的SPI
 *					[in]	add: 寄存器地址
 *					[in]	data: 数据(读数据可以不管)
 *					[in]	WriteNotRead: true为写,false为读
 *
 * @return				dat_16: 返回数据
 */
uint16_t Ctrl_AD5421(SPI_HandleTypeDef *hspi,uint8_t add,uint16_t data,bool WriteNotRead)
{
	uint16_t dat_16=0;
	uint8_t dat_buf[3];
	memset(dat_buf,0,sizeof(dat_buf));
	
	if(WriteNotRead)
	{
		dat_buf[0]=add&0x7F;
		dat_buf[1]=data>>8;
		dat_buf[2]=data&0x00FF;
		SPI_Send_x_Read_y(&hspi2,dat_buf,3,0,30,true);
	}
	else
	{
		dat_buf[0]=add|0x80;
		dat_buf[1]=0;
		dat_buf[2]=0;
		SPI_Send_x_Read_y(&hspi2,dat_buf,3,0,30,true);
		dat_buf[0]=AD5421_NOP;
		dat_16=SPI_Send_x_Read_y(&hspi2,dat_buf,1,2,30,false)&0x0000FFFF;
	}
	
	return dat_16;
}

/*!
 * @brief       	操作AD5421的DAC
 *
 * @param 	[in]	current_v: 要输入的电流值
 *					[in]	WriteNotRead: true为写入并加载DAC,false为读DAC并返回电流值
 *
 * @return				current: 返回的DAC寄存器中对应的电流值
 */
float Ctrl_AD5421_DAC(float current_v,bool WriteNotRead)
{
	float current=0.0f;
	current=current_v;
	uint16_t dat_16=0;
	if(WriteNotRead)
	{		
		if(current>19.9998f)
		{
			dat_16=0xFFFF;
		}
		else if(current<4.0f)
		{
			dat_16=0;
		}
		else
		{
			dat_16=(current-4.0f)*0x10000/16.0f;
		}
		Ctrl_AD5421(&hspi2,AD5421_DAC,dat_16,true);	
		Ctrl_AD5421(&hspi2,AD5421_Load_DAC,0,true);
	}
	else
	{
		dat_16=Ctrl_AD5421(&hspi2,AD5421_DAC,0,false);
		current=16.0f*dat_16/0x10000+4.0f;
		Ctrl_AD5421(&hspi2,AD5421_Load_DAC,0,true);
	}
	return current;
}

/*!
 * @brief       	操作AD5421的ADC
 *
 * @param 	[in]	adc_flag: 0 测量VLOOP,1 测量芯片温度
 *					[in]	EnableNotDisable: true为写入并加载DAC,false为读DAC并返回电流值
 *
 * @return				dat_float: ADC测量值
 */
float Ctrl_AD5421_ADC(uint8_t adc_flag,bool EnableNotDisable)
{
	float dat_float=0.0f;
	uint16_t dat_16=0;	
	if(EnableNotDisable)
	{
		dat_16=Ctrl_AD5421(&hspi2,AD5421_Control,0,false);
		Ctrl_AD5421(&hspi2,AD5421_Control,dat_16|(1<<7),true);
	}
	else
	{
		Ctrl_AD5421(&hspi2,AD5421_Control,dat_16&(~(1<<7)),true);
		return dat_float;
	}
	
	Ctrl_AD5421(&hspi2,AD5421_Load_ADC,0,true);
	delay_us(50);
	
	if(adc_flag)
	{
		dat_16=Ctrl_AD5421(&hspi2,AD5421_Control,0,false);
		Ctrl_AD5421(&hspi2,AD5421_Control,dat_16|(1<<8),true);
		dat_16=Ctrl_AD5421(&hspi2,AD5421_Fault,0,false);	
		dat_float= (-1.559)*(dat_16&0x00FF)+312;
		printf("[INFO] AD5421_TEMP: %0.4f\n",dat_float);
	}
	else
	{
		dat_16=Ctrl_AD5421(&hspi2,AD5421_Control,0,false);
		Ctrl_AD5421(&hspi2,AD5421_Control,dat_16&(~(1<<8)),true);
		dat_16=Ctrl_AD5421(&hspi2,AD5421_Fault,0,false);
		dat_float=2.5f/256.0f*(dat_16&0x00FF);
		printf("[INFO] AD5421_VLOOP: %0.4f\n",dat_float);
	}
	return dat_float;
}

/*!
 * @brief       	初始化AD5421
 *
 * @param 				None
 *
 * @return				None
 */
void Init_AD5421(void)
{	
	Ctrl_AD5421(&hspi2,AD5421_RESET,0,true);
	delay_us(50);
	
	Ctrl_AD5421(&hspi2,AD5421_Control,0xFC00,true);	
	
	Ctrl_AD5421_DAC(20,true);
	
	Ctrl_AD5421_ADC(0,true);
}

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

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

相关文章

使用方法丨艾美捷Caspase-1活性分析试剂盒介绍

如何动态检测活细胞内的Caspase-1的活性&#xff0c;做更真实的实验&#xff1f;艾美捷推荐Immunochemistry Tech&#xff08;ICT&#xff09;的FLICA系列科研工具&#xff0c;轻松检测活细胞Caspase-1 活性。 艾美捷Immunochemistry Caspase-1活性分析试剂盒原理&#xff1a…

Qt第三十四章:总结【隐藏标题栏边框、隐藏背景、窗体透明】

目录 隐藏标题栏边框 ①隐藏标题栏代码&#xff1a; ​编辑②自定义标题栏(可以直接Copy) 使用 隐藏背景 ①隐藏背景代码,此时背景上的样式都是无效的。 ②自定义背景,通过重写paintEvent事件来完成 中间绘制的部分是我们想要的&#xff0c;只需要将标题栏边框隐藏掉就可…

五、卷积神经网络CNN5(图像卷积与反卷积)

图像卷积 首先给出一个输入输出结果那他是怎样计算的呢&#xff1f; 卷积的时候需要对卷积核进行 180 的旋转&#xff0c;同时卷积核中心与需计算的图像像素对齐&#xff0c;输出结构为中心对齐像素的一个新的像素值&#xff0c;计算例子如下&#xff1a;这样计算出左上角(即第…

【畅购商城】内网穿透之EchoSite

目录 概述 注册用户 抢注域名 ​​​​​​​下载客户端 ​​​​​​​编写配置文件 ​​​​​​​启动 ​​​​​​​访问 ​​​​​​​概述 EchoSite一款收费的内网映射工具&#xff08;已下架&#xff09; 花生壳&#xff1a;内网穿透工具&#xff0c;免费版…

springboot集成Lombok、MybaitsPlus、SwaggerUI

springboot集成Lombok、MybaitsPlus、SwaggerUI 基础环境&#xff1a;JDK8或者JDK11版本 Maven3.5(采⽤默认) IDEA旗舰版 Mysql5.7以上版本 创建springboot项目 在线构建⼯具 https://start.spring.io/ 修改pom.xml中内容 <!-- 代码库 --> <repositories> &l…

如何提高量化策略回测的效率

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

教你轻松设计圣诞节日活动的邀请函?

即将迎来一年一度的圣诞活动&#xff0c;商家们要如何对此次活动展开宣传呢&#xff1f;要如何制作出一张符合节日气氛的活动邀请函&#xff1f;下面小编就教你如何使用在线工具乔拓云&#xff0c;用在线邀请函模板设计活动邀请函&#xff0c;一键就能生成活动邀请函链接&#…

springmvc整体运行流程

请求处理的流程 1&#xff1a;浏览器发送请求送至前端控制器DispatcherServlet。 2&#xff1a;DispatcherServlet收到请求后调用HandlerMapping处理器映射器。 3&#xff1a;处理器映射器找到具体的Handler处理器&#xff0c;封装成为执行链 4&#xff1a;返回执行链给Disp…

SpringBoot+MyBatis多表查询:以点餐系统的订单管理为例

文章目录项目场景数据库设计POJODaoServiceTest运行结果问题及解决项目场景 SpringBoot MyBatis &#xff0c;实现点餐系统的订单查询。 参考&#xff1a;SpringBootMyBatis多表联合查询 数据库设计 通常一个订单中会包含多个菜品&#xff0c;即一条 order 里含多个 item&am…

使用 Zotero Citation Counts Manager 自动获取文献引用数

前言 最近习惯了搜完文献把文献的引用贴进 Zotero 文献条目的 Note 里&#xff0c;但是自己一点一点打字太累。想到了 Zotero 有插件&#xff0c;简单调研一下&#xff0c;发现了一个可以用的插件。支持 CrossRef 和 SemanticScholar 的引用数获取。&#xff08;相对来说个人比…

QT QSlider、QHorizontalSlider、QVerticalSlider 控件 使用详解

本文详细的介绍了QSlider、QHorizontalSlider、QVerticalSlider控件的各种操作&#xff0c;例如&#xff1a;新建界面、设置刻度显示、设置范围值、设置值、获取值、设置步长、刻度间隔、改变方向、滑动信号、按下信号、滑动信号、释放滑块、样式表等操作。 本系列QT全面详解文…

职业生涯交叉点,7年测试工程师经历,继续做测试还是转开发?

我毕业后一直从事软件测试工作&#xff0c;今年28岁了。所做的工作都是功能测试&#xff0c;对于性能测试、自动化测试完全没有接触。 我是在深圳的一个小公司上班&#xff0c;每天朝九晚五的&#xff0c;工作不累。属于那种要来活了半天就可以搞定&#xff0c;剩下的时间都是…

三车道交通流元胞自动机研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

app提交上架最新流程 ios​

一、上架基本需求资料 1、苹果开发者账号&#xff08;公司已有可以不用申请&#xff0c;需要开通开发者功能&#xff0c;每年 99 美元&#xff09;​ 2、开发好的APP​ 二、证书 上架版本需要使用正式的证书​ 1、创建证书 ​​Apple Developer​​​ 2、上传证书 Sign In …

设计模式之工厂方法模式

factory method design pattern 工厂方法模式的概念、工厂方法模式的结构、工厂方法模式的优缺点、工厂方法模式的使用场景、工厂方法模式的实现示例、工厂方法模式的源码分析 1、工厂方法的概念 工厂方法模式&#xff0c;及简单工厂模式的升级版&#xff0c;其抽象了对象的创…

进阶 - Git分支管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zGglo72S-1670494545297)(https://lili40342.gitee.io/my-images/page/p_git.png)] 本篇文章&#xff0c;是基于我自用Linux系统中的自定义文件夹“test_rep”&#xff0c;当做示例演示 具体Git仓库的目…

用无代码,「低」人力成本也能做出「高」质量售后服务

目录 智能派单提升响应速度,移动端处理高效便捷 主动提升客户满意度,统一管理客户信息 标准化领、退料流程,精细化控制物料成本 沉淀数据资产,实时掌握最新状况 双十一大促热潮刚过,部分商家就开始因为“重销售,轻售后”的经营策略,而面临消费者的维权投诉,导致庆功…

企业微信对外收款功能如何开通?

之前很多企业在微信上运营客户&#xff0c;与客户达成交易后在微信上完成收款&#xff0c;但是会存在员工谎报账款、走私单的情况&#xff0c;因此企业改用企业微信对公收款。 前言 之前很多企业都在微信上运营客户&#xff0c;从开始追踪客户到成交客户这一整个过程都在微信上…

Day41——Dp专题

文章目录四、完全背包01背包的核心代码完全背包的核心代码12、零钱兑换 II13、组合总和 Ⅳ四、完全背包 完全背包&#xff1a;每一个物品可以选无限次 完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件 01背包的核心代码 for(int i 0; i < weight.…

全网最全的linux上docker安装oracle的详细文档,遇到了n个问题,查了几十篇文章,最终汇总版,再有解决不了的,私聊我,我帮你解决

文章目录全网最全的linux上docker安装oracle的详细文档&#xff0c;遇到了n个问题&#xff0c;查了几十篇文章&#xff0c;最终汇总版&#xff0c;再有解决不了的,私聊我&#xff0c;我帮你解决1. 拉取阿里镜像oracle2. 创建初始化数据3. 创建启动容器 数据持久化4. 进入oracle…