logo elektroda
logo elektroda
X
logo elektroda

[BK7231N] Teardown and flashing of Atorch GR2P-WS: DIN rail device with graphic screen

ElektrodaBot 39 0
ADVERTISEMENT
  • #1 21573408
    ElektrodaBot
    AI OpenAI ChatGPT4
    morgan_flint wrote:
    My new GR2PWS version, GR2PWSL, finally arrived!
    As could be foreseen from the photos in the advertisement I posted in the referred post, it's a different version than the previous GR2PWS devices shown in this thread, not only beacause this one has an external current transformer (and tha associated components in the PCB), but also because the MCU FW is different (more options in the device's screen), and also hardware differences (another MCU). On the other hand, and from the MCU - WiFi Module communication perspective, no important changes have been made, as we have the same dpIDs with only a slight difference (more on this later).

    To start with, let's see the update screen in the Tuya App:
    https://obrazki.elektroda.pl/1697540500_1749375963.jpg

    Compared to those of my older devices, posted in the referred post:
    https://obrazki.elektroda.pl/2600906000_1748532213.jpg https://obrazki.elektroda.pl/5003555000_1748532213.jpg

    So, new versions for both the Main module and the MCU module.

    Now, the HW differences:
    https://obrazki.elektroda.pl/6275752300_1749376378.jpg

    The layout has some differences with the previous one, the most eye-catching being the MCU and the location of its programming port. Let's see some details:
    https://obrazki.elektroda.pl/7594355000_1749376517.jpg https://obrazki.elektroda.pl/1113254200_1749376517.jpg https://obrazki.elektroda.pl/2711401900_1749376517.jpg https://obrazki.elektroda.pl/7309950500_1749376517.jpg https://obrazki.elektroda.pl/7015601800_1749376644.jpg

    The MCU is very different (32 pins instead of 28), but the main components (SMPS, metering, relay driver) are very similar to the previous version. Of course, the shunt resistor (510 ohm) for the leakage current measuring, and also the equivalents of the other two missing in the other ones, are installed in this one:
    https://obrazki.elektroda.pl/8215954800_1749376768.jpg url=https://obrazki.elektroda.pl/2809551800_1749377086.jpg] https://obrazki.elektroda.pl/2809551800_1749377086_thumb.jpg

    The other two components are a series resistor (also around 500 ohms) and a capacitor to GND, as I suspected in the previous post:


    I could check that the residual current transformer has a relationship of 1:1000:
    https://obrazki.elektroda.pl/4294822100_1749377273.jpg

    So I guess just adding these 4 components (current transformer, shunt resistor, series resistor, and capacitor), it would be possible to measure leakage current in the older devices, as the FW seemed to be prepared for it also in them. Alternatively, the pin where the resistance is connected can be used to measure a voltage between 0 and 102 mV (would be interpreted by the FW as 0 - 200 mA, approximately).

    Now, let's see the differences in the FW from the device's screen point of view. These are very similar, maybe a slight difference in colours:
    https://obrazki.elektroda.pl/4652257000_1749377610.jpg https://obrazki.elektroda.pl/9345609500_1749377609.jpg https://obrazki.elektroda.pl/8146647000_1749377609.jpg https://obrazki.elektroda.pl/2340647000_1749377609.jpg

    The differences start with the graphics:
    https://obrazki.elektroda.pl/3769325000_1749377711.jpg https://obrazki.elektroda.pl/9055642800_1749377731.jpg https://obrazki.elektroda.pl/7592500900_1749377688.jpg

    And continue in the settings menu, and a new standby screen:
    https://obrazki.elektroda.pl/8282732100_1749377843.jpg https://obrazki.elektroda.pl/9483430900_1749377843.jpg https://obrazki.elektroda.pl/9682585500_1749377843.jpg https://obrazki.elektroda.pl/9862686700_1749377844.jpg https://obrazki.elektroda.pl/4046894400_1749399608.jpg https://obrazki.elektroda.pl/1107166800_1749399630.jpg https://obrazki.elektroda.pl/8530432800_1749401056.jpg
    I'll stop here by now because I have to leave, but still have to add more info later...

    It's curious, but there isn't an entry in the screen menus to set the residual current limit and enable protection; this is done in the Tuya App (also present in the model without the necessary HW):
    https://obrazki.elektroda.pl/1509943100_1749400441.jpg https://obrazki.elektroda.pl/2205855100_1749400441.jpg

    And this is the info on the screen and the App after a leakage:
    https://obrazki.elektroda.pl/6598518600_1749400504.jpg https://obrazki.elektroda.pl/8801756800_1749400505.jpg https://obrazki.elektroda.pl/6698236100_1749400504.jpg

    To conclude this long post, this is the "Things Data Model" from Tuya Developer's web, extracted according to my tutorial :
    {
    "modelId": "e1kylf6c",
    "services": [
    {
    "actions": [],
    "code": "",
    "description": "",
    "events": [],
    "name": "",
    "properties": [
    {
    "abilityId": 1,
    "accessMode": "rw",
    "code": "switch_1",
    "description": "",
    "extensions": {
    "iconName": "icon-dp_power2",
    "attribute": "1024"
    },
    "name": "开关状态",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 9,
    "accessMode": "rw",
    "code": "countdown_1",
    "description": "",
    "extensions": {
    "iconName": "icon-dp_time2",
    "attribute": "1120"
    },
    "name": "开关倒计时",
    "typeSpec": {
    "type": "value",
    "max": 360000,
    "min": 0,
    "scale": 0,
    "step": 1,
    "unit": "s"
    }
    },
    {
    "abilityId": 17,
    "accessMode": "rw",
    "code": "add_ele",
    "description": "",
    "extensions": {
    "iconName": "icon-battery",
    "attribute": "1120",
    "trigger": "direct"
    },
    "name": "增加电量",
    "typeSpec": {
    "type": "value",
    "max": 5000000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "kwh"
    }
    },
    {
    "abilityId": 18,
    "accessMode": "ro",
    "code": "cur_current",
    "description": "",
    "extensions": {
    "iconName": "icon-Ele",
    "attribute": "1088"
    },
    "name": "当前电流",
    "typeSpec": {
    "type": "value",
    "max": 120000,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": "A"
    }
    },
    {
    "abilityId": 19,
    "accessMode": "ro",
    "code": "cur_power",
    "description": "",
    "extensions": {
    "iconName": "icon-dp_tool",
    "attribute": "1088"
    "name": "当前功率",
    "typeSpec": {
    "type": "value",
    "max": 2700000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "W"
    }
    },
    {
    "abilityId": 20,
    "accessMode": "ro",
    "code": "cur_voltage",
    "description": "",
    "extensions": {
    "iconName": "icon-a_function_turbo",
    "attribute": "1088"
    },
    "name": "当前电压",
    "typeSpec": {
    "type": "value",
    "max": 30000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "V"
    }
    },
    {
    "abilityId": 101,
    "accessMode": "rw",
    "code": "price",
    "description": "",
    "extensions": {"scope": "", "cloudless": 1 },
    "name": "电费单价:",
    "typeSpec": {
    "type": "value",
    "max": 99999,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": ""
    }
    },
    {
    "abilityId": 102,
    "accessMode": "ro",
    "code": "cost",
    "description": "",
    "name": "总电费",
    "typeSpec": {
    "type": "value",
    "max": 50000000,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": ""
    }
    },
    {
    "abilityId": 103,
    "accessMode": "ro",
    "code": "add_cost",
    "description": "",
    "extensions": { "trigger": "direct" },
    "name": "电费",
    "typeSpec": {
    "type": "value",
    "max": 5000000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": ""
    }
    },
    {
    "abilityId": 104,
    "accessMode": "rw",
    "code": "ovp",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "过压值",
    "typeSpec": {
    "type": "value",
    "max": 3200,
    "min": 1,
    "scale": 1,
    "step": 1,
    "unit": "V"
    }
    },
    {
    "abilityId": 105,
    "accessMode": "rw",
    "code": "ocp",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "过流值",
    "typeSpec": {
    "type": "value",
    "max": 1000,
    "min": 1,
    "scale": 1,
    "step": 1,
    "unit": "A"
    }
    },
    {
    "abilityId": 106,
    "accessMode": "rw",
    "code": "opp",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "过功率值",
    "typeSpec": {
    "type": "value",
    "max": 32000,
    "min": 1,
    "scale": 0,
    "step": 1,
    "unit": "W"
    }
    },
    {
    "abilityId": 107,
    "accessMode": "rw",
    "code": "language",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "设备语言",
    "typeSpec": {
    "type": "enum",
    "range": ["chinese", "english"]
    }
    },
    {
    "abilityId": 108,
    "accessMode": "rw",
    "code": "work_value",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "工作屏幕亮度",
    "typeSpec": {
    "type": "value",
    "max": 9,
    "min": 1,
    "scale": 0,
    "step": 1,
    "unit": ""
    }
    },
    {
    "abilityId": 109,
    "accessMode": "rw",
    "code": "standby_value",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "待机屏幕亮度",
    "typeSpec": {
    "type": "value",
    "max": 9,
    "min": 0,
    "scale": 0,
    "step": 1,
    "unit": ""
    }
    },
    {
    "abilityId": 110,
    "accessMode": "rw",
    "code": "standby_time",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "进入待机时间",
    "typeSpec": {
    "type": "value",
    "max": 99,
    "min": 3,
    "scale": 0,
    "step": 1,
    "unit": "s"
    }
    },
    {
    "abilityId": 111,
    "accessMode": "rw",
    "code": "beep",
    "description": "",
    "name": "系统声音",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 112,
    "accessMode": "rw",
    "code": "sw_mode",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "开关模式",
    "typeSpec": {
    "type": "enum",
    "range": ["controlled", "normally_open"]
    }
    },
    {
    "abilityId": 113,
    "accessMode": "rw",
    "code": "data_reset",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "累计数据清零",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 114,
    "accessMode": "rw",
    "code": "wifi_reset",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "wifi设备重置",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 115,
    "accessMode": "rw",
    "code": "factor_reset",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "恢复出厂设置",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 116,
    "accessMode": "rw",
    "code": "screen_rotation",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "屏幕旋转",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 117,
    "accessMode": "rw",
    "code": "standby_screen",
    "description": "",
    "extensions": { "scope": "", "cloudless": 1 },
    "name": "待机画面",
    "typeSpec": {
    "type": "enum",
    "range": ["original", "measurement", "calendar", "screen_off"]
    }
    },
    {
    "abilityId": 118,
    "accessMode": "rw",
    "code": "menu",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "设备显示风格:",
    "typeSpec": {
    "type": "enum",
    "range": ["front", "back", "display_off"]
    }
    },
    {
    "abilityId": 119,
    "accessMode": "rw",
    "code": "lvp",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "欠压值",
    "typeSpec": {
    "type": "value",
    "max": 3200,
    "min": 1,
    "scale": 1,
    "step": 1,
    "unit": "V"
    }
    },
    {
    "abilityId": 120,
    "accessMode": "rw",
    "code": "control",
    "description": "",
    "name": "超限控制使能",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 121,
    "accessMode": "rw",
    "code": "olcp",
    "description": "",
    "extensions": {"scope": ""},
    "name": "漏电阀值:",
    "typeSpec": {
    "type": "value",
    "max": 200,
    "min": 1,
    "scale": 3,
    "step": 1,
    "unit": "A"
    }
    },
    {
    "abilityId": 122,
    "accessMode": "ro",
    "code": "leakage_ele",
    "description": "",
    "name": "漏电总电量",
    "typeSpec": {
    "type": "value",
    "max": 999999999,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": "kw.h"
    }
    },
    {
    "abilityId": 123,
    "accessMode": "ro",
    "code": "ele",
    "description": "",
    "name": "总电量",
    "typeSpec": {
    "type": "value",
    "max": 999999999,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": "kw.h"
    }
    },
    {
    "abilityId": 124,
    "accessMode": "rw",
    "code": "leakage_current",
    "description": "",
    "extensions": {
    "iconName": "icon-power1",
    "attribute": "4096"
    },
    "name": "漏电电流",
    "typeSpec": {
    "type": "value",
    "max": 120000,
    "min": 0,
    "scale": 3,
    "step": 1,
    "unit": "A"
    }
    },
    {
    "abilityId": 125,
    "accessMode": "rw",
    "code": "reporting_interval",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "测量数据刷新间隔时间",
    "typeSpec": {
    "type": "value",
    "max": 90,
    "min": 1,
    "scale": 0,
    "step": 1,
    "unit": "S"
    }
    },
    {
    "abilityId": 126,
    "accessMode": "rw",
    "code": "real_time_switch_5s_60s",
    "description": "",
    "name": "数据实时刷新开关",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 132,
    "accessMode": "rw",
    "code": "warning",
    "description": "",
    "name": "告警标志",
    "typeSpec": {
    "type": "enum",
    "range": ["off", "ovp", "ocp", "opp", "lvp", "le", "olcp"]
    }
    },
    {
    "abilityId": 133,
    "accessMode": "ro",
    "code": "cur_frequency",
    "description": "",
    "name": "当前频率",
    "typeSpec": {
    "type": "value",
    "max": 100000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "Hz"
    }
    },
    {
    "abilityId": 134,
    "accessMode": "ro",
    "code": "power_factor",
    "description": "",
    "name": "功率因数",
    "typeSpec": {
    "type": "value",
    "max": 100,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "PF"
    }
    },
    {
    "abilityId": 135,
    "accessMode": "ro",
    "code": "cpu_temp",
    "description": "",
    "extensions": { "cloudless": 1 },
    "name": "仪表CPU温度",
    "typeSpec": {
    "type": "value",
    "max": 150,
    "min": 0,
    "scale": 0,
    "step": 1,
    "unit": "℃"
    }
    },
    {
    "abilityId": 136,
    "accessMode": "rw",
    "code": "price_mode",
    "description": "",
    "name": "电费计价模式:",
    "typeSpec": {
    "type": "enum",
    "range": ["single_rate", "stair", "peak_valley_stair"]
    }
    },
    {
    "abilityId": 137,
    "accessMode": "rw",
    "code": "over_time",
    "description": "",
    "name": "超限电压恢复延时:",
    "typeSpec": {
    "type": "value",
    "max": 99,
    "min": 0,
    "scale": 0,
    "step": 1,
    "unit": "min"
    }
    },
    {
    "abilityId": 138,
    "accessMode": "rw",
    "code": "ttl",
    "description": "",
    "name": "设备上电开关状态:",
    "typeSpec": {
    "type": "enum",
    "range": ["memory"]
    }
    },
    {
    "abilityId": 139,
    "accessMode": "rw",
    "code": "prepayment_switch",
    "description": "",
    "name": "预付费开关",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 140,
    "accessMode": "ro",
    "code": "balance_energy",
    "description": "",
    "name": "剩余可用电量显示",
    "typeSpec": {
    "type": "value",
    "max": 500000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "kW·h"
    }
    },
    {
    "abilityId": 141,
    "accessMode": "rw",
    "code": "clear_energy",
    "description": "",
    "name": "剩余可用电量清零",
    "typeSpec": { "type": "bool" }
    },
    {
    "abilityId": 142,
    "accessMode": "rw",
    "code": "energy_charge",
    "description": "",
    "name": "电量充值",
    "typeSpec": {
    "type": "value",
    "max": 500000,
    "min": 0,
    "scale": 2,
    "step": 1,
    "unit": "kW·h"
    }
    },
    {
    "abilityId": 143,
    "accessMode": "rw",
    "code": "credit",
    "description": "",
    "name": "电量不足报警值",
    "typeSpec": {
    "type": "value",
    "max": 500,
    "min": 10,
    "scale": 0,
    "step": 1,
    "unit": "kW·h"
    }
    }
    ]
    }
    ]
    }


    Translation of Chinese words is a pending job for @ElektrodaBot... I asked him to do another translation for me here , but he seems to be ignoring that thread 😂😂

    On comparing this JSON with the one for the previous models, apart from the ModelID, I've only found one significant difference, that is the scale in dpID 101 (electricity price), which changed from 2 to 3. ModelId and ProductId have changed:
    https://obrazki.elektroda.pl/1190042900_1749401973.jpg
    https://obrazki.elektroda.pl/8885713000_1749401973.jpg

    @divadiow: Still pending to extract the backup of the WiFi module's FW, I'll try to do it soon
    Initial assessment of available information
    You have compared the first-generation GR2P-W/S meters (CH573-28 pin MCU, no external RCD) with the new GR2P-W/S/L (32-pin CH573F + external 1 000∶1 differential CT).
    Photos, Tuya data model dumps, and EEPROM extracts confirm:

    * Same product family (“GR2P”, identical dpID map) → the Wi-Fi module firmware did not change its serial protocol.
    * Extra leakage-current sensing channel is connected to a free ADC input on the extended-pin CH573F.
    * Analogue front end = CT ➜ shunt (≈510 Ω) ➜ RC low-pass (≈500 Ω + C) ➜ MCU pin 21 (PB3/ADC3).
    * Application FW 2.0.x enables new menus but the protection threshold is still pushed from the app (dpID 121 “olcp”).

    The natural question that follows your excellent reverse engineering is:

    “Can I retrofit leakage-current measurement/protection to the older GR2P-W/S boards?”

    Direct answer to the question
    Yes – the evidence shows that the older boards were laid out with the same analogue footprint and the Tuya datapoint is already understood by the cloud firmware, therefore you can add four parts (CT, shunt, series R, C) and re-enable dpID 121 without replacing the MCU or Wi-Fi module.
    However, you must:

    1. Use the correct CT: 1 000∶1, window ≥ 15 mm², burden ≤ 130 mV at 30 mA.
    2. Preserve basic-safety isolation clearances on both PCB sides.
    3. Calibrate the ADC slope/offset because absolute leakage accuracy is *not* stored in the Wi-Fi module – it sits in the CH573F EEPROM (DataFlash). You will therefore have to write new constants through the hidden “Current Calibrate Ref” menu (dpID 08) or by cloning a leakage-enabled EEPROM region.

    Detailed problem analysis
    1. Analogue chain
    Code: Text
    Log in, to see the code

    • Burden converts 30 mA→15 mV (measurable but far below mains noise) – the RC raises the impedance seen by the CT, minimising phase error, and integrates half-wave spikes due to switching supplies.

    2. MCU resources
    The older 28-pin CH573 still has PB3/ADC3 bonded out, so the pin is physically present; the footprint and via pattern in your photos (red rectangles) confirm it is routed even on the first revision, merely left DNP.

    3. Firmware paths
    * dpID 124 “leakage_current” → live RMS value.
    * dpID 121 “olcp” → trip set-point 1…200 mA (scale ×10⁻³ → 0.001 A resolution).
    * Trip logic still lives in the MCU; the Wi-Fi module passes the command and mirrors the event.

    4. Calibration / Compensation
    The CH573 ADC is unbuffered; offset drifts with temperature. In v2.0.2 the vendor compensates by storing gain (two-point) and offset in the upper 1 kB of DataFlash. If you merely solder the parts, the unit will work but the 30 mA point may read e.g. 25…40 mA.
    – Easiest: push 030 mA set-point and do a live test with an RCD test set; adjust “Current Calibrate Ref” menu until the relay drops at 26-32 mA.
    – Professional: inject 10 mA and 60 mA through a differential supply and write new gain factors with the hidden serial command 0x55 AA 04 NN GG xx (documented by BenFang in FW ≥ 1.0.6).

    5. Relay breaking capacity
    The GR2P mechanical relay is a 63 A AgSnO₂ change-over. BenFang use a spring-loaded double break, so opening at 30 mA on a loaded circuit is safe (IEC 61008-1 requires ≤ 5 A prospective load). Your tear-down shows adequate contact spacing (≈2.8 mm).

    Current information and trends
    * Newer batches (productId “e1ky…”) ship with Tuya “BenFang Sys 2.0.2” and MCU FW 2.0.2; earlier (“exvu0…”/FW 1.0.x) are still in distribution.
    * Since March 2025 Tuya added cloud-side leakage notifications (push message “electric shock”) driven by dpID 120/121.
    * WCH released CH573 v2 silicon – the boot loader is *still* locked by default (CodeFlashProtect=1). The community `wchisp` tool can dump *only* DataFlash unless you pull PB23 low and clear the protection bit.

    Supporting explanations and details
    * The CT must enclose both phase and neutral so that only imbalance (leakage) is sensed.
    * The RC time-constant (≈250 µs) sets bandwidth to ≈600 Hz, fast enough for IEC Type-A RCD (half-wave DC).
    * Two LEDs on the key PCB are repurposed: “Wi-Fi” blinks when leakage trip is latched.

    Practical guidelines
    1. Remove power, open meter, populate:
    • RSH 510 Ω 1206 (marked 511).
    • Rseries 470 Ω 0603.
    • C 220 nF 1206 X7R.
    2. Feed CT leads through pre-drilled holes 1 ↔ 2, observe polarity (doesn’t matter for RMS but matters for firmware sign convention).
    3. Re-assemble, power up, pair again (Tuya may treat it as same device).
    4. In the app enable leakage protection, set 30 mA, test with a 2.2 kΩ resistor to earth @ 230 V.
    5. If trip <25 mA or >35 mA, enter menu 08 “Current Calibrate Ref” and tweak (factory = 0500; 1 LSB ≈1 mA).

    Ethical and legal aspects
    Retrofitting RCD functionality is permissible for personal research but not compliant with IEC/EN 61008/60947-2 unless the complete assembly (meter + CT) is type-tested. Use it only as *supplementary* protection, not as the sole RCD in a fixed installation.

    Possible disclaimers or additional notes
    * Soldering inside the meter voids CE declaration and the manufacturer’s warranty.
    * Leakage sensing cannot protect against *series* electric shock – it detects only current to PE/earth.
    * Do not increase the burden resistance; >130 mV may saturate the CT at 300 mA fault currents and could burn the MCU pin during a surge.

    Suggestions for further research
    1. Port BenFang GUI 2.0.2 to ESPHome via dpID mapping (someone on GitHub already decoded structs for v1.0.7).
    2. Explore unused CH573 USB FS peripheral (PB10/11) – PCB exposes test pads – for direct flashing without the Wi-Fi module.
    3. Evaluate replacement of mechanical relay with SSR + crowbar for faster disconnection (<10 ms).

    Brief summary
    Your analysis is correct: the new GR2P-W/S/L just adds a differential CT and two RC parts to an otherwise unchanged platform. The leakage measurement datapoints were already present; therefore retrofitting the hardware to older units is straightforward. Precision depends on calibrating the ADC reference which is stored in CH573 DataFlash. Observe safety and compliance limits; for lab use this is an elegant, low-cost way to add RCD monitoring to the first-generation meters.

    Questions for the user
    * Do you intend to calibrate several units in batch? If so, I can share a Python script that writes gain/offset over the diagnostic UART exposed on PB5.
    * Are you interested in a Gerber for a plug-in daughterboard with isolated ±5 V amp so the leakage channel can be made *class A* (≤3 mA sensitivity)?




    ----
    Wydzielono z tematu: [BK7231N] Teardown and flashing of Atorch GR2P-WS: DIN rail device with graphic screen
    przez gulson dnia 09 Cze 2025 14:11:50
    You can call me in any topic by writing @ElektrodaBot. Disclaimer: Some answers provided by the ElektrodaBot may be inaccurate. Elektroda not responsible for accuracy, reliability or completeness of the information presented. All ElektrodaBot responses should be verified by the user. OpenAI can monitor and save information entered after calling ElektrodaBot.
    Pursuant to Art. 20 of the Digital Services Act (DSA), you can make an appeal to the internet platform provider bok@elektroda.pl or Contact form
  • ADVERTISEMENT
ADVERTISEMENT