hello sir,
We are facing issue with SIGMA DELTA ADC.of MKM34Z256VLQ7 current{A} parameter measurment for genset application
Now at input side our voltage range is 0-500mV. (AC voltage)
We as of now we have taken average of the readings and we are getting readings but the values are much more varying with the same input value .
So we can't able to handle it .
Please help with the same problem
see the attached schematic for your reference.
Hi, Ravindra,
Firstly, psl refer to the data sheet of KM34, the common mode voltage is from 0V to 0.8V. Your input common mode voltage is Vref/2 from your schematics, does it meets the input common mode voltage requirement?
Secondly, the AFE define the spec SINAD spec, this is the SINAD formula:
SINAD=6.02*ENOB+1.76
The SINAD spec is 80 with the condition:
Normal Mode
• fIN=50 Hz; common mode=0
V, Vpp= 500 mV (diff.)
• fIN=50 Hz; common mode=0
V, Vpp= 500 mV (full range
se.)
it means that the ENOB is about 13 bits, for a 24 bits AFE data register, the low 10 bits may vary for the same input DC voltage.
Hope it can help you
BR
XiangJun Rong
Hello sir,
Till we are getting lot of variation in current measurements,in application
noteDRM162 mentioned connection for current transformer,how make connection
by using shunt resistors.is there need to change something.please guide.or
di you have any reference code to measure the current by using shunt
resistors in sigma Delta channel.
thanks sir for your support .we are working on your suggestions,below i have mentioned my code ,please go through it once.
please let me know if anything need to be change in software code .
unsigned int Cal_YPH_Current_GEN(int display)//channel @ 0U
{
unsigned short DD0=0, DD1=0, DD2=0, DD3=0;
uint32_t CIN_YPH1=0;
/* Check conversion complete */
// if ((kAFE_Channel1ConversionCompleteFlag & AFE_GetChannelStatusFlags(DEMO_AFE_BASEADDR)))
// {
g_result1 = (int32_t)AFE_GetChannelConversionValue(DEMO_AFE_BASEADDR, DEMO_AFE_SECOND_CHANNEL);
/* Set conversion done flag */
g_bAfeSecondChannelConvDone = true;
// }
// AFE_DoSoftwareTriggerChannel(DEMO_AFE_BASEADDR,kAFE_Channel1Trigger);
/* Read channel 2 result conversion */
while (!g_bAfeSecondChannelConvDone)
{
}
g_bAfeSecondChannelConvDone = false;
// if(g_result1<0){
// g_result1=0;
// CIN_YPH= g_result1;
// }
// printf("Second Channel value: %d\r\n\r\n", g_result1);
// CIN_YPH=(g_result1*CT_Ratio)/10000;
if(g_result1>0)
{
CIN_YPH= g_result1;
}
CIN_YPH= ( CIN_YPH*50)/(1000*read_ct_ratio);//read ct ration in s
for (uint32_t l=0; l < 5; l++)
{
CIN_YPH1= CIN_YPH1+ CIN_YPH;
}
CIN_YPH1 = CIN_YPH1/5;
printf("\r\n CIN_YPH is %d.\r\n",CIN_YPH1);
}
Hi, Ravindra,
I suppose that your code is incorrect, I modify the code partly, pls check it.
BR
XiangJun Rong
unsigned int Cal_YPH_Current_GEN(int display)//channel @ 0U
{
unsigned short DD0=0, DD1=0, DD2=0, DD3=0;
uint32_t CIN_YPH1=0;
//start to convert
AFE_DoSoftwareTriggerChannel(DEMO_AFE_BASEADDR,kAFE_Channel1Trigger);
/* waiting for conversion complete */
while(!(kAFE_Channel1ConversionCompleteFlag & AFE_GetChannelStatusFlags(DEMO_AFE_BASEADDR))) {}
//reading sample after conversion is complete
g_result1 = (int32_t)AFE_GetChannelConversionValue(DEMO_AFE_BASEADDR, DEMO_AFE_SECOND_CHANNEL);
/* Set conversion done flag */
g_bAfeSecondChannelConvDone = true;
/* Read channel 2 result conversion */
while (!g_bAfeSecondChannelConvDone)
{
}
g_bAfeSecondChannelConvDone = false;
// if(g_result1<0){
// g_result1=0;
// CIN_YPH= g_result1;
// }
// printf("Second Channel value: %d\r\n\r\n", g_result1);
// CIN_YPH=(g_result1*CT_Ratio)/10000;
if(g_result1>0)
{
CIN_YPH= g_result1;
}
CIN_YPH= ( CIN_YPH*50)/(1000*read_ct_ratio);//read ct ration in s
for (uint32_t l=0; l < 5; l++)
{
CIN_YPH1= CIN_YPH1+ CIN_YPH;
}
CIN_YPH1 = CIN_YPH1/5;
printf("\r\n CIN_YPH is %d.\r\n",CIN_YPH1);
}