Post Go back to editing

ADE9000 support Bidirectional Energy?

Category: Datasheet/Specs
Product Number: ADE9000

Can the ADE9000 support Bidirectional Energy? 

How to do this parameter calculation? 

  • The ADE9000 can measure energy in both directions. The energy registers are signed. Positive is consumed negative is exported to the grid. 

    You will need to monitor the polarity and bin the energy in the micro. The smaller the accumulation time the more granularity in you measurement. 

    There is also pos and neg power register PWATT_ACC,  NWATT_ACC, PVAR_ACC, NVAR_ACC  this uses sample based accumulation. 

    This is all document in the datasheet. 

    Dave

  • Hi Dave, 

    Thanks for the guide. 

  •  

    Would like to check which register address to check for this bidirectional energy? is below 0x397 & 0x39B ? 

  • This would be signed accumulation over time, or linecycle accumulation you would use WATThr Varhr and VAhr register setup for # of half linecycles using signed accumulation. 

    Pwatt and Nwatt will accumulate each 8ksps for ade9000 4ksps for 9078 power. If it is positive it goes to Pwatt if it is negative it goes to Nwatt. this is a total power from A+B+C

    I think you want the linecycle (needs to be enabled) with signed accumulation (default)

    from the ADE9000 TRM ADE9000 Technical Reference Manual (Rev. 0) (analog.com) pg 21

    Dave

  • Thanks   
    We managed get the address can calculate positive energy for each phase. If need each phase of the negative value, how to do that?

  • The accumulation is signed. Negative energy will be negative positive energy  s positive. If you need to bin both positive and negative per phase. 

    Set linecycle accumulation small such as 10 1/2 cycles if your mcu can handle it. 

    After the accumulation of .01sec * 10 at 50 hz you can read the energy and bin to positive or negative energy. Note that in that 100ms the sum of the energy is available, so if it is positive  for 50ms then negative for 50ms you could read 0WH. The smaller the accumulation time the better the  separation of negative and positive energy. 

    If you don't care about binning positive and negative energy just read the energy register and you will get the energy for that time period. 

    Dave

  • I am currently facing two issues that I find perplexing and would like to discuss further:

    1. Bidirectional Energy: Your explanation suggests that the accumulation is signed, allowing for the differentiation between negative and positive energy. You mentioned setting the linecycle accumulation to a smaller value for better resolution. To clarify, does this mean the address can simultaneously read both negative and positive values, provided the reading interval is sufficiently short and fast?

    2. Mode of Active/Reactive Power Accumulation: The ADE9000 offers three modes of operation:

     Refer to UG-1098 page 21

       - Mode 1: Reading the address automatically resets it.
       - Mode 2: The ADE9000 continuously accumulates active energy based on the line cycle.
       - Mode 3: The ADE9000 continuously accumulates active energy based on samples.
       
       I noticed that the reference code from Arduino is set to Mode 3, yet it still manually accumulates energy:
       `intermediateActiveEgy_Reg[i] += ade9000.SPI_Read_32(xWATTHRHI_registers_address[i]);`
       `intermediateReactiveEgy_Reg[i] += ade9000.SPI_Read_32(xVARHRHI_registers_address[i]);`
       
       Why is there a need for manual accumulation in Mode 3, according to the Arduino reference code?

    I hope to gain a better understanding of these issues. If my questions are not clear, I would like to propose arranging a conference call next week to discuss them in detail. Thank you in advance for your assistance.

  • 1. Bidirectional Energy: Your explanation suggests that the accumulation is signed, allowing for the differentiation between negative and positive energy. You mentioned setting the linecycle accumulation to a smaller value for better resolution. To clarify, does this mean the address can simultaneously read both negative and positive values, provided the reading interval is sufficiently short and fast? NO

    The energy register will give you a sign accumulation over time. The shorter the accumulation time the less error you will get if the energy were to go negative part way through the accumulation. This is not perfect, but if you do a few cycles, it could be good enough. The customer will need to verify it meets their requirements.

    mode 2 for linecycle accumulation

    2.

    This is sample based accumulation.

    If they use sample-based accumulation with the PWATT_ACC NWATT_ACC PVAR_ACC NVAR_ACC This will give you separate bins for positive and negative power over n samples, which is power over time or energy. 

    You can't separate the phases here it is the total power accumulated over time. If phase A is negative and phase B and C are positive, the PWATT_ACC NWATT_ACC PVAR_ACC NVAR_ACC is the sum of theses powers.

    These are the 2 options for binning bidirectional energy,

    Dave

  • Regarding the first method, I want to confirm that if I use Mode 1 for data reading, as referred to on page 21 of UG-1098, will I be able to read the data of reverse active energy and then the address automatically resets?

    Additionally, I noticed that the reference code from Arduino is set to Mode 3, yet it still manually accumulates energy:


    intermediateActiveEgy_Reg[i] += ade9000.SPI_Read_32(xWATTHRHI_registers_address[i]);
    intermediateReactiveEgy_Reg[i] += ade9000.SPI_Read_32(xVARHRHI_registers_address[i]);


    Why is there a need for manual accumulation in Mode 3, according to the Arduino reference code?

  • The confusion is on the Arduino code “+=” applying in coding.

    Is the accumulation of ADE9000 will add to register array and increased each 8K sample?  

    See RED below for details.
       `intermediateActiveEgy_Reg[i] += ade9000.SPI_Read_32(xWATTHRHI_registers_address[i]);`
       `intermediateReactiveEgy_Reg[i] += ade9000.SPI_Read_32(xVARHRHI_registers_address[i]);`