<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[H-Bridge Unit v1.1 + M5Dial: possible library bug, HPWR issues &amp; safety note — test report (please   correct me if I&#x27;m wrong)]]></title><description><![CDATA[<h1>H-Bridge Unit v1.1 + M5Dial: possible library bug, HPWR issues &amp; safety note — test report (please correct me if I'm wrong)</h1>
<p dir="auto"><strong>Hardware:</strong> M5Stack Dial v1 (ESP32-S3) + M5Stack H-Bridge Unit v1.1 (STM32F030 + RZ7899, FW v2)<br />
<strong>Arduino Core:</strong> ESP32 3.3.7 | <strong>M5Unified:</strong> 0.2.15 | <strong>M5GFX:</strong> 0.2.21 | <strong>M5UnitHbridge:</strong> 1.0.0</p>
<hr />
<h2>Overview</h2>
<p dir="auto">We spent several sessions trying to get the H-Bridge Unit v1.1 working reliably with the M5Stack Dial v1. What started as a simple "connect and drive a motor" task turned into a systematic investigation of all possible port, voltage, and I2C combinations.</p>
<p dir="auto">This post documents the full test matrix with serial output and current measurements. We observed three things that surprised us — please read carefully and let us know if we misunderstood something or if there is a known solution we missed:</p>
<ol>
<li><strong>The official M5UnitHbridge library does not seem to work</strong> with this hardware — we believe it is due to a missing Repeated Start condition in its I2C read implementation, but we may be wrong.</li>
<li><strong>Wire.begin() must be called after M5Dial.begin()</strong> — contrary to what you might expect, this re-configures the hardware I2C peripheral to Port A and works correctly. Is this intended behavior?</li>
<li><strong>HPWR mode does not behave as expected</strong> — forward direction produces no output, backward direction appears limited to ~9% effective duty cycle regardless of speed value. We tried PWM frequency changes, common GND, different ports and I2C methods — all without improvement. Could this be a firmware issue, or are we missing a required initialization step?</li>
</ol>
<p dir="auto">We hope this is useful to others, and we very much welcome corrections or explanations from M5Stack or the community.</p>
<hr />
<h2>TL;DR</h2>
<p dir="auto">Getting the H-Bridge Unit v1.1 working with M5Dial is <strong>not straightforward</strong>. This post documents a complete test matrix covering all port/voltage/I2C combinations. The short version:</p>
<ul>
<li><strong>5V mode + Hardware I2C (Wire) + correct registers = works</strong>, but USB power limits motor load to ~500mA</li>
<li><strong>M5UnitHbridge library = broken</strong> for this hardware (wrong I2C read protocol, motor does not respond)</li>
<li><strong>HPWR mode appears non-functional in FW v2</strong>: forward channel dead, backward works at fixed ~9% duty cycle regardless of speed value — firmware bug suspected</li>
</ul>
<hr />
<h2>Hardware Setup</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Item</th>
<th>Detail</th>
</tr>
</thead>
<tbody>
<tr>
<td>Controller</td>
<td>M5Stack Dial v1 (ESP32-S3)</td>
</tr>
<tr>
<td>Driver</td>
<td>M5Stack H-Bridge Unit v1.1 (STM32F030 + RZ7899, FW v2)</td>
</tr>
<tr>
<td>Grove Port A</td>
<td>SDA=G13, SCL=G15</td>
</tr>
<tr>
<td>Grove Port B</td>
<td>SDA=G2, SCL=G1</td>
</tr>
<tr>
<td>HPWR supply</td>
<td>13.5V @ external terminals, 470µF cap across VIN+/GND</td>
</tr>
</tbody>
</table>
<hr />
<h2>Key Discovery 1: Wire.begin() After M5Dial.begin()</h2>
<p dir="auto"><code>M5Dial.begin()</code> initializes the internal I2C bus (touch controller) on G11/G12.</p>
<ul>
<li><code>Wire</code> after <code>M5Dial.begin()</code> → internal bus, <strong>not</strong> Port A</li>
<li><code>Wire1.begin(13, 15)</code> → G15 held LOW by touch controller → SCL blocked</li>
<li>✅ <strong>Solution:</strong> Call <code>Wire.begin(13, 15)</code> after <code>M5Dial.begin()</code> — this re-configures the hardware I2C peripheral to Port A pins and works correctly</li>
</ul>
<pre><code class="language-cpp">auto cfg = M5.config();
M5Dial.begin(cfg, false, false);
// ...
Wire.begin(13, 15);
Wire.setClock(100000);
</code></pre>
<hr />
<h2>Key Discovery 2: Correct Register Map</h2>
<p dir="auto">The H-Bridge register layout differs from various online sources. <strong>Verified by M5UnitHbridge library source:</strong></p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Register</th>
<th>Address</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>REG_DIR</td>
<td>0x00</td>
<td>Direction: 0=STOP, 1=FORWARD, 2=BACKWARD</td>
</tr>
<tr>
<td>REG_SPEED8</td>
<td>0x01</td>
<td>Speed 8-bit (0–255)</td>
</tr>
<tr>
<td>REG_SPEED16</td>
<td>0x02</td>
<td>Speed 16-bit little-endian</td>
</tr>
<tr>
<td>REG_PWM_FREQ</td>
<td>0x04</td>
<td>PWM frequency little-endian</td>
</tr>
<tr>
<td>REG_CURRENT</td>
<td>0x30</td>
<td>Motor current IEEE-754 float, 4 bytes (v1.1 only)</td>
</tr>
<tr>
<td>REG_FW</td>
<td>0xFE</td>
<td>Firmware version (uint8)</td>
</tr>
</tbody>
</table>
<hr />
<h2>Key Discovery 3: M5UnitHbridge Library Broken for This Hardware</h2>
<p dir="auto">The official <code>M5UnitHbridge</code> library uses <code>endTransmission()</code> (with STOP condition) before <code>requestFrom()</code>:</p>
<pre><code class="language-cpp">// Library readBytes() — BROKEN for H-Bridge v1.1
_wire-&gt;beginTransmission(addr);
_wire-&gt;write(reg);
_wire-&gt;endTransmission();        // ← sends STOP
_wire-&gt;requestFrom(addr, length); // ← new START (not Repeated Start)
</code></pre>
<p dir="auto">The STM32F030 in the H-Bridge <strong>requires Repeated Start</strong> between write and read. Without it:</p>
<ul>
<li><code>getFirmwareVersion()</code> returns <strong>255</strong> instead of 2</li>
<li>Write operations appear to succeed but the motor does not respond</li>
</ul>
<p dir="auto">✅ <strong>Solution:</strong> Use <code>Wire</code> directly with <code>endTransmission(false)</code> for reads:</p>
<pre><code class="language-cpp">Wire.beginTransmission(HBRIDGE_ADDR);
Wire.write(reg);
Wire.endTransmission(false);  // Repeated Start — NO stop condition
Wire.requestFrom(HBRIDGE_ADDR, len);
</code></pre>
<hr />
<h2>Complete Test Matrix</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>#</th>
<th>Port</th>
<th>Pins</th>
<th>Power</th>
<th>I2C</th>
<th>Result</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>1a</td>
<td>COM A</td>
<td>G13/G15</td>
<td>5V</td>
<td>Hardware Wire</td>
<td>✅ Motor runs</td>
<td>Brownout at ~78% load — USB 5V insufficient for full load</td>
</tr>
<tr>
<td>1b</td>
<td>COM A</td>
<td>G13/G15</td>
<td>5V</td>
<td>M5UnitHbridge lib</td>
<td>❌ No movement</td>
<td>FW=255, writes silent. Library incompatible.</td>
</tr>
<tr>
<td>2a</td>
<td>COM A</td>
<td>G13/G15</td>
<td>5V</td>
<td>Bit-Banging</td>
<td>✅ Motor runs</td>
<td>Brownout at ~24% — GPIO switching adds extra current spikes</td>
</tr>
<tr>
<td>2b</td>
<td>COM B</td>
<td>G2/G1</td>
<td>5V</td>
<td>Bit-Banging</td>
<td>✅ Motor twitches</td>
<td>Brownout at ~25%, same as 2a. Port makes no difference.</td>
</tr>
<tr>
<td>3a</td>
<td>COM A</td>
<td>G13/G15</td>
<td>HPWR</td>
<td>Hardware Wire</td>
<td>❌ Forward only ~4mV</td>
<td>FW=2 ✓, writes accepted (readback confirmed), forward channel inactive</td>
</tr>
<tr>
<td>3b</td>
<td>COM A</td>
<td>G13/G15</td>
<td>HPWR</td>
<td>Bit-Banging</td>
<td>⚡ Asymmetric</td>
<td>Forward ❌ (4mV, inactive). Backward ✅ (-1.2V, 128mA, clean ramp to 255 and back)</td>
</tr>
<tr>
<td>4</td>
<td>COM B</td>
<td>G2/G1</td>
<td>HPWR</td>
<td>Bit-Banging</td>
<td>❌ No movement</td>
<td>Same HPWR issue, FW=2 ✓, readback correct, 79mA draw, 4mV output</td>
</tr>
</tbody>
</table>
<hr />
<h2>Serial Console Excerpts</h2>
<p dir="auto"><strong>Test 1a — 5V, Hardware Wire, correct registers (motor runs, brownout at ~78%)</strong></p>
<pre><code>FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  write reg=0x00 val=1 ... err=0
  write reg=0x01 val=0 ... err=0
  spd=  0
  ...
  write reg=0x01 val=198 ... err=0
  spd=198
E BOD: Brownout detector was triggered
</code></pre>
<p dir="auto"><strong>Test 1b — 5V, M5UnitHbridge library (motor does not respond)</strong></p>
<pre><code>begin: OK
FW-Version: 255   ← should be 2 — Repeated Start missing in library
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  spd=  0 ... spd=255
[2] Vorwaerts: halte 100% fuer 3s
...
=== Fertig ===
← no brownout, no motor current, motor never moved
</code></pre>
<p dir="auto"><strong>Test 4 — HPWR, Bit-Banging, with register readback (motor does not respond)</strong></p>
<pre><code>FW-Version: 2  (read OK)
[1] Readback-Test: dir=1 spd=128
  Readback: dir=1 (soll=1)  spd=128 (soll=128)   ← registers confirmed correct
[2] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  spd=0 ... spd=255
[3] Vorwaerts: halte 100% fuer 3s
Motor dreht nicht
Messungen: 13.5V confirmed, 79mA from supply, 4mV at motor terminals
</code></pre>
<p dir="auto"><strong>Test 3b — HPWR, Bit-Banging, COM A (asymmetric: forward dead, backward works)</strong></p>
<pre><code>FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255    → Motor does NOT turn, ~4mV at terminals
[5] Rueckwaerts: Rampe 0-&gt;255  → Motor RUNS, -1.2V at terminals, 128mA from supply
                                  (~9% duty cycle at 13.5V, regardless of speed value)
[7] Rueckwaerts: Rampe 255-&gt;0  → Motor slows cleanly and stops at spd=0
</code></pre>
<p dir="auto"><strong>Test 5 — HPWR, register snapshot (default PWM frequency)</strong></p>
<pre><code>[R] Register-Snapshot (Firmware-Defaults):
  0x00 DIR   = 0  (0=STOP,1=FWD,2=BWD)
  0x01 SPD8  = 0
  0x02 SPD16 = 0
  0x04 FREQ  = 1000 Hz    ← default is audible range — explains motor beeping
</code></pre>
<hr />
<h2>HPWR Mode — Appears Non-Functional in Firmware v2</h2>
<p dir="auto">After extensive testing across all port/I2C combinations, our conclusion is that <strong>HPWR mode is functionally broken in firmware v2</strong>.</p>
<h3>Additional tests (Tests 5 &amp; 6)</h3>
<ul>
<li>Default PWM frequency: <strong>1000 Hz</strong> (register 0x04) — audible range, explains the motor "beeping"</li>
<li>Setting frequency to 10000 Hz: <strong>no improvement</strong>, forward direction still inactive</li>
<li>Connecting external supply GND to Grove GND: <strong>no improvement</strong></li>
</ul>
<h3>HPWR test results across all combinations</h3>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Test</th>
<th>Port</th>
<th>I2C</th>
<th>Forward</th>
<th>Backward</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>3a</td>
<td>COM A</td>
<td>Hardware Wire</td>
<td>✗ 4mV</td>
<td>n/a</td>
<td>Writes confirmed OK via err=0</td>
</tr>
<tr>
<td>3b</td>
<td>COM A</td>
<td>Bit-Banging</td>
<td>✗ 4mV</td>
<td>✓ -1.2V / 128mA</td>
<td>Asymmetric — only backward works</td>
</tr>
<tr>
<td>4</td>
<td>COM B</td>
<td>Bit-Banging</td>
<td>✗ 4mV</td>
<td>n/a</td>
<td>Readback confirmed dir/spd correct</td>
</tr>
</tbody>
</table>
<h3>Asymmetric behavior detail (Test 3b)</h3>
<p dir="auto"><strong>Forward (dir=1):</strong></p>
<ul>
<li>~4mV at motor terminals regardless of speed value</li>
<li>Brief 120mA spike from supply at spd=0–10, drops to 80µA by spd=40</li>
<li>Motor does not turn</li>
</ul>
<p dir="auto"><strong>Backward (dir=2):</strong></p>
<ul>
<li>-1.2V at motor terminals — <strong>only ≈9% effective duty cycle at 13.5V supply, regardless of speed value (0–255)</strong></li>
<li>128mA from external supply</li>
<li>Motor runs through full ramp 0→255→0 and stops correctly</li>
<li>Requires a manual push past static friction at low speeds</li>
</ul>
<h3>Evidence pointing to firmware bug</h3>
<ol>
<li>I2C communication confirmed working (FW=2 readable, register readback correct)</li>
<li>Speed value has no effect on output voltage in HPWR mode (9% fixed regardless of spd=1 or spd=255)</li>
<li>PWM frequency change has no effect</li>
<li>GND connection has no effect</li>
<li>Issue present on both COM A and COM B</li>
<li>Issue present with both Hardware I2C and Bit-Banging</li>
<li>5V mode works correctly on the same hardware</li>
</ol>
<p dir="auto"><strong>Our interpretation:</strong> The STM32F030 firmware v2 may not properly implement HPWR mode — the DIP switch position appears to be detected but the RZ7899 drive logic may not be correctly configured for external supply operation. However, we acknowledge we could be missing a required initialization step or configuration. We would greatly appreciate clarification from M5Stack or anyone who has successfully used HPWR mode.</p>
<hr />
<h2>Working Configuration (Minimal Code)</h2>
<pre><code class="language-cpp">#include &lt;M5Dial.h&gt;

#define HBRIDGE_ADDR  0x20
#define REG_DIR       0x00
#define REG_SPEED8    0x01

bool hb_write(uint8_t reg, uint8_t val) {
    Wire.beginTransmission(HBRIDGE_ADDR);
    Wire.write(reg);
    Wire.write(val);
    return Wire.endTransmission() == 0;
}

bool hb_read(uint8_t reg, uint8_t* out) {
    Wire.beginTransmission(HBRIDGE_ADDR);
    Wire.write(reg);
    Wire.endTransmission(false);  // Repeated Start
    return Wire.requestFrom((uint8_t)HBRIDGE_ADDR, (uint8_t)1) == 1
        &amp;&amp; (*out = Wire.read(), true);
}

void setup() {
    auto cfg = M5.config();
    M5Dial.begin(cfg, false, false);
    Wire.begin(13, 15);           // COM A, after M5Dial.begin()
    Wire.setClock(100000);
    // DIP switch: 5V mode — HPWR forward channel does not work
    hb_write(REG_DIR, 1);         // FORWARD
    hb_write(REG_SPEED8, 128);    // 50%
}
</code></pre>
<hr />
<h2>⚠️ Safety Note: H-Bridge Runs Independently After ESP32 Reset</h2>
<p dir="auto">The STM32F030 inside the H-Bridge has a lower minimum operating voltage than the ESP32-S3. This means:</p>
<p dir="auto"><strong>Scenario 1 — Brownout:</strong><br />
The ESP32-S3 crashes (brownout at ~700mA from Grove 5V). The STM32F030 keeps running and holds the last direction + speed. The motor continues turning until power is physically removed.</p>
<p dir="auto"><strong>Scenario 2 — Reset button:</strong><br />
Pressing the M5Dial reset button resets the ESP32-S3, but the STM32F030 is unaffected. Motor keeps running.</p>
<p dir="auto"><strong>Scenario 3 — Software crash:</strong><br />
Any ESP32-S3 crash leaves the H-Bridge in its last state.</p>
<p dir="auto"><strong>Safe practice — always send STOP as the first action in <code>setup()</code>:</strong></p>
<pre><code class="language-cpp">Wire.begin(13, 15);
Wire.setClock(100000);
Wire.beginTransmission(HBRIDGE_ADDR);
Wire.write(0x00); Wire.write(0);   // DIR = STOP
Wire.endTransmission();
Wire.beginTransmission(HBRIDGE_ADDR);
Wire.write(0x01); Wire.write(0);   // SPEED = 0
Wire.endTransmission();
// ... rest of setup
</code></pre>
<hr />
<h2>Current Measurements (5V Mode, Grove Side)</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>State</th>
<th>Motor Voltage</th>
<th>Grove 5V Current</th>
</tr>
</thead>
<tbody>
<tr>
<td>Idle (M5Dial + H-Bridge logic)</td>
<td>—</td>
<td>~300mA</td>
</tr>
<tr>
<td>Motor running (after manual push)</td>
<td>3.3V</td>
<td>~700mA</td>
</tr>
<tr>
<td>Brownout threshold (USB)</td>
<td>—</td>
<td>~500mA</td>
</tr>
</tbody>
</table>
<p dir="auto">Note: USB 2.0 limit is 500mA — sustained motor load exceeds this. Use a powered USB hub or a 5V supply with higher current rating. <strong>Do not rely on HPWR mode — it is non-functional in FW v2.</strong></p>
<hr />
<h2>Summary</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Issue</th>
<th>Root Cause</th>
<th>Fix</th>
</tr>
</thead>
<tbody>
<tr>
<td>Wire on Port A silent</td>
<td>M5Dial.begin() uses Wire on G11/G12</td>
<td>Call <code>Wire.begin(13,15)</code> after <code>M5Dial.begin()</code></td>
</tr>
<tr>
<td>Wire1 SCL blocked</td>
<td>Touch controller holds G15 LOW</td>
<td>Don't use Wire1</td>
</tr>
<tr>
<td>M5UnitHbridge FW=255</td>
<td>Library uses STOP instead of Repeated Start</td>
<td>Use Wire directly with <code>endTransmission(false)</code></td>
</tr>
<tr>
<td>5V mode brownout</td>
<td>USB 5V insufficient for motor load &gt;~500mA</td>
<td>Use powered USB hub or higher-current 5V supply</td>
</tr>
<tr>
<td>HPWR mode non-functional</td>
<td>STM32F030 FW v2 bug — forward dead, backward fixed at ~9% duty cycle regardless of speed</td>
<td><strong>No workaround — requires firmware fix from M5Stack</strong></td>
</tr>
</tbody>
</table>
<hr />
<p dir="auto"><em>Tested May 2026 on M5Stack Dial v1 (ESP32-S3) + H-Bridge Unit v1.1 (STM32F030 + RZ7899, FW v2) / Arduino IDE 2.3.8 / ESP32 Core 3.3.7 / M5Unified 0.2.15</em></p>
<hr />
<h2>Appendix: Full Serial Output per Test</h2>
<h3>Test 1a — COM A | 5V | Hardware Wire | correct registers</h3>
<pre><code>=== Test 1a: Wire direkt, korrekte Register ===
FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  write reg=0x00 val=1 ... err=0
  write reg=0x01 val=0 ... err=0
  spd=  0
  
  write reg=0x01 val=198 ... err=0
  spd=198
E BOD: Brownout detector was triggered

Lauf mit Ammeter (Grove-Seite):
  write reg=0x01 val=52 ... err=0
  spd= 52
E BOD: Brownout detector was triggered
Strom: ~300mA Ruhestrom, ~700mA beim Laufen (nach Anschieben), 3.3V an Motor
</code></pre>
<h3>Test 1b — COM A | 5V | M5UnitHbridge Library</h3>
<pre><code>=== Test 1b: M5UnitHbridge Library ===
begin: OK
FW-Version: 255   ← should be 2
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  spd=  0 ... spd=255
[2] Vorwaerts: halte 100% fuer 3s
[3] Vorwaerts: Rampe 255-&gt;0
[4] STOP ... [8] STOP
=== Fertig ===
← no brownout, no motor current, motor never moved
</code></pre>
<h3>Test 2a — COM A | 5V | Bit-Banging</h3>
<pre><code>=== Test 2a: COM A | 5V | Bit-Banging ===
[0] I2C Scan...  Gefunden: 0x20 &lt;- H-Bridge
FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  spd=  0 ... spd= 62
E BOD: Brownout detector was triggered
← Motor dreht. Brownout bei spd=62 (~24%). GPIO-Umschalten erhoht Strombedarf.
</code></pre>
<h3>Test 2b — COM B | 5V | Bit-Banging</h3>
<pre><code>=== Test 2b: COM B | 5V | Bit-Banging ===
    SDA=G2 (gelb), SCL=G1 (weiss)
[0] I2C Scan...  Gefunden: 0x20 &lt;- H-Bridge
FW-Version: 2  (read OK)
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  spd=  0 ... spd= 63
E BOD: Brownout detector was triggered
← Motor hat gezuckt, Spannung messbar. Brownout bei spd=63, identisch mit 2a.
</code></pre>
<h3>Test 3a — COM A | HPWR | Hardware Wire</h3>
<pre><code>=== Test 3a: COM A | HPWR | Wire direkt ===
    SDA=G13, SCL=G15
FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255 (100ms/Schritt)
  write reg=0x00 val=1 ... err=0
  write reg=0x01 val=0 ... err=0
  spd=  0 ... spd=255
[2] Vorwaerts: halte 100% fuer 3s
[3] Vorwaerts: Rampe 255-&gt;0
=== Fertig ===
Messungen: 13.5V OK, 0.083mA aus Netzteil, Motor dreht nicht.
</code></pre>
<h3>Test 3b — COM A | HPWR | Bit-Banging</h3>
<pre><code>=== Test 3b: COM A | HPWR | Bit-Banging ===
    SDA=G13, SCL=G15
[0] I2C Scan...  Gefunden: 0x20 &lt;- H-Bridge
FW-Version: 2
[1] Vorwaerts: Rampe 0-&gt;255   → Motor dreht NICHT, ~4mV, 120mA-Spike bei spd=0..10
[5] Rueckwaerts: Rampe 0-&gt;255 → Motor dreht ✓, -1.2V, 128mA aus Netzteil
[7] Rueckwaerts: Rampe 255-&gt;0 → Motor haelt sauber bei spd=0
=== Fertig ===
Asymmetrie: Vorwaerts tot, Rueckwaerts ~9% eff. Duty Cycle bei 13.5V
</code></pre>
<h3>Test 4 — COM B | HPWR | Bit-Banging</h3>
<pre><code>=== Test 4: COM B | HPWR | Bit-Banging ===
    SDA=G2 (gelb), SCL=G1 (weiss)
[0] I2C Scan...  Gefunden: 0x20 &lt;- H-Bridge
FW-Version: 2  (read OK)
[1] Readback-Test: dir=1 spd=128
  Readback: dir=1 (soll=1)  spd=128 (soll=128)   ← Register korrekt geschrieben
[2] Vorwaerts: Rampe 0-&gt;255 ... Motor dreht nicht
Messungen: 13.5V OK, 79mA aus Netzteil, 4mV an Motor.
</code></pre>
<h3>Test 5 — COM A | HPWR | Bit-Banging | PWM-Frequenz auslesen</h3>
<pre><code>=== Test 5: COM A | HPWR | Bit-Banging | FreqRead ===
    SDA=G13, SCL=G15
[0] I2C Scan...  Gefunden: 0x20 &lt;- H-Bridge
FW-Version: 2
[R] Register-Snapshot (Firmware-Defaults):
  0x00 DIR   = 0  (0=STOP,1=FWD,2=BWD)
  0x01 SPD8  = 0
  0x02 SPD16 = 0
  0x04 FREQ  = 1000 Hz   ← default PWM frequency
Motor dreht nicht.
</code></pre>
<h3>Test 6 — COM A | HPWR | Bit-Banging | PWM-Frequenz auf 10kHz gesetzt</h3>
<pre><code>=== Test 6: COM A | HPWR | Bit-Banging | FreqSet 10kHz ===
    SDA=G13, SCL=G15
[F] Setze PWM-Frequenz auf 10000 Hz...
    FREQ nach Set = 10000 Hz   ← write accepted
[R] Register-Snapshot:
  0x04 FREQ  = 10000 Hz
[1] Vorwaerts: Rampe 0-&gt;255   → Motor dreht nicht. Frequenz hat keinen Einfluss.
</code></pre>
]]></description><link>https://community.m5stack.com/topic/8221/h-bridge-unit-v1.1-m5dial-possible-library-bug-hpwr-issues-safety-note-test-report-please-correct-me-if-i-m-wrong</link><generator>RSS for Node</generator><lastBuildDate>Sat, 16 May 2026 16:34:31 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/8221.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 May 2026 20:07:13 GMT</pubDate><ttl>60</ttl></channel></rss>