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.

[参考译文] ADS1299:仅在某些通道上出现奇数振荡

Guru**** 2568565 points
Other Parts Discussed in Thread: ADS1299

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/992837/ads1299-odd-oscillations-on-only-some-channels

器件型号:ADS1299

大家好、

请查看下面我在通道3、4和7上观察到的奇怪行为。  前端配置了增益为24、数据速率为500SPS。  SRB1启用、偏置放大器启用、并连接到所有输入(P 和 N -因此 N 仅连接到所有通道上的 SRB1)。  P 输入被复用到一个正常的输入、并且在输入悬空时获得这个数据。

是否有人知道我为什么会在各个渠道中出现不一致的行为?  我将使用内部电压基准。

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

    尊敬的 John:

    欢迎来到 E2E 论坛!!!

    能否为您的测试设置提供完整的器件寄存器设置?  

    谢谢

    -TC

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

    /*
     * afe.c
     *
     *  Created on: Jan 26, 2021
     *      Author: John Tarasidis
     */
    #include "main.h"
    #include "afe.h"
    
    extern SPI_HandleTypeDef hspi3;
    
    static void afe_write_reg(uint8_t reg, uint8_t value) {
    	uint8_t cmd_seq[3] = {0x40 | reg, 0x00, value};
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    	HAL_SPI_Transmit(&hspi3, cmd_seq, 3, HAL_MAX_DELAY);
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    }
    
    static void afe_write_ch(uint8_t value) {
    	uint8_t cmd_seq[] = {0b01000101, 0x09, value, value, value, value,
    										   value, value, value, value};
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    	HAL_SPI_Transmit(&hspi3, cmd_seq, 10, HAL_MAX_DELAY);
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    }
    
    void afe_init(void) {
    	HAL_Delay(200); //tpor
    	HAL_GPIO_TogglePin(ADS_RST_GPIO_Port, ADS_RST_Pin);
    	HAL_Delay(1);
    	HAL_GPIO_TogglePin(ADS_RST_GPIO_Port, ADS_RST_Pin);
    	HAL_Delay(1);
    	afe_sdatac(); 	//enable reg writes
    	afe_write_reg(0x03, 0xE0);
    	HAL_Delay(10);
    	afe_write_ch(0b01100001);
    	HAL_GPIO_WritePin(ADS_START_GPIO_Port, ADS_START_Pin, GPIO_PIN_SET); //start conversion
    	afe_rdatac();
    	afe_sdatac();
    	afe_write_reg(0x02, 0xC0);
    	afe_write_ch(0b01100000);
    	afe_set_dr();	//set data rate 1000kSps
    	afe_set_srb();	//mux reference to CHn
    	afe_set_bias(); //enable internal reference, enable bias amp, mux CHp&n to bias inverting
    	afe_rdatac();
    }
    
    void afe_sdatac(void) {
    	uint8_t sdatac = 0b00010001;
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    	HAL_SPI_Transmit(&hspi3, &sdatac, 1, HAL_MAX_DELAY);
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    }
    
    void afe_rdatac(void) {
    	uint8_t rdatac = 0b00010000;
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    	HAL_SPI_Transmit(&hspi3, &rdatac, 1, HAL_MAX_DELAY);
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    }
    
    void afe_rdata(uint8_t* sample) {
    	//uint8_t rdata = 0b00010010; //no longer sending rdata and instead just clocking out w/ rdatac
    	uint8_t zero[27] = {0};
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    	//HAL_SPI_Transmit(&hspi3, &rdata, 1, HAL_MAX_DELAY);//read data
    	HAL_SPI_TransmitReceive(&hspi3, zero, sample, 27, HAL_MAX_DELAY);
    	HAL_GPIO_TogglePin(ADS_CS_GPIO_Port, ADS_CS_Pin);
    }
    
    void afe_set_dr(void) {
    	afe_write_reg(0x01, 0b10010101);
    }
    
    void afe_set_bias(void) {
    	afe_write_reg(0x0D, 0xFF); //route all 8 channels positive to bias inverting input
    	afe_write_reg(0x0E, 0xFF); //route all 8 channels negative to bias inverting,
    							   //which is SRB1 for all channels
    	afe_write_reg(0x03, 0b11101100); //enable bias amp, route internal ref to bias
    }
    
    void afe_set_srb(void) {
    	afe_write_reg(0x15, 0b00100000);
    }

    大家好、TC 、上面是我的简单小库、我将其合并在一起、以便与 STM32L4微控制器配合使用。  在 afe_init 中、您将看到它大致遵循数据表第62页的设置序列、但随后使用偏置放大器1000kSps、SRB1多路复用器等为正常 AQ 启用功能

    在主程序中,我调用 afe_init(),并在连接到 ADS1299的 DRDY 引脚的引脚上设置下降沿 EXTI 中断。  当该中断触发时、它所做的就是设置一个标志。  我的 main()是一个简单的中断驱动状态机,其中一个状态由 DRDY 标志驱动, 在该状态下发生的唯一事件是 afe_RDATA()调用,然后再写入闪存。

    需要注意的是、当以 EEG 方式实际连接设备时、我发现这种行为会更好。  这可能是浮点输入的某种奇怪现象?  另请注意:在我的电路板上、每个输入和 SRB1都是相对于接地进行 RC 滤波的。  我事后意识到、我应该在通道输入和 SRB1之间使用差分电容器、而不是 AGND -这是否是问题的一部分?

    谢谢、

    John

    快速编辑:SPI 时钟为2MHz、DRDY 引脚的响应时间通常小于30us。  已在范围内确认。

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

    尊敬的 John:

    感谢您提供的所有附加信息。

     我不认为没有差分电容器会导致这个问题。 如果输入悬空且输入阻抗较高、则很难判断器件会发生什么情况。 您可以通过在所有输入端施加直流电压来进行检查、并检查您是否仍然在通道上看到振荡。 请检查这些通道的频率内容、以查看耦合的来源。

    谢谢

    -TC