电子说
在电子电路设计中,如何将Arduino或chipKIT与模拟电路进行高效、高精度的连接一直是工程师们关注的问题。Digilent Analog Shield为我们提供了一个绝佳的解决方案,它不仅具备多种实用功能,还能显著提升信号处理的精度和性能。
文件下载:410-309.pdf
Digilent Analog Shield是一款能让Arduino™或chipKIT™与模拟电路轻松连接的设备。它由Digilent与德州仪器(Texas Instruments®)以及斯坦福大学的Kovacs / Giovangrandi实验室合作开发。该盾牌提供了以下关键特性:
与Arduino Uno™或chipKIT UNO32™相比,Analog Shield提供了更灵敏的输入和输出,并且具备驱动许多实用模拟电路所需的双极性输入和电源。它通过SPI通信协议与Arduino进行通信,ADC和DAC都使用标准的Arduino外形尺寸SPI总线引脚,并采用独立的芯片选择。
Analog Shield适用于处理那些使用Arduino标准引脚无法可靠记录或生成的小而敏感的信号,能提供更高的分辨率。目前已经开发了一些相关的演示项目:
这些演示项目的详细说明可在各自相关的文档中找到。
ADC接口为2x4引脚头,包含四个ADC通道和四个公共接地引脚。四个接地引脚位于引脚头的外侧行,四个ADC通道位于内侧行。可以使用analog.read()函数以16位分辨率读取4通道数据,通道标记为A0 - A3。若要了解ADC前的运算放大器电路细节,可参考盾牌原理图。
DAC接口同样是2x4引脚头,有四个DAC通道和四个公共接地引脚。四个接地引脚在外侧行,四个DAC通道在内侧行。DAC用于修改Arduino或chipKIT产生的模拟信号。标准的Arduino/chipKIT analogWrite()函数产生的脉宽调制(PWM)方波在许多应用中是可行的,但对于更敏感的模拟电路来说不够理想。而DAC通道设置值后,会产生与所提供值对应的稳定电压。可以使用analog.write()函数设置通道值,通道标记为D0 - D4。若要了解DAC后的运算放大器电路细节,可参考盾牌原理图。
电源接口为2x5引脚头,包含正5V轨、负5V轨、正可变电压轨、负电压轨、2.5V参考电压轨和五个公共接地引脚。五个接地引脚在外侧行,五个电源供应在内侧行。+/-5V轨可能会因USB电源规格而有所变化,+/-V轨可以通过盾牌右下角的可变电压电位器进行调节。此外,还有一个+2.5V轨可作为参考电压。
需要设置跳线,以确定连接的板卡使用IOREF、3V3还是5V0作为SPI接口的I/O电压。
该电位器用于调节+/-V电源供应轨的电压。
Analog Shield附带了一个简单的库,旨在优化可读性和性能。它提供了与IDE中标准模拟读写功能相似的接口。安装库的说明包含在库文件夹和“Analog Shield – 02 First Time Setup”文档中。成功将库安装到IDE后,可以使用以下命令调用库:
#include < analogShield.h >
包含analogShield库后,将可以访问一个名为analog的类变量,通过该变量可以调用analogShield库的函数。
使用以下函数读取模拟输入通道:
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()函数功能相同,但返回有符号整数。
使用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的过程中遇到过哪些有趣的问题或挑战呢?欢迎在评论区分享你的经验和想法。
全部0条评论
快来发表一下你的评论吧 !