Ik ben een meetinstrument aan het ontwikkelen waar 5 stuks MCP3914's in zitten. Dit is een 8 kanaals 24 bit ADC. In totaal heb ik dus 40 AD-converters. Nu meten alle 40 ADC's een factor 1,3 te weinig. Het kleinere broertje de MCP3911 (2 kanaals 24 bit ADC) heb ik vaker toegepast zonder problemen.
De analoge en digitale voedingsspanningen zijn in orde: 3,3 volt en geen noemenswaardige ruis (<1 mV). Ook de referentiespanning is in orde 1.2 V zonder noemenswaardige ruis.
Bij een differentiaal spanning van 30 mV op een ingang (netjes symmetrisch rond nul, gain op 1x) zou ik de code (30mv/600mV)*2^23 = 419431 verwachten, maar ik meet 322238. Dit is bevestigd door de SPI stream te bekijken.
De registers worden als volgt geinitialiseerd:
code:
void ADCsConfigure(int offcal, int gaincal) {
for (int chip=0; chip<N_ADC_CHIPS; chip++) {
ADCsetRegister(chip, 0x0B, 0x00000000); // GAIN all channels at 1x
ADCsetRegister(chip, 0x0C, 0x00B90000); // STATUSCOM
uint32_t val = 0x00380050 | (ADCpre << 16) | (ADCosr << 13) | (offcal << 23) | (gaincal << 22);
ADCsetRegister(chip, 0x0D, val); // CONFIG0
ADCsetRegister(chip, 0x0E, 0x00000040); // CONFIG1
}
// Optimize synchronisation between chips (minimize DR lag)
for (int chip=0; chip<(N_ADC_CHIPS); chip++) {
ADCsetRegister(chip, 0x09, 0x00000000);
ADCsetRegister(chip, 0x0A, 0x00000000);
}
}
Later wordt de offset nog gecompenseerd maar de gain correctie blijft uitgeschakeld.
Ik kom er niet achter waar de factor 1.3 afwijking vandaan komt. Heeft iemand een idee?