{"id":28697333,"url":"https://github.com/manish-git-tech/3d_printer_firmware_2","last_synced_at":"2026-05-17T11:32:59.815Z","repository":{"id":298544266,"uuid":"1000044293","full_name":"Manish-git-tech/3d_printer_firmware_2","owner":"Manish-git-tech","description":"Firmware for raspberry pi pico made in PlatformIO for my custom built 3d Printer","archived":false,"fork":false,"pushed_at":"2025-06-11T17:02:37.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-11T18:03:17.810Z","etag":null,"topics":["bresenham-line-drawing-algorithm","cascaded-pid","gcode-parser","pid-control","platformio","quadrature-encoder","raspberry-pi-pico"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Manish-git-tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-11T07:22:12.000Z","updated_at":"2025-06-11T17:02:40.000Z","dependencies_parsed_at":"2025-06-11T18:03:20.982Z","dependency_job_id":"a619bf11-76a9-4876-8f38-748eae886d5f","html_url":"https://github.com/Manish-git-tech/3d_printer_firmware_2","commit_stats":null,"previous_names":["manish-git-tech/3d_printer_firmware_2"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Manish-git-tech/3d_printer_firmware_2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Manish-git-tech%2F3d_printer_firmware_2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Manish-git-tech%2F3d_printer_firmware_2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Manish-git-tech%2F3d_printer_firmware_2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Manish-git-tech%2F3d_printer_firmware_2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Manish-git-tech","download_url":"https://codeload.github.com/Manish-git-tech/3d_printer_firmware_2/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Manish-git-tech%2F3d_printer_firmware_2/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259797970,"owners_count":22912766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bresenham-line-drawing-algorithm","cascaded-pid","gcode-parser","pid-control","platformio","quadrature-encoder","raspberry-pi-pico"],"created_at":"2025-06-14T10:01:35.623Z","updated_at":"2026-05-17T11:32:59.690Z","avatar_url":"https://github.com/Manish-git-tech.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Custom 3D Printer Firmware for Raspberry Pi Pico with Quadrature Encoders and Advanced Motion Control\n\nThis 3D Printer Firmware implements precise multi-axis motion control for my custom built 3D printer using Raspberry Pi Pico/RP2040, featuring quadrature encoder feedback, Bresenham-based path planning, cascaded PID control, and robust configuration storage using LittleFS. Designed for PlatformIO with modular architecture and real-time performance.\n\n---\n\n## Table of Contents\n1. [Installation Guide](#installation-guide)\n2. [Building the Firmware](#building-the-firmware)\n3. [Flashing to Raspberry Pi Pico](#flashing-to-raspberry-pi-pico)\n4. [Hardware Configuration](#hardware-configuration)\n5. [Core System Architecture](#core-system-architecture)\n6. [Advanced Configuration](#advanced-configuration)\n7. [Troubleshooting](#troubleshooting)\n8. [Customization for Other Boards](#customization-for-other-boards)\n\n---\n\n## Installation Guide \n\n### Prerequisites\n- **PlatformIO Core** (VSCode extension or standalone)\n- **Python 3.7+**\n- **Git** for version control\n\n### Repository Setup\n```bash\ngit clone https://github.com/Manish-git-tech/3d_printer_firmware_2.git\ncd 3d_printer_firmware_2\n```\n\n### PlatformIO Configuration\n1. Install dependencies:\n```bash\npio pkg install\n```\n2. Configure board in `platformio.ini`:\n```ini\n[env:pico]\nplatform = raspberrypi\nboard = pico\nframework = arduino\n```\n\n### File Structure\n```\nsrc/\n├── comms/              # G-code parsing and serial communication\n│   ├── comms.cpp       # Command state machine\n│   └── comms_parser.h  # G-code syntax definitions\n├── motion/             # Motor control and feedback\n│   ├── encoder.cpp     # Quadrature decoding\n│   └── pid_control.cpp # Cascaded PID implementation\n├── path_planning/      # Motion algorithms\n│   └── bresenham.cpp   # Coordinated movement\n├── config/             # Hardware parameters\n│   ├── pins.h          # GPIO mappings\n│   └── motion_params.h # Kinematic settings\n└── main.cpp            # Firmware entry point\n```\n\n---\n\n## Building the Firmware \n\n### Compilation Commands\n```bash\n# Build for Raspberry Pi Pico\npio run -e pico\n\n# Build for ESP8266 (WiFi module)\npio run -e esp8266\n\n# Clean build artifacts\npio run -t clean\n```\n\n### Build Flags\n| Environment Variable | Description |\n|----------------------|-------------|\n| `ENABLE_DEBUG_LOG` | Verbose serial output |\n| `FORCE_EEPROM_RESET` | Clear stored settings |\n\n---\n\n## Flashing to Raspberry Pi Pico \n\n### Method 1: PlatformIO Upload\n```bash\npio run -e pico -t upload\n```\n\n### Method 2: Manual UF2 Installation\n1. Hold BOOTSEL button while connecting USB\n2. Copy `.pio/build/pico/firmware.uf2` to RPI-RP2 drive\n3. Wait for automatic reboot\n\n\n### Required Components\n- Raspberry Pi Pico (Main Controller)\n- ESP8266 (WiFi Communication)\n- MX1508 Motor Drivers (2 per axis)\n- DC Motors with Quadrature Encoders\n- 24V Power Supply\n\n### Pin Mapping Example (`config/pins.h`)\n```cpp\n// X-axis Configuration\n#define X_ENC_A 2    // Encoder Phase A\n#define X_ENC_B 3    // Encoder Phase B  \n#define X_MOT_IN1 4  // MX1508 Direction 1\n#define X_MOT_IN2 5  // MX1508 Direction 2\n```\n\n### Encoder Specifications\n| Axis | Slits/mm | CPR | Maximum RPM |\n|------|----------|-----|-------------|\n| X    | 120      | 480 | 300         |\n| Y    | 150      | 600 | 250         |\n| Z    | 200      | 800 | 150         |\n\n---\n\n## Core System Architecture \n\n### 1. Quadrature Encoder Handling\n**Implementation:** `motion/encoder.cpp`\n\n- Uses pin change interrupts for real-time decoding\n- 4x counting mode with state transition table:\n  ```cpp\n  const int8_t ENCODER_STATES[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};\n  ```\n- Velocity calculation via position differentiation:\n  ```cpp\n  float getVelocity() {\n    return (current_pos - last_pos) / (micros() - last_time) * 1e6;\n  }\n  ```\n\n### 2. Bresenham Algorithm Implementation\n**Implementation:** `path_planning/bresenham.cpp`\n\n- Coordinated multi-axis movement\n- Error accumulation for step synchronization:\n  ```cpp\n  void BresenhamPlanner::planMove(int32_t target[]) {\n    steps[X] = abs(target[X] - current[X]);\n    steps[Y] = abs(target[Y] - current[Y]);\n    \n    err = steps[X] - steps[Y];\n    \n    while(current != target) {\n      if(err * 2 \u003e= -steps[Y]) {\n        err -= steps[Y];\n        current[X] += x_dir;\n      }\n      if(err * 2 \n\n### Motion Parameters (`config/motion_params.h`)\n```cpp\n// X-axis Settings\nconstexpr uint16_t X_STEPS_PER_MM = 80;\nconstexpr float X_MAX_ACCEL = 1500.0f; // mm/s²\nconstexpr float X_JERK = 20.0f; // mm/s\n\n// PID Defaults\nconstexpr float DEFAULT_KP = 10.0f;\nconstexpr float DEFAULT_KI = 0.05f;\n```\n\n### Serial Communication Protocol\n| Command | Parameters | Description |\n|---------|------------|-------------|\n| G0      | X Y Z F    | Linear move |\n| G1      | X Y Z E F  | Linear move with extrusion |\n| M2000   | Pid values | change and save pid values in EEPROM |\n| M2001   | --         | Load pid values |\n\n---\n\n## Troubleshooting \n\n### Common Issues\n| Symptom | Likely Cause | Solution |\n|---------|--------------|----------|\n| Position drift | Encoder noise | Add 0.1μF capacitors to encoder inputs |\n| Motor stalling | PWM below 47% | Increase minimum power in `motor_control.cpp` |\n| EEPROM corruption | Improper shutdown | Implement atomic writes with checksums |\n\n### Diagnostic Commands\n```bash\n# Report encoder counts\nM119\n\n# Dump EEPROM contents\nM503\n\n# Test axis movement\nG0 X100 F500\n```\n\n---\n\n## Customization for Other Boards \n\n### Adapting for ESP32\n1. Modify `platformio.ini`:\n   ```ini\n   [env:esp32]\n   platform = espressif32\n   board = esp32dev\n   framework = arduino\n   ```\n2. Update pin mappings in `config/pins.h`\n\n### Supporting New Encoders\n1. Implement encoder interface:\n   ```cpp\n   class CustomEncoder : public EncoderBase {\n     public:\n       int32_t read() override;\n       void init() override;\n   };\n   ```\n2. Register in `motion/motion.cpp`:\n   ```cpp\n   Encoder* x_encoder = new CustomEncoder(X_ENC_A, X_ENC_B);\n   ```\n\n**MIT License** - Free for personal and commercial use\n\n**Special Thanks:**\n- Marlin Firmware Team for motion control foundations\n- PlatformIO for build system\n- Raspberry Pi Foundation for Pico SDK\n\n\u003e **Note:** Always verify electrical connections before powering on the system. Incorrect wiring may damage components.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanish-git-tech%2F3d_printer_firmware_2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanish-git-tech%2F3d_printer_firmware_2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanish-git-tech%2F3d_printer_firmware_2/lists"}