AN2159 Application note SPI protocol for STPM01/STPM10 metering devices Introduction The STPM01 and STPM10 devices are energy meter ASSPs (Application Specific Standard Products) designed to address a wide range of electricity metering requirements thanks to their built-in functionalities as signal conditioning, signal processing, data conversion, input/output signals and voltage reference. STPM10 is dedicated for peripheral use only in microcontroller based applications, while STPM01 is able to work as a peripheral but also as a standalone device, since it can permanently store configuration and calibration data. Both the devices have an SPI port to write configuration parameters and read all the information on the line energy from their internal registers. Measured data (like active, reactive and apparent energy, VRMS, IRMS, instantaneous voltage and current, line frequency, device status etc.) should be read by the microcontroller at a fixed time interval to be further processed. This application note describes the SPI protocol to read measured data from STPM01 and STPM10 in a single-phase energy meter and how these readings should be processed by the application. Figure 1. July 2010 STPMxx based application block diagram Doc ID 11400 Rev 3 1/23 www.st.com Contents AN2159 Contents 1 2 Devices overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1 STPM01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 STPM10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 SPI module description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.1 Connection to microcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3 SPI interface timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4 SPI operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 4.1 Remote reset request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.2 Data registers writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4.3 Data registers permanent writing (STPM01 only) . . . . . . . . . . . . . . . . . . 10 4.4 Reading data registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Data processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5.1 Reading process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 5.1.1 5.2 Parity check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 5.2.1 5.3 6 7 2/23 Data register assembling example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Parity check example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Unpacking data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Converting readings into measured values . . . . . . . . . . . . . . . . . . . . . 16 6.1 Energies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 6.2 Other values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Revision history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Doc ID 11400 Rev 3 AN2159 Devices overview 1 Devices overview 1.1 STPM01 The STPM01 is an ASSP designed for effective measurement of active, reactive and apparent energy in a power line system using Rogowski coil, current transformer and shunt sensors. This device can be implemented as a single chip in single phase energy meters or as a peripheral in microcontroller based meter. The STPM01 consists, essentially, of two parts: the analog part and the digital part. The former, is composed by preamplifier and 1st order Δ ∑ A/D converter blocks, band gap voltage reference, low drop voltage regulator, the latter by system control, oscillator, hard wired DSP and SPI interface. There is also an OTP block, which is controlled through the SPI by means of a dedicated command set. The configured bits are used for testing, configuration and calibration purpose. The DSP unit computes active, reactive and apparent energy, RMS and instantaneous values of voltage and current. The results of computation are available as pulse frequency and states on the digital outputs of the device or into the internal data registers, which can be read from the device by means of SPI. For more details on the device please refer to datasheet. 1.2 STPM10 The STPM10 is designed for effective measurement of active, reactive and apparent energy in a power line system using Current Transformer or Shunt sensors. This device is intended to be a peripheral measurement device in a microcontroller based meter. The STPM10 consists of an analog part and a digital part. The former, is composed by preamplifier and 1st order Δ ∑ A/D converter blocks, Band gap voltage reference, Low drop voltage regulator, the latter by system control, oscillator, hard wired DSP and SPI interface. Configuration and calibration bits should be set by a microcontroller. The DSP unit computes active, reactive and apparent energy, RMS and instantaneous values of voltage and current. The results of computation are available in the internal data registers, which can be read from the device by means of SPI. For more details on the device please refer to datasheet. Doc ID 11400 Rev 3 3/23 SPI module description 2 AN2159 SPI module description The STPM01-10 SPI interface supports a simple serial protocol, which is implemented in order to enable a communication between a host system (microcontroller or PC) and the device. With this interface it is possible to perform the following tasks: ● remote reset of the device, ● temporary programming of internal configuration/calibration data and system signals, ● STPM01 only: permanent programming in OTP memory of internal configuration/calibration data, ● reading of internal data registers (shown in Figure 5). Four pins of the device are dedicated to this purpose: SCS, SYN, SCL, and SDA. SCS, SYN and SCL are all input pins while SDA can be input or output according if the SPI is in write or read mode. The internal register are not directly accessible, rather a 32 bit of transmission latches are used to pre-load the data before being read or written to the internal registers. The condition in which SCS, SYN and SCL inputs are set to high level determines the idle state of the SPI interface and no data transfer occurs. Any SPI operation should start from this idle state. ● SCS: enables SPI operation when low. ● SYN: when SCS is low the SYN pin status select if the SPI is in read (SYN=1) or write mode (SYN=0). When SCS is high and SYN is also high the results of the input or output data are transferred to the transmission latches. ● SCL: is the clock pin of the SPI interface. This pin function is also controlled by the SCS status. If SCS is low, SCL is the input of serial bit synchronization clock signal. When SCS is high, SCL is also high determining the idle state of the SPI. ● SDA: is the data pin. If SCS is low, the operation of SDA is dependent on the status of SYN pin. If SYN is high SDA is the output of serial bit data (read mode) if SYN is low SDA is the input of serial bit data signal (write mode). If SCS is high SDA is idle. When SCS is active (low), signal SDA should change its state at trailing edge of signal SCL and the signal SDA should be stable at next leading edge of signal SCL. The first valid bit of SDA is always started with activation of signal SCL. A high level signal for these pins means a voltage level higher than 0.75 x VCC, while a low level signal means a voltage value lower than 0.25 x VCC. 2.1 Connection to microcontroller The SPI master should be implemented by a host system, a PC or a microcontroller. Microcontrollers SPI bus is usually a four wire bus with full duplex functionality, which signals are usually named as: 4/23 ● SCLK: Serial Clock (output from master) ● MOSI: Master Output, Slave Input (output from master) ● MISO: Master Input, Slave Output (output from slave) ● SS: Slave Select (active low; output from master) Doc ID 11400 Rev 3 AN2159 SPI module description The best way to connect this standard SPI port to the STPMxx SPI is to have SCS and SYN driven from some general purpose i/o port and SCL and SDA driven from SPI pins. The suggested connection between microcontroller and STPMxx is the following: ● MISO connected to SDA; ● MOSI not connected; ● SCLK connected to SCL; ● SS connected to SCS; ● a general purpose I/O pin connected to SYN. In this way the SPI peripheral unit of microprocessor should operate as 2-wire (simplex synchronous transfers) SPI. The micro SPI peripheral can be used during STPMxx device reading, while during the writing process it is possible to implement the SPI protocol via firmware. In fact, in real applications with STPM01 the meter is calibrated and configured during meter production, so the main microcontroller task is to read from the device and, more rarely, to reset the device. In STPM10 based meters the metering device has to be configured at startup from the microcontroller, but also in this case the writing process is done once a while, while reading is a continuous process during meter lifetime. In both cases, since the reading time is crucial for a correct evaluation of the device data, it is advisable to emulate writing procedure by firmware and to read using SPI peripheral functionality, thus exploiting all the port performances to reach very fast reading. Doc ID 11400 Rev 3 5/23 SPI interface timings AN2159 3 SPI interface timings Table 1. SPI interface timings Symbol Parameter Min. Typ. Max. Unit FSCLKr Data read speed 32 MHz FSCLKw Data write speed 100 kHz tDS Data setup time 20 ns tDH Data hold time 0 ns tON Data driver on time 20 ns tOFF Data driver off time 20 ns tSYN SYN active width 2/fCLK In Table above fCLK is the oscillator clock frequency (see device datasheet for details). 6/23 Doc ID 11400 Rev 3 s AN2159 SPI operations 4 SPI operations 4.1 Remote reset request STPM01 and STPM10 have no reset pin. They are automatically reset by the power on reset (POR) circuit when the VCC crosses the 2.5 V value but they can be reset also through the SPI interface giving a dedicated command, which timing diagram is shown in Figure 2. The reset through SPI (remote reset request - RRR) is sent from the on-board microprocessor when some malfunction of metering device has been detected. Unlike the POR, the RRR signal does not cause the 30 ms retarded restart of analog module and the 120 ms retarded restart of digital module. This reset doesn't clear the mode signals. Figure 2. Remote reset request timing SCS SYN SCL SDA t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 Note: All the time intervals must be longer than 30 ns. t7 → t8 is the reset time, this interval must be longer than 30 ns as well. 4.2 Data registers writing Each writable bit (configuration and mode signals bits) of STPM01 and STPM10 has its own 6-bit absolute address (see related datasheets for configuration bits map). In order to change the state of some pin one must send to STPM01 a byte of data via SPI. This byte consists of 1-bit data to be written (MSB), followed by 6-bit address of destination bit, followed by 1-bit don't care data (LSB), which makes a command byte. For example, to set the STPM01 configuration bit 47 (part of the secondary current channel calibrator) to 0, the decimal 47 should be first converted to its 6-bit binary value: 101111. Doc ID 11400 Rev 3 7/23 SPI operations AN2159 The command byte will be then composed like this: 1 bit DATA value + 6-bits address +1 bit (0 or 1). In this case the binary command will be 01011111 (0x5F) or 01011110 (0x5E). The writing procedure timing is shown in Figure 3. Figure 3. Timing for writing configuration bits and mode signals SCS SYN SCL SDA t1 t2 t3 t4 t5 t6 t7 t8 t9 t1 → t2 (> 30 ns): SPI out of idle state t2 → t3 (> 30 ns): SPI enabled for write operation t3: data value is placed in SDA t4: SDA value is stable and shifted into the device t3 → t5 (> 10 µs): writing clock period t3 → t5: 1 bit data value t5 → t6: 6 bits address of the destination latch t6 → t7: 1 bit EXE command t8: end of SPI writing t9: SPI enters idle state Commands for changing configuration bits and system signals should be sent during active signals SCS and SYN as it is shown in Figure 3. The SYN must be put low in order to disable SDA output driver of the device and make the SDA as an input pin. A string of commands can be send within one period of active signals SCS and SYN or command can be followed by reading the data record but, in this case, the SYN should be deactivated in order to enable SDA output driver and a SYN pulse should be applied before activation of SCS in order to latch the data. Given the connection between STPMxx and a microcontroller as shown in the previous paragraph, it is possible to implement the writing procedure in the firmware through the following steps: 8/23 Doc ID 11400 Rev 3 AN2159 SPI operations 1. disable the SPI peripheral; 2. set MISO, SCLK and SS to be output; 3. set the pin which is connected to SYN to be output high; 4. activate SCS first and then SYN; 5. activate SCL; 6. apply a bit value to SDA and deactivate SCL; 7. repeat the last two steps seven times to complete one byte transfer; 8. repeat the last three steps for any remaining byte transfer; 9. deactivate SYN and the SCS; 10. enable again the SPI module; Note: For STPM01 only: To temporary set any bit, it is necessary to set the RD system signal before any other bit. This bit determines the device functioning from OTP shadow latches and not from OTP memory. The procedure to set this signal is that shown above. For permanent writing of any bit see next paragraph. In case of Precharge command (0xFF), emulation above is not necessary, it can be send before any reading command. In fact, due to the pull up device on the SDA pin the processor needs to perform the following steps: 1. activate SYN first in order to latch the results; 2. after at least 1 µs activate SCS; 3. write one byte to the transmitter of SPI (this will produce 8 pulses on SCL with SDA=1); 4. deactivate SYN; 5. read the data records as shown in paragraph 4.4 (the sequence of reading will be altered); 6. deactivate SCS. Doc ID 11400 Rev 3 9/23 SPI operations 4.3 AN2159 Data registers permanent writing (STPM01 only) In order to make a permanent set in OTP memory of some configuration bits, the following procedure should be conducted: 1. collect all addresses of bits to be permanently set into some list; 2. clear all OTP shadow latches; 3. set the system signal RD; 4. connect a current source of at least +14 V, 1 mA to 3 mA to VOTP pin; 5. wait until VOTP voltage is stable; 6. write one of the bit from the list (since RD signal is set, the bit will be written in the corresponding OTP shadow latch); 7. set the system signal WE; 8. wait for 300 µs; 9. clear the system signal WE; 10. clear the OTP shadow latch which was set in step 6; 11. until all wanted bits are permanently set, repeat steps 5 to 11; 12. disconnect the current source; 13. wait until VOTP voltage is less than 3 V; 14. clear the system signal RD; 15. read all data records, in the last two of them there is read back of all configuration bits; 16. if verification of CFG bits fails and there is still chance to pass, repeat steps 1 to 16. For steps of set or clear apply the timing shown in Figure 3 with proper data on SDA. For step 15 apply the timing shown in Figure 4. For permanent set of the TSTD bit, which locks the device, the procedure above must be conducted in such a way that steps 6 to 13 are performed in series during single period of active SCS because the idle state of SCS would make the signal TSTD immediately effective. This would abort the procedure, and it would possibly destroy the device. In fact the clearing of system signal RD would connect all gates of 3 V NMOS sense amplifiers of already permanently set bits to the VOTP source. 4.4 Reading data registers There are two phases of reading, called latching and shifting. 10/23 ● Latching is used to sample results into transmission latches. This is done with the active pulse on SYN when SCS is idle. The length of pulse on SYN must be longer than 2 periods of measurement clock, i.e. more than 500 ns. ● Shifting starts when SCS become active. In the beginning of this phase another, but much shorter pulse (30 ns) on SYN should be applied. An alternative way is to extend the pulse on SYN into the second phase of reading. Latching and shifting finish at the dotted line in the timing diagram shown in Figure 4. Doc ID 11400 Rev 3 AN2159 SPI operations Figure 4. Timing for reading data registers SCS SYN SCL SDA t1 t2 t3 t4 t5 t6 t7 t8 1st byte last bit of 32nd byte t1 → t2: Latching phase. Interval value > 2 / fCLK t2 → t3: Data latched, SPI idle. Interval value > 30 ns t3 → t4: Enable SPI for read operation. Interval value > 30 ns t4 → t5: Serial clock counter is reset. Interval value > 30 ns t5 → t6: SPI reset and enabled for read operation. Interval value > 30 ns t7: Internal data transferred to SDA t8: SDA data is stable and can be read After the shifting phase, it is possible to read data, applying 32 serial clocks per data record. Up to 8 data records can be read this way. Eight 32-bit data registers in STPM01 store relevant measurement information (see related datasheet for more details). Figure 5 shows the records structure and the information they hold, the default sequence of reading. The system that reads the data record from the STPM01 should check the integrity of each data record. If the check fails, the reading should be repeated, but this time only the shifting phase should be applied otherwise a new data would be latched into transmission latches and previous reading would be incorrectly lost. Doc ID 11400 Rev 3 11/23 SPI operations Figure 5. AN2159 STPMxx data registers 20 bit 4 bit 8 bit 1bit 1bit 1bit 6 bit DAP parity type0 active energy DRP parity reactive energy DSP parity apparent energy lower f(u) DFP parity type 1 energy mode signals DEV parity p uRMS iRMS DMV parity p uMOM iMOM CFL parity lower part of configurators parity upper part of configurators CFH Status 0 msb 1 upper f(u) lsb 11 bit 16 bit Most of registers holds several distinctive values of certain bit length, except CFL and CFH that are holding a bit map of configurators. Most of values are codified as unsigned integer, except for two values in DMV which are codified as signed binary. The data records have fixed position of reading. This means that no addressing of records is necessary. 12/23 Doc ID 11400 Rev 3 AN2159 Data processing 5 Data processing 5.1 Reading process As told before, to start a SPI communication with STPMxx to read new values of registers, it is necessary to apply a latching phase first. Then a shifting phase starts, as reported in Figure 4. After that, 32 pulses of serial clocks needs to be applied to pin SCL in order to read the DAP register. If additional 32 pulses are applied to pin SCL, the DRP register is read. At this point there are two possibilities. Either reading is continued by applying 32 clocks per register until all registers of interest are read or a precharge command is applied first (8 pulses to pin SCLNLC while SYN=0 and SDA=1) which moves an internal read pointer to register DEV which effectively skips DSP and DFP registers, and then reading may be continued. It is up to an application to decide how many records should be read out from the device. After all registers are read, SCS can be returned to idle state which ends the shifting phase. Shifting phase can be repeated and it should read the same values. This repetition is used to improve the reliability of successful reading in a strong EMI environment. Every register is packed into 4-bytes where the most significant nibble (4 bits) is reserved for parity code and the rest of 28 bits are used for data. This means that every register is protected by its own parity bit. As shown in Figure 6, the first read out byte of data record is Least Significant Byte (LSB) of data value and the fourth is Most Significant Byte (MSB) of data value, then it is necessary to re-order the four bytes after reading. Figure 6. STPMxx data registers 8 bit SPI reading order 1st 4th byte - MSB byte - LSB msb lsb 7 0 7 0 7 0 7 0 parity nibble msb 0 parity nibble 2423 1615 8 7 lsb 0 28 bit data 32 bits register assembling Normally, each byte is read out as most significant bit (MSB) first. But this can be changed by setting the MSBF configuration bit. If this is done, each byte is read out as least significant bit (LSB) first. Doc ID 11400 Rev 3 13/23 Data processing 5.1.1 AN2159 Data register assembling example Following an example of reading and re-arranging of STPMxx registers. On the left are reported the eight data records as they are read, represented as hexadecimal bytes while MSBF was cleared, on the right the corresponding register. 1. 5.2 65 7A 7C 82 DAP = 82 7C 7A 65 2. 00 7A 0C E0 DRP = E0 0C 7A 00 3. 00 00 8C 92 DSP = 92 8C 0 00 4. 00 06 6E 22 DFP = 22 6E 06 00 5. BB B3 07 DD DEV = DD 07 B3 BB 6. 3F AF AA CA DMV = CA AA AF 3F 7. 01 00 00 E0 CFL = E0 00 00 01 8. 00 00 00 F0 CFH = F0 00 00 00 Parity check Each bit of parity nibble is defined as odd parity of all seven corresponding bits of data nibbles. In order to check the data record integrity, the application should execute something similar to the following C code, given as an example: int BadParity (unsigned char *bp) { register unsigned char prty; /* temporary register */ prty /* take the 1st byte of data */ = *bp, prty ^= *(bp+1), /* XOR it with the 2nd byte */ prty ^= *(bp+2), /* and with the 3rd byte */ prty ^= *(bp+3), /* and with the 4th byte */ prty ^= prty<<4, prty &= 0xF0;/* combine and remove the lower nibble */ return (prty != 0xF0); /* returns 1, if bad parity */ } if (BadParity(dap) || BadParity(drp) || /* DAP and DRP data record */ BadParity(dsp) || BadParity(dfp) || /* DSP and DFP data record */ BadParity(dev) || BadParity(dmv) || /* DEV and DMV data record */ BadParity(cfl) || BadParity(cfh)) /* CFL and CFH data record */ /* code to repeat reading sequence should be entered here */ ; If the parity nibble check would fail, the reading task should be repeated but, this time, without request of latching otherwise a new data would be latched and previous reading would be incorrectly lost. In a very hash EMI environment, it would be a good practice to read the data records twice and then compare both reading. This way the probability of detecting bad readings would be significantly improved. Anyway, a single bad data can be discarded because no meaningful information is lost as long the reading frequency is about 30 ms. 14/23 Doc ID 11400 Rev 3 AN2159 5.2.1 Data processing Parity check example Let us consider the example of paragraph 5.1.1 to check the parity of the registers: 1. DAP = 82 7C 7A 65 parity=8, 2. DRP = E0 0C 7A 00 parity=E, 3. DSP = 92 8C 0 00 parity=9, 4. DFP = 22 6E 06 00 parity=2, 5. DEV = DD 07 B3 BB parity=D, 6. DMV = CA AA AF 3F parity=C, 7. CFL = E0 00 00 01 parity=E, 8. CFH = F0 00 00 00 parity=F, Most likely, the STPM01 is not responding (is not selected), if any data record is read as: X. FF FF FF FF parity=F, (parity check will fail) Let's check the parity code of the first data record. The following steps should be performed using temporary variable named HL: 1. load the 1st byte into HL HL = 65 = 0110 0101 2. exor HL with the 2nd byte: HL = 65^7A = 0110 0101 ^ 0111 1010 3. exor HL with the 3rd byte: HL = 1F^7C = 0001 1111 ^ 0111 1100 4. exor HL with the 4th byte: HL = 63^82 = 0110 0011 ^ 1000 0010 5. exor HL with HL<<4: HL = E1^10 = 1110 0001 ^ 0001 0000 6. and HL with 0xF0: HL = F1&F0 = 1111 0001 & 1111 0000 7. compare HL with 0xF0: HL = F0 = 1111 0000 Let check also the parity code of the fourth data record: 1. load the 1st byte into HL: HL = 00 2. exor HL with the 2nd byte: HL = 00^06 = 0000 0000 ^ 0000 0110 = 0000 0000 3. exor HL with the 3rd byte: HL = 06^6E = 0000 0110 ^ 0110 1110 4. exor HL with the 4th byte: HL = 68^22 = 0110 1000 ^ 0010 0010 5. exor HL with HL<<4: HL = 4A^A0 = 0100 1010 ^ 1010 0000 6. and HL with 0xF0: HL = EA&F0 = 1110 1010 & 1111 0000 7. compare HL with 0xF0: HL = E0 = 1110 0000 This time the parity is not correct. 5.3 Unpacking data After reading (and following re-ordering of bytes read), each register should be unpacked in order to obtain all individual values. For this purpose it is necessary to mask the 28 bits according to the registers map shown in Figure 5. For example, DAP register is unpacked into 8-bit value of status (least significant byte) and 20-bit value of active energy counter (remaining upper 3 bytes with parity code masked out). Doc ID 11400 Rev 3 15/23 Converting readings into measured values AN2159 6 Converting readings into measured values 6.1 Energies The first four registers contain 20 bit value of internal energy up/down counters. The value of least significant bit of every energy counter is related to power meter constant P, which is the number of pulses per kWh that the meter, through calibration, is configured to provide to LED pin. This means that this value changes with the application and relative calibration. Given P, the value of the LSB of the source energy registers is indicated below: KAW = 1000 / (211 * P) [Wh] (active energy); KAWFund = 4 * KAW [Wh] (active fundamental energy); KRW = 2 * KAW [VARh] (reactive energy); KSW = KAW [VAh] (apparent energy). For example, if P = 64000 imp/kWh: KAW = 7.63 * 10-6 Wh KAWFund = 3.05 * 10-5 Wh KRW = 1.52 * 10-5 VARh KSW = 7.63 * 10-6 VAh This also means that the STPMxx energy counters hold a very small energy value (in the example above, the active energy register stores about 8 Wh), and further energy integration has to be performed inside the application. To accomplish this task, the below procedure should be followed. Because all energy counters rollover in approximately 1 s when they are integrating maximal power, the reading must be done frequently enough. Our suggestion is to read the registers at least 32 times per second. For each energy type a variable e should be allocated, having the following structure (below, the variable definition for an ST7 microcontroller): typedef struct energ { unsigned long old; /* previous energy value - 32 bits */ unsigned int quot; /* quant/16 - 16 bits */ signed int quant; /* new - old, measure of power - 16 bits */ signed long frac; /* fractional part of energy integrator - 32 bits */ signed long integ; /* integer part of energy integrator - 32 bits */ } ENERG; The application should keep previous value of each energy counter in order to evaluate the difference of readings, from which also a direction of energy flow can be obtained. This value should be stored in e → old before a reading. After the reading, the new energy register reading should be stored in e → new. To calculate consummated energy the software should implement a 32-bit integrator. The suggested integrator is two stages, with e → frac and e → integ 32-bit signed integer variables. Into e → frac is added the value e → quant, obtained as difference between e → 16/23 Doc ID 11400 Rev 3 AN2159 Converting readings into measured values old and e → new energy values; then e → old value should be rewritten with e → new value in order to enable a correct e → quant computation next time. When e → frac would collect a certain amount of energy, let say 10 Wh for active energy (corresponding to a certain threshold value according to KAW), e → integ should change for 1 bit and the e → frac should change by the threshold value. This way e → frac stores 0.01 kWh, after which e → integ is increased by one, and e → integ variable will hold accumulated energy of which the least significant bit will represent 10 Wh. Considering an active energy meter where P = 64000 imp/kWh, for a step of 0.01 kWh = 10 Wh, since each bit of e'quant represents KAW Wh (is the same resolution of internal energy counter, because e → quant is calculated as a difference of two energy counter values), the threshold value will be 10 / KAW = 10 * 2^17 = 0 x 140000. In a microcontroller based application, a high priority timer interrupt should be set to perform measuring tasks every 1/512 s. Within this interrupt service 16 different subtasks could be established in order to broke the whole meter task into 16 shorter consecutive subtasks (reading of device's register, checking the data read and if OK, computing the value of e → quant, ...). In this way the main program and other interrupt services are not blocked for more than few 100 µs every 2 ms, and the meter task will be completed in 16 steps - that is in 1/32 s. The interrupt service should do the following: ● update e → frac and e → integ of energy variable using e → quot = e → quant / 16 ● generate output pulses (if needed) from e → frac ● call the next subtask ● perform other tasks (if needed) In this way the addition of e → quant is split in 16 times. This generates a microcontroller output pulse that has a 16 times better accuracy of position in time. In fact the period of reading would be 1/32 s = 31.25 ms. If the whole value of e → quant would be added to the final energy register e → frac, only 31.25 ms resolution of output pulse position would be possible, which would be seen as a jitter just by eye looking to the LED. Using suggested method the resolution of output pulse position would be 1.95 ms, which is short jitter enough that nobody would see it. Below an example of subtasks organization is given: subtask_0: latch the values in the STPMxx subtask_1: read the STPMxx subtask_2: repeat the reading of STPMxx (without latching again) and stop SPI communication subtask_3: verify the parity codes of registers and equality of both readings, result is flag OK subtask_4: if OK unpack values of registers read from STPMxx subtask_5: if OK process STPMxx status subtask_6: if OK compute e → quant and update e → old of active energy subtask_7: if OK compute e → quant and update e → old of reactive energy subtask_8: if OK compute e → quant and update e → old of apparent energy subtask_9: if OK calculate Vrms and Irms, Doc ID 11400 Rev 3 17/23 Converting readings into measured values AN2159 subtask_A: convert e → integ of active energy into format suitable for LCD subtask_B: convert e → integ of reactive energy into format suitable for LCD subtask_C: convert e → integ of apparent energy into format suitable for LCD subtask_D: convert Vrms into format suitable for LCD subtask_E: convert Irms into format suitable for LCD subtask_F: if not OK e → quant = 0 else { e → quot = e → quant % 16, (is the remainder of e → quant / 16) update e → frac of active energy using e → quot, e → quot = e → quant / 16 } 6.2 Other values The ratio between the register value and the actual voltage, current or frequency value is a function of the voltage and current sensors sensitivity and of the device internal parameters, like analog amplification, reference voltage, measurement frequency, calibrator, attenuation of each stage of decimation filter and power meter constant. Formulas to convert the readings into meaningful values are reported below. In any case, since the internal parameters values, here given as constants, are subject to process drift, and the sensors sensitivity are subject to tolerance, even if these fluctuations are compensated by the calibrators, the best way to obtain the proper parameters is to measure known signals and calculate the ratio between register value and actual value. The device linearity will ensure that the ratio will remain constant. Figure 7, Figure 8 and Figure 9 below shown the signal processing chains for current and voltage. Figure 7. 18/23 Voltage signal path Doc ID 11400 Rev 3 AN2159 Converting readings into measured values Figure 8. Current conditioning Figure 9. Current signal path Each block of the path contributes to the signal processing with the parameters shown below. Table 2 shows the variable parameters that must be consider as inputs for the following calculation while Table 3 shows device internal constant parameters. Table 2. Input parameters Parameter Meaning R1, R2 Voltage Divider Resistors Value [Ohm] Ks Current Sensor Sensitivity Value [V/A] x_i_rms RMS Current Register Value expressed as decimal x_u_rms RMS Voltage Register Value expressed as decimal x_i_mom Momentary Current Register Value expressed as decimal x_u_mom Momentary Voltage Register Value expressed as decimal x_f Frequency Register Value expressed as decimal Ai Current Channel Gain The value of the current channel gain Ai depends on the selected current sensor. Please refer to the datasheet for the proper value to select. Doc ID 11400 Rev 3 19/23 Converting readings into measured values Table 3. AN2159 STPMxx internal parameters value Parameter Value Meaning Ku 0,875 Voltage Calibrator Ideal Value Ki 0,875 Current Calibrator Ideal Value Au 4 len_i 2^16 RMS Current Register Length len_u 2^11 RMS Voltage Register Length len_i_mom 2^15 Momentary Current Register Length len_u_mom 2^10 Momentary Voltage Register Length len_f 2^14 Frequency Register Length Kint_comp 1,004 Gain of decimation filter π 3.14159 Dint 2^16 Dint_p 2^15 Voltage Channel Gain 2^23 if oscillator frequency is 4.194 or 8.388 MHz 8 * 10^6 if oscillator frequency is 4.000 or 8.000 MHz Fm 2 for CT/Shunt 1 for Rogowski coil Kut Vref 1.23 Internal voltage reference Line frequency is calculated as follows: frequency = 2 * Fm * x_f /( π * len_f * Dint) kf = frequency / 50 The differentiator and integrator gains are calculated from the frequency result as follows: Kdif = (2* π * frequency * Dint_p) / (2 * Fm) Kint = Fm * 2 / (2 * π * frequency * Dint) Typical values are: 0,6135 Gain of differentiator @ line frequency = 50 Hz 0.7359 Gain of differentiator @ line frequency = 60 Hz 0,815 Gain of integrator @ line frequency = 50 Hz 0.679 Gain of integrator @ line frequency = 60 Hz Kdif Kint 20/23 Doc ID 11400 Rev 3 AN2159 Converting readings into measured values For momentary values it is necessary first of all to evaluate their sign: if (x_i_mom & 0x08000) // positive current x_i_mom = x_i_mom & 0x07FFF; else // negative current { x_i_mom = 0x08000 - x_i_mom; x_i_mom = x_i_mom * (-1); } if (x_u_mom & 0x0400 // positive voltage x_u_mom = (x_u_mom) & 0x3FF; else // negative voltage { x_u_mom = 0x0400 - (x_u_mom); x_u_mom = x_u_mom * (-1); } The current and voltage conversion formulas in case of Rogowski Coil current sensor are: u_rms = (1+R1/R2) * x_u_rms *Vref /(Au * Ku * Kint_comp * len_u * Kut) i_rms = x_i_rms * Vref /(Ks * Kf * Ai * Ki * Kint * Kint_comp * len_i) u_mom = (1+R1/R2) * x_u_mom * Vref /(Au * Ku * Kint_comp * len_u_mom * Kut) i_mom = x_i_mom * Vref /(Ks * Kf * Ai * Ki * Kint * Kint_comp * len_i_mom) In case of current trasformer or Shunt sensor the formulas become: u_rms = (1+R1/R2) * x_u_rms *Vref /(Au * Ku * Kint_comp * Kint * Kdif * len_u * Kut) i_rms = x_i_rms * Vref/(Ks * Ai * Ki * Kint * Kint_comp * Kdif * len_i) u_mom = (1+R1/R2) * x_u_mom * Vref /(Au * Ku * Kint_comp * Kint * Kdif * len_u_mom * Kut) i_mom = x_i_mom * Vref /(Ks * Ai * Ki * Kint * Kint_comp * Kdif * len_i_mom) Doc ID 11400 Rev 3 21/23 Revision history AN2159 7 Revision history Table 4. Document revision history 22/23 Date Version Description 18-Jun-2005 1 First release 19-Apr-2006 2 Document reformatted no content change 26-Jul-2010 3 Added: Figure 1 on page 1, Section 1.1 and Section 1.2 on page 3 Doc ID 11400 Rev 3 AN2159 Please Read Carefully: Information in this document is provided solely in connection with ST products. STMicroelectronics NV and its subsidiaries (“ST”) reserve the right to make changes, corrections, modifications or improvements, to this document, and the products and services described herein at any time, without notice. All ST products are sold pursuant to ST’s terms and conditions of sale. Purchasers are solely responsible for the choice, selection and use of the ST products and services described herein, and ST assumes no liability whatsoever relating to the choice, selection or use of the ST products and services described herein. No license, express or implied, by estoppel or otherwise, to any intellectual property rights is granted under this document. If any part of this document refers to any third party products or services it shall not be deemed a license grant by ST for the use of such third party products or services, or any intellectual property contained therein or considered as a warranty covering the use in any manner whatsoever of such third party products or services or any intellectual property contained therein. UNLESS OTHERWISE SET FORTH IN ST’S TERMS AND CONDITIONS OF SALE ST DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY WITH RESPECT TO THE USE AND/OR SALE OF ST PRODUCTS INCLUDING WITHOUT LIMITATION IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE (AND THEIR EQUIVALENTS UNDER THE LAWS OF ANY JURISDICTION), OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS EXPRESSLY APPROVED IN WRITING BY AN AUTHORIZED ST REPRESENTATIVE, ST PRODUCTS ARE NOT RECOMMENDED, AUTHORIZED OR WARRANTED FOR USE IN MILITARY, AIR CRAFT, SPACE, LIFE SAVING, OR LIFE SUSTAINING APPLICATIONS, NOR IN PRODUCTS OR SYSTEMS WHERE FAILURE OR MALFUNCTION MAY RESULT IN PERSONAL INJURY, DEATH, OR SEVERE PROPERTY OR ENVIRONMENTAL DAMAGE. ST PRODUCTS WHICH ARE NOT SPECIFIED AS "AUTOMOTIVE GRADE" MAY ONLY BE USED IN AUTOMOTIVE APPLICATIONS AT USER’S OWN RISK. Resale of ST products with provisions different from the statements and/or technical features set forth in this document shall immediately void any warranty granted by ST for the ST product or service described herein and shall not create or extend in any manner whatsoever, any liability of ST. ST and the ST logo are trademarks or registered trademarks of ST in various countries. Information in this document supersedes and replaces all information previously supplied. The ST logo is a registered trademark of STMicroelectronics. All other names are the property of their respective owners. © 2010 STMicroelectronics - All rights reserved STMicroelectronics group of companies Australia - Belgium - Brazil - Canada - China - Czech Republic - Finland - France - Germany - Hong Kong - India - Israel - Italy - Japan Malaysia - Malta - Morocco - Philippines - Singapore - Spain - Sweden - Switzerland - United Kingdom - United States of America www.st.com Doc ID 11400 Rev 3 23/23