Hi, i am developing a prototype for 2-wire bioimpedance measurement using the AD5941 in combination with an adafruit feather M0 MCU. Currently i am in a breakout-board prototyping stage and want to move to a custom PCB soon. I used the latest example code and libraries from Github and ported the ADICUP3029Port.c file and main.c file from the 2WireBIOZ example to my specific MCU in the Arduino Framework.
I expect to measure impedances of up to 15kOhm and want to measure at a single excitation frequency of 100kHz with a minimum sampling rate of 10Hz.
I followed the Application Note AN-1557, but connected the second measuring lead to AIN2, as the code example states. I am using a 10k Resistor (non precision accuracy for now, will replace that later) as RCAL and when measuring a 10k Resistor as my unknown Z i get the following readings:
Could that deviation come from using a non-precision RCAL? Also, i would expect a Reactance much closer to 0. However, when measuring a 1k Resistor as unknown impedance i get the following readings:
How is a negative Resistance possible? Is a 1k Resistor just too small, when calibrating with 10k?
Some more general Questions:
- Is it necessary to split AGND and DGND for the device to work properly?
- Should not connected pins of the AD5941 be left floating or should they be pulled to GND?
Please also have a look at my schematic and the application parameters below for obvious errors.
Thank you and Kind Regards
Gianni
Schematic:
Application Parameters
/* !!Change the application parameters here if you want to change it to none-default value */ void AD5940BIOZStructInit(void) { AppBIOZCfg_Type *pBIOZCfg; AppBIOZGetCfg(&pBIOZCfg); pBIOZCfg->SeqStartAddr = 0; pBIOZCfg->MaxSeqLen = 512; /** @todo add checker in function */ pBIOZCfg->DftNum = DFTNUM_8192; pBIOZCfg->NumOfData = -1; /* Never stop until you stop it manually by AppBIOZCtrl() function */ pBIOZCfg->BIOZODR = 10; /* ODR(Sample Rate) 20Hz */ pBIOZCfg->FifoThresh = 4; /* 4 */ pBIOZCfg->ADCSinc3Osr = ADCSINC3OSR_2; /* Configure Switch matrix */ pBIOZCfg->DswitchSel = SWD_CE0; // Measuring Lead 1 pBIOZCfg->PswitchSel = SWP_CE0; pBIOZCfg->NswitchSel = SWN_AIN2; // Measuring Lead 2 pBIOZCfg->TswitchSel = SWN_AIN2; /* Configure Sweep parameters */ pBIOZCfg->SweepCfg.SweepEn = bFALSE; /* Measuring at single Frequency */ pBIOZCfg->SweepCfg.SweepStart = 1000; pBIOZCfg->SweepCfg.SweepStop = 200000.0; pBIOZCfg->SweepCfg.SweepPoints = 100; /* Max is 100 */ pBIOZCfg->SweepCfg.SweepLog = bFALSE; pBIOZCfg->PwrMod = AFEPWR_HP; /* Configure Measurement setup */ pBIOZCfg->SinFreq = 100000.0; pBIOZCfg->RcalVal = 10000.0; }