当前位置:   article > 正文

[原创]AD7705/AD7706的使用

ad7705

这篇是电路博客,不是算法什么的。。。
今天有点紧急,要处理一下AD7705刷新速率问题
我先介绍一下AD7705/AD7706,就是它了↓
在这里插入图片描述
AD7705两路全差分,AD7706三路伪差分
在这里插入图片描述
硬件设计:
说在前面:只为说明问题,没有别的意思。
先放一个TB的模块,蓝字我就不念了。大部分都是AD7705芯片本身的属性,但这里说3.3V和5V兼容,我们看看怎么兼容:
在这里插入图片描述
芯片5V供电时,REF建议电压范围是1V~3.5V,推荐值2.5V
芯片3V供电时,REF建议电压范围是1V~1.75V,推荐值1.225V
模块上参考电压芯片是REF192-2.048,也就是2.048V,显然都不是推荐值,且这已经超出了3V供电的推荐范围,因此电路设计不规范。
(没别的意思,只是自己用网上的模块,又花时间整理,不如就详细点哈哈)
那ADI官方如何推荐?
Page 23/44

Recommended reference voltage sources for the AD7705/AD7706 
with a VDD of 5 V include the AD780, REF43, and REF192; 
the recommended reference sources for the AD7705/AD7706 
operated with a VDD of 3 V include the AD589 and AD1580. 
It is generally recommended to decouple the output of
these references to reduce the noise level further. 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第二个不规范
在这里插入图片描述
红框:5V供电时,输出高电平最低是4V,你进3.3V系统,不串个限流电阻?
绿框:如果是晶振输入时钟,倒是无所谓的。但是如果是外部芯片提供的时钟,那高电平最低要3.5V的,3.3V系统也存在使用风险的

软件设计:
AD7705本质上就是几大寄存器,但所有寄存器都要跟通信寄存器打声招呼,告诉通信寄存器,你打算干什么
1.通信寄存器000
在这里插入图片描述
写通信寄存器,将要操作的寄存器是哪个,读还是写,针对哪个通道?
然后你就可以开搞了
在这里插入图片描述
2.设置寄存器001
在这里插入图片描述
AD7705模式设置,主要是校准用的
AD7705的增益设置、极性输入设置、BUFFER控制、Filter 同步设置
在这里插入图片描述
这里有个比较人性化的地方,无论是在哪个校准模式,只要完成了校准,就都会回到normal模式。因此,判断校准是否完成,就可以通过读MD01实现。然而,还有一种方法就是读DRDY低有效。关于这些ADI也有描述:
在这里插入图片描述
3.时钟寄存器010
在这里插入图片描述
使用外部晶振4.9152MHz,显然要把CLKDIV设置成1的,否则会工作异常
在这里插入图片描述
更新频率设置就靠这3bit了,显然500Hz要用1 1 1。然而,网上一大部分demo竟然这样误导:

/* 时钟寄存器bit定义 */
enum
{
    CLKDIS_0	= 0x00,		/* 时钟输出使能 (当外接晶振时,必须使能才能振荡) */
    CLKDIS_1	= 0x10,		/* 时钟禁止 (当外部提供时钟时,设置该位可以禁止MCK_OUT引脚输出时钟以省电 */

    /*
	    2.4576MHz(CLKDIV=0 )或为 4.9152MHz (CLKDIV=1 ),CLK 应置 “0”。
	    1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 该位应置  “1”
    */
    CLK_4_9152M = 0x08,
    CLK_2_4576M = 0x00,
    CLK_1M 	= 0x04,
    CLK_2M 	= 0x0C,

    FS_50HZ	= 0x00,
    FS_60HZ	= 0x01,
    FS_250HZ	= 0x02,
    FS_500HZ	= 0x04,
    /*
		    当使用主时钟为 2.4576MHz 时,强烈建议将时钟寄存器设为 84H,此时数据输出更新率为10Hz,即每0.1S 输出一个新数据。
		    当使用主时钟为 1MHz 时,强烈建议将时钟寄存器设为80H, 此时数据输出更新率为4Hz, 即每0.25S 输出一个新数据
    */
    ZERO_0	= 0x00,
    ZERO_1	= 0x80
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

注意是FS_500HZ = 0x04,看看怎样使用的:

AD7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);
  • 1

我们看一下宏定义
CLKDIS_0 = 0x00,CLK_4_9152M = 0x08,FS_500HZ = 0x04,逻辑或出来是0x0c,
这刷新频率是50Hz好么?所以,正确的宏定义应该这样写:FS_500HZ = 0x07

4.数据寄存器011
5.测试寄存器100
4.5比较简单,就不说了
6.零点校正寄存器110
就是芯片内部自短接测试输出,感觉是输入失调电压的测试方法
7.全量程校正寄存器111
以单极性输入为例,量程是0~REF,那么芯片产生一个REF/GainSetting的电压,自测一下不就行了
在这里插入图片描述
使用看看
直接测试DRDY输出波形,如何?
在这里插入图片描述
500Hz的刷新频率出来了,为什么DRDY又被拉高了?因为如果两次更新之间,数据并未被读走,那么,赶紧在下次刷新之前提前拉高一下。提前多久?500xFclk = 500*(1/2.4576MHz) = 203.45us
可有依据?
在这里插入图片描述
我们的4.9152MHz分频后正是2.4576MHz,所以上式计算正确。
拉开一个高电平看看:
在这里插入图片描述
那500Hz刷新带来的问题是什么?
在这里插入图片描述
有效位直接干掉6bit,有点亏(就是最后6bit抖得像狗)。我倒是倾向于250Hz刷新,也就是4ms,仍然有13bit有效位,算是一种折中。

最后的话:AD7705还有一些暂时不相关的特性没去挖掘,以后有空的吧,谢谢大家。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号