meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
projects:micromanipulator:start [2026/07/31 17:34] – created rahixprojects:micromanipulator:start [2026/08/03 20:47] (current) – more docs rahix
Line 1: Line 1:
 ====== Open Micro-Manipulator ====== ====== Open Micro-Manipulator ======
-We are building an //open micro-manipulator// after the amazing design of //Diffraction Limited// ([[https://www.youtube.com/watch?v=MgQbPdiuUTw|YouTube]]).+We are building an //open micro-manipulator// after the amazing design of //Diffraction Limited// ([[https://www.youtube.com/watch?v=MgQbPdiuUTw|YouTube]]). He describes is as: 
 + 
 +> This project contains an open source low-cost, easy-to-build motorized XYZ Micro-Manipulator motion control platform achieving submicron precision. It's designed for applications such as optical alignment, probing electronic components, and microscopy. 
 + 
 +We are building ours for die image stitching and laser alignment needs. 
 + 
 +{{:projects:micromanipulator:20260731_work-in-progress.jpg?600|}} 
 + 
 +[Work in Progress]
  
 ==== Resources ==== ==== Resources ====
   * Upstream Project Documentation: https://github.com/0x23/MicroManipulatorStepper   * Upstream Project Documentation: https://github.com/0x23/MicroManipulatorStepper
 +  * Our design files and modified firmware: https://git.fa-fo.de/fafo/OpenMicroManipulator
 +
 +
 +===== Log =====
 +==== 2026-08-02 (fiona, anuejn, rahix) ====
 +The code to drive the fafo-flavored circuit board has been pushed to git: [[https://git.fa-fo.de/fafo/OpenMicroManipulator]]
 +
 +We are redesigning the motor horn as the current ones sit so crooked on the too short axles/shafts of the motors that we need to do something about it. Our approach is to use a little trick: Repurpose a GT2 timing belt pulley as an axle adapter as described by [[https://mastodon.social/@rrmutt/114401813165874766|@rrmutt on Mastodon]]:
 +
 +{{:projects:micromanipulator:2026-08-02_pulley-horn.png?400|}}
 +
 +Design lives in the ''fafo-hardware'' branch of [[https://git.fa-fo.de/fafo/OpenMicroManipulator]].
 +
 +We finished soldering the circuit board and confirmed motors and encoders of all three axis working.
 +
 +-----
 +
 +Running calibration on all 3 axes with 27° retration angle (we increased it in an attempt to improve the results).
 +
 +{{:projects:micromanipulator:2026-08-02_22-joint0.png?400|}}
 +{{:projects:micromanipulator:2026-08-02_22-joint1.png?400|}}
 +{{:projects:micromanipulator:2026-08-02_22-joint2.png?400|}}
 +
 +It does not work reliably yet, neither homing nor calibration yields great results so far. Assuming we will need a combination of improving the encoder to magnet alignment and also tuning software parameters more.
 +
 +==== 2026-08-01 (fiona, anuejn, rahix) ====
 +Plotted the encoder values to understand why results do not add up.
 +
 +{{:projects:micromanipulator:2026-08-01t16_07_14_137064430_00_00.png|600}}
 +
 +The discontinuities look suspicious. Disassembled the encoder from the micromanipulator again and manually played with the magnet array next to it. Figured out where the magnets need to sit in relation to the encoder to produce continuously changing encoder graphs.
 +
 +We noticed that the version of the stepper motor mount (''MotorMount'' in the FreeCAD assembly) that we printed does not match the latest design. It is missing a mounting hole for the encoder... Printed the new version.
 +
 +With a properly mounted encoder the measurements look a lot better, but the calibration process was still unhappy with the results. The reason for that was that the magnets were moved out of their linear range when homing. We fixed this by monkey-patching the code to retract 17.5 degrees after homing.
 +<code diff>
 +diff --git a/firmware/MotionControllerRP/src/robot_joint/robot_joint.cpp b/firmware/MotionControllerRP/src/robot_joint/robot_joint.cpp
 +index b343a1f..d4263e9 100644
 +--- a/firmware/MotionControllerRP/src/robot_joint/robot_joint.cpp
 ++++ b/firmware/MotionControllerRP/src/robot_joint/robot_joint.cpp
 +@@ -57,7 +57,7 @@ bool RobotJoint::calibrate(bool print_measurements) {
 +   bool homing_ok = homing_controller.run_blocking(servo_controller, -HOMING_VELOCITY, 
 +                                                   360.0f*DEG_TO_RAD, HOMING_CURRENT,
 +                                                   ENCODER_ANGLE_TO_ROTOR_ANGLE,
 +-                                                  0.0f);
 ++                                                  17.5f*DEG_TO_RAD);
 +</code>
 +Now the micromanipulator axis is working as intended and can be controlled via G-Code! Success!
 +After calibrating joints with ''M56'', ''G0 X0'' can be used to move the X-Axis to the center position.
 +
 +We continued soldering the motor drivers for the remaining axis to the board.
 +
 +{{:projects:micromanipulator:20260802_perfboard-crimes.jpg?400|}}
 +
 +[do not question what the saw is doing on this picture]
 +
 +==== 2026-07-31 (anuejn, fiona) ====
 +Assembly arrived in the lab and we finished assembling it.
 +
 +The chosen stepper motors have too short of an axle which makes the mating parts not sit straight. The motor coils also have too low resistance which means we cannot drive them at full specified torque. Running at 3V supply for now.
 +
 +Attached the encoders. They report a "weak" magnetic field (come on, it's at least average!). Patched out the error check for this.
 +
 +Open loop motion during calibration works, but the closed control loop oscillates heavily. During calibration, motion starts in a weird direction.