探索Digilent Analog Shield:高精度模拟电路连接解决方案

电子说

1.4w人已加入

描述

探索Digilent Analog Shield:高精度模拟电路连接解决方案

引言

在电子电路设计中,如何将Arduino或chipKIT与模拟电路进行高效、高精度的连接一直是工程师们关注的问题。Digilent Analog Shield为我们提供了一个绝佳的解决方案,它不仅具备多种实用功能,还能显著提升信号处理的精度和性能。

文件下载:410-309.pdf

一、产品概述

Digilent Analog Shield是一款能让Arduino™或chipKIT™与模拟电路轻松连接的设备。它由Digilent与德州仪器(Texas Instruments®)以及斯坦福大学的Kovacs / Giovangrandi实验室合作开发。该盾牌提供了以下关键特性:

  • 电源供应:具备可变的+/-7.5V电源和固定的+/-5V电源。
  • 面包板:配备小型面包板,方便电路搭建。
  • 软件操作:可通过单行C语言代码实现对ADC/DAC的读写操作。
  • ADC与DAC:拥有4通道、16位、100 ks/s的逐次逼近寄存器(SAR)ADC和4通道、16位、100 ks/s的串行DAC。

与Arduino Uno™或chipKIT UNO32™相比,Analog Shield提供了更灵敏的输入和输出,并且具备驱动许多实用模拟电路所需的双极性输入和电源。它通过SPI通信协议与Arduino进行通信,ADC和DAC都使用标准的Arduino外形尺寸SPI总线引脚,并采用独立的芯片选择。

二、应用场景

Analog Shield适用于处理那些使用Arduino标准引脚无法可靠记录或生成的小而敏感的信号,能提供更高的分辨率。目前已经开发了一些相关的演示项目:

  1. 正弦波/函数发生器:利用直接数字合成技术生成正弦波或其他函数波形。
  2. FFT频谱分析仪:对信号进行频谱分析。
  3. 复音音乐生成:实现多声部音乐的生成。
  4. 4通道低带宽示波器:用于观察和分析信号的波形。
  5. 李萨如图形发生器:生成李萨如图形。
  6. XY模拟示波器显示驱动:驱动示波器进行XY显示。

这些演示项目的详细说明可在各自相关的文档中找到。

三、硬件结构

1. 模数转换器(ADC)接口

ADC接口为2x4引脚头,包含四个ADC通道和四个公共接地引脚。四个接地引脚位于引脚头的外侧行,四个ADC通道位于内侧行。可以使用analog.read()函数以16位分辨率读取4通道数据,通道标记为A0 - A3。若要了解ADC前的运算放大器电路细节,可参考盾牌原理图。

2. 数模转换器(DAC)接口

DAC接口同样是2x4引脚头,有四个DAC通道和四个公共接地引脚。四个接地引脚在外侧行,四个DAC通道在内侧行。DAC用于修改Arduino或chipKIT产生的模拟信号。标准的Arduino/chipKIT analogWrite()函数产生的脉宽调制(PWM)方波在许多应用中是可行的,但对于更敏感的模拟电路来说不够理想。而DAC通道设置值后,会产生与所提供值对应的稳定电压。可以使用analog.write()函数设置通道值,通道标记为D0 - D4。若要了解DAC后的运算放大器电路细节,可参考盾牌原理图。

3. 电源接口

电源接口为2x5引脚头,包含正5V轨、负5V轨、正可变电压轨、负电压轨、2.5V参考电压轨和五个公共接地引脚。五个接地引脚在外侧行,五个电源供应在内侧行。+/-5V轨可能会因USB电源规格而有所变化,+/-V轨可以通过盾牌右下角的可变电压电位器进行调节。此外,还有一个+2.5V轨可作为参考电压。

4. 电压选择跳线

需要设置跳线,以确定连接的板卡使用IOREF、3V3还是5V0作为SPI接口的I/O电压。

5. 可变电压电位器

该电位器用于调节+/-V电源供应轨的电压。

四、软件使用

Analog Shield附带了一个简单的库,旨在优化可读性和性能。它提供了与IDE中标准模拟读写功能相似的接口。安装库的说明包含在库文件夹和“Analog Shield – 02 First Time Setup”文档中。成功将库安装到IDE后,可以使用以下命令调用库:

#include < analogShield.h >

包含analogShield库后,将可以访问一个名为analog的类变量,通过该变量可以调用analogShield库的函数。

1. 读取模拟输入通道

使用以下函数读取模拟输入通道:

unsigned int read(int channel, bool mode = false);

该函数返回通道上读取的电压,电压以二进制形式表示,范围从0到65535,对应-5V到5V。例如,要读取通道0(非差分模式),代码如下:

unsigned int data; 
data = analog.read(0);

‘Mode’是一个可选参数,默认值为false,表示正常的单端模式,每个模拟引脚以地为参考;若设置为true,则启用‘差分’模式,返回相邻输入对(如A0 - A1和A2 - A3)之间的电压差。signedRead()函数与read()函数功能相同,但返回有符号整数。

2. 向DAC写入数据

使用write()函数向DAC写入数据,该函数允许用户写入任意通道:

write(int channel, unsigned int value); 
write(unsigned int value0, unsigned int value1, bool mode); 
write(unsigned int value0, unsigned int value1, unsigned int value2, bool mode); 
write(unsigned int value0, unsigned int value1, unsigned int value2, unsigned int value3, bool mode);

例如,要向通道1写入一个值,代码如下:

unsigned int data = 65535;
analog.write(1, data);

若要同时向通道0、1和2写入多个值并同时更新,代码如下:

unsigned int data0 = 65535; 
unsigned int data1 = 256; 
unsigned int data2 = 0; 
analog.write(data0, data1, data2, true);

同时更新方法适用于高速应用,因为通道输出之间的小延迟可能会产生不需要的信号或时序问题。

五、总结

与Arduino的原生模拟输入相比,Analog Shield提供了16位的ADC(而Arduino UNO和ChipKIT UNO32提供的是10位),精度提高了约25dB。此外,ADC作为双极性输入,可以在不需要额外硬件的情况下感应+/-5V范围内的信号。板载DAC在精度上也有类似的提升,在低频驱动正弦输出时,信噪比提高了多达25dB。Analog Shield还提供了紧凑的集成电源,具有固定和可调输出,可让各种模拟电路以最小的空间浪费和复杂度进行组装。

你在使用Analog Shield的过程中遇到过哪些有趣的问题或挑战呢?欢迎在评论区分享你的经验和想法。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • 热点推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分