Fix POWCT default calibration

This commit is contained in:
Theo Arends 2024-07-11 20:51:53 +02:00
parent 27083e3664
commit 23de275dbe
1 changed files with 46 additions and 37 deletions

View File

@ -28,7 +28,7 @@
* With zero-cross detection * With zero-cross detection
* {"NAME":"Sonoff Dual R3 (ZCD)","GPIO":[32,0,0,0,7552,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,7296,7328,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1} * {"NAME":"Sonoff Dual R3 (ZCD)","GPIO":[32,0,0,0,7552,0,0,0,0,576,225,0,0,0,0,0,0,0,0,0,0,7296,7328,224,0,0,0,0,160,161,0,0,0,0,0,0],"FLAG":0,"BASE":1}
* *
* {"NAME":"Sonoff POWCT","GPIO":[32,0,0,0,0,9280,0,0,0,320,0,576,0,9184,9216,0,0,224,0,9248,0,7329,7296,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1} * {"NAME":"Sonoff POWCT","GPIO":[32,0,0,0,0,9280,0,0,0,288,0,576,0,9184,9216,0,0,224,0,9248,0,7329,7296,0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":1}
* *
* Based on datasheet from ChipSea and analysing serial data * Based on datasheet from ChipSea and analysing serial data
* See https://github.com/arendst/Tasmota/discussions/10793 * See https://github.com/arendst/Tasmota/discussions/10793
@ -201,10 +201,14 @@ uint32_t Cse7761ReadFallback(uint32_t reg, uint32_t prev, uint32_t size) {
/********************************************************************************************/ /********************************************************************************************/
uint32_t Cse7761Ref(uint32_t unit) { uint32_t Cse7761Ref(uint32_t unit) {
uint32_t coeff = 1;
if (CSE7761_MODEL_POWCT == CSE7761Data.model) {
coeff = 5;
}
switch (unit) { switch (unit) {
case RmsUC: return 0x400000 * 100 / CSE7761Data.coefficient[RmsUC]; case RmsUC: return 0x400000 * 100 / CSE7761Data.coefficient[RmsUC];
case RmsIAC: return (0x800000 * 100 / CSE7761Data.coefficient[RmsIAC]) * 10; // Stay within 32 bits case RmsIAC: return (0x800000 * 100 / (CSE7761Data.coefficient[RmsIAC] * coeff)) * 10; // Stay within 32 bits
case PowerPAC: return 0x80000000 / CSE7761Data.coefficient[PowerPAC]; case PowerPAC: return 0x80000000 / (CSE7761Data.coefficient[PowerPAC] * coeff);
} }
return 0; return 0;
} }
@ -255,124 +259,129 @@ bool Cse7761ChipInit(void) {
Bit name Function description Bit name Function description
15-11 NC -, the default is 1 15-11 NC -, the default is 1
10 ADC2ON 10 ADC2ON
=1, means ADC current channel B is on (Sonoff Dual R3 Pow) =1, means ADC current channel B is on (Sonoff Dual R3)
=0, means ADC current channel B is closed =0, means ADC current channel B is closed (Pow CT)
9 NC -, the default is 1. 9 NC -, the default is 1.
8-6 PGAIB[2:0] Current channel B analog gain selection highest bit 8-6 PGAIB[2:0] Current channel B analog gain selection highest bit
=1XX, PGA of current channel B=16 (Sonoff Dual R3 Pow) =1XX, PGA of current channel B=16 (Sonoff Dual R3)
=011, PGA of current channel B=8 =011, PGA of current channel B=8
=010, PGA of current channel B=4 =010, PGA of current channel B=4
=001, PGA of current channel B=2 =001, PGA of current channel B=2
=000, PGA of current channel B=1 =000, PGA of current channel B=1 (Pow CT)
5-3 PGAU[2:0] Highest bit of voltage channel analog gain selection 5-3 PGAU[2:0] Highest bit of voltage channel analog gain selection
=1XX, PGA of voltage U=16 =1XX, PGA of voltage U=16
=011, PGA of voltage U=8 =011, PGA of voltage U=8
=010, PGA of voltage U=4 =010, PGA of voltage U=4
=001, PGA of voltage U=2 =001, PGA of voltage U=2
=000, PGA of voltage U=1 (Sonoff Dual R3 Pow) =000, PGA of voltage U=1 (Sonoff Dual R3 / Pow CT)
2-0 PGAIA[2:0] Current channel A analog gain selection highest bit 2-0 PGAIA[2:0] Current channel A analog gain selection highest bit
=1XX, PGA of current channel A=16 (Sonoff Dual R3 Pow) =1XX, PGA of current channel A=16 (Sonoff Dual R3)
=011, PGA of current channel A=8 =011, PGA of current channel A=8
=010, PGA of current channel A=4 =010, PGA of current channel A=4
=001, PGA of current channel A=2 =001, PGA of current channel A=2
=000, PGA of current channel A=1 =000, PGA of current channel A=1 (Pow CT)
*/ */
Cse7761Write(CSE7761_REG_SYSCON | 0x80, 0xFF04); if (CSE7761_MODEL_POWCT == CSE7761Data.model) {
// Cse7761Write(CSE7761_REG_SYSCON | 0x80, 0x0A00); // Pow CT
Cse7761Write(CSE7761_REG_SYSCON | 0x80, 0xFE00); // Pow CT - Tasmota (enable B)
} else {
Cse7761Write(CSE7761_REG_SYSCON | 0x80, 0xFF04); // Sonoff Dual R3
}
/* /*
Energy Measure Control Register (EMUCON) Addr:0x01 Default value: 0x0000 Energy Measure Control Register (EMUCON) Addr:0x01 Default value: 0x0000
Bit name Function description Bit name Function description
15-14 Tsensor_Step[1:0] Measurement steps of temperature sensor: 15-14 Tsensor_Step[1:0] Measurement steps of temperature sensor:
=2'b00 The first step of temperature sensor measurement, the Offset of OP1 and OP2 is +/+. (Sonoff Dual R3 Pow) =2'b00 The first step of temperature sensor measurement, the Offset of OP1 and OP2 is +/+. (Sonoff Dual R3 / Pow CT)
=2'b01 The second step of temperature sensor measurement, the Offset of OP1 and OP2 is +/-. =2'b01 The second step of temperature sensor measurement, the Offset of OP1 and OP2 is +/-.
=2'b10 The third step of temperature sensor measurement, the Offset of OP1 and OP2 is -/+. =2'b10 The third step of temperature sensor measurement, the Offset of OP1 and OP2 is -/+.
=2'b11 The fourth step of temperature sensor measurement, the Offset of OP1 and OP2 is -/-. =2'b11 The fourth step of temperature sensor measurement, the Offset of OP1 and OP2 is -/-.
After measuring these four results and averaging, the AD value of the current measured temperature can be obtained. After measuring these four results and averaging, the AD value of the current measured temperature can be obtained.
13 tensor_en Temperature measurement module control 13 tensor_en Temperature measurement module control
=0 when the temperature measurement module is closed; (Sonoff Dual R3 Pow) =0 when the temperature measurement module is closed; (Sonoff Dual R3 / Pow CT)
=1 when the temperature measurement module is turned on; =1 when the temperature measurement module is turned on;
12 comp_off Comparator module close signal: 12 comp_off Comparator module close signal:
=0 when the comparator module is in working state =0 when the comparator module is in working state
=1 when the comparator module is off (Sonoff Dual R3 Pow) =1 when the comparator module is off (Sonoff Dual R3 / Pow CT)
11-10 Pmode[1:0] Selection of active energy calculation method: 11-10 Pmode[1:0] Selection of active energy calculation method:
Pmode =00, both positive and negative active energy participate in the accumulation, Pmode =00, both positive and negative active energy participate in the accumulation,
the accumulation method is algebraic sum mode, the reverse REVQ symbol indicates to active power; (Sonoff Dual R3 Pow) the accumulation method is algebraic sum mode, the reverse REVQ symbol indicates to active power; (Sonoff Dual R3 / Pow CT)
Pmode = 01, only accumulate positive active energy; Pmode = 01, only accumulate positive active energy;
Pmode = 10, both positive and negative active energy participate in the accumulation, Pmode = 10, both positive and negative active energy participate in the accumulation,
and the accumulation method is absolute value method. No reverse active power indication; and the accumulation method is absolute value method. No reverse active power indication;
Pmode =11, reserved, the mode is the same as Pmode =00 Pmode =11, reserved, the mode is the same as Pmode =00
9 NC - 9 NC -
8 ZXD1 The initial value of ZX output is 0, and different waveforms are output according to the configuration of ZXD1 and ZXD0: 8 ZXD1 The initial value of ZX output is 0, and different waveforms are output according to the configuration of ZXD1 and ZXD0:
=0, it means that the ZX output changes only at the selected zero-crossing point (Sonoff Dual R3 Pow) =0, it means that the ZX output changes only at the selected zero-crossing point (Sonoff Dual R3 / Pow CT)
=1, indicating that the ZX output changes at both the positive and negative zero crossings =1, indicating that the ZX output changes at both the positive and negative zero crossings
7 ZXD0 7 ZXD0
=0, indicates that the positive zero-crossing point is selected as the zero-crossing detection signal (Sonoff Dual R3 Pow) =0, indicates that the positive zero-crossing point is selected as the zero-crossing detection signal (Sonoff Dual R3 / Pow CT)
=1, indicating that the negative zero-crossing point is selected as the zero-crossing detection signal =1, indicating that the negative zero-crossing point is selected as the zero-crossing detection signal
6 HPFIBOFF 6 HPFIBOFF
=0, enable current channel B digital high-pass filter (Sonoff Dual R3 Pow) =0, enable current channel B digital high-pass filter (Sonoff Dual R3)
=1, turn off the digital high-pass filter of current channel B =1, turn off the digital high-pass filter of current channel B (Pow CT)
5 HPFIAOFF 5 HPFIAOFF
=0, enable current channel A digital high-pass filter (Sonoff Dual R3 Pow) =0, enable current channel A digital high-pass filter (Sonoff Dual R3 / Pow CT)
=1, turn off the digital high-pass filter of current channel A =1, turn off the digital high-pass filter of current channel A
4 HPFUOFF 4 HPFUOFF
=0, enable U channel digital high pass filter (Sonoff Dual R3 Pow) =0, enable U channel digital high pass filter (Sonoff Dual R3 / Pow CT)
=1, turn off the U channel digital high-pass filter =1, turn off the U channel digital high-pass filter
3-2 NC - 3-2 NC -
1 PBRUN 1 PBRUN
=1, enable PFB pulse output and active energy register accumulation; (Sonoff Dual R3 Pow) =1, enable PFB pulse output and active energy register accumulation; (Sonoff Dual R3 / Pow CT)
=0 (default), turn off PFB pulse output and active energy register accumulation. =0 (default), turn off PFB pulse output and active energy register accumulation.
0 PARUN 0 PARUN
=1, enable PFA pulse output and active energy register accumulation; (Sonoff Dual R3 Pow) =1, enable PFA pulse output and active energy register accumulation; (Sonoff Dual R3 / Pow CT)
=0 (default), turn off PFA pulse output and active energy register accumulation. =0 (default), turn off PFA pulse output and active energy register accumulation.
*/ */
// Cse7761Write(CSE7761_REG_EMUCON | 0x80, 0x1003); // Cse7761Write(CSE7761_REG_EMUCON | 0x80, 0x1043); // Pow CT
// Cse7761Write(CSE7761_REG_EMUCON | 0x80, 0x1003); // Sonoff Dual R3
Cse7761Write(CSE7761_REG_EMUCON | 0x80, 0x1183); // Tasmota enable zero cross detection on both positive and negative signal Cse7761Write(CSE7761_REG_EMUCON | 0x80, 0x1183); // Tasmota enable zero cross detection on both positive and negative signal
/* /*
Energy Measure Control Register (EMUCON2) Addr: 0x13 Default value: 0x0001 Energy Measure Control Register (EMUCON2) Addr: 0x13 Default value: 0x0001
Bit name Function description Bit name Function description
15-13 NC - 15-13 NC -
12 SDOCmos 12 SDOCmos
=1, SDO pin CMOS open-drain output =1, SDO pin CMOS open-drain output
=0, SDO pin CMOS output (Sonoff Dual R3 Pow) =0, SDO pin CMOS output (Sonoff Dual R3 / Pow CT)
11 EPB_CB Energy_PB clear signal control, the default is 0, and it needs to be configured to 1 in UART mode. 11 EPB_CB Energy_PB clear signal control, the default is 0, and it needs to be configured to 1 in UART mode.
Clear after reading is not supported in UART mode Clear after reading is not supported in UART mode
=1, Energy_PB will not be cleared after reading; (Sonoff Dual R3 Pow) =1, Energy_PB will not be cleared after reading; (Sonoff Dual R3 / Pow CT)
=0, Energy_PB is cleared after reading; =0, Energy_PB is cleared after reading;
10 EPA_CB Energy_PA clear signal control, the default is 0, it needs to be configured to 1 in UART mode, 10 EPA_CB Energy_PA clear signal control, the default is 0, it needs to be configured to 1 in UART mode,
Clear after reading is not supported in UART mode Clear after reading is not supported in UART mode
=1, Energy_PA will not be cleared after reading; (Sonoff Dual R3 Pow) =1, Energy_PA will not be cleared after reading; (Sonoff Dual R3 / Pow CT)
=0, Energy_PA is cleared after reading; =0, Energy_PA is cleared after reading;
9-8 DUPSEL[1:0] Average register update frequency control 9-8 DUPSEL[1:0] Average register update frequency control
=00, Update frequency 3.4Hz =00, Update frequency 3.4Hz
=01, Update frequency 6.8Hz =01, Update frequency 6.8Hz
=10, Update frequency 13.65Hz =10, Update frequency 13.65Hz
=11, Update frequency 27.3Hz (Sonoff Dual R3 Pow) =11, Update frequency 27.3Hz (Sonoff Dual R3 / Pow CT)
7 CHS_IB Current channel B measurement selection signal 7 CHS_IB Current channel B measurement selection signal
=1, measure the current of channel B (Sonoff Dual R3 Pow) =1, measure the current of channel B (Sonoff Dual R3 / Pow CT)
=0, measure the internal temperature of the chip =0, measure the internal temperature of the chip
6 PfactorEN Power factor function enable 6 PfactorEN Power factor function enable
=1, turn on the power factor output function (Sonoff Dual R3 Pow) =1, turn on the power factor output function (Sonoff Dual R3 / Pow CT)
=0, turn off the power factor output function =0, turn off the power factor output function
5 WaveEN Waveform data, instantaneous data output enable signal 5 WaveEN Waveform data, instantaneous data output enable signal
=1, turn on the waveform data output function (Tasmota add frequency) =1, turn on the waveform data output function (Tasmota add frequency)
=0, turn off the waveform data output function (Sonoff Dual R3 Pow) =0, turn off the waveform data output function (Sonoff Dual R3 / Pow CT)
4 SAGEN Voltage drop detection enable signal, WaveEN=1 must be configured first 4 SAGEN Voltage drop detection enable signal, WaveEN=1 must be configured first
=1, turn on the voltage drop detection function =1, turn on the voltage drop detection function
=0, turn off the voltage drop detection function (Sonoff Dual R3 Pow) =0, turn off the voltage drop detection function (Sonoff Dual R3 / Pow CT)
3 OverEN Overvoltage, overcurrent, and overload detection enable signal, WaveEN=1 must be configured first 3 OverEN Overvoltage, overcurrent, and overload detection enable signal, WaveEN=1 must be configured first
=1, turn on the overvoltage, overcurrent, and overload detection functions =1, turn on the overvoltage, overcurrent, and overload detection functions
=0, turn off the overvoltage, overcurrent, and overload detection functions (Sonoff Dual R3 Pow) =0, turn off the overvoltage, overcurrent, and overload detection functions (Sonoff Dual R3 / Pow CT)
2 ZxEN Zero-crossing detection, phase angle, voltage frequency measurement enable signal 2 ZxEN Zero-crossing detection, phase angle, voltage frequency measurement enable signal
=1, turn on the zero-crossing detection, phase angle, and voltage frequency measurement functions (Tasmota add frequency) =1, turn on the zero-crossing detection, phase angle, and voltage frequency measurement functions (Tasmota add frequency)
=0, disable zero-crossing detection, phase angle, voltage frequency measurement functions (Sonoff Dual R3 Pow) =0, disable zero-crossing detection, phase angle, voltage frequency measurement functions (Sonoff Dual R3 / Pow CT)
1 PeakEN Peak detect enable signal 1 PeakEN Peak detect enable signal
=1, turn on the peak detection function =1, turn on the peak detection function
=0, turn off the peak detection function (Sonoff Dual R3 Pow) =0, turn off the peak detection function (Sonoff Dual R3 / Pow CT)
0 NC Default is 1 0 NC Default is 1
*/ */
#ifndef CSE7761_FREQUENCY #ifndef CSE7761_FREQUENCY
Cse7761Write(CSE7761_REG_EMUCON2 | 0x80, 0x0FC1); // Sonoff Dual R3 Pow Cse7761Write(CSE7761_REG_EMUCON2 | 0x80, 0x0FC1); // Sonoff Dual R3 / Pow CT
#else #else
Cse7761Write(CSE7761_REG_EMUCON2 | 0x80, 0x0FE5); // Tasmota add Frequency Cse7761Write(CSE7761_REG_EMUCON2 | 0x80, 0x0FE5); // Tasmota add Frequency