ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

基于AD5420输出驱动4-20mA电流方案

2022-02-27 19:05:46  阅读:351  来源: 互联网

标签:输出 AD5420 buf unsigned char 寄存器 20mA 电流


在工业仪表开发中,经常会将仪表测量的物理量转成电流信号进行输出变送,电流信号的抗干扰性强,传输距离远等特点在工业仪表中广泛使用。

ADI公司的AD5420芯片直接将数字信号转换成电流信号,下面来介绍如何使用这款芯片。

一 ,硬件电路设计:根据数据手册的典型电路我们设计了电路图

1.1 单片机如何控制AD5420,

单片机与AD5420是通过SPI接口连接的,mcu通过控制芯片的寄存器来完成电流输出与更新。

那么AD5420有哪些操作,在这里我们使用官网提供的参考代码快速进行开发。

1.2  参考代码

有了AD5420的读写函数,用户只需要更改管脚定义成跟自己MCU相对应的即可。

void delay (int length)
{
	while (length >0)
    	length--;
}


void WriteToAD5420(unsigned char count,unsigned char *Buf)
{

	unsigned	char	ValueToWrite = 0;
    unsigned	char	i = 0;
	unsigned	char	j = 0;

	CLR_LATCH();

	for ( i=count;i>0;i-- )
 	{
	 	ValueToWrite =	*(Buf+i-1);
		for (j=0; j<8; j++)
		{
			CLR_SCL();
			if(0x80 == (ValueToWrite & 0x80))
			{
				SET_SDO();	    //Send one to SDIN pin of AD5420
			}
			else
			{
				CLR_SDO();	    //Send zero to SDIN pin of AD5420
			}
										 
			delay(1);
			SET_SCL();
			delay(1);
			ValueToWrite <<= 1;	//Rotate data
		}
	}
	CLR_SCL();
	delay(1);
	SET_LATCH();
	delay(20);
}
void ReadFromAD5420(unsigned char count,unsigned char *buf)
{
	unsigned	char	i = 0;
	unsigned	char	j = 0;
	unsigned	int  	iTemp = 0;
	unsigned	char  	RotateData = 0;

	CLR_LATCH();

	for(j=count; j>0; j--)
	{
		for(i=0; i<8; i++)
		{
		    CLR_SCL();
			RotateData <<= 1;		//Rotate data
			delay(1);
			CLR_SDO();				//write a nop condition when read the data. 
			iTemp = GP0DAT;			//Read SDO of AD5420
			SET_SCL();	
	
            if(1 == (iTemp & 0x01)) 				
			{
				RotateData |= 1;	
			}
			delay(1);
			
		}
		*(buf+j-1)= RotateData;
	}
	CLR_SCL();
	delay(1);	 
	SET_LATCH();
	delay(20);
} 

如何使用函数,在main 函数里面给出了示例代码。

1.写控制寄存器

 示例代码中将控制寄存器写入数据1005

    buf[2] = 0x55;
	buf[1] = 0x10;              //Disable Slew Rate
	buf[0] = 0x05;
	WriteToAD5420(3,buf);		//Write 551005 to SHIFT REGISTER  to write 1005 to control 
                                                                     registe

2.读控制寄存器

    buf[2] = 0x02;
    buf[1] = 0x00;
    buf[0] = 0x02;
    WriteToAD5420(3,buf);

   ReadFromAD5420(3,buf);        //Read CONTROL REGISTER

用户可以借鉴将其封装成一个写控制寄存器的函数,调用函数灵活的写入数据。

3.电流转换函数

 如何计算,IOUT以及公式中的D

1.如有1个压力仪表:要求输出4-20mA, 仪表满量程3MPA输出20mA. 压力为0零时输出4mA

那么在压力为1.5mpa时输出多少mA?

(20-4)/3 *1.5+4=12mA由此退出公式:

电流正向输出公式:16/(上限-下限)*(测量值-下限)+4

电流反向输出公式:(4-20)/(上限-下限)*(测量值-下限)+20

解释:上限,下限是指量程上下限

2.计算出电流值后,需要计算D,然后将D写入数据寄存器。

D=(iout-4000)*4.096 程序可以写成

D=(iout-4000)*4096/1000是为了保留精度,写入数据寄存器即可输出对应的电流。

标签:输出,AD5420,buf,unsigned,char,寄存器,20mA,电流
来源: https://blog.csdn.net/aobian120097046/article/details/123166691

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有