AD7175测试的结果不太理想,最慢速5hz的时候波动达到5uV,按照手册说的应该1uV以下,AD和
电源电路图
另外,高速的时候也不知道驱动程序问题还是电路问题!而且手册里的驱动时序感觉说的乱七八糟!(下面图里看下)驱动程序里不能每个字节都CS使能,而是完整一次操作使能一次才可以,那给第一张时序图有啥用??高速情况下速度达不到手册里说的建立时间(5Hz的时候建立时间对着呢),程序如下用的连续转换模式,ADOUT配置浮空输入,其他引脚推挽输出。
实验现象是:高速情况下数据偶尔会出错,电压波动都1-2mV了,而且0x28寄存器配置为50k的时候速度最高也就到10k
程序代码
#include "ad7172.h"
#include "delay.h"
//uint8_t DataRead[4];
void AD_Delay(void)
{
uint8_t i = 1,j;
for(j=0; j
}
long ReadAD7172()
{
long d = 0;
uint8_t i = 0;
for(i = 0; i < 24; i++)
{
d <<= 1;
SCLK_L;
AD_Delay();
if(DOUT_HorL)
d |= 0x00000001;
else
d &= 0xFFFFFFFE;
SCLK_H;
AD_Delay();
}
// if(a == BIPOLAR)
// {
if(d < 0x800000)
d = -(0x800000 - d); // 是负数,变成补码
else
d &= 0x007FFFFF;
// }
// result = d;
return d;
}
uint8_t ReadAD7172_8B()
{
uint8_t d = 0;
uint8_t i = 0;
// while(DOUT_HorL);
// CS_L;
for(i = 0; i < 8; i++)
{
d <<= 1;
SCLK_L;
AD_Delay();
if(DOUT_HorL)
d |= 0x01;
else
d &= 0xFE;
SCLK_H;
AD_Delay();
}
return d;
}
/******************************************************************
*函数描述:写AD7714
*局部变量:
*返回变量:
******************************************************************/
void WriteAD7172_8Bit(uint8_t d)
{
uint8_t i = 0;
for(i = 0; i < 8; i++)
{
SCLK_L;
AD_Delay();
if(d & 0x80)
DIN_H;
else
DIN_L;
SCLK_H;
AD_Delay();
d <<= 1;
}
DIN_H;
}
void AD7172_Reset(void)
{
unsigned char i=0;
SCLK_H;
CS_L;
DIN_H;
for(i=0; i < 12; i++)
{
WriteAD7172_8Bit(0xFF);
}
}
/******************************************************************
*函数描述:初始化AD7714电压测量,AIN2通道
*局部变量:
*返回变量:
******************************************************************/
void InitAD7172_V()
{
AD7172_Reset();
CS_H;
//7175 可用
CS_L;
WriteAD7172_8Bit(0x01);
WriteAD7172_8Bit(0x00);
WriteAD7172_8Bit(0x00);
CS_H;
CS_L;
WriteAD7172_8Bit(0x02);
WriteAD7172_8Bit(0x08);
WriteAD7172_8Bit(0x00);
CS_H;
CS_L;
WriteAD7172_8Bit(0x10); //选择通道0的 AN0 AN1
WriteAD7172_8Bit(0x80);
WriteAD7172_8Bit(0x01);
CS_H;
CS_L;
WriteAD7172_8Bit(0x20);
WriteAD7172_8Bit(0x13);
WriteAD7172_8Bit(0x00);
CS_H;
CS_L;
WriteAD7172_8Bit(0x28); //选择滤波频率
WriteAD7172_8Bit(0x00);
WriteAD7172_8Bit(0x05); //?为07的时候可以40k 00的时候反而不行 原因未知
CS_H;
}
最后采集程序
| | CS_L; |
| | while(DOUT_HorL); |
| | WriteAD7172_8Bit(0x44); |
| | Acq_value=ReadAD7172(); |
| | CS_H; | |
这样循环操作采集然后不断上传Acq_value
请各位
论坛好友解答下!一起讨论讨论,不胜感激~
手册地址
http://www.analog.com/media/en/technical-documentation/data-sheets/AD7175-8.pdf