not getting accurate reading of current on o/p sigma delta channel of MKM34Z256VLQ7

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

not getting accurate reading of current on o/p sigma delta channel of MKM34Z256VLQ7

1,038 Views
ravindrabalsara
Contributor I

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.

0 Kudos
Reply
4 Replies

910 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

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

pastedImage_2.png

0 Kudos
Reply

910 Views
ravindrabalsara
Contributor I

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.

0 Kudos
Reply

910 Views
ravindrabalsara
Contributor I

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);
}

0 Kudos
Reply

910 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

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);
}

0 Kudos
Reply