Minnow is an Arduino-based Pacemaker client implementation for 3D printer, CNC and laser cutter controller boards.
The Pacemaker protocol is defined here: https://github.com/JustAnother1/Pacemaker
The Minnow firmware was originally created by Robert Fairlie-Cuninghame based largely on the Marlin printer firmware by Erik van der Zalm.
The firmware is intended for both standalone Arduino-based controller boards (using a PC or similar host platform) as well integrated Arduino + ARM controller boards.
The Minnow firmware and Pacemaker protocol have been specifically designed to support a sustained, high rate of individual movement control segments with minimal processing overhead on the client, thereby allowing the use of a cheaper controller whilst also yielding a far more sophisticated level of motion planning, co-ordinate remapping and better support for non-linear co-ordinate systems than most current solutions without requiring a real time operating system on the host.
The firmware has also been designed to provide a flexible host-based configuration system so that individual firmware builds are not required for different printer and controller configurations.
The Minnow firmware also supports an arbitrary number of devices - steppers, digital input & outputs, heaters, fans, buzzers, etc (limited only by the device's capabilities).
System requirements:
- a 16Mhz or 20Mhz AVR Arduino (i.e., not Due)
- at least 64KB flash memory (currently although this can be reduced using static configuration)
- at least 2KB SRAM memory
TODO List
- Makefile and Arduino libraries directory
- Add event handling
- Fully test movement control
- Add advanced stepper & heater configuration
- Added thermocouple support (thermistor support already available)
- Add coding guide
- Define LCD and Rotary encoder extensions
- World domination
-
System level configuration elements
- system.board_identity
- system.board_serialnum
- system.hardware_name
- system.hardware_type
- system.hardware_rev
- system.reset_eeprom (operation)
-
Device configuration elements
-
devices.digital_input..name
-
devices.digital_input..pin
-
devices.digital_input..trigger_level
-
devices.digital_input..enable_pullup
-
devices.digital_output..name
-
devices.digital_output..pin
-
devices.digital_output..initial_state
-
devices.pwm_output..name
-
devices.pwm_output..pin
-
devices.pwm_output..use_soft_pwm
-
devices.buzzer..name
-
devices.buzzer..pin
-
devices.temp_sensor..name
-
devices.temp_sensor..pin
-
devices.temp_sensor..type
-
devices.heater..name
-
devices.heater..pin
-
devices.heater..temp_sensor
-
devices.heater..max_temp
-
devices.heater..power_on_level
-
devices.heater..use_soft_pwm
-
devices.heater..use_bang_bang
-
devices.heater..bang_bang_hysteresis
-
devices.heater..use_pid
-
devices.heater..pid_range
-
devices.heater..kp
-
devices.heater..ki
-
devices.heater..kd
-
devices.heater..dpi_do_autotune (operation)
-
devices.stepper..name
-
devices.stepper..enable_pin
-
devices.stepper..enable_invert (0 = active low, 1 = active high)
-
devices.stepper..direction_pin
-
devices.stepper..direction_invert
-
devices.stepper..step_pin
-
devices.stepper..step_invert
-
-
Statistics elements
- stats.rx_count
- stats.rx_errors
- stats.queue_memory
- debug.stack_memory
-
Diagnostic/development elements
- debug.stack_low_water_mark