The gantry provides precise and motorized movement of the needle over the sample. It has 25 μm of positional repeatability which is needed to ensure that the P1, P2, and P3 lines will not overlap. It has been modified with a 3rd party Z-axis that allowed us to mount the force feedback system to it.
The force feedback system is designed to be able to hold a needle and apply a 1-50g force onto the sample within a tolerance of 0.5g. Before the needle contacts the sample, the weight of the collet bracket is supported by stretching the extension springs above it. As the Z-stage is moved down towards the sample, the needle will achieve contact and begin to push the collet bracket upwards. This increases the force of the needle on the sample because it causes the extension springs to support less of the brackets weight. Precise control of this mechanism is done by running measurements at 80Hz from two load cells into an Arduino PID controller. The PID controller then outputs a step count for the motor to follow in order to adjust the force.
The workholding is inspired by a vise, but designed specifically for our 1"x1" cells. The vise design was chosen to prevent the sample from moving during the scribing operation, preventing chatter and ensuring clean cuts. In the narrower direction (x), the slot that the sample resides in is oversized by only ±150 μm, preventing too much variation in location. In the clamping direction (y), the positioning is much more precise as the vise jaw will always constrain the sample against the same wall. It also have 4xM5 clearance holes that allow it to mount directly to the bed.
The python GUI manages communication between the force feedback Arduino and the gantry control board. The user can input parameters such as force and travel distance before pressing the macro buttons to perform operations. Another key aspect is the ability to home the gantry and jog to coordinates which is essential for ensuring the gantry returns to the same location between P1, P2, and P3 cuts.
User fills out scribe parameters in the Python GUI
Python instructs the Arduino to begin stabilizing to desired force
Once the Arduino responds that it has settled, the Python creates GCode and sends it to the GRBL controller on the gantry
The gantry then follows the GCode, moving along the direction of the scribe
Once the gantry stops, it sends an idle message to the Python which then instructs the Arduino to retract off the sample
The Arduino stops controlling for force and retracts a set number of steps, lifting off the sample
After the user sees that the Arduino has retracted, they begin the reposition macro which moves the gantry into position for the next scribe and the process repeats.