This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS8681:通过 SPI 将 ADS 8681配置到 Arduino MKW 1010 Wifi 时出现问题

Guru**** 2392475 points
Other Parts Discussed in Thread: ADS8681

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/935764/ads8681-problems-to-configure-ads-8681-to-a-arduino-mkw-1010-wifi-via-spi

器件型号:ADS8681

您好论坛、


我正在尝试建立一个 SPI 连接到可编程模拟数字转换器 TI ADS8681。 将来、我希望调整几个以菊花链形式连接的 ADC (请参阅 ADC 数据表第38页)。 但是、第一步、我要根据图71 (ADC 数据表第37页)设置与单个 ADC 的连接。 我将"aa battery"连接到 ADC 以模拟输入。 ADC 数字输出应通过 SPI 发送至 Arduino MKR 1010 Wifi (通过 SPI)。 Arduino 将信号转发到 PC 的串行端口。 我的接线如图所示。

我编写了一个代码(在 POST 结束时)、通过其命令寄存器配置 ADC 并读取转换后的数字值。 但16位器件仅返回65635。 在+-10、24V 的测量范围和~1、5V 的电池电压下、我不希望这样做。

我怀疑 ADC 的配置不起作用、并且他处于 DATA_OUT_CTL_REG 寄存器的 DATA_VAL[2:0]的模式101b、只返回1。但我不知道错误的位置。

如果有人建议如何收集合适的数据、我会很讨厌。

[引述]

//阅读具有 Arduino MKR 1010 wifi 的 TI ADS8681 (ADC)
// 2020年8月
//按 SPL

#include
// Arduino SPI 库

// MISO、SCK 和 MOSI 由库定义
const int CS = 7;
//设置 SPI 引脚

void setup(){
 Serial.begin(9600);
 //定义串行数据传输的波特率
 
 引脚模式(MISO、输入);
 引脚模式(MOSI、输出);
 引脚模式(SCK、输出);
 引脚模式(CS、 输出);
 //将 SPI 引脚设置为输出/输入:

 digitalWrite (CS、HIGH);
 SPI.begin();
 //启动 SPI 并将 CS 设置为空闲

 SPI.beginTransaction(SPISettings(100、MSBFIRST、SPI_MODE0));
 //初始化 SPI 和 SPI 设置定义以 Hz、dataOrder 和 dataMode 为单位的最大速度
 //速度最大值67MHz、ADW 数据表第11页、MSBFIRST、ADC 数据表第38页、数据模式 ADC 数据表第45页;
 
 writeRegister (0x08、0b00000000、0b00000000);
 //定义 SPI 模式;SDI_CTL_REG 寄存器(十六进制)的地址和定义 SPI 模式、ADC 数据表第51页、与 Arduino SPI Mode0匹配

 writeRegister (0x10、0b00000000、0b00000000);
 //定义 DATA_OUT_CTL_REG;
 
 writeRegister (0x14、0b00000000、0b000000000);
 //定义测量范围+-10、24V、请参阅第54页的 ADC 数据表;


void loop(){
 READ_ADC_TO_SERIAL ();
 //读取 ADC 并将结果发送到串行


void read_adc_to 串行(){
 字节数据流名称[4];  
 //初始化
 
 digitalWrite (CS、low);
 // CS 低电平启动数据传输

 spi.transfer (dataframe、4);
 
 //读取变量'dataFrame '中的移位寄存器;
 
 digitalWrite (CS、HIGH);
 // CS 高电平可停止数据传输

 字 PACKAGE_READ =数据流名称[0]<<8 |数据流名称[1];
 serial.println (package_read、DEC);
 //将数据转换和打印为串行数据;

 延迟(1);
 // ADS8681延迟 t_cycle-min、第665页和第11页 ADC 数据表


void writeRegister (字节 thisRegister、字节 thisValue1、字节 thisValue2){
 //请参阅 ADC 编程第43页的数据表

 字节包[4]={0b11010000、thisRegister、thisValue1、thisValue2};
 //操作码,请参阅第43页的 ADC 数据表
 
 digitalWrite (CS、low);
 //将芯片选择设置为低电平来选择器件:
 
 SPI.transfer (package、4);
 //发送寄存器位置和值
 
 digitalWrite (CS、HIGH);
 //将芯片选择设置为高电平以取消选择

[/报价]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的用户6426347:

    首先、请 仔细检查 ADS8681数据表、REFGND、AIN_GND、AGND 和 DGND 应连接到同一实心接地层。 在您的电路中、REFGND 和 AIN_GND 未连接到 AGND、而且您的 DGND 悬空、这是不正确的。 /RST 应该被连接至控制器的一个数字引脚以在加电后获得一个复位信号或者通过一个上拉电阻器连接至 DVDD。

    其次、第一步请勿写入和读取内部电阻器、只需在器件上电后使用默认确认、向 ADC 发送 CONVST 信号并遵循 ADC 数据表中图3中的时序。 然后检查转换代码是否与直流输入电压匹配。 此步骤可确保您的时序正确。 如果一切正常、您可以按照 ADC 数据表中的命令继续写入和读取内部寄存器、或参阅以下论坛上先前回答/查询中的命令格式:

    ADS8691: 如何读取位[0:15]的寄存器值

    ADS8689:32位寄存器读取命令序列

    执行这些步骤和建议后、请告诉我结果。

    此致、

    戴尔