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.

[参考译文] ADS1259:不适用于使用多路复用器

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1182507/ads1259-does-not-work-with-using-a-multiplexer

器件型号:ADS1259

你(们)好。

我已经在尝试使用多路复用器运行该 ADS1259。 到目前为止、我无法通过使用不同的多路复用器使其运行。 就我只使用一个多路复用器和其他多路复用器上的相同数据而言、它可以正常工作。 在多路复用器使用不同的位置后、它不会。 可以帮我找到问题吗?

在下面、您可以看到我使用的代码:

void init_adw_24bit_SPI (SPI_HandleTypeDef * hspi1){

uint8_t SPI_Rx[11]={0x0};
uint8_t SPI_TX[11]={0x0};

SPI_TX[0]= 0x06;//复位

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);
HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、1、1);
LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

HAL_DELAY (1);


SPI_TX[0]= 0x11;//停止连续读取数据模式

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);
HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、1、1);
LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

HAL_DELAY (1);

///----------------------
//配置 ADS 寄存器设置:---
///----------------------

// SPI_TX[2] CONFIG0:0101 ->启用 SPI 超时、启用内部基准偏置
// SPI_TX[3] CONFIG1:0011 -> sinc^1滤波器、延迟256 tclk
// SPI_TX[4] CONFIG2:10110 --> 3600SPS,脉冲控制模式

SPI_TX[0]= 0x40;SPI_TX[1]= 0x08;SPI_TX[2]= 0x05;SPI_TX[3]= 0x03;SPI_TX[4]= 0x16; SPI_TX[5]= 0x00;SPI_TX[6]= 0x00;SPI_TX[7]= 0x00;SPI_TX[8]= 0x00;SPI_TX[9]= 0x00; SPI_TX[10]= 0x40;

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);
HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、11、1);
LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);


HAL_DELAY (1);

SPI_TX[0]= 0x20;SPI_TX[1]= 0x08;//读取所有配置寄存器

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);
HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、11、1);
LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

HAL_DELAY (1);

//SPI_TX[0]= 0x10;//连续读取数据模式
SPI_TX[0]= 0x12;//通过操作码读取数据配置

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);
HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、1、1);
LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

HAL_DELAY (1);

void read_ad_24bit (SPI_HandleTypeDef * hspi1、int32_t * temp、int32_t * offset、int32_t * offset_w){

静态 int 计数器= 0;
静态 int CHANNAL=0;

DEBUG_AD24RAW = READ_ADW_24bit_SPI (hspi1);

temp[通道]=...  

通道++;

IF (通道>= RTD_ANZAHL)

Kanal = 0;

//过滤器
COUNTER++;
如果(计数器> 49) 计数器= 0;

SET_CH_MUX1 (计数器);

uint32_t read_adw_24bit_SPI (SPI_HandleTypeDef * hspi1){

uint32_t temp = 0;
uint8_t SPI_Rx[4]={0};
uint8_t SPI_TX[4]={0x12、0x00、0x00、0x00};

LL_GPIO_ResetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

HAL_SPI_TransmitReceive (hspi1、SPI_TX、SPI_Rx、4、1); // 读取活动数据,然后读取

LL_GPIO_SetOutputPin (CS_AD2_GPIO_Port、CS_AD2_Pin);

///----------------------------
//数据更改

temp=..........

///----------------------------

返回温度;

提前感谢、希望我们能在代码中发现一些故障!

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

    您好 Ferdinand Wimmer、

    您的 ADC 似乎工作正常、您实际上在操作外部多路复用器时遇到了问题。

    我们在代码中注意到的几件事:

    1. READ_AD_24BIT 函数的开头进行声明"static int CHANNAL"、但在该点之后被引用为"channel"。 您应该使用一致的拼写来确保代码正常工作
    2.  READ_AD_24BIT 函数还包括一个变量"Kanal"、该变量从未在其他任何位置声明且从未使用(至少与代码所示的值一样)
    3.  READ_AD_24BIT 函数中的"静态 int "声明将始终将计数器设置为0或1、具体取决于"RTD_ANZAHL"的状态、因为每次调用函数时都会重新初始化这些声明

    我建议您在运行代码时查看逻辑分析仪、以便您可以实际看到系统中传输的数据。 这将帮助您确定代码是否在执行您认为应该执行的操作。

    布莱恩

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

    您好、Bryan、

    感谢您的回答! 我将在接下来的几天内对其进行研究、并回答是否有帮助。 频道或 Kanal 是相同的、我只是 想在这篇文章中全部翻译成英文。 似乎我忘记了 Kanal 的翻译(在原始程序中、所有内容都是用德语"Kanal"编写的)。  

    接下来、我将尝试使用您提到的逻辑分析仪、并查看它到底显示了什么。

    此致、

    Stefan

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

    您好 Ferdinand Wimmer、

    感谢您提供更多信息。 请告诉我们您在执行其他测试时发现的内容

    此外、我建议将来按原样发送您的代码。 如果我们看不到实际使用的代码、而是对该代码的解释、那么提供支持就很困难。 您可以理解您提供的代码中存在错误、但这些错误可能只是翻译的结果、而不是实际的行为问题。  如果我们无法理解特定语言、我们提供翻译工具、如果需要、我们也可以向您寻求帮助。

    布莱恩