其他分享
首页 > 其他分享> > 基于AD5420输出驱动4-20mA电流方案

基于AD5420输出驱动4-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