Latest posts

Warum ein Arduino Pro Micro aus unserer Sicht besser ist als ein Arduino Nano V3 für SimHub.

1. USB-Controller-Architektur: Native vs. Bridged

Arduino Pro Micro (ATmega32U4):

  • Integrierter USB 2.0 Full-Speed Controller im AVR-Core

  • Direct Memory Access (DMA)-fähige USB-Endpunkte

  • Hardware-Implementierung von USB-Protokollschichten (PHY, SIE - Serial Interface Engine)

  • Der Prozessor selbst handelt USB-Transaktionen auf Hardware-Ebene

  • Endpoint 0: Control (64 Byte), Endpoints 1-3: Interrupt/ Bulk/ Isochronous (je 64 Byte)

  • USB Clock: Aus internem 16MHz RC-Oszillator oder von externem 16MHz Crystal über PLL

Arduino Nano (ATmega328P + CH340G/FT232RL):

  • Zwei-Chip-Architektur mit USB-UART-Bridge

  • CH340G implementiert USB Device Stack in eigener Hardware (dedizierter RISC-Core)

  • Kommunikation zwischen Bridge und MCU über asynchrone serielle Schnittstelle (UART)

  • Baudrate-Limit: Praktisch max. 2Mbps (CH340G) bzw. 3Mbps (FT232RL) bei 16MHz AVR

  • USB-Latenz: ~1ms pro Bridge + ~1ms pro UART-Übertragung + AVR-Processing

2. USB Device Class Implementation

Pro Micro:

cpp
// Hardware-unterstützte USB HID Report Descriptor Implementation
const uint8_t HID_ReportDescriptor[] PROGMEM = {
    0x05, 0x01,        // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,        // USAGE (Joystick)
    0xA1, 0x01,        // COLLECTION (Application)
    // ... Hardware-gesteuerte Report-Übertragung
};

  • Native HID (Human Interface Device) Class Support in Hardware

  • Polling Interval: Konfigurierbar bis 1ms (1000Hz)

  • Report Size: Bis 64 Bytes pro Interrupt Transfer

  • Keine Software-Overhead für USB-Protokollhandling

Nano:

  • CDC/ACM (Communications Device Class) über Bridge

  • Virtual COM Port (VCP) Emulation

  • Flow Control: RTS/CTS auf UART-Ebene erforderlich für zuverlässige High-Speed-Übertragung

  • Buffer Limitations: CH340G hat 128-Byte FIFO, FT232RL 384-Byte FIFO

3. SimHub-Kommunikationsprotokollanalyse

Pro Micro mit Native HID:

text
SimHub → USB Stack → HID Driver → Pro Micro (USB Interrupt)
     ↓
[USB Frame: SOF → IN Token → Data Packet → ACK]
     ↓
AVR: USBINT Interrupt → Endpoint Buffer Read → DMA to RAM
     ↓
Processing → HID Report Update → Endpoint ready for next poll

  • Latency: < 125μs (1 USB Frame bei 8kHz)

  • Jitter: < ±1μs (USB Synchronisierung)

  • Throughput: 64 Bytes/ms = 512 kbps (theoretisch)

Nano mit Serial Bridge:

text
SimHub → USB Stack → COM Port Driver → CH340G USB Core
     ↓
CH340G: USB Bulk Transfer → UART FIFO → Serial Transmission
     ↓
[Start Bit + 8 Data Bits + Stop Bit] × N @ 115200 baud = 868μs pro Byte!
     ↓
AVR: UART RX Complete Interrupt → Buffer in RAM

  • Latency: 2-10ms (abhängig von Baudrate und Buffering)

  • Jitter: > 100μs (UART asynchron, OS Scheduler)

  • Throughput bottleneck: UART-Schnittstelle

4. Timing- und Performance-Metriken

Metrik Pro Micro (32U4) Nano (328P+CH340)
USB Poll Rate 1000Hz (konfigurierbar) 1-100Hz (OS-abhängig)
Interrupt Latency 2-4 Clock Cycles (125-250ns @16MHz) 20-40 Cycles + UART Sync
Data Consistency Atomic HID Reports Fragmented Serial Stream
Clock Synchronization USB SOF Sync möglich Asynchron (Crystal Tolerance ±100ppm)
Power Management USB Suspend/Resume Always-on (Bridge)

5. SimHub-Spezifische Optimierungen

Pro Micro Vorteile für Dashboards/Shaker:

  1. PWM-Generierung ohne CPU-Last:

    cpp
// Hardware-PWM auf Timer1 (16-bit)
TCCR1A = _BV(COM1A1) | _BV(WGM11);
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
ICR1 = 4096; // 12-bit Resolution
OCR1A = value; // SimHub → HID → Direct PWM Update

    • Update Rate: Bis 4kHz PWM bei 16MHz

    • Jitter: < 62.5ns (1 CPU Cycle)

  1. ADC-Sampling für Analog Inputs:

    • 10-bit ADC mit 15kSPS

    • Free-running Mode mit DMA zu USB Endpoint

  2. Encoder-Handling:

    • Pin Change Interrupts + Hardware Debouncing

    • Quadrature Decoding in Hardware (Timer2 Input Capture)

Nano Limitationen:

  • Serial Protocol Overhead: 30-40% für Start/Stop/Parity Bits

  • Flow Control Issues: RTS/CTS Implementation benötigt extra Pins

  • Buffer Overruns: Bei >115200 baud wird UART-FIFO überlaufen

6. Elektrische/Elektronische Unterschiede

Pro Micro:

  • USB D± Lines direkt an MCU (Series Resistors onboard)

  • ESD Protection: TVS Diodes auf USB Data Lines

  • Voltage Regulation: 5V → 3.3V LDO für USB PHY

Nano:

  • Galvanic Isolation: Bridge isoliert MCU von USB-Bus (Fehlerschutz)

  • Signal Integrity: CH340G hat bessere USB-Eye-Diagram Compliance

  • Power Sequencing: Separate Power Domains (MCU kann unabhängig von USB laufen)

7. Debugging & Development

Pro Micro:

  • USB DFU (Device Firmware Upgrade) Bootloader

  • Caterina Bootloader: 4096 Byte, ermöglicht HID + Serial gleichzeitig

  • USB Descriptor Debugging direkt über Endpoint 0

Nano:

  • STK500 Protocol über Serial

  • Bootloader: Optiboot (512 Byte)

  • Keine gleichzeitige Kommunikation während Flash möglich

Technisches Fazit:

Die Überlegenheit des Pro Micro liegt in der Single-Chip-USB-Implementierung mit hardware-integriertem USB 2.0 Stack. Dies eliminiert:

  1. Protokoll-Overhead der UART-Bridge

  2. Scheduler-Latenzen im OS-COM-Port-Stack

  3. Buffer-Copies zwischen Bridge und MCU

Für Echtzeit-Anwendungen wie SimHub, wo deterministische Latenz und hohe Update-Raten kritisch sind, ist die native USB-Architektur des ATmega32U4 systemisch überlegen. Die UART-Bottleneck-Architektur des Nano begrenzt die Performance auf serielle Geschwindigkeiten, während der Pro Micro volle USB 2.0 Bandbreite (12Mbps) mit hardware-unterstützten Protokollen nutzt.

In Zahlen: Der Pro Micro bietet ~10x niedrigere Latenz, ~50x höhere Polling-Rate und ~5x höheren Datendurchsatz für SimHub-Anwendungen gegenüber einem Nano mit typischer 115200 Baud Konfiguration.

Posted in: Micro-Controller

Leave a comment