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.

[参考译文] AFE4490:对 ADC 样本求平均值不会产生信号的输出变化(CONTROL1寄存器)

Guru**** 2595805 points
Other Parts Discussed in Thread: AFE4490

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

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/604636/afe4490-averaging-adc-samples-produces-no-output-change-in-signal-control1-register

器件型号:AFE4490

您好!

我使用 AFE4490构建了一个 PCB、该 PCB 通过蓝牙向手机应用发送数据。 在应用程序上、我收集并绘制数据。 问题是我认为我优化了脚本、但我只能在手机端获得大约40Hz 的信号。 我的示例显示了一个"阶梯"模式、我希望我的信号更平滑。  

为此、我想在让微控制器(ATmega32u4)通过蓝牙(RN42蓝牙模块)将数据发送到 Android 应用之前、利用在 AFE4490上对 ADC 样本进行平均计算。 我已将脉冲重复频率更改为250Hz (在4ms 脉冲重复周期内为~277hz)。 我在 AFE44x0SPO2EVM GUI 上执行了此操作、以确保我的其他寄存器(PRPCOUNT 等)也得到了适当的更新(并且我使用 GUI 在 EVM 板上获得的频率确实超过40Hz)。 然后、我将固件中的 CONTROL1更改为16个样本(0b10001111、或十六进制0x0010F)。  但是、当我对16个 ADC 样本求平均值时、我的信号看起来与我仅对1求平均值的情况完全相同。  如何更改 CONTROL1 (或其他相关寄存器)以在从微控制器发送数据之前对 AFE4490上的更多样本求平均值?

我正在 Arduino 中编写固件、并使用 AVR MKII 进行编程。 Android 应用程序、在 Android Studio 中编写。  

微控制器以8位的速率向 APP 发送数据(2个 START、3个用于红色 LED、3个用于红外 LED)。

谢谢、

Morris

Arduino 代码获取值。 我最初尝试对微控制器上的多个样本求平均值、但我想直接对 AFE4490求平均值、因此下面的 samples=1行(因为获得的样本应该已经是16个样本、由 AFE4490取平均值)

void SPIReadRedIR(){
//读取寄存器的值作为字节,通过 SERIAL1
字节 byteArray[8]发送;
int samples = 1;//平均
浮点 IRSum 的样本数= 0.f;//运行总和为平均值,以便不读取两个
浮点 Redsum = 0.f;
uint32_t IRAyum=0;
uint32_t RedAime= 0;

//SPI.beginTransaction(SPISettings(8000000、MSBFIRST、SPI_MODE0);

for (int i=0; 一 <> 8);
byteArray[4]=(IRAyyyya>> 16);
byteArray[5]= RedAyaage;
byteArray[6]=(RedAyaye>>8);
byteArray[7]=(RedAyay>> 16);

dby1.write (byteArray、8);
//释放从设备;禁用读取


(Select/Resort/Resort/SPI);/Resort/Resort/Resort/Resort/Resort/16)寄存器

 

AFEinit()函数中的寄存器值

SPIWriteReg (control0、0x000000);
SPIWriteReg (LED2STC、0x002A9E);
SPIWriteReg (LED2ENDC、 0x003866);
SPIWriteReg (LED2LEDSTC、0x002A4E);
SPIWriteReg (LED2LEDENDC、0x003867);
SPIWriteReg (ALED2STC、0x000050);
SPIWriteReg (ALED2ENDC、0x000E18);
SPIWriteReg (LED1STC、 0x000E6A);
SPIWriteReg (LED1ENDC、0x001C32);
SPIWriteReg (LED1LEDSTC、0x000E1A);
SPIWriteReg (LED1LEDENDC、0x001C33);
SPIWriteReg (ALED1STC、0x001C84);
SPIWriteReg (ALED1ENDC、 0x002A4C);
SPIWriteReg (LED2CONVST、0x000006);
SPIWriteReg (LED2CONVEND、0x000E19);
SPIWriteReg (ALED2CONVST、0x000E20);
SPIWriteReg (ALED2CONVEND、0x001C33);
SPIWriteReg (LED1CONVST、 0x001C3A);
SPIWriteReg (LED1CONVEND、0x002A4D);
SPIWriteReg (ALED1CONVST、0x002A54);
SPIWriteReg (ALED1CONVEND、0x003867);
SPIWriteReg (ADCRSTCT0、0x000000);
SPIWriteReg (ADCRSTENDCT0、 0x000005);
SPIWriteReg (ADCRSTCT1、0x000E1A);
SPIWriteReg (ADCRSTENDCT1、0x000E1F);
SPIWriteReg (ADCRSTCT2、0x001C34);
SPIWriteReg (ADCRSTENDCT2、0x001C39);
SPIWriteReg (ADCRSTCT3、 0x002A4E);
SPIWriteReg (ADCRSTENDCT3、0x002A53);
SPIWriteReg (PRPCOUNT、0x003867);
SPIWriteReg (CONTROL1、0x00010F);//
SPIWriteReg (SPARE1、0x000000);
SPIWriteReg (TIGAIN、 0x000000);
SPIWriteReg (TIA_AMB_GAIN、0x000000);
SPIWriteReg (LEDCNTRL、0x01FF80);
SPIWriteReg (Control2、0x020100);
SPIWriteReg (SPARE2、0x000000);
SPIWriteReg (SPARE3、 0x000000);
SPIWriteReg (SPARE4、0x000000);
SPIWriteReg (RESERVED1、0x000000);
SPIWriteReg (RESERVED2、0x000000);
SPIWriteReg (ALARM、0x000000);
SPIWriteReg (LED2VAL、 0x000000);
SPIWriteReg (ALED2VAL、0x000000);
SPIWriteReg (LED1VAL、0x000000);
SPIWriteReg (ALED1VAL、0x000000);
SPIWriteReg (LED2OSIDALED2VAL、0x000000);
SPIWriteReg (LED1OSIDALED1VAL、 0x000000);
SPIWriteReg (DIAG、0x000000); 

我的寄存器地址

#define CONTROL0 0x00
#define CONTROL1 0x1E
#define CONTROL2 0x23
#define PRPCOUNT 0x1D
#define LEDCNTRL 0x22
#define LED1LEDSTC 0x09
#define LED1LEDENDC 0x0A
#define LED2LEDSTC 0x03
#define LED2LEGENDC 0x04 #define
LED2LEADDRV22 0x04 #define 0x04 #define 0x20 #define 0xAGEND20 #define 0xAGEND20
#define

0xAGENC #define 0x20 #define #define 0xAGEND20#define 0xAGEND20 #define 0xAGEND20 #def
0x02
#define ALED2ENDC 0x06
#define LED1STC 0x07
#define LED1ENDC 0x08
#define ALED1STC 0x0B
#define ALED1ENDC 0x0C
#define LED2CONVST 0x0D
#define LED2CONVEND 0x0E
#define ALED2CONVST 0x0F
#define ALED2CONVEND 0x10
#define LED1CONVST 0x11
#define LED1CONVEND 0x12
#define ALED1CONVST 0x13
#define ALED1CONVEND 0x14
#define ADCRSTCT0 0x15
#define ADCRSTENDCT0 0x16
#define ADCRSTCT1 0x17
#define ADCRSTENDCT1 0x18
#define ADCRSTCT2 0x19
#define ADCRSTENDCT2 0x1A
#define ADCRSTCT3 0x1b
#define ADCRSTENDCT3 0x1c
#define SPARE1 0x1f
#define SPARE2 0x24
#define SPARE3 0x25
#define SPARE4 0x26
#define RESERVED1 0x27
#define RESERVED2 0x28
#define ALARM 0x29
#define DIAG 0x30
#define LED2VAL 0x2A
#define ALED2VAL 0x2b
#define LED1VAL 0x2C
#define ALED1VAL 0x2D
#define LED2ATSELED2VAL 0x2e
#define LED1ALLED1VAL 0x2F 

 

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

    由于同一主题有另一个主题、我建议您删除此主题。

    此致、
    Prabin