
Why a safety chain?
The most dangerous error in machines is the motor running in the wrong position. The blade descends, the table crashes, the material jams. So instead of powering the motor directly with a "run" command, I build a chain.
How is the chain built?
// 1) The MOSFET is kept OFF at start-up
digitalWrite(MOTOR_GATE, LOW);
// 2) The magnetic sensor (MZ580) verifies the position
if (readHallSensor() == HALL_OK) {
// 3) 600 ms wait — for transition stability
delay(600);
// 4) Enable the motor
digitalWrite(MOTOR_GATE, HIGH);
}
Why 600 ms?
The magnetic sensor reads at the moment the position changes; however, the reading is unstable until the field settles. A 600 ms delay is applied so that the motor is not started accidentally during this interval. Measure the value and adjust it for your own machine — 600 ms is a starting value, not a universal rule.
Drivers used
| Driver | Use |
|---|---|
| TB6600 | High torque, medium speed |
| JSS860H | Compact, low speed |
| JSS556 | Cost-effective solution |
When choosing a motor, torque, speed and driver current must be considered together. The most common mistake is connecting a high-torque motor to a low-current driver — the driver heats up and protection trips.
Filtering
Using sensor readings directly is sensitive to noise. A simple moving average filter is sufficient for most applications:
float smooth(int raw) {
static int buf[SIZE];
// ... ring buffer, take the average
}
Result
This arrangement also eliminates the "the motor is not turning" problem. Because the problem is not in the motor itself, but in the fact that it was started at the wrong moment.


