Recore A6
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint. The main features are:
- Allwinner A64 SoC, quad core CPU running at 1 GHz.
- 1 GB of DDR3 RAM
- 8 GB of on board eMMC
- Gigabit Ethernet
- 6 TMC2209, 2 A stepper motor drivers
- 3 heater outputs + high power heated bed
- 4 USB High Speed ports
- 4 thermistor/thermocouple inputs (software selectable)
- Comes with Debian Linux with Klipper and OctoPrint installed
This document is for Recore Revision A6. For previous hardware revisions, please see:
Contents
- 1 Pinout
- 2 Wiring
- 3 Configuration
- 4 Connecting other sensors
- 5 Software for Recore
- 6 Manual control and testing
- 7 Performance
- 8 FAQ
- 8.1 Where can I ask for help?
- 8.2 What comes in the box with the Recore? Specifically, terminal connectors for power, etc?
- 8.3 Do I need access to those 3 buttons on the board?
- 8.4 What's the maximum current draw for heat bed?
- 8.5 Why are there unused and unbroken out pins on the STM32 MCU?
- 8.6 I have a gadget that I want to connect with SPI. Is that possible?
- 8.7 What exactly is the role of the AR100 device?
- 8.8 What voltage fans are supported?
- 8.9 Where is the board layout file?
- 8.10 Where are you shipping from?
- 9 Known hardware issues for rev A6
Pinout
A64
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU clocked at 300 MHz that handles the real time aspect for the 3D-printer. In the following table the pins used for End-stops and stepper control are described. The "bank and pin" can be used to specify the pin numbers in klipper. The "Number" column is useful for testing things on the command line in conjunction with gpiod.
Name | Bank and pin | Number | Name | Bank and pin | Number | Name | Bank and pin | Number |
---|---|---|---|---|---|---|---|---|
END STOP 0 | PH4 | 228 | DIR 6 | PE14 | 142 | USB-PWR-EN-0 | PH0 | 224 |
END STOP 1 | PH5 | 229 | DIR 7 | PE15 | 143 | USB-PWR-EN-1 | PH1 | 225 |
END STOP 2 | PH6 | 230 | STEP DIAG 0 | PE0 | 128 | USB-PWR-EN-2 | PH2 | 226 |
END STOP 3 | PH7 | 231 | STEP DIAG 1 | PE1 | 129 | USB-PWR-EN-3 | PH3 | 227 |
END STOP 4 | PH8 | 232 | STEP DIAG 2 | PE2 | 130 | GAIN-ENABLE-T0 | PD4 | 100 |
END STOP 5 | PH9 | 233 | STEP DIAG 3 | PE3 | 131 | GAIN-ENABLE-T1 | PH11 | 235 |
STEP 0 | PL4 | 4 | STEP DIAG 4 | PE4 | 132 | GAIN ENABLE T2 | PE17 | 145 |
STEP 1 | PL5 | 5 | STEP DIAG 5 | PE5 | 133 | GAIN ENABLE T3 | PB2 | 34 |
STEP 2 | PL6 | 6 | STEP DIAG 6 | PE6 | 134 | PU-ENABLE-T0 | PG10 | 202 |
STEP 3 | PL7 | 7 | STEP DIAG 7 | PE7 | 135 | PU-ENABLE-T1 | PG11 | 203 |
STEP 4 | PL8 | 8 | OC-ALERT | PF6 | 166 | PU ENABLE T2 | PG12 | 204 |
STEP 5 | PL9 | 9 | OC-RESET | PF4 | 164 | PU ENABLE T3 | PG13 | 205 |
STEP 6 | PL10 | 10 | EN-HP | PF5 | 165 | OFFSET-T0 | PG0 | 192 |
STEP 7 | PL11 | 11 | UC-INT-1 | PG3 | 195 | OFFSET-T1 | PG1 | 193 |
DIR 0 | PE8 | 136 | UC-NRST | PG4 | 196 | OFFSET-T2 | PG3 | 194 |
DIR 1 | PE9 | 137 | UC-BOOT | PG5 | 197 | OFFSET-T3 | PG8 | 200 |
DIR 2 | PE10 | 138 | ES-EN-12V | PF0 | 160 | STEPPER UART 2 TX | PB0 | 32 |
DIR 3 | PE11 | 139 | EN-HDMI-PWR | PG9 | 201 | STEPPER UART 2 RX | PB1 | 33 |
DIR 4 | PE12 | 140 | EN-THERMISTORS | PF1 | 161 | STEPPER UART 3 TX | PD0 | 96 |
DIR 5 | PE13 | 141 | EN-ENDSTOPS | PF2 | 162 | STEPPER UART 3 RX | PD1 | 97 |
STM32F031
The STM32 is a Cortex M0 powered micro controller handling analog inputs and PWM outputs. It does not control any hard real time aspects of the print, that is handled by the AR100 core realized as a separate core in the A64 SoC.
Name | Bank and pin | Number | Name | Bank and pin | Number | Name | Bank and pin | Number |
---|---|---|---|---|---|---|---|---|
THERMISTOR 0 | PA0 | 6 | HEATER E0 | PA8 | 18 | FAN 0 | PB0 | 14 |
THERMISTOR 1 | PA1 | 7 | HEATER E1 | PA9 | 19 | FAN 1 | PB1 | 15 |
THERMISTOR 2 | PA2 | 8 | HEATER E2 | PA10 | 20 | ES1-PWM-OUT | PB3 | 26 |
THERMISTOR 3 | PA3 | 9 | HEATER BED | PA11 | 21 | FAN 3 | PB4 | 27 |
BOARD VOLTAGE | PA4 | 10 | USER LED | PA12 | 22 | FAN 2 | PB5 | 28 |
BOARD CURRENT | PA5 | 11 | PWM-ES2-OUT | PB6 | 29 | |||
BOARD TEMPERATURE | PA6 | 12 | EXT 1 | PB7 | 30 | |||
COLD JUNCTION | PA7 | 13 | EXT 2 | PB8 | 32 |
DBG header
This header is used for interacting with u-boot and getting early debug messages from the Linux kernel
Pin | Function |
---|---|
1 | UART RX |
2 | UART TX |
3 | NC |
4 | GND |
MCU header
This header is used for connecting additional MCU peripherals.
Pin | Function | Alt |
---|---|---|
1 | PB7 | I2C1_SDA |
2 | PB8 | I2C1_SCL |
3 | 3.3V | |
4 | GND |
LEDs
There are 15 white LEDs on the board. Here is what they mean
Name | Location | Meaning |
---|---|---|
D2 | By PMIC | Board powered |
D3 | By heater BED | BED output on |
D4 | By fan 0 | Fan 0 is on |
D5 | By fan 1 | Fan 1 is on |
D6 | By heater H2 | Heater H2 is on |
D7 | By fan 2 | Fan 2 is on |
D8 | By heater H0 | Heater H0 is on |
D9 | By fan 3 | Fan 3 is on |
D10 | By heater H1 | Heater H1 is on |
D12 | By input connector | High voltage domain is on |
D15 | By eMMC chip | eMMC activity |
D17 | By HDMI connector | USB activitiy |
D18 | By the USB C connector | Linux Heartbeat |
D19 | By the A64 SoC | CPU activity |
D20 | By the STM32 | Klipper running on STM32 |
Buttons
There are 3 push buttons on the board.
Name | Meaning |
---|---|
FEL | Enter FEL-mode of the A64 |
BOOT | Boots or shuts down the board |
RESET | Hard reset of the CPU |
Current limits
Name | Limit |
---|---|
5V-ES | 1 A |
USB host each | 1 A |
Thermistors | 1 A |
MCU connector | 0.5 A |
Wiring
Below is a wiring diagram meant to aid in connecting motors, fans, extruders and hot ends to the control board. On the board, there is a small + sign next to output connectors where polarity is important. If passive heating elements are used, polarity is not important, but if those outputs are to be used with SSRs or relays, polarity must be observed.
Network connection
Recore is designed to be controlled through a browser on a computer, so the board must be connected to the local LAN or wifi network. Connect an ethernet cable between the board and a switch. The ping utility can be used to ensure that the board is discovered on the network.
LAN setup
Recore with Refactor is running avahi and should announce itself on the network once a connection has been established. On a Linux based host computer, it is possible to search for a booted device using the following command:
ping recore.local
If the device is present, an SSH connection can be established:
ssh root@recore.local
Furthermore, a web interface running OctoPrint can be found using a browser:
Wifi setup
Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the uSB dongle has been connected, and the board has been booted, access to the terminal command line can be given through a host computer. The board should appear as a TTY ACM device. On a Linux based host computer, the terminal program `screen` can be used to get access. From the host computer
screen /dev/ttyACM0 115200
If the host computer is running Windows, Putty can be used to get access.
Once a connection has been established, the wifi network can be set up using the command nmtui.
nmtui
Follow the instructions on screen to edit and activate the wifi connection.
Note
If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered.
Mating Connectors
The power connectors on the board are available either in the web shop as part of a connector pack or directly from Digi-key etc.
Four pin male: TBP01P1-508-04BE [| Digi-key]
Two pin male: TBP01P1-508-02BE [| Digi-key]
Configuration
There are no jumpers on Recore and no hard fuses. Everything is software configurable and resettable from software. This gives great power and flexibility without requiring physical access to the board once it has been installed. But with great power comes great responsibility. It is possible to break things if care is not taken during setup. There is one setting in particular that is worth mentioning: ES0 can have either +5V or +12V on the power pin. This is in order to allow a standard industrial inductive sensor to be used on that end stop. If a 5V only peripheral is connected, that could damage the connected peripheral.
The default config file for Recore A6 can be found in the repository: generic-recore.cfg
TMC2209
The 6 stepper drivers on Recore are of type TMC2209 from Trinamic. Each stepper has a configuration interface with a bidirectional UART port that is connected to a peripheral UART on the A64. The peripheral is not in use, but instead the GPIO bit-banging functionality of Klipper is used to communicate with the stepper drivers.
Here is a table with pins and addresses for the steppers
Stepper driver config | ||
---|---|---|
Name | Pins | Address |
S0 | PB0/PB1 | 0 |
S1 | PB0/PB1 | 1 |
S2 | PB0/PB1 | 2 |
S3 | PB0/PB1 | 3 |
S4 | PD0/PD1 | 0 |
S5 | PD0/PD1 | 1 |
S6 | PD0/PD1 | 2 |
S7 | PD0/PD1 | 3 |
Temperature inputs
4 different temperature devices can be connected to the 4 analog inputs on Recore. Thermistor, Thermocouple, PT100 with INA826 and PT1000 without the use of a pre-amplifier.
Thermistor
Make sure the pull-up is enabled and the op-amp gain is set to 1.
Thermocouple
Make sure the pull-up is disabled and the op-amp gain is set to 100.
PT100 with INA826
In order to use a PT100 sensor, an external amplifier board must be used. There is an example configuration for Klipper that uses this. The ADC reference voltage is 5.0 by default, but for Recore it is 3.3 V. Here is an example:
[Extruder] ... sensor_type: PT100 INA826 adc_voltage: 3.27
The pull-up must also be disabled.
PT1000
Make sure the pull-up is enabled and the gain is set to 1. In the latest version, the sensor must be prefixed with RECORE.
[Extruder] ... sensor_type: RECORE PT1000 adc_voltage: 3.27 pullup_voltage: 3.3 offset_voltage: 3.2
Connecting other sensors
The board has been designed to work with a range of 3rd party sensors for automating the print.
BLtouch
When connected per wiring diagram above, setting up BLtouch can be done by adding the following section to printer.cfg.
[bltouch] sensor_pin: ^ar100:PH6 control_pin: PH5 speed: 7 pin_move_time: 0.675 sample_retract_dist: 10 pin_up_reports_not_triggered: True pin_up_touch_mode_reports_triggered: True #Please change offsets below for your specific setup (these values are for EVA2.3.x BLtouch mount) z_offset: 2.22 x_offset: -28 y_offset: -13
Inductive Sensor
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin.
ADXL345
Note: This connection diagram is outdated. A working connection uses 3.3V from the MCU header, STEP and DIR from S6 and S7. Updated connection diagram coming soon.
A popular accelerometer sensor for doing input shaping with Klipper is the ADXL345. This can be connected to the connectors S6/S7. There is no hardware SPI interface available, but a software implementation in Klipper exists. Note: Only experimental support has been tested for this. https://learn.adafruit.com/adxl345-digital-accelerometer
Config:
[adxl345] cs_pin: ar100:PL11 spi_software_sclk_pin: ar100:PL10 spi_software_mosi_pin: ar100:PE15 spi_software_miso_pin: ar100:PE14 [resonance_tester] accel_chip: adxl345 probe_points: 100, 100, 20 # an example
RC Servo
Endstop 1 and 2 can be used as PWM outputs with 5V levels. Rev A6 is the first board with support for this. More testing and configuration documentation is needed.
Software for Recore
Recore comes with the Linux distro Refactor (Armbian) pre-installed on the eMMC. For more instructions about software for Recore, see the Refactor wiki page: Refactor#Recore
AR100
Please see: AR100
Manual control and testing
All functions on Recore are meant to be controlled from a graphical user interface such as OctoPrint, Fluid, Mainsail etc. This in turn in controlled by Klipper. Sometimes it can be beneficial to get low level access to certain functions and test things directly on the command line. This section is meant to give an overview of what capabilites are available from the command line (SSH/terminal).
Power domain overview
Power domains
There are 9 power domains around the board controlling voltage on different pins:
- Input power controls power to 4 high power outputs, the 4 fans and the 6 stepper drivers. This input has current monitoring, fast acting over current protection, voltage monitoring, temperature monitoring and reverse polarity protection.
- Thermo couple power Controls +5V/1A output to the ADCs. This can be used for turning on power to the analog pins.
- End stop power Controls +5V/1A output on the six endstops. Ganged. ES5 can be switched to have 12V output. The 12V output has a
100mA internal current limit.
- 4 USB host power domains Controls 5V/1A current output to the usb host connectors. These are turned on by u-boot.
- HDMI 5V output Controls the 5V/1A HDMI output. Turned on by u-boot.
Input stage
Reset over current protection and set it in "one-shot" mode.
gpioset 1 164=0 gpioset 1 164=1
The over current protection can also be set in "transparent" mode, where the current alarm will be reset automatically. Note that this is a bad idea for general operation, only use for testing.
gpioset 1 164=0
Enable 24V input
gpioset 1 165=0
End stop 5V /12V
End stop 0 to 4 has a programmable +5V output voltage. End stop 5 has +5V or +12V selectable.
To enable +5V on ES 0...4
gpioset 1 162=1
To disable again
gpioset 1 162=0
To switch to 12V output on ES5
gpioset 1 160=1
To disable again
gpioset 1 160=0
End stops values
To see what value the end stops have
gpioget 1 228 # ES 5 gpioget 1 229 gpioget 1 230 gpioget 1 231 gpioget 1 232 gpioget 1 233 # ES 0
TMC2209
In window/shell 1:
stty -F /dev/ttyS2 raw -echoe -echo xxd -c 4 /dev/ttyS2
In window/shell 2:
echo -n -e '\x5\x0\x6\x6F' > /dev/ttyS2
The return should be along the lines of
00000000: 0500 066f ...o 00000004: 05ff 0620 ... 00000008: 0001 4058 ..@X
To check that no errors are reported by the steppers write this on the command line. If a "1" shows up, that is an indication that the motor is reporting an error.
gpioget 1 128 gpioget 1 129 gpioget 1 130 gpioget 1 131 gpioget 1 132 gpioget 1 133
STM32F031
There is a small firmware to test all functionality that is controlled by the STM32F031 chip on the board. Once uploaded to the board using the flash script, the firmware will turn on all LEDs it controls and send back ADC readings.
To flash this firmware to the STM32:
gpioset 1 197=1 gpioset 1 196=0 stm32flash -i -196,196 -w Sumato-f031.bin -v -g 0x00 /dev/ttyS1 gpioset 1 197=0 stm32flash -i -196,196 /dev/ttyS1
To see the ADC readings:
stty -F /dev/ttyS3 38400 raw cat /dev/ttyS3
You should see something like
ADC T0: 0 ADC T1: 0 ADC T2: 0 ADC T3: 0 ADC U: 2338 ADC I: 0 ADC TB: 3417
The following one-liners assumes gawk is installed.
Reading Current
There is board current reading implemented in OctoPrint. The current shunt resistor is 1 mOhm, the amplifier is 20 times, the vref is 3.3V, so we get: (adc_val/4096*3.3)*1000/20 = (adc_val/4096)*165
If the testing firmware is installed on the STM32, you can convert the current (as in amps) reading to something useful like this:
cat /dev/ttyS4 | awk '/I:/ { printf "scale=4; (%i/4096)*165\n", $3; fflush(); }' | bc -l
Current limit programming
The current limit must be set in the device tree by programming the voltage on dldo2. dldo2 can have values from 0.7 V to 3.4 V. Setting the voltage level to 3.4 V effectively disables the fast acting current limit. Setting it to the lowest value gives an over current limit of 35 A.
Reading Board Temperature
To see the temperature readings, try this :
export beta=4327 cat /dev/ttyS1 | awk '/TB:/ { printf "scale=4; 4327/l( (4700/((3.3/(3.3*%i/4096))-1.0))/0.05306820342563400000) -273.15\n", $3; fflush(); }' | bc -l | awk '{print strftime("%k:%M:%S"), $0; fflush();}'
Reading Input Voltage
To see voltage on the input, it can be converted like this:
exec 4</dev/ttyS4 5>/dev/ttyS4 echo -n ";A4;" >&5 read -t1 reply <&4 echo $reply | awk '{ printf "scale=4; (%i/4096)*3.3*((100+10)/10)\n", $4; fflush(); }' | bc -l
Thermistor inputs
To enable pull-up on input for using thermistors for temperature measurements:
gpioset 1 102=1 gpioset 1 120=1 gpioset 1 160=1 gpioset 1 161=1
Setting Op-amp gain to 1:
gpioget 1 100 gpioget 1 235 gpioget 1 145 gpioget 1 34
In the device tree file, the gpio/ldos must be set to gpio input:
&gpio0_ldo { function = "gpio_in"; };
Thermocouple input
Either a thermocouple or a thermistor can be used as input on the T0-T3 inputs.
Bias
The thermocouple is set up to have a Bias of 0.7V/100 on the input which enables negative values (lower than the board temperature) as input to the ADCs. With the input short circuited, the bias can be recorded. Typical values are 750 This needs to be subtracted from the result.
Cold junction compensation
Another important aspect is cold junction compensation. There is a thermistor connected on the board close to the thermocouple inputs which can be used to measure the temperature close to the input junction. This temperature must be added in software.
The connected thermistor is a TDK NTCG104EF104FT1X The connected Thermocouple has a (25/100) beta value of 4327.
In order to use the inputs for thermocouple, the pull-up-down resistors must be set to pull-down:
gpioset 1 102=0 gpioset 1 120=0 gpioset 1 160=0 gpioset 1 161=0
Also, the op-amp needs a gain of 100:
gpioset 1 100=0 gpioset 1 235=0 gpioset 1 145=0 gpioset 1 34=0
Finally, the input bias needs to be enabled. The following LDOs needs to be enabled:
reg_ldo_io0 reg_ldo_io1 reg_dldo3 reg_dldo4
Performance
Start-up time
With a maximum clock for MMC2 of 200 MHz, here is the start-up time:
root@recore-3:~# systemd-analyze Startup finished in 5.128s (kernel) + 11.567s (userspace) = 16.695s graphical.target reached after 11.421s in userspace
Measured voltages
The final stages of Recore manufacturing consists of testing, calibration and flashing of firmware. The calibration stage measures a number of voltages on the board and classifies the input stages gain and offset. Instruments used:
- HP 3458A, 8.5 digit multimeter
- HP 3245A, Universal Source
Microcontroller voltages
VDDA uC: 3.312 V
VDD uC: 3.312 V
Voltage from the PMIC supplied as bias:
0.706 V
5V Buck converter ripple and noise
The 5V step down/Buck converter is a AOZ2151PQI-10. It can provide 4A and has an input voltage range of 12-28V. It is hard wired to be in PWM mode. PFM mode results in a loud whine.
Below is a screenshot of the ripple and noise across the the 5V rail with a normal kernel running.
Input stage
An experiment with a constant current load drawing 20 A from the bed connector with and without a 92 mm fan on top of the board for forced convection. The temperature measured was with the on board thermistor. Using a thermal camera, the temperature displayed matches well with the temperature reported by the camera. However, in Rev A2, this is not the hottest point on the board. The MOSFET controlling the bed seems to consistently get the highest temperature. The reason for this is probably due to a 3.3 V VGS.
Inrush current
During turn on of the high power stage, there will be an inrush current to charge up the bank of capacitors present on the board. If no loads are turned on, the inrush current reaches 31 A at peak. This is important to consider when setting the current limit with device tree.
Todo: These measurements are from rev A3. Redo measurements with Rev A6.
Temperature low pass filter
A Low pass filter has been added on each of the temperature input channels. The cut-off frequency is below what my oscilloscope can handle, but a plot in the time domain verifies a 7 Hz -3dB point.
ADC offset and gain measurements
To measure the ADC offset error, measure the voltage on the uC input pin and record when the transition from 0 to 1 occurs. It should occur at 0.5 LSB = 3.3/4096/2 = 0.4028 mV. Offset: 55.35 mV - 0.4028 mV = 54.95 mV
FAQ
Where can I ask for help?
- You can join the Discord: https://discord.gg/bCnp9H5SB5
What comes in the box with the Recore? Specifically, terminal connectors for power, etc?
- It's only the board, no cables or connectors. There is a bag of connectors available to purchase in the web shop.
Do I need access to those 3 buttons on the board?
- It is not necessary to have access to the three buttons for normal use.
What's the maximum current draw for heat bed?
- This has been tested up to 20 A
Why are there unused and unbroken out pins on the STM32 MCU?
- The pins that are needed from the MCU have been routed out plus two pins available on an external header.
I have a gadget that I want to connect with SPI. Is that possible?
- There are 6 pins available from the main SoC that can be used for various things.
There is no hardware SPI, but you can make a program that uses soft SPI. There is no dedicated I2C, but perhaps that would be a nice addition.
What exactly is the role of the AR100 device?
- The AR100 handles the fast realtime aspects, mainly the stepper motors
What voltage fans are supported?
- The same voltage as the input voltage, either 12 V or 24 V. You can experiment with PWM for running lower voltage fans on 24 V input.
Where is the board layout file?
- The Layout file will not be available. It is an "open schematic" board, not open source hardware
Where are you shipping from?
- Early prototypes (Rev A4) will be shipping from Norway. Eventually shipping will be from a warehouse in the US
Known hardware issues for rev A6
T1 offset is not consistent
- On Rev A6, during calibration it has been discovered that the offset on T1 is often varying around the predetermined set point of 0.33 V. It's not clear what is the cause of this. It could be a software issue, a measuring issue or something else. Regardless it is best to not use input T1 for thermocouple measurements. It can be used as a thermistor input.