arduino/firmware/mega/troubleshoot.md
2024-12-07 10:43:53 +02:00

11 KiB

Troubleshooting Guide (O fok wat nou boek)

LED Status Indicators

The device uses two LEDs for status indication:

  • LED A (Pin 3): Activity indicator
  • LED B (Pin 5): Error indicator

LED Error Patterns

  • 4 slow blinks: RTC initialization failure
  • 4 medium blinks: RTC lost power (time reset required)
  • 2 slow blinks: SD card initialization failure
  • 10 quick blinks: Multiple consecutive Modbus read errors
  • Continuous error blinks: Number of blinks indicates error count in current cycle

Hardware Diagnostics

RTC (Real-Time Clock) Module

  1. Power Check:

    • Measure voltage between VCC and GND pins (should be 5V ±0.2V)
    • Check if backup battery is installed and voltage is above 2.5V
    • Verify proper connection to SDA (Pin 20) and SCL (Pin 21)
  2. Communication Test:

    if (!rtc.begin()) {
      Serial.println("RTC Failed");
    } else {
      DateTime now = rtc.now();
      Serial.print(now.year(), DEC);
      Serial.print('/');
      Serial.print(now.month(), DEC);
      Serial.print('/');
      Serial.print(now.day(), DEC);
    }
    
  3. Common RTC Issues:

    • No communication: Check I2C pullup resistors
    • Incorrect time: Replace backup battery
    • Random resets: Check for loose connections
    • Time drift: Environmental temperature too high

SD Card Module

  1. Physical Inspection:

    • Verify card is properly seated
    • Check pin connections:
      • CS → Pin 53
      • MOSI → Pin 51
      • MISO → Pin 50
      • SCK → Pin 52
  2. Diagnostic Test:

    void testSD() {
      if (!sd.begin(SD_CONFIG)) {
        Serial.println("SD initialization failed!");
        return;
      }
    
      // Test file creation
      File testFile;
      if (!testFile.open("test.txt", FILE_WRITE)) {
        Serial.println("File creation failed!");
        return;
      }
    
      // Test writing
      if (!testFile.println("Test data")) {
        Serial.println("Write failed!");
      }
    
      testFile.close();
      Serial.println("SD test passed!");
    }
    
  3. Common SD Issues:

    • Card not detected: Try reformatting to FAT32
    • Write errors: Check card write-protect switch
    • Random failures: Power supply issues
    • Slow performance: Reduce SPI clock speed

RS485/Modbus Communication

  1. Physical Layer Test:

    • Measure differential voltage between A and B lines:
      • Idle state: ~0.9V to -0.9V
      • Active state: ~2V to -2V
    • Check termination resistors (120Ω)
    • Verify ground reference
  2. Communication Test:

    void testModbus() {
      // Set device to receive mode
      digitalWrite(DE_RE_PIN, LOW);
    
      // Try reading first register
      uint8_t result = node.readHoldingRegisters(0, 1);
      if (result == node.ku8MBSuccess) {
        Serial.println("Modbus communication OK");
      } else {
        Serial.print("Modbus error: ");
        Serial.println(result);
      }
    }
    
  3. Common Modbus Issues:

    • No response: Check baud rate settings
    • Intermittent communication: Check cable shielding
    • Garbled data: A/B lines reversed
    • Timeout errors: Increase retry count

System-wide Issues

  1. Power Supply Problems:

    • Symptoms:
      • Random resets
      • SD card write failures
      • Intermittent communication
    • Solutions:
      • Use separate power supply for RS485 device
      • Add decoupling capacitors
      • Check for ground loops
  2. Environmental Issues:

    • EMI interference: Shield cables
    • Temperature: Keep below 50°C
    • Vibration: Secure all connections
    • Moisture: Use conformal coating
  3. Software Lockups:

    • Implement watchdog timer
    • Add error recovery routines
    • Monitor free memory

Maintenance Checklist

  1. Weekly:

    • Check LED status patterns
    • Verify log file creation
    • Monitor data consistency
  2. Monthly:

    • Backup SD card data
    • Check all connections
    • Clean card contacts
    • Verify RTC accuracy
  3. Quarterly:

    • Update firmware if needed
    • Check power supply voltage
    • Test communication reliability
    • Clean enclosure and ventilation

Emergency Recovery

  1. If system stops logging:

    • Check LED error patterns
    • Review serial debug output
    • Power cycle the device
    • Check SD card in computer
  2. Data recovery:

    • Copy all files before removing card
    • Use file recovery software if needed
    • Check file timestamps for gaps
  3. System reset:

    • Hold reset button for 5 seconds
    • Reformat SD card if necessary
    • Reconfigure RTC if needed

Symptoms & Diagnostics:

  • Random resets

    • Measure input voltage during operation (should be 9V ±0.5V)
    • Check voltage stability during Modbus communication
    • Monitor voltage drops during SD card writes
  • SD card write failures

    • Monitor 5V rail during write operations (should remain above 4.8V)
    • Check for voltage sags when LED indicators activate
    • Test with different power supplies to isolate issue
  • Intermittent communication

    • Measure RS485 supply voltage under load
    • Check for ground potential differences
    • Monitor voltage stability during transmission

Solutions:

  1. Power Supply Improvements:

    • Use a regulated 9V power supply rated for at least 1A
    • Add local decoupling capacitors:
      • 100μF electrolytic near voltage input
      • 10μF tantalum at Arduino VIN
      • 0.1μF ceramic at each IC power pin
    • Consider using a dedicated 5V regulator for sensitive components
  2. Ground Loop Prevention:

    • Keep ground returns short and direct
    • Create a single ground point near the Arduino
    • Use star grounding topology
    • Add 100Ω resistor in RS485 ground line
    • Consider optical isolation for RS485
  3. Noise Reduction:

    • Separate digital and analog grounds
    • Use shielded cables for RS485
    • Add ferrite beads on power lines
    • Keep high-current paths away from sensitive signals

2. Voltage Stability Issues

Common Problems:

  1. Brownouts

    • Symptoms:
      • RTC resets
      • Corrupted SD card writes
      • Modbus communication errors
    • Solutions:
      • Add bulk capacitance (1000μF or larger)
      • Use higher current power supply
      • Monitor power quality with oscilloscope
  2. Voltage Ripple

    • Symptoms:
      • Erratic behavior
      • Communication errors
      • Incorrect sensor readings
    • Solutions:
      • Add LC filter on power input
      • Use linear regulator instead of switching
      • Increase decoupling capacitance
  3. EMI/RFI Issues

    • Symptoms:
      • Interference during transmission
      • Data corruption
      • System lockups
    • Solutions:
      • Shield power supply cables
      • Add common-mode chokes
      • Use metal enclosure as shield
      • Add TVS diodes for protection

[Previous sections remain the same until Component-Specific Power Solutions]

3. Component-Specific Power Solutions

3.1 SD Card Module Power Management

  1. Voltage Requirements:

    • Operating voltage: 3.3V ±0.3V
    • Maximum current draw: ~100mA during writes
    • Peak current during initialization: ~200mA
  2. Recommended Power Configuration:

    • Primary Solution:
      • Use AMS1117-3.3V dedicated regulator
      • Input capacitor: 10μF tantalum
      • Output capacitor: 22μF tantalum
      • Bulk capacitor: 100μF electrolytic
      • Bypass capacitor: 0.1μF ceramic
  3. Implementation Details:

    // Code to detect power-related SD issues
    bool checkSDPower() {
      if (!sd.begin(SD_CONFIG)) {
        // Try power cycling SD card if available
        digitalWrite(SD_POWER_PIN, LOW);
        delay(100);
        digitalWrite(SD_POWER_PIN, HIGH);
        delay(100);
        return sd.begin(SD_CONFIG);
      }
      return true;
    }
    
  4. PCB Layout Recommendations:

    • Keep power traces minimum 20mil width
    • Use ground plane under SD module
    • Place decoupling caps within 10mm
    • Separate digital and analog grounds

3.2 RS485 Interface Power Solutions

  1. Power Requirements:

    • Operating voltage: 5V ±0.25V
    • Typical current: 50mA
    • Maximum current: 250mA during transmission
  2. Isolation Solutions:

    • Recommended Components:
      • ISO7721 digital isolator
      • B0505S-1W isolated DC-DC converter
      • 120Ω termination resistors (0.25W)
      • TVS diodes: SMBJ6.5CA
  3. Protection Circuit:

    VCC (5V) ----[10Ω]----+----[0.1μF]----GND
                          |
                      [TVS Diode]
                          |
    RS485_A ----[100Ω]---+----[MAX485]
    
  4. Noise Mitigation:

    • Add common-mode choke (100μH)
    • Use split ground plane
    • Implement cable shield grounding
    • Add bi-directional TVS protection

3.3 RTC Module Power Management

  1. Primary Power:

    • Operating voltage: 5V ±0.5V
    • Current consumption: ~1.5mA
    • Backup current: ~3μA
  2. Backup Power Solutions:

    • Primary Option: CR2032 Battery

      • Expected life: 3-5 years
      • Monitor voltage threshold: 2.5V
      • Add schottky diode for protection
    • Alternative: Super Capacitor

      • Recommended: 1F, 5.5V
      • Charge resistor: 1kΩ
      • Backup duration: ~1 week
  3. Power Monitoring:

    bool checkRTCPower() {
      float backupVoltage = analogRead(RTC_BATT_PIN) * (5.0 / 1023.0);
      if (backupVoltage < 2.5) {
        Serial.println("RTC backup voltage low!");
        return false;
      }
      return true;
    }
    
  4. Temperature Compensation:

    • Add temperature sensor (DS18B20)
    • Monitor correlation with time drift
    • Implement software correction

3.4 Arduino MEGA Power Requirements

  1. Voltage Inputs:

    • VIN (recommended): 7-12V
    • 5V USB: 5V ±0.25V
    • Maximum current: 500mA
    • Peak current: 800mA
  2. Power Distribution:

    • Main regulator bypassing:
      • 47μF electrolytic on VIN
      • 0.1μF ceramic on 5V
      • 10μF tantalum on 3.3V
  3. Power Debugging:

    • Monitor VIN with voltage divider
    • Check 5V rail stability
    • Measure ground bounce
    • Track current consumption

3.5 Power Integration Guidelines

  1. System Power Budget:

    Component          Typical     Peak
    --------------------------------------
    Arduino MEGA       100mA      200mA
    SD Card            50mA       200mA
    RS485              50mA       250mA
    RTC                2mA        3mA
    LEDs               20mA       40mA
    --------------------------------------
    Total:             222mA      693mA
    
  2. Power Supply Selection:

    • Minimum rating: 12V @ 1A
    • Recommended: 12V @ 2A
    • Consider linear vs switching
    • Add 50% safety margin
  3. Decoupling Network:

    Location           Capacitor
    --------------------------------------
    Input Power        1000μF electrolytic
    VIN                47μF electrolytic
    5V Rail            10μF tantalum
    3.3V Rail          22μF tantalum
    Each IC            0.1μF ceramic
    
  4. Ground Management:

    • Implement star grounding
    • Separate analog/digital
    • Use ground plane
    • Monitor ground differential