DIY Pick N Place - Electronics PT 1

Table of contents

DIY Pick N Place - Electronics PT 1

Abstract

Working on the X-Y-Z axis code and electronics

Hardware Setup

The current implementation uses a combination of different motor drivers to control our three axes:

  • X/Y axes: TMC5272 stepper motor driver (via SPI)
  • Z axis: L298N H-bridge motor driver
  • Vacuum control: Infineon DC Motor Shield (to be implemented)

The wiring configuration is straightforward:

TMC5272 Connections:
- SPI1_MISO -> Arduino MISO
- SPI1_MOSI -> Arduino MOSI
- SPI1_SCK -> Arduino SCK / SDA1
- SPI1_CSN -> Arduino D10

L298N Connections:
- IN1 -> Arduino D6
- IN2 -> Arduino D7
- IN3 -> Arduino D8
- IN4 -> Arduino D9

Software Implementation

The code is structured to handle three main components: initialization, motor control, and serial command processing. Let's break down each part:

TMC5272 Configuration

The TMC5272 stepper driver is configured via SPI communication. The initialization process includes:

1. Setting up the internal reference voltage
2. Configuring the chopper parameters
3. Setting current limits for both holding and running states
4. Initializing position mode for precise movements


void initTMC5272() {
    writeTMC5272(GCONF, 0x00000004); // Enable internal reference voltage
    writeTMC5272(CHOPCONF, 0x000100C3); // Standard chopper config
    writeTMC5272(IHOLD_IRUN, 0x00071703); // Set current values
    writeTMC5272(RAMPMODE, 0); // Position mode
    writeTMC5272(XACTUAL, 0); // Reset position
}

Movement Control

The system implements three movement functions:

  1. `moveX()` - Controls X-axis movement using the TMC5272
  2. `moveY()` - Similar to X-axis control (to be fully implemented)
  3. `moveZ()` - Controls Z-axis movement using the L298N

The X and Y axes use precise position control with the TMC5272, which handles acceleration and microstepping internally. The movement is calculated based on physical parameters:


const float mmPerStep = 0.02; // Lead screw pitch divided by steps

The Z-axis implementation uses a standard stepper sequence through the L298N driver:


void moveZ(int direction, int steps) {
    const int stepDelay = 2; // Controls movement speed
    // Implements standard 4-step sequence for bipolar stepper motor
    // ...
}


Command Interface

The current implementation includes a simple serial command interface for testing:

  • 'x' - Move X axis 10mm
  • 'y' - Move Y axis 10mm
  • 'u' - Move Z axis up 200 steps
  • 'd' - Move Z axis down 200 steps

Next Steps

The next phase will involve implementing the vacuum control system using the Infineon DC Motor Shield. This will handle the pick-and-place head's vacuum pump for component handling. Additionally, I'll be working on expanding the movement system to include:

  • Proper acceleration profiles
  • Home position sensing
  • Component position calibration
  • Integration with a computer vision system

Holiday Update

Quick note: Due to upcoming holiday travels, progress will be minimal in the following week. But don't worry - development will resume at full speed once I'm back! Sometimes we all need a break to come back with fresh ideas and renewed energy.

Stay tuned for Part 2, where we'll dive into implementing the vacuum control system and start working on the computer vision integration!

Category : project