Forgot troubleshoot doc
This commit is contained in:
parent
4c77b98388
commit
0cf5a4fa2d
415
firmware/mega/troubleshoot.md
Normal file
415
firmware/mega/troubleshoot.md
Normal file
@ -0,0 +1,415 @@
|
|||||||
|
# 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:
|
||||||
|
```cpp
|
||||||
|
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:
|
||||||
|
```cpp
|
||||||
|
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:
|
||||||
|
```cpp
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
## More Power-Related Issues
|
||||||
|
|
||||||
|
#### 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:
|
||||||
|
```cpp
|
||||||
|
// 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:
|
||||||
|
```cpp
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
4. 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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user