赞
踩
这篇是电路博客,不是算法什么的。。。
今天有点紧急,要处理一下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.
第二个不规范
红框: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 };
注意是FS_500HZ = 0x04,看看怎样使用的:
AD7705_WriteByte(CLKDIS_0 | CLK_4_9152M | FS_500HZ);
我们看一下宏定义
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还有一些暂时不相关的特性没去挖掘,以后有空的吧,谢谢大家。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。