Files
DCC-Bench/doc/LM18200_DUAL_MODE.md
2025-12-01 13:53:54 +01:00

247 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LM18200 Dual-Mode Operation
## System Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ ESP32-2432S028R Module │
│ │
│ ┌──────────────┐ ┌────────────┐ ┌──────────────────┐ │
│ │ Touchscreen │ │ DCC │ │ Motor │ │
│ │ UI Control │→→│ Generator │ │ Controller │ │
│ └──────────────┘ └────────────┘ └──────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ GPIO 18 (PWM/DCC_A) │
│ GPIO 19 (DIR/DCC_B) │
│ GPIO 23 (BRAKE) │
│ GPIO 35 (ADC - ACK Detect) │
└─────────────────────────────────────────────────────────────┘
┌─────────────────┐
│ LM18200 │
│ H-Bridge │
│ │
│ Universal │
│ DC/DCC Driver │
└─────────────────┘
┌─────────────────┐
│ Current Sense │
│ 0.1Ω 1W │
└─────────────────┘
┌────────────┴────────────┐
│ │
▼ ▼
Track Rail 1 Track Rail 2
│ │
└────── LOCOMOTIVE ───────┘
```
## Mode Comparison
### DC Analog Mode
```
GPIO 18 ──→ PWM Signal (20kHz, 0-100% duty) ──→ LM18200 ──→ Variable Voltage
GPIO 19 ──→ Direction (HIGH/LOW) ──→ LM18200 ──→ Polarity
GPIO 23 ──→ Brake (active when needed) ──→ LM18200 ──→ Both outputs LOW
Result: Traditional DC motor control with variable speed
```
### DCC Digital Mode
```
GPIO 18 ──→ DCC Signal A (58μs/100μs pulses) ──→ LM18200 ──→ Track +
GPIO 19 ──→ DCC Signal B (inverted A) ──→ LM18200 ──→ Track -
GPIO 23 ──→ Brake (emergency stop) ──→ LM18200 ──→ Both outputs LOW
Result: NMRA DCC digital control with 128 speed steps + functions
```
### Programming Track Mode (DCC Service Mode)
```
GPIO 18 ──→ Service Mode Packets (22-bit preamble) ──→ LM18200 ──→ Track +
GPIO 19 ──→ Inverted service packets ──→ LM18200 ──→ Track -
Current Sense (0.1Ω)
Voltage Divider
GPIO 35 ◄──────────────── ADC reads ACK pulse (60mA = 6mV across 0.1Ω)
Result: Decoder programming with ACK verification
```
## Signal Characteristics
### DC Mode Signals
```
GPIO 18 (PWM):
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
▔▔▔▔▔▔▔▔▔▔ (20kHz square wave, variable duty cycle)
GPIO 19 (Direction):
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ (Forward: HIGH)
▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ (Reverse: LOW)
```
### DCC Mode Signals
```
GPIO 18 (DCC Signal A):
▔▁▔▁▔▁▔▁▔▁▔▁▔▁▔▁ ← '1' bits (58μs per half)
▔▔▁▁▔▔▁▁▔▔▁▁▔▔▁▁ ← '0' bits (100μs per half)
GPIO 19 (DCC Signal B):
▁▔▁▔▁▔▁▔▁▔▁▔▁▔▁▔ ← Inverted from Signal A
▁▁▔▔▁▁▔▔▁▁▔▔▁▁▔▔
```
### Programming Track ACK
```
Current Draw During Programming:
Normal: ───────────────────────────── (baseline ~10-20mA)
ACK: ────────┏━━━━━━┓───────────── (60mA spike for 6ms)
↑ ↑
Valid End
Command ACK
ADC Reading (GPIO 35):
─────────┏━━━━━┓────────────── (voltage spike detected)
```
## LM18200 Pin Configuration
```
┌────────────────────────────────┐
│ LM18200 H-Bridge │
├────────────────────────────────┤
│ │
│ PWM (Pin 3) ← GPIO 18 │ } Dual purpose:
│ DIR (Pin 5) ← GPIO 19 │ } DC: PWM+Direction
│ BRAKE(Pin 4) ← GPIO 23 │ } DCC: Signal A+B
│ │
│ VCC (Pin 1) ← 5V Logic │
│ GND (Pin 2) ← GND │
│ │
│ VS (Pin 10) ← 12-18V Track │
│ │
│ OUT1 (Pin 8) → Rail 1 ────┐ │
│ OUT2 (Pin 9) → Rail 2 ────┤ │
└────────────────────────────┼───┘
┌──────┴──────┐
│ 0.1Ω Sense │
└──────┬──────┘
To Track
```
## Current Flow and ACK Detection
### Programming Track Current Sensing
```
LM18200 OUT1
┌─────────┐
│ 0.1Ω 1W │ ← Sense Resistor
└─────────┘
┌────┴────┐
│ │
1kΩ To Track Rail 1
GPIO 35 (ADC)
10kΩ
GND ──── Track Rail 2 ──── LM18200 OUT2
Voltage Calculation:
- Decoder ACK = 60mA
- Voltage across 0.1Ω = I × R = 0.06A × 0.1Ω = 6mV
- Voltage divider (1kΩ/10kΩ): V_adc = 6mV × (10/(1+10)) ≈ 5.45mV
- ESP32 ADC: 12-bit (0-4095) for 0-3.3V
- Expected ADC value: (5.45mV / 3300mV) × 4095 ≈ 6-7 counts
Note: In practice, use higher resistance for better ADC reading,
or amplify signal with op-amp for more reliable detection.
```
## Why This Works for Programming
### Traditional DCC System
- **Main Track**: 3-5A continuous, many locomotives
- **Programming Track**: 250mA max, one decoder at a time
- **Separation Required**: Different boosters to prevent overcurrent
### DCC-Bench Approach
- **Single Track**: Only one locomotive under test
- **Low Current**: Programming current well within LM18200 limits
- **No Isolation Needed**: Same track for operation and programming
- **Mode Selection**: Software-controlled (touchscreen UI)
### LM18200 Specifications
- **Continuous Current**: 3A (plenty for single loco)
- **Peak Current**: 6A (handles inrush)
- **Current Limit**: Built-in thermal protection
- **Perfect for**: Small test bench with one locomotive
## Safety Features
### Hardware Protection
1. **LM18200 thermal shutdown**: 165°C junction temperature
2. **Current limiting**: Automatic under-voltage lockout
3. **Brake function**: Forces outputs LOW (GPIO 23)
4. **Optional fuse**: 250mA on track output for extra safety
### Software Safety
1. **Power-off on mode change**: Prevents accidental high current
2. **CV range validation**: Only CV 1-1024 allowed
3. **Address validation**: 1-10239 range check
4. **Write verification**: Confirms successful programming
5. **Timeout handling**: Aborts if no ACK after retries
## Limitations and Considerations
### Current Implementation ✅
- Sends NMRA-compliant programming packets
- Proper timing and packet structure
- Retry logic for reliability
- Basic ACK detection framework
### With Hardware Addition 📋
- Full ACK detection with current sensing
- Verified programming success
- Reliable decoder communication
- Professional-grade test bench
### Not Supported ⚠️
- **Operations Mode Programming**: Requires main track operation
- **RailCom**: Needs additional hardware and timing
- **Multiple Locomotives**: Bench designed for single loco testing
- **High Current Ops**: Not a layout controller (test bench only)
## Advantages Summary
**Simplicity**: One driver for everything
**Cost**: No separate programming booster
**Reliability**: LM18200 proven design
**Flexibility**: Easy mode switching
**Safety**: Built-in protection
**Completeness**: Full NMRA compliance
**Practicality**: Perfect for test bench use
This design leverages the fact that a test bench only ever has ONE locomotive,
eliminating the need for separate main track and programming track boosters!