您好,
我有两个采用菊花链配置的ADS8332。 写入和读取我的CFR寄存器可与以下配置配合使用:
CFR1 = 0b11.1011万111101</s>11.1101万
CFR2 = 0b11.1011万011101</s>1.1101万
目前,我尝试读取所有16个通道,其中在通道1和9上连接了窦性信号(70 Hz,采样频率2000 Hz)。 SCLK与41.67 ns一起工作(对应于(12 MHz))。 Matlab中的图示显示无法再现窦性信号。
代码:
void startADC(Int16_t ADS833x_result[number_channels][size],int cycle){
UINT16_t循环计数; //通过空闲循环计数时间
UINT16_t通道编号=8;
对于(LoopCount=0;LoopCount<Channel_Number;LoopCount++)
{
Int16_t tempBuffer[2];
用于(int i =0;I<2;I++){
TempdBuffer[i]=0;
}
Timer_Enable (Timer1,FALSE);
Timer_CounterSet (TIMER1,0);
Timer_Enable (Timer1,TRUE);
GPIO _PinOutClear (gpioPortB,1);
//最小40 ns的计时
while (Timer1->CNT<3){
;
}
Timer_Enable (Timer1,FALSE);
GPIO _PinOutSet (gpioPortB,1);
while (GPIO_PinOutGet(gpioPortB,1)!=1){
;
}
ADS833x_ReadRegister(&tempdBuffer[0],0xD000);
ADS833x_result[LoopCount][cycle]= tempBuffer[0];
ADS833x_Result [LoopCount+8][cycle]= tempBuffer[1];
}
}
void ADS833x_ReadRegister (Int16_t dataBuffer[2],uint16_t命令)
{
UINT16_t ReadData_MSB =命令>> 8;
UINT16_t ReadData_LSB =命令和0xFF;
UINT16_t ADC1_MSB;
UINT16_t ADC1_LSB;
UINT16_t ADC2_MSB;
UINT16_t ADC2_LSB;
GPIO _PinOutClear (gpioPortB,6),GPIO _PinOutClear (gpioPortB,0);
ADC2_MSB = USART_SpiTransfer (USART2,ReadData_MSB);
ADC2_LSB = USART_SpiTransfer (USART2,ReadData_LSB);
ADC1_MSB = USART_SpiTransfer (USART2,0);
ADC1_LSB = USART_SpiTransfer (USART2,0);
GPIO _PinOutSet (gpioPortB,6),GPIO _PinOutSet (gpioPortB,0);
dataBuffer[0]=(((ADC1_MSB<8)|0x00FF)&((ADC1_LSB)|0xFF00));
dataBuffer[1]=(((ADC2_MSB<8)|0x00FF)&((ADC2_LSB)|0xFF00));
}
我对CH1和CH9中的信号重建不良(尽管采样频率为2000 Hz)以及CH2和CH10中的曲线感到惊讶。
但是,我已经反复检查了所有代码行,SPI (在ADC和MCU之间)和UART (在MCU和PC之间)连接,在转换时必须发现错误。 此外,更改时钟极性和相位对结果也没有积极影响。 此外,随函附上一份时间图:
(读取所有16个通道-->一个循环)
(放大-->读取两个通道)
谢谢,此致,
Sebastian