When initializing AD7190, I wanted to perform internal zero potential and internal full-scale calibration, but both were unsuccessful.
The basic configuration procedure is as follows
void initAD7190()
{
u8 sendData[4]={0,0,0,0};
resetAD7190(); //Reset AD7190 //Set configuration register
sendData[0] = 0x00; //Chopping disabled, external reference between ref1+ and ref1-
sendData[1] = 0x00; //Initial selection of channel 0, between AIN1 and AIN2 ,
sendData[2] = 0x60; //500nA current source turned off, external reference voltage detection enabled, and input buffer enabled. Bipolar mode , gain 128
writeAd7190Register(0x10,sendData); //Write AD7190 configuration register //Channel 0 performs internal zero-scale calibration
sendData[0] = 0x80; //Internal zero-scale calibration MD2 MD1 MD0=0b100 is zero-scale calibration mode
sendData[1] = 0x04; //sinc4 filter, disable parity calibration, REJ60=1, better 50Hz rejection
sendData[2] = 0x10; //, output rate = 50Hz
writeAd7190Register(0x08,sendData); //Write AD7190 mode register
while(RDY); //Wait for calibration to complete in idle mode
//Channel 0 performs internal full-scale calibration
sendData[0] = 0xA0; //Internal full-scale calibration MD2 MD1 MD0=0b101 is full-scale calibration mode
sendData[1] = 0x04; //sinc4 filter, disable parity calibration, REJ60=1, better 50Hz suppression
sendData[2] = 0x10; //output rate = 50Hz
writeAd7190Register(0x08,sendData); //write AD7190 mode register
delay(10000); delay does not seem to work here
while(RDY); //wait for calibration to complete in idle mode
/* read zero-level calibration value to see */
The value read here is still the initial value, indicating that the calibration is unsuccessful. . . .
readAD7190Reg(0x70);
zeroScalVaule=(u32)spiRevArry[1]<<16;
zeroScalVaule|=(u16)spiRevArry[2]<<8;
zeroScalVaule|=spiRevArry[3];
/* Read out the full-scale calibration value to view */
The value read here is still the initial value, which means the calibration is unsuccessful. . . .
readAD7190Reg(0x78);
fullScalVaule=(u32)spiRevArry[1]<<16;
fullScalVaule|=(u16)spiRevArry[2]<<8;
fullScalVaule|=spiRevArry[3];
//Switch to channel 1
Here we switch the channel to channel 1 and calibrate channel 1
sendData[0] = 0x00; //Chopping disabled, external reference between ref1+ and ref1-
sendData[1] = 0x01; // Initial selection Select channel 1, between AIN3 and AIN4,
sendData[2] = 0x60; //500nA current source turned off, external reference voltage detection enabled, and input buffer enabled. Bipolar mode , gain 128
writeAd7190Register(0x10,sendData); //Write AD7190 configuration register
//Channel 1 performs internal zero-scale calibration
sendData[0] = 0x80; //Internal zero-scale calibration
sendData[1] = 0x04; //sinc4 filter, disable parity calibration, REJ60=1, better 50Hz rejection, output rate = 300Hz
sendData[2] = 0x10;
writeAd7190Register(0x08,sendData); //Write AD7190 mode register
while(RDY); //Wait for calibration to complete in idle mode
//Channel 0 performs internal full-scale calibration
sendData[0] = 0xA0; //Internal full-scale calibration
sendData[1] = 0x04; //sinc4 filter, disable parity calibration, REJ60=1, better 50Hz rejection, output rate = 300Hz
sendData[2] = 0x10;
writeAd7190Register(0x08,sendData); //Write AD7190 mode register
while(RDY); //Wait for calibration to complete in idle mode
/* Read out zero-level calibration value to view */
The value read here is still the initial value, which means the calibration is unsuccessful. . . .
readAD7190Reg(0x70);
zeroScalVaule=(u32)spiRevArry[1]<<16;
zeroScalVaule|=(u16)spiRevArry[2]<<8;
zeroScalVaule|=spiRevArry[3];
/* Read out the full-scale calibration value to view */
The value read here is still the initial value, which means the calibration is unsuccessful. . . .
readAD7190Reg(0x78);
fullScalVaule=(u32)spiRevArry[1]<<16;
fullScalVaule|=(u16)spiRevArry[2]<<8;
fullScalVaule|=spiRevArry[3];
}
The above is the initialization program of AD7190. The communication is normal and there is no problem in the program! Is there a specific step for the calibration of AD7190? Thank you!
|