基于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