162 lines
5.1 KiB
Markdown
Executable File
162 lines
5.1 KiB
Markdown
Executable File
# Genesis SLM MX 532 Laser Control Application
|
|
|
|
## Overview
|
|
|
|
This application provides comprehensive control of the Genesis SLM MX 532 laser over serial port using the NXP I2C-over-serial protocol. It features a professional PyQt6 GUI with multiple tabs for basic controls, monitoring, advanced operations, and configuration.
|
|
|
|
## Features
|
|
|
|
### Tab 1: Basic Controls
|
|
- **Current Control**: Slider and numeric input for laser current (0-1023) with percentage display
|
|
- **Power Control**: Slider for power command setting
|
|
- **Digital Controls**: Toggle buttons for:
|
|
- Shutter (Open/Closed)
|
|
- Keyswitch (On/Off)
|
|
- Remote Enable (On/Off)
|
|
- Analog Input Enable (On/Off)
|
|
- Current Mode (On/Off)
|
|
- **Emergency Stop**: Red button that immediately closes shutter, sets current to 0, and disables keyswitch
|
|
|
|
### Tab 2: Monitoring
|
|
- Real-time sensor readings with auto-refresh capability (configurable interval)
|
|
- Displays:
|
|
- Actual current reading from ADC
|
|
- Interlock status (visual color-coded indicator)
|
|
- LDD (Laser Diode Driver) enable status
|
|
- Power supply glue input/output status
|
|
- Head DIO status
|
|
- Laser information display (model and wavelength)
|
|
|
|
### Tab 3: Advanced
|
|
- **Raw I2C Packet Sender**: Send custom I2C commands with hex input
|
|
- **Packet Capture Log**: Real-time log of all transmitted and received packets with timestamps
|
|
- Useful for debugging and development
|
|
|
|
### Tab 4: Configuration
|
|
- Serial port selection with auto-detection
|
|
- Baud rate configuration (default: 9600)
|
|
- Connect/Disconnect control
|
|
- DTR/RTS control line settings
|
|
- About section with protocol information
|
|
|
|
## Safety Features
|
|
|
|
1. **All controls disabled until connected** - Prevents accidental commands
|
|
2. **Shutter confirmation dialog** - Warns if opening shutter with current > 0
|
|
3. **Emergency stop** - Always enabled, immediately enters safe state
|
|
4. **Auto-safe state on disconnect** - Laser enters safe state when disconnecting
|
|
5. **Settings persistence** - Window geometry and last settings are saved
|
|
|
|
## Protocol Details
|
|
|
|
The application uses the NXP I2C-over-serial protocol with this packet format:
|
|
|
|
**Write packet:**
|
|
```
|
|
[0x53] [I2C_ADDR] [LENGTH] [COMMAND_BYTES] [DATA_BYTES] [0x50]
|
|
```
|
|
|
|
**Read packet:**
|
|
```
|
|
[0x53] [ADDR_WRITE] [CMD_LEN] [CMD] [0x53] [ADDR_READ] [DATA_LEN] [0x50]
|
|
```
|
|
|
|
### I2C Devices
|
|
|
|
- **X9119** (0x52/0x53) - Digital potentiometer for current control
|
|
- **PCA9555** (various addresses) - I/O expanders for digital control
|
|
- **ADS7828** (0x90/0x91) - ADC for sensor readings
|
|
- **AD5254** (0x58) - Digital potentiometer for limits
|
|
- **M24C64** (0xa4/0xa5) - EEPROM for configuration storage
|
|
|
|
## Installation
|
|
|
|
1. Ensure dependencies are installed:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
2. Connect the laser to your computer via serial port (typically /dev/ttyUSB0 on Linux)
|
|
|
|
3. Run the application:
|
|
```bash
|
|
python genesis_laser_control.py
|
|
```
|
|
|
|
## Usage
|
|
|
|
1. **Launch the application**
|
|
```bash
|
|
python genesis_laser_control.py
|
|
```
|
|
|
|
2. **Connect to the laser:**
|
|
- Go to the "Configuration" tab
|
|
- Select the correct serial port from the dropdown
|
|
- Verify baud rate is set to 9600 (default)
|
|
- Click "Connect"
|
|
|
|
3. **Basic operation:**
|
|
- Enable remote control using the "Remote: DISABLED" button
|
|
- Enable keyswitch if required
|
|
- Adjust current using the slider
|
|
- Open shutter when ready (confirmation dialog will appear if current > 0)
|
|
|
|
4. **Monitoring:**
|
|
- Go to the "Monitoring" tab
|
|
- Enable "Auto-refresh" to continuously update readings
|
|
- Adjust refresh interval as needed (default: 500ms)
|
|
|
|
5. **Emergency stop:**
|
|
- Click the red "EMERGENCY STOP" button on any tab
|
|
- This immediately closes shutter, sets current to 0, and disables keyswitch
|
|
|
|
6. **Disconnecting:**
|
|
- Click "Disconnect" in the Configuration tab
|
|
- Laser will automatically enter safe state before disconnecting
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Issues
|
|
- Verify serial port permissions: `sudo usermod -a -G dialout $USER` (logout and login)
|
|
- Check cable connection and power
|
|
- Verify correct port in Configuration tab
|
|
- Try refreshing ports list
|
|
|
|
### Communication Errors
|
|
- Check packet log in Advanced tab for detailed TX/RX
|
|
- Verify baud rate is 9600
|
|
- Ensure no other programs are using the serial port
|
|
- Try power cycling the laser
|
|
|
|
### Interlock Faults
|
|
- Check physical interlock connections
|
|
- Verify interlock status in Monitoring tab
|
|
- Ensure all safety covers are in place
|
|
|
|
## Code Structure
|
|
|
|
The application is organized into several classes:
|
|
|
|
- **SerialComm**: Low-level serial port communication
|
|
- **I2CProtocol**: NXP packet construction and parsing
|
|
- **I2CDevices**: I2C device-specific functions (PCA9555, X9119, ADS7828)
|
|
- **LaserControl**: High-level laser control operations
|
|
- **MainWindow**: PyQt6 GUI and user interaction
|
|
|
|
## Development
|
|
|
|
To modify the application:
|
|
|
|
1. **Adding new I2C devices**: Extend the `I2CDevices` class
|
|
2. **Adding new controls**: Add methods to `LaserControl` and corresponding UI elements
|
|
3. **Custom commands**: Use the Raw I2C Packet Sender in the Advanced tab for testing
|
|
|
|
## License
|
|
|
|
See LICENSE file for details.
|
|
|
|
## Support
|
|
|
|
For issues or questions, please refer to the main project documentation.
|