您好!
我对 ADC 的每秒样本数有问题。
当我选择以1000 SPS 的速率工作时、我只有790 SPS、但当我选择以2000 SPS 的速率工作时、我只有1450 SPS。
因此、我的 MCU 能够在大于1000SPS 的2000SPS 下实现有效的 SPS 工作、因此主要是在1000SPS 下工作没有问题 、但请求的 SPS 与有效的 SPS 之间仍然没有匹 配。
对于 ADC 的初始化、我执行以下操作:
//重置 ADC ads_reset (); HAL_delay (10); //写入状态寄存 器 ads_write_register (status_REG、0x02); HAL_delay (1); //写入 ADACT_REWRITE_register (ADCON_REG、0x00); HAL_delay (1); //设置数据速率*/ SAL_WRITE_REG_0 (SAT_REG_0A1);//针对数据 速率为0x2000ps (SAFET_RATE); /*选择 ANIN CHANNELS DIFFIER*//此处设置第一个通道,每次收到新样本时,我都会将通道更改为下一个通道。 ADS_WRITE_register (MUX_REG、EAI_MUX_REG_VALUES [EAI_CHANNES_TO_SAMPLE[0]); HAL_DELAY (1); //执行自校准*/ ADS_SEL_CAal (); HAL_DELAY (30);// 30ms 延迟
我必须在环路中逐一对8个通道进行采样{1、2、3、4、5、 6、7、8、1、2、3)
因此 、在 DRDY_ADC_Pin 中断中、我执行以下操作:
//将 ADC 设置为对下一个通道 ADS_WRITE_register (MUX_REG、CHANNEL_VALUE)进行采样;CHANNEL_VALUE 可能值:{0x08、0x18、0x28、0x38、0x48、 0x58、0x68、0x78}; //读取当前通道样本。 ADS_SEND_cmd (SYNC_CMD);//同步命令 ADS_SEND_cmd (WAKEUP_CMD);//唤醒命令 ADS_SEND_cmd (READ_DATA_CMD);/读取数据 延迟(6.52)//6.52微秒延迟 SPI_Receve (&tmp、3);//通过 SPI ADC_DATA=((tmp & 0x0000)>> 16)接收3个字节|(tmp & 0x0000)|((tmp & 0xff)<< 16); IF (((ADC_DATA & 0x800000)= 0x800000) ADC_DATA = 0; LAST_CHANNEL SAMPLE = ADC_DATA;
请帮助我解决此问题。
此致
JK