Theo mình bác nhason nói đúng đấy, không riêng gì firmware Marlin mà GRBL và TinyG cũng hay bị lỗi Pul/Dir với driver dùng opto.
Bác thử config lại firmware và load lại firmware cho arduino thử xem.
để config firmware bác mở file Configuration_adv.h tìm tới dòng nưu sau
// The minimum pulse width (in µs) for stepping a stepper.
// Set this if you find stepping unreliable, or if using a very fast CPU.
#define MINIMUM_STEPPER_PULSE 0 // (µs) The smallest stepper pulse allowed
sửa #define MINIMUM_STEPPER_PULSE 0 số 0 thành từ 15 đến 35 #define MINIMUM_STEPPER_PULSE 15 // (µs) The smallest stepper pulse allowed
còn đổi mức thấp hoặc cao trên chân điều khiển xung thì tìm dòng sau để sửa.
// By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
#define INVERT_X_STEP_PIN false
#define INVERT_Y_STEP_PIN false
#define INVERT_Z_STEP_PIN false
#define INVERT_E_STEP_PIN false
sửa false thành true ở trục nào bác muốn đổi.
Chúc bác thành công.