OptiMill BF20 Setup - nortd/driveboard GitHub Wiki

Optimill BF20

The Optimum BF20 is an entry level milling machine which can be converted for CNC tasks. This requires a retrofit kit and a CNC controller. The following describes how to set on of these up with a Driveboard Element. The Driveboard-specfic part is fairly straight forward and involves wiring and configuring the board.



Delta VFD Configuration

The Delta VFD has to be configured for the TeknoMotor. Based on the this configuration guide the relevant settings are:

  • Spindel top speed 01.00:300; 01.01:300 (18k RPMs)
  • Spindel accel/decel 01.09:2.0; 01.10:2.0
  • Spindel setting 02.00:1; 04.13:5.0
    • 0-5V -> 0-300Hz via analog signal on AVI
  • Spindel setting 02.01:1 02.05:2 and 04.04:1
    • aux_off: fwd; aux_on: rev (M2)
    • WP (HIGH, triggered):STOP; WP (LOW, normal):RUN (M1)


The board has 1x USB type-B, 3x barrel 5.5/2.1mm, 15x RJ45, 3x 12-pin headers.

DriveboardUSB Ports


Port for connecting to the computer running DriveboardApp.

  • USB, type-B


For milling operation, the board runs on three power sources and keeps them opto-isolated from each other: 24V for the stepper drivers, 5V for the sensor wiring, and 5V from the USB line for the MCU and core logic.

Alternative power setups require certain jumper default traces to be cut. This allows for a different voltage between steppers and coolant.

  • Stepper power - 24V - barrel 5.5/2.1mm, 3A (or 75% of summed stepper motor setting)
  • Sensor power - 5V - barrel 5.5/2.1mm, 100mA
  • Coolant power - barrel 5.5/2.1mm, 100mA (optional, do not connect without cutting trace)

Stepper Drivers

The board comes with three M542H stepper drivers. Make sure to double-check the correct current setting (dip switches between terminals) to match the stepper motors you have.

  • DRIVER_X, 12-pin header (top)
  • DRIVER_Y, 12-pin header (middle)
  • DRIVER_Z, 12-pin header (bottom)


These are the inputs for the axis limit switches. Switches are expected to be normally closed (NC). When triggered they should disconnect the loop. The point of the RJ45 jacks is to use ethernet patch cables for external wiring: Flexible Cat5 or Cat6 shielded (FTP, STP, or SFTP) patch cables with 26 AWG. Polarity does not matter.

  • X1 - RJ45
  • X2 - RJ45
  • Y1 - RJ45
  • Y2 - RJ45
  • Z1 - RJ45
  • Z2 - RJ45

cat5 wiring

pin# color interlock
pin-1 orange-white pin-1
pin-2 orange pin-2
pin-3 green-white pin-1
pin-4 blue -
pin-5 blue-white -
pin-6 green pin-2
pin-7 brown-white -
pin-8 brown -

Spindle Control

The control wire connects to the VFD of the spindle motor.


cat5 wiring

pin# color spindle VFD
pin-1 orange-white 5V
pin-2 orange WP
pin-3 green-white 5V
pin-4 blue TL
pin-5 blue-white IN
pin-6 green WP
pin-7 brown-white GND
pin-8 brown GND

Stepper Motors

Stepper motors are all driven by energizing two sets of coils. A and A' is one set and B and B' is the other set. This board assumes 2x 26 AWG for wiring and results in a maximum supported nominal current of about 3.5A. Make sure to configure the stepper drivers to match the motors.

  • X, RJ45
  • Y, RJ45
  • Z, RJ45

cat5 wiring

pin# color motor
pin-1 orange-white A
pin-2 orange A'
pin-3 green-white A
pin-4 blue B
pin-5 blue-white B'
pin-6 green A'
pin-7 brown-white B'
pin-8 brown B

Coolant Control

The board can directly drive a load up to 48V and 1A.

  • MIST, RJ45
  • FLOOD, RJ45

cat5 wiring

pin# color valve
pin-1 orange-white pin-1
pin-2 orange pin-2
pin-3 green-white pin-1
pin-4 blue -
pin-5 blue-white -
pin-6 green pin-2
pin-7 brown-white -
pin-8 brown -


  • generate g-code
    • model in Fusion 360
    • generate g-code with this post-processor: driveboard.cps
  • run on job
    • power up mill, open DriveboardApp (in mill mode)
    • open g-code in DriveboardApp
    • homing
    • setup work piece zero
    • retract
    • run tool by tool

Development Notes

Enable swap if running on BBB

  • /load with bigger files fails without swap (6MB)
    • unquote in urllib uses up 512MB easily
  • dd if=/dev/zero of=swapfile bs=1M count=52
  • mkswap swapfile
  • chown root:root swapfile
  • chmod 0600 swapfile
  • swapon swapfile
  • enable permanently in /etc/fstab with:
    • swapfile swap swap defaults 0 0

Open Issues

  • next
    • split tools into passes, info (tool, feedrate, rpms, bbox)
    • retract should stop at machine origin
  • eventually
    • coolant pump control
    • spindle control with TL line
    • jogs need a pause in between (or plenty of overlap)
    • gcode_reader: segmentize long lines so pause works well
    • model machine base
    • perfectly calibrate steps
    • spindle overwrite
    • feedrate overwrite