

The MKS DUAL FOC (Manufacturer Part ID: V3.3) is a dual-channel field-oriented control (FOC) driver developed by Makerbase. It is designed to provide precise and efficient control of brushless DC (BLDC) motors. This component is ideal for applications requiring smooth motor operation, high torque, and energy efficiency, such as robotics, electric vehicles, CNC machines, and industrial automation systems.
The MKS DUAL FOC supports advanced motor control algorithms, enabling precise speed, position, and torque control. Its compact design and dual-channel capability make it a versatile choice for multi-motor systems.








Below are the key technical details of the MKS DUAL FOC:
The MKS DUAL FOC features multiple connectors for power, motor outputs, and communication. Below is the pin configuration:
| Pin Name | Description |
|---|---|
| VIN+ | Positive DC power input (12V-48V) |
| VIN- | Negative DC power input (GND) |
| M1A | Motor 1 phase A output |
| M1B | Motor 1 phase B output |
| M1C | Motor 1 phase C output |
| M2A | Motor 2 phase A output |
| M2B | Motor 2 phase B output |
| M2C | Motor 2 phase C output |
| Pin Name | Description |
|---|---|
| UART_TX | UART transmit pin for communication |
| UART_RX | UART receive pin for communication |
| CAN_H | CAN bus high signal |
| CAN_L | CAN bus low signal |
| PWM1 | PWM input for Motor 1 control |
| PWM2 | PWM input for Motor 2 control |
| GND | Ground reference for communication and control |
Below is an example of controlling a single motor using the MKS DUAL FOC and Arduino UNO via UART:
#include <SoftwareSerial.h>
// Define UART pins for communication with MKS DUAL FOC
SoftwareSerial focSerial(10, 11); // RX, TX
void setup() {
// Initialize serial communication
Serial.begin(9600); // For debugging
focSerial.begin(115200); // Communication with MKS DUAL FOC
// Send initialization commands to MKS DUAL FOC
focSerial.println("INIT"); // Example command to initialize the driver
focSerial.println("SET_MODE SPEED"); // Set control mode to speed
focSerial.println("SET_SPEED 1000"); // Set motor speed to 1000 RPM
Serial.println("MKS DUAL FOC initialized.");
}
void loop() {
// Example: Adjust motor speed dynamically
int speed = analogRead(A0); // Read potentiometer value
speed = map(speed, 0, 1023, 0, 3000); // Map to motor speed range
focSerial.print("SET_SPEED ");
focSerial.println(speed); // Send speed command to MKS DUAL FOC
delay(100); // Small delay for stability
}
Motor Not Spinning:
Overheating:
Communication Failure:
Erratic Motor Behavior:
Can I control both motors independently? Yes, the MKS DUAL FOC supports independent control of two motors via separate PWM or UART commands.
What is the maximum motor speed supported? The maximum speed depends on the motor specifications and the input voltage. Ensure the motor is rated for the operating voltage.
Is the MKS DUAL FOC compatible with other microcontrollers? Yes, it can be used with any microcontroller that supports UART, CAN, or PWM communication.
Can I use the MKS DUAL FOC for sensorless BLDC motors? Yes, the driver supports both sensored and sensorless BLDC motors. Configuration may vary based on the motor type.