Difference between revisions of "Recore A7"
(→Known hardware issues for rev A7) |
(→Neopixels) |
||
(88 intermediate revisions by 2 users not shown) | |||
Line 11: | Line 11: | ||
* 4 USB High Speed ports | * 4 USB High Speed ports | ||
* 4 thermistor/thermocouple inputs (software selectable) | * 4 thermistor/thermocouple inputs (software selectable) | ||
− | * Comes with Debian Linux with Klipper and OctoPrint installed | + | * Comes with Debian Linux with Klipper and OctoPrint or MainSail installed |
− | This document is for Recore Revision | + | This document is for Recore Revision A7. For previous hardware revisions, please see: |
* [[Recore_A6]] | * [[Recore_A6]] | ||
* [[Recore_A5]] | * [[Recore_A5]] | ||
Line 21: | Line 21: | ||
==Availability== | ==Availability== | ||
− | Recore A7 can be purchased from the | + | Recore A7 can be purchased from the iagent web shop [https://www.iagent.no/product/recore/ https://www.iagent.no/product/recore/] |
+ | |||
+ | Or at Fabreeko [https://www.fabreeko.com/products/recore-a7-by-iagent https://www.fabreeko.com/products/recore-a7-by-iagent] | ||
+ | |||
==Schematics== | ==Schematics== | ||
− | Recore is "open schematic", it is available here: [https://github.com/intelligent-agent/Recore/ | + | Recore is "open schematic", it is available here: [https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A7.pdf https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A7.pdf] |
+ | ==3D model== | ||
+ | A STEP file of the PCB with components is available here: [https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A7.step https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A7.step] | ||
=Pinout= | =Pinout= | ||
<div class="res-img"> | <div class="res-img"> | ||
− | [[File: | + | [[File:Recore A7 pinout.png]] |
</div> | </div> | ||
+ | |||
==A64== | ==A64== | ||
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) 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 Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) 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. | ||
Line 35: | Line 41: | ||
{| class="wikitable" style="width: 100%; | {| class="wikitable" style="width: 100%; | ||
− | !Name | + | ! Name !! Bank and pin !!style="border-right:solid 2px;"| Number !! Name !! Bank and pin !!style="border-right:solid 2px;"| Number !! Name !! Bank and pin !! Number |
− | !Bank and pin | + | |- |
− | !style="border-right:solid 2px;"| Number | + | | STEP 0 || PL4 ||style="border-right:solid 2px;"| 4 || END STOP 0 || PH4 ||style="border-right:solid 2px;"|228 || OC-ALERT || PF6 || 166 |
− | !Name | + | |- |
− | !Bank and pin | + | | STEP 1 || PL5 ||style="border-right:solid 2px;"| 5 || END STOP 1 || PH5 ||style="border-right:solid 2px;"| 229 || OC-RESET || PF4 || 164 |
− | !style="border-right:solid 2px;"| Number | + | |- |
− | !Name | + | | STEP 2 || PL6 ||style="border-right:solid 2px;"| 6 || END STOP 2 || PH6 ||style="border-right:solid 2px;"| 230 || EN-HP || PF5 || 165 |
− | !Bank and pin | + | |- |
− | !Number | + | | STEP 3 || PL7 ||style="border-right:solid 2px;"| 7 || END STOP 3 || PH7 ||style="border-right:solid 2px;"| 231 || UC-INT-1 || PG3 || 195 |
|- | |- | ||
− | | | + | | STEP 4 || PL8 ||style="border-right:solid 2px;"| 8 || END STOP 4 || PH8 ||style="border-right:solid 2px;"| 232 || UC-NRST || PG4 || 196 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP 5 || PL9 ||style="border-right:solid 2px;"| 9 || END STOP 5 || PH9 ||style="border-right:solid 2px;"| 233 || UC-BOOT || PG5 || 197 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP 6 || PL10 ||style="border-right:solid 2px;"| 10 || GAIN-ENABLE-T0 || PD4 ||style="border-right:solid 2px;"| 100 || ES-EN-12V || PF0 || 160 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP 7 || PL11 ||style="border-right:solid 2px;"| 11 || GAIN-ENABLE-T1 || PH11 ||style="border-right:solid 2px;"| 235 || EN-THERMISTORS || PF1 || 161 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 0 || PE8 ||style="border-right:solid 2px;"| 136 || GAIN ENABLE T2 || PE17 ||style="border-right:solid 2px;"| 145 || EN-ENDSTOPS || PF2 || 162 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 1 || PE9 ||style="border-right:solid 2px;"| 137 || GAIN ENABLE T3 || PB2 ||style="border-right:solid 2px;"| 34 || USR || PF3 || 163 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 2 || PE10 ||style="border-right:solid 2px;"| 138 || PU-ENABLE-T0 || PG10 ||style="border-right:solid 2px;"| 202 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 3 || PE11 ||style="border-right:solid 2px;"| 139 || PU-ENABLE-T1 || PG11 ||style="border-right:solid 2px;"| 203 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 4 || PE12 ||style="border-right:solid 2px;"| 140 || PU ENABLE T2 || PG12 ||style="border-right:solid 2px;"| 204 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 5 || PE13 ||style="border-right:solid 2px;"| 141 || PU ENABLE T3 || PG13 ||style="border-right:solid 2px;"| 205 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 6 || PE14 ||style="border-right:solid 2px;"| 142 || OFFSET-T0 || PG0 ||style="border-right:solid 2px;"| 192 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | DIR 7 || PE15 ||style="border-right:solid 2px;"| 143 || OFFSET-T1 || PG1 ||style="border-right:solid 2px;"| 193 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | |STEP | + | | STEP DIAG 0 || PE0 ||style="border-right:solid 2px;"| 128 || OFFSET-T2 || PG3 ||style="border-right:solid 2px;"| 194 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | |STEP | + | | STEP DIAG 1 || PE1 ||style="border-right:solid 2px;"| 129 || OFFSET-T3 || PG8 ||style="border-right:solid 2px;"| 200 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 2 || PE2 ||style="border-right:solid 2px;"| 130 || STEPPER UART 0-3 || PE16 ||style="border-right:solid 2px;"| 144 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 3 || PE3 ||style="border-right:solid 2px;"| 131 || STEPPER UART 4-5 || PD24 ||style="border-right:solid 2px;"| 120 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 4 || PE4 ||style="border-right:solid 2px;"| 132 || STEPPER UART 6 || PD2 ||style="border-right:solid 2px;"| 98 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 5 || PE5 ||style="border-right:solid 2px;"| 133 || STEPPER UART 7 || PD3 ||style="border-right:solid 2px;"| 99 || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 6 || PD0 ||style="border-right:solid 2px;"| 96 || || ||style="border-right:solid 2px;"| || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | STEP DIAG 7 || PD1 ||style="border-right:solid 2px;"| 97 || || ||style="border-right:solid 2px;"| || || || |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|} | |} | ||
==STM32F031== | ==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. | 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. | ||
+ | |||
{| class="wikitable" style="width: 100%; | {| class="wikitable" style="width: 100%; | ||
− | !Name | + | ! Name !! Bank and pin !!style="border-right:solid 2px;"| Number !! Name !! Bank and pin !!style="border-right:solid 2px;"| Number !! Name !! Bank and pin !! Number |
− | !Bank and pin | ||
− | !style="border-right:solid 2px;"| Number | ||
− | !Name | ||
− | !Bank and pin | ||
− | !style="border-right:solid 2px;"| Number | ||
− | !Name | ||
− | !Bank and pin | ||
− | !Number | ||
|- | |- | ||
− | | | + | | HEATER E0 || PA8 ||style="border-right:solid 2px;"| 18 || THERMISTOR 0 || PA0 ||style="border-right:solid 2px;"| 6 || ES1-PWM-OUT || PB3 || 26 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | HEATER E1 || PA9 ||style="border-right:solid 2px;"| 19 || THERMISTOR 1 || PA1 ||style="border-right:solid 2px;"| 7 || PWM-ES2-OUT || PB6 || 29 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | HEATER E2 || PA10 ||style="border-right:solid 2px;"| 20 || THERMISTOR 2 || PA2 ||style="border-right:solid 2px;"| 8 || EXT 1 || PB7 || 30 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | |||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | HEATER BED || PA11 ||style="border-right:solid 2px;"| 21 || THERMISTOR 3 || PA3 ||style="border-right:solid 2px;"| 9 || EXT 2 || PB8 || 32 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | FAN 0 || PF0 ||style="border-right:solid 2px;"| 2 || BOARD VOLTAGE || PA4 ||style="border-right:solid 2px;"| 10 || EXT 3 || PA13 || 23 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | FAN 1 || PB1 ||style="border-right:solid 2px;"| 15 || BOARD CURRENT || PA5 ||style="border-right:solid 2px;"| 11 || EXT 4 || PB2 || 16 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | FAN 3 || PB4 ||style="border-right:solid 2px;"| 27 || BOARD TEMPERATURE || PA6 ||style="border-right:solid 2px;"| 12 || USER LED || PA12 || 22 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|- | |- | ||
− | | | + | | FAN 2 || PB5 ||style="border-right:solid 2px;"| 28 || COLD JUNCTION || PA7 ||style="border-right:solid 2px;"| 13 || FAN_CURRENT || PB0 || 14 |
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | |style="border-right:solid 2px;"| | ||
− | | | ||
− | | | ||
− | | | ||
|} | |} | ||
==DBG header== | ==DBG header== | ||
− | + | The debug header has UART 0 layed out on some of the pins and is used for interacting with u-boot and getting early debug messages from the Linux kernel. It also has a the option to connect a "boot" button so the board can be safely started and shut down from the 3D-printers front panel. The USR pin can be used to light up a an LED or some other custom function. | |
{| class="wikitable" | {| class="wikitable" | ||
!Pin | !Pin | ||
Line 354: | Line 128: | ||
|- | |- | ||
|3 | |3 | ||
− | | | + | |3.3V |
|- | |- | ||
|4 | |4 | ||
|GND | |GND | ||
+ | |- | ||
+ | |5 | ||
+ | |BOOT | ||
+ | |- | ||
+ | |6 | ||
+ | |USR | ||
|- | |- | ||
|} | |} | ||
+ | |||
+ | It's possible to wire up a boot button so it is accessible from the outside of the printer. This would be the preferred way to start and stop the board. It works the same way as a boot button on any moderns computer does. Press once to shut down a running board, and press and hold for two seconds in order to boot a board. The button should be wired up between the "NO" and "COM" on the button. The light in the button can be connected between +3.3V and the "USR" on the header. | ||
+ | <div class="res-img"> | ||
+ | [[File:DBG header.png]] | ||
+ | </div> | ||
==MCU header== | ==MCU header== | ||
− | + | The MCU header is used for connecting external peripherals to the STM32F031 micro controller on the board. There are 4 pins in total available to use. In addition, there is a ground pin and a 3.3 V pin available. | |
{| class="wikitable" | {| class="wikitable" | ||
!Pin | !Pin | ||
Line 382: | Line 167: | ||
|4 | |4 | ||
|GND | |GND | ||
− | | | + | |- |
+ | |5 | ||
+ | |PA13 | ||
+ | |EXTI 13 | ||
+ | |- | ||
+ | |6 | ||
+ | |PB2 | ||
+ | |EXTI 2 | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | ==SPI on S6 and S7 headers== | ||
+ | <div class="res-img"> | ||
+ | [[File:S6 S7 headers.png]] | ||
+ | </div> | ||
+ | |||
+ | {| class="wikitable" | ||
+ | !Pin | ||
+ | !Function | ||
+ | !Alt | ||
+ | |- | ||
+ | |S6-3 | ||
+ | |PD0 | ||
+ | |SPI1_CS | ||
+ | |- | ||
+ | |S7-3 | ||
+ | |PD1 | ||
+ | |SPI1_CLK | ||
+ | |- | ||
+ | |S6-5 | ||
+ | |PD2 | ||
+ | |SPI1_MOSI | ||
+ | |- | ||
+ | |S7-5 | ||
+ | |PD3 | ||
+ | |SPI1_MISO | ||
|- | |- | ||
|} | |} | ||
Line 438: | Line 258: | ||
|- | |- | ||
|D17 | |D17 | ||
− | |By | + | |By USB hub chip |
|USB activitiy | |USB activitiy | ||
|- | |- | ||
Line 473: | Line 293: | ||
==Current limits== | ==Current limits== | ||
+ | <div class="alert alert-warning"> | ||
+ | ===='''Note'''==== | ||
+ | The amount of current that can be drawn on the two USB host connectors closest to the HDMI connector is not according to spec. The combined current draw for USB 1 and 2 should not exceed 0.4 A. | ||
+ | </div> | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 478: | Line 302: | ||
!Limit | !Limit | ||
|- | |- | ||
− | |5V-ES | + | |5V-ES (endstops) |
|0.75 A | |0.75 A | ||
|- | |- | ||
− | |USB host each | + | |USB host 3 and 4 each (5VP) |
− | |1.0 A | + | |1.1 A |
+ | |- | ||
+ | |USB host 1 and 2 each (VSP) | ||
+ | |0.75 A | ||
|- | |- | ||
|Thermistors | |Thermistors | ||
Line 501: | Line 328: | ||
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. | 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. | ||
<div class="res-img"> | <div class="res-img"> | ||
− | [[File:Recore-wire-diagram- | + | [[File:Recore-wire-diagram-3.png]] |
</div> | </div> | ||
Line 514: | Line 341: | ||
If the device is present, an SSH connection can be established: | If the device is present, an SSH connection can be established: | ||
<pre> | <pre> | ||
− | ssh | + | ssh debian@recore.local |
</pre> | </pre> | ||
− | Furthermore, a web interface running OctoPrint can be found using a browser:<br> | + | Furthermore, a web interface running OctoPrint/Mainsail/Fluidd can be found using a browser:<br> |
http://recore.local | http://recore.local | ||
+ | |||
+ | For more information on this, look at the Rebuild or Refactor wiki pages. | ||
==Wifi setup== | ==Wifi setup== | ||
− | Wifi can be set up by connecting a wifi dongle to one of the USB host ports. Once the | + | 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 `minicom` can be used to get access. From the host computer |
<pre> | <pre> | ||
− | + | minicom -o -D /dev/ttyACM0 115200 | |
</pre> | </pre> | ||
Line 535: | Line 364: | ||
<div class="alert alert-warning"> | <div class="alert alert-warning"> | ||
===='''Note'''==== | ===='''Note'''==== | ||
− | If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered | + | If the board is powered through the USB C connector, only the two USB host ports next to the HDMI port is powered. |
</div> | </div> | ||
Line 550: | Line 379: | ||
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. | 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: [https://github.com/intelligent-agent/klipper/blob/master/config/generic-recore.cfg generic-recore.cfg] | + | The default config file for Recore A6 can be found in the repository: [https://github.com/intelligent-agent/klipper/blob/master/config/generic-recore-a7.cfg generic-recore-a7.cfg] |
===TMC2209=== | ===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 | + | 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 pin on the A64. 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 | Here is a table with pins and addresses for the steppers | ||
Line 564: | Line 393: | ||
|- | |- | ||
|S0 | |S0 | ||
− | | | + | |PE16 |
|0 | |0 | ||
|- | |- | ||
|S1 | |S1 | ||
− | | | + | |PE16 |
|1 | |1 | ||
|- | |- | ||
|S2 | |S2 | ||
− | | | + | |PE16 |
|2 | |2 | ||
|- | |- | ||
|S3 | |S3 | ||
− | | | + | |PE16 |
|3 | |3 | ||
|- | |- | ||
|S4 | |S4 | ||
− | | | + | |PD24 |
|0 | |0 | ||
|- | |- | ||
|S5 | |S5 | ||
− | | | + | |PD24 |
|1 | |1 | ||
|- | |- | ||
|S6 | |S6 | ||
− | | | + | |PD2 |
− | | | + | |0-3 |
|- | |- | ||
|S7 | |S7 | ||
− | | | + | |PD3 |
− | |3 | + | |0-3 |
|- | |- | ||
|} | |} | ||
Line 603: | Line 432: | ||
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. | It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. | ||
These can be connected using the headers S6 and S7. | These can be connected using the headers S6 and S7. | ||
+ | |||
+ | See also [[Restep_A1]] for a convenient alternative external stepper driver. | ||
==Temperature inputs== | ==Temperature inputs== | ||
Line 618: | Line 449: | ||
Make sure the pull-up is disabled and the op-amp gain is set to 100. | Make sure the pull-up is disabled and the op-amp gain is set to 100. | ||
+ | <pre> | ||
+ | [recore] | ||
+ | ... | ||
+ | gain_t0: 100 | ||
+ | pullup_t0: 0 | ||
+ | offset_t0: 1 | ||
+ | |||
+ | [Extruder] | ||
+ | ... | ||
+ | sensor_type: Type K | ||
+ | </pre> | ||
===PT100 with INA826=== | ===PT100 with INA826=== | ||
Line 691: | Line 533: | ||
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. | The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum. | ||
</div> | </div> | ||
+ | See also [[Remove_A1]], a convenient finished accelerometer. | ||
<div class="res-img"> | <div class="res-img"> | ||
Line 721: | Line 564: | ||
spi_bus: spi0c | spi_bus: spi0c | ||
</pre> | </pre> | ||
+ | ==MCP2515== | ||
+ | It's possible to connect a CAN controller like the MCP2515 to Recore. | ||
+ | It's important to keep in mind that the GPIO/SPI pins are 3.3V and not 5V tolerant, so the MCP2515 chip must be run from a 3.3V source, while the TIA1050 chip must be powered with 5V. All headers have pin 1 marked as a square pad, while the others are round. | ||
+ | {| class="wikitable" | ||
+ | !MCP2515 | ||
+ | !Recore | ||
+ | |- | ||
+ | |5V | ||
+ | |ES1-3 | ||
+ | |- | ||
+ | |3.3V | ||
+ | |MCU-3 | ||
+ | |- | ||
+ | |GND | ||
+ | |MCU-4 | ||
+ | |- | ||
+ | |INT | ||
+ | |S6-1 | ||
+ | |- | ||
+ | |SPI1_CS | ||
+ | |S6-3 | ||
+ | |- | ||
+ | |SPI1_CLK | ||
+ | |S6-5 | ||
+ | |- | ||
+ | |SPI1_MOSI | ||
+ | |S7-3 | ||
+ | |- | ||
+ | |SPI1_MISO | ||
+ | |S7-5 | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | == Neopixels == | ||
+ | <div class="res-img"> | ||
+ | [[File:Neopixels wiring A7.png]] | ||
+ | </div> | ||
+ | |||
+ | Use endstop ES1 (PB3) or ES2 (PB6). | ||
+ | |||
+ | <div class="alert alert-warning"> | ||
+ | ===='''Note'''==== | ||
+ | Make sure to use a 100 ohm pull-up from pin S (pin 2) to pin 5V (pin 3) | ||
+ | </div> | ||
+ | |||
+ | |||
+ | |||
+ | <pre> | ||
+ | [neopixel my_neopixel] | ||
+ | pin: PB3 | ||
+ | </pre> | ||
+ | |||
+ | See also [[Relit_A0]] | ||
==RC Servo== | ==RC Servo== | ||
Line 734: | Line 630: | ||
</div> | </div> | ||
Any of the 6 end stops can be used for connecting a filament runout sensor | Any of the 6 end stops can be used for connecting a filament runout sensor | ||
+ | |||
+ | === Enable host mode on the USB-C connector === | ||
+ | <pre> | ||
+ | sudo mount -o remount,rw /boot | ||
+ | sudo armbian-add-overlay /boot/overlay-user/sun50i-a64-usb-host.dts | ||
+ | sudo mount -o remount,ro /boot | ||
+ | </pre> | ||
=Software for Recore= | =Software for Recore= | ||
Recore comes with the Linux distro Refactor (Armbian) pre-installed on the eMMC. | 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: | For more instructions about software for Recore, see the Refactor wiki page: | ||
− | [[ Refactor | + | [[ Refactor ]] |
=== AR100 === | === AR100 === | ||
Line 747: | Line 650: | ||
=Performance= | =Performance= | ||
− | ==Start-up time== | + | ===Start-up time=== |
With a maximum clock for MMC2 of 200 MHz, here is the start-up time: | With a maximum clock for MMC2 of 200 MHz, here is the start-up time: | ||
<pre> | <pre> | ||
− | root@recore | + | root@recore:~# systemd-analyze |
− | Startup finished in | + | Startup finished in 3.011s (kernel) + 12.292s (userspace) = 15.303s |
− | graphical.target reached after 11. | + | graphical.target reached after 11.934s in userspace |
+ | </pre> | ||
+ | ===eMMC read and write speed=== | ||
+ | eMMC write speed: 28.8 MB/s | ||
+ | <pre> | ||
+ | root@recore:~# dd if=/dev/zero of=/mnt/emmc/1GB.bin bs=1M count=1000 | ||
+ | 1000+0 records in | ||
+ | 1000+0 records out | ||
+ | 1048576000 bytes (1.0 GB, 1000 MiB) copied, 36.4307 s, 28.8 MB/s | ||
+ | </pre> | ||
+ | |||
+ | eMMC read speed: 112 MB/s | ||
+ | <pre> | ||
+ | root@recore:~# dd if=/mnt/emmc/1GB.bin of=/dev/null bs=1M count=1000 | ||
+ | 1000+0 records in | ||
+ | 1000+0 records out | ||
+ | 1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.34956 s, 112 MB/s | ||
+ | </pre> | ||
+ | |||
+ | === USB read and write speed (Reflash USB drive)=== | ||
+ | USB write speed: 7.7 MB/s | ||
+ | <pre> | ||
+ | root@recore:~# dd if=/dev/zero of=/mnt/usb/1GB.bin bs=1M count=1000 | ||
+ | 1000+0 records in | ||
+ | 1000+0 records out | ||
+ | 1048576000 bytes (1.0 GB, 1000 MiB) copied, 135.476 s, 7.7 MB/s | ||
+ | </pre> | ||
+ | |||
+ | <pre> | ||
+ | root@recore:~# dd if=/mnt/usb/1GB.bin of=/dev/null bs=1M | ||
+ | 1000+0 records in | ||
+ | 1000+0 records out | ||
+ | 1048576000 bytes (1.0 GB, 1000 MiB) copied, 67.613 s, 15.5 MB/s | ||
</pre> | </pre> | ||
Line 779: | Line 714: | ||
===Input stage=== | ===Input stage=== | ||
− | + | When drawing a constant current of 20 A from the bed connector with and without any 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. The maximum board temperature of 100 degrees C is reached after about 10 minutes with no forced convection. | |
+ | Ambient temperature in the room: 20.1 degrees C. | ||
<div class="res-img"> | <div class="res-img"> | ||
− | [[File: | + | [[File:Input stage temperature no fan.png|A7 Input stage temperature no fan]] |
</div> | </div> | ||
+ | |||
+ | With forced convection (a 92 mm Noctua fan) and a current load of 29 A, the maximum temperature reached after 10 minutes was 87.7 degrees C as measured by the on board thermistor. The thermal camera showed a higher temperature of 98 degrees. | ||
<div class="res-img"> | <div class="res-img"> | ||
− | [[File: | + | [[File:Input stage temperature with fan crop.png|Input stage temperature with fan]] |
</div> | </div> | ||
+ | |||
+ | |||
==== Maximum input voltage ==== | ==== Maximum input voltage ==== | ||
Line 793: | Line 733: | ||
====Inrush current==== | ====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. | 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 | + | If no loads are turned on, the inrush current reaches 28 A at peak, depending on PSU and cables. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A7 when the input is enabled. The PSU in use was a PeakTech 6160 (30V/30A) benchtop switchmode PSU. The cables used were Pomona B-24-0 and B-24-2, 24" 18 AWG banana plug test leads. |
<div class="res-img"> | <div class="res-img"> | ||
Line 799: | Line 739: | ||
</div> | </div> | ||
+ | ====Over current protection==== | ||
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. | There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation. | ||
# The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. | # The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition. | ||
Line 806: | Line 747: | ||
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. | Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on. | ||
<div class="res-img"> | <div class="res-img"> | ||
− | [[File: | + | [[File:A7 over current input turns on.png|center]] |
+ | </div> | ||
+ | |||
+ | Below is a plot of what the current on the input looks like if there is an over current condition after the input has been turned on. | ||
+ | <div class="res-img"> | ||
+ | [[File:A7 over current output turns on.png|center]] | ||
</div> | </div> | ||
Line 840: | Line 786: | ||
:It is not necessary to have access to the three buttons for normal use. | :It is not necessary to have access to the three buttons for normal use. | ||
====What's the maximum current draw for heat bed?==== | ====What's the maximum current draw for heat bed?==== | ||
− | :This has been tested up to | + | :This has been tested up to 30 A with good cooling using a fan and a heat sink. |
− | + | ||
− | |||
====I have a gadget that I want to connect with SPI. Is that possible?==== | ====I have a gadget that I want to connect with SPI. Is that possible?==== | ||
− | : | + | :On Recore A7, there is support for an SPI peripheral. The pins are broken out on header S6/S7. |
====What exactly is the role of the AR100 device?==== | ====What exactly is the role of the AR100 device?==== | ||
Line 857: | Line 802: | ||
= Known hardware issues for rev A7= | = Known hardware issues for rev A7= | ||
− | + | === Neopixels needs a lower value pull-up resistor than the 1K present on the board=== | |
+ | |||
+ | ==List of changes to revision A7 from A6== | ||
+ | # Step down AOZ2151EQI-30, lower dissipation. | ||
+ | # Separate fan over current protection. | ||
+ | # Use one of the electrolytic capacitors as input capacitor. | ||
+ | # Add a 10K pull-down on the USB power lines, so the USB over-current is unambiguous. | ||
+ | # Make op-amp more symmetric in order to improve the amplifier issue from A6. | ||
+ | # Add USR pin to the DBG header | ||
+ | # Add BOOT pin to the DBG header | ||
+ | # Move the USB activity LED close to the USB hub. | ||
+ | # Use CY7C65634 USB hub because GL850G-OHY37 is discontinued | ||
+ | # Change MCU and DBG connectors from 4 to 6 pins. | ||
+ | # Add SPI to S6/S7 | ||
+ | # Add a guard ring on the edge on all layers. | ||
+ | # Use Kelvin connection on mosfets for Op-amps. | ||
+ | # Mitigate inrush current. Consider C214 = 1 nF from G to GND. | ||
+ | # Make better return paths for eth clock traces. | ||
− | + | = Migrating Klipper config from A6 to A7 = | |
{| class="wikitable" | {| class="wikitable" |
Latest revision as of 14:06, 14 May 2024
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 or MainSail installed
This document is for Recore Revision A7. For previous hardware revisions, please see:
Contents
- 1 Availability
- 2 Schematics
- 3 3D model
- 4 Pinout
- 5 Wiring
- 6 Klipper Configuration
- 7 Connecting other sensors
- 8 Software for Recore
- 9 Performance
- 10 FAQ
- 10.1 Where can I ask for help?
- 10.2 What comes in the box with the Recore? Specifically, terminal connectors for power, etc?
- 10.3 Do I need access to those 3 buttons on the board?
- 10.4 What's the maximum current draw for heat bed?
- 10.5 I have a gadget that I want to connect with SPI. Is that possible?
- 10.6 What exactly is the role of the AR100 device?
- 10.7 What voltage fans are supported?
- 10.8 Where is the board layout file?
- 10.9 Where are you shipping from?
- 11 Known hardware issues for rev A7
- 12 Migrating Klipper config from A6 to A7
Availability
Recore A7 can be purchased from the iagent web shop https://www.iagent.no/product/recore/
Or at Fabreeko https://www.fabreeko.com/products/recore-a7-by-iagent
Schematics
Recore is "open schematic", it is available here: https://github.com/intelligent-agent/Recore/blob/master/Schematics/Recore_A7.pdf
3D model
A STEP file of the PCB with components is available here: https://github.com/intelligent-agent/Recore/blob/master/3D-files/Recore_A7.step
Pinout
A64
The Allwinner A64 is a quad core Cortex A53 clocked at 1 GHz. It has an integrated RISC CPU (AR100) 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 |
---|---|---|---|---|---|---|---|---|
STEP 0 | PL4 | 4 | END STOP 0 | PH4 | 228 | OC-ALERT | PF6 | 166 |
STEP 1 | PL5 | 5 | END STOP 1 | PH5 | 229 | OC-RESET | PF4 | 164 |
STEP 2 | PL6 | 6 | END STOP 2 | PH6 | 230 | EN-HP | PF5 | 165 |
STEP 3 | PL7 | 7 | END STOP 3 | PH7 | 231 | UC-INT-1 | PG3 | 195 |
STEP 4 | PL8 | 8 | END STOP 4 | PH8 | 232 | UC-NRST | PG4 | 196 |
STEP 5 | PL9 | 9 | END STOP 5 | PH9 | 233 | UC-BOOT | PG5 | 197 |
STEP 6 | PL10 | 10 | GAIN-ENABLE-T0 | PD4 | 100 | ES-EN-12V | PF0 | 160 |
STEP 7 | PL11 | 11 | GAIN-ENABLE-T1 | PH11 | 235 | EN-THERMISTORS | PF1 | 161 |
DIR 0 | PE8 | 136 | GAIN ENABLE T2 | PE17 | 145 | EN-ENDSTOPS | PF2 | 162 |
DIR 1 | PE9 | 137 | GAIN ENABLE T3 | PB2 | 34 | USR | PF3 | 163 |
DIR 2 | PE10 | 138 | PU-ENABLE-T0 | PG10 | 202 | |||
DIR 3 | PE11 | 139 | PU-ENABLE-T1 | PG11 | 203 | |||
DIR 4 | PE12 | 140 | PU ENABLE T2 | PG12 | 204 | |||
DIR 5 | PE13 | 141 | PU ENABLE T3 | PG13 | 205 | |||
DIR 6 | PE14 | 142 | OFFSET-T0 | PG0 | 192 | |||
DIR 7 | PE15 | 143 | OFFSET-T1 | PG1 | 193 | |||
STEP DIAG 0 | PE0 | 128 | OFFSET-T2 | PG3 | 194 | |||
STEP DIAG 1 | PE1 | 129 | OFFSET-T3 | PG8 | 200 | |||
STEP DIAG 2 | PE2 | 130 | STEPPER UART 0-3 | PE16 | 144 | |||
STEP DIAG 3 | PE3 | 131 | STEPPER UART 4-5 | PD24 | 120 | |||
STEP DIAG 4 | PE4 | 132 | STEPPER UART 6 | PD2 | 98 | |||
STEP DIAG 5 | PE5 | 133 | STEPPER UART 7 | PD3 | 99 | |||
STEP DIAG 6 | PD0 | 96 | ||||||
STEP DIAG 7 | 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 |
---|---|---|---|---|---|---|---|---|
HEATER E0 | PA8 | 18 | THERMISTOR 0 | PA0 | 6 | ES1-PWM-OUT | PB3 | 26 |
HEATER E1 | PA9 | 19 | THERMISTOR 1 | PA1 | 7 | PWM-ES2-OUT | PB6 | 29 |
HEATER E2 | PA10 | 20 | THERMISTOR 2 | PA2 | 8 | EXT 1 | PB7 | 30 |
HEATER BED | PA11 | 21 | THERMISTOR 3 | PA3 | 9 | EXT 2 | PB8 | 32 |
FAN 0 | PF0 | 2 | BOARD VOLTAGE | PA4 | 10 | EXT 3 | PA13 | 23 |
FAN 1 | PB1 | 15 | BOARD CURRENT | PA5 | 11 | EXT 4 | PB2 | 16 |
FAN 3 | PB4 | 27 | BOARD TEMPERATURE | PA6 | 12 | USER LED | PA12 | 22 |
FAN 2 | PB5 | 28 | COLD JUNCTION | PA7 | 13 | FAN_CURRENT | PB0 | 14 |
DBG header
The debug header has UART 0 layed out on some of the pins and is used for interacting with u-boot and getting early debug messages from the Linux kernel. It also has a the option to connect a "boot" button so the board can be safely started and shut down from the 3D-printers front panel. The USR pin can be used to light up a an LED or some other custom function.
Pin | Function |
---|---|
1 | UART RX |
2 | UART TX |
3 | 3.3V |
4 | GND |
5 | BOOT |
6 | USR |
It's possible to wire up a boot button so it is accessible from the outside of the printer. This would be the preferred way to start and stop the board. It works the same way as a boot button on any moderns computer does. Press once to shut down a running board, and press and hold for two seconds in order to boot a board. The button should be wired up between the "NO" and "COM" on the button. The light in the button can be connected between +3.3V and the "USR" on the header.
MCU header
The MCU header is used for connecting external peripherals to the STM32F031 micro controller on the board. There are 4 pins in total available to use. In addition, there is a ground pin and a 3.3 V pin available.
Pin | Function | Alt |
---|---|---|
1 | PB7 | I2C1_SDA |
2 | PB8 | I2C1_SCL |
3 | 3.3V | 0.7-3.3V |
4 | GND | |
5 | PA13 | EXTI 13 |
6 | PB2 | EXTI 2 |
SPI on S6 and S7 headers
Pin | Function | Alt |
---|---|---|
S6-3 | PD0 | SPI1_CS |
S7-3 | PD1 | SPI1_CLK |
S6-5 | PD2 | SPI1_MOSI |
S7-5 | PD3 | SPI1_MISO |
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 USB hub chip | 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
Note
The amount of current that can be drawn on the two USB host connectors closest to the HDMI connector is not according to spec. The combined current draw for USB 1 and 2 should not exceed 0.4 A.
Name | Limit |
---|---|
5V-ES (endstops) | 0.75 A |
USB host 3 and 4 each (5VP) | 1.1 A |
USB host 1 and 2 each (VSP) | 0.75 A |
Thermistors | 0.75 A |
MCU connector | 0.5 A |
Fan connectors | programmable |
Heater connectors | programmable |
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 debian@recore.local
Furthermore, a web interface running OctoPrint/Mainsail/Fluidd can be found using a browser:
For more information on this, look at the Rebuild or Refactor wiki pages.
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 `minicom` can be used to get access. From the host computer
minicom -o -D /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]
Klipper 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-a7.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 pin on the A64. 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 | PE16 | 0 |
S1 | PE16 | 1 |
S2 | PE16 | 2 |
S3 | PE16 | 3 |
S4 | PD24 | 0 |
S5 | PD24 | 1 |
S6 | PD2 | 0-3 |
S7 | PD3 | 0-3 |
External stepper drivers
It is possible to connect up to two external stepper drivers to Recore in addition to the 6 divers installed on the board. These can be connected using the headers S6 and S7.
See also Restep_A1 for a convenient alternative external stepper driver.
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.
[recore] ... gain_t0: 100 pullup_t0: 0 offset_t0: 1 [Extruder] ... sensor_type: Type K
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: PT1000 pullup_resistor: 4750
Connecting other sensors
The board has been designed to work with a range of 3rd party sensors for automating the print.
BLtouch
There are two versions of the BLtouch, the difference is the color of one of the GND wires.
The Creality version has a blue GND wire.
Note
There have been some cases of bad quality control for the Creality BLTouches, where the pinout on the sensor side have not matched the color coding in the photos/documentation. It might be good to make sure the color codes match up. For the Creality it should be, from left to right: Blue, red, yellow, black, white.
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: !PB3 speed:15 samples:1 pin_move_time: 0.675 sample_retract_dist: 10 probe_with_touch_mode: true stow_on_each_sample: false x_offset:29.2 y_offset:-34 z_offset:0
Inductive Sensor
Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin. Inductive sensors often come with an industry standard voltage input of 6-36 V. For this reason there is a 12 V LDO (Low drop-out) voltage regulator integrated on the board. This voltage regulator can be output on the V+ pin of the connector marked ES0. If the Input to the board is 12 V, the LDO will supply a lower voltage, around 10.6 or so.
ADXL345
Note
The ADXL345 seems to cause Klipper to shut down when trying to calibrate at a high rate. A workaround is to use a Pi Pico or similar MCU to communicate with the ADXL345, or to lower the rate. It's been tested working at 400, but not 800 which is the recommended minimum.
See also Remove_A1, a convenient finished accelerometer.
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 rate: 400 [resonance_tester] accel_chip: adxl345 probe_points: 100, 100, 20 # an example
Using a Raspberry Pi Pico:
[adxl345] cs_pin: pico:gpio17 spi_bus: spi0c
MCP2515
It's possible to connect a CAN controller like the MCP2515 to Recore. It's important to keep in mind that the GPIO/SPI pins are 3.3V and not 5V tolerant, so the MCP2515 chip must be run from a 3.3V source, while the TIA1050 chip must be powered with 5V. All headers have pin 1 marked as a square pad, while the others are round.
MCP2515 | Recore |
---|---|
5V | ES1-3 |
3.3V | MCU-3 |
GND | MCU-4 |
INT | S6-1 |
SPI1_CS | S6-3 |
SPI1_CLK | S6-5 |
SPI1_MOSI | S7-3 |
SPI1_MISO | S7-5 |
Neopixels
Use endstop ES1 (PB3) or ES2 (PB6).
Note
Make sure to use a 100 ohm pull-up from pin S (pin 2) to pin 5V (pin 3)
[neopixel my_neopixel] pin: PB3
See also Relit_A0
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.
Filament runout sensor
Any of the 6 end stops can be used for connecting a filament runout sensor
Enable host mode on the USB-C connector
sudo mount -o remount,rw /boot sudo armbian-add-overlay /boot/overlay-user/sun50i-a64-usb-host.dts sudo mount -o remount,ro /boot
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
AR100
Please see: AR100
Manual control and testing
https://wiki.iagent.no/wiki/Manual_control_and_testing
Performance
Start-up time
With a maximum clock for MMC2 of 200 MHz, here is the start-up time:
root@recore:~# systemd-analyze Startup finished in 3.011s (kernel) + 12.292s (userspace) = 15.303s graphical.target reached after 11.934s in userspace
eMMC read and write speed
eMMC write speed: 28.8 MB/s
root@recore:~# dd if=/dev/zero of=/mnt/emmc/1GB.bin bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 36.4307 s, 28.8 MB/s
eMMC read speed: 112 MB/s
root@recore:~# dd if=/mnt/emmc/1GB.bin of=/dev/null bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 9.34956 s, 112 MB/s
USB read and write speed (Reflash USB drive)
USB write speed: 7.7 MB/s
root@recore:~# dd if=/dev/zero of=/mnt/usb/1GB.bin bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 135.476 s, 7.7 MB/s
root@recore:~# dd if=/mnt/usb/1GB.bin of=/dev/null bs=1M 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 67.613 s, 15.5 MB/s
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 AOZ2151EQI-30. 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
When drawing a constant current of 20 A from the bed connector with and without any 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. The maximum board temperature of 100 degrees C is reached after about 10 minutes with no forced convection. Ambient temperature in the room: 20.1 degrees C.
With forced convection (a 92 mm Noctua fan) and a current load of 29 A, the maximum temperature reached after 10 minutes was 87.7 degrees C as measured by the on board thermistor. The thermal camera showed a higher temperature of 98 degrees.
Maximum input voltage
Using 1.5 m test leads and a 26 V bench top PSU (Agilent U8002A) a board has been tested for over voltage issues. This was a problem with Rev A6. No issues were found during testing.
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 28 A at peak, depending on PSU and cables. This is important to consider when setting the current limit with device tree. Below is a trace of the current draw of Recore A7 when the input is enabled. The PSU in use was a PeakTech 6160 (30V/30A) benchtop switchmode PSU. The cables used were Pomona B-24-0 and B-24-2, 24" 18 AWG banana plug test leads.
Over current protection
There are 3 different sensors present in the input stage for making sure the 12-24 V domain on the board does not overheat during startup and operation.
- The Fast acting over current protection is to ensure that the high power domain is disabled in the case of a short circuit condition.
- The current limit set in Klipper monitors the continuous current draw. This is now set at 20 A, but can go up to 30 A and still be within the limits of the connectors and input stage mosfets.
- The over temperature protection monitors the temperature in the input stage and cuts the power if the temperature goes over 110 degrees. The board should not be kept at this temperature for a prolonged period, but during heated bed heat-up, it can be elevated compared to the rest of the print.
Below is a plot of what the current on the input looks like if there is an over current condition on the high power domain as that domain is turned on.
Below is a plot of what the current on the input looks like if there is an over current condition after the input has been turned on.
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
Temperature calibration
A set of experiments have been carried out to calibrate the different sensors using a dry-well calibrator. The reference probe was a Sensing Devices SDL385 PRT. The levels of calibration was: room temperature, 50, 100, 150, and 200 degrees C.
Thermistor
The thermistor in use was a standard EPCOS 100K B57560G104F. This thermistor has a resistance tolerance of 2 %. The value of the pull-up resistor as measured during calibration was 4740.17501. This value seemed to work well at all levels of calibration, although a little on the high side compared to the reference.
PT1000
The PT1000 in use was a Heraeus 31500989 [1] works well. The tolerance class given in the datasheet is "F 0.10 / Class 1/3 B". There are two different tolerances here: F0.10 and one third of Class B. The accuracy looks good at all temperatures, perhaps a bit on the high side if using the calibrated value for the pull-up. During the testing, 10 ohm was subtracted from the calibrated value.
PT100
The PT100 used in the calibration was the E3D PT100 with the INA826 amplifier board. There is no datasheet available for the PT100 sensor and no mention of what tolerance there is on the reference resistors used. Furthermore Klipper expects the reference voltage to be 5V exactly, and there is no way to supply a measured value. Measurements on Recore has shown that the value is often a bit lower due to the PMIC for the 5V output on the "input" ports. 4.979 V has been measured and is likely an expected value.
Thermocouple
Using the calibration values directly will give a slight offset to the thermocouple measurements. The gain and ADC voltage can be used as measured during calibration. It should be in the region of 101 for gain and 3.307 for ADC voltage. As for the offset, that can be increased slightly to compensate for the cold junction temperature difference. For instance, the measured offset for the test board was 0.0032960, but a value of 0.00340 fit the data points well. The measurements were done on T2, so it it possible that the distance from the cold junction caused the offset. The cold junction thermistor is located between T0 and T1.
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 30 A with good cooling using a fan and a heat sink.
I have a gadget that I want to connect with SPI. Is that possible?
- On Recore A7, there is support for an SPI peripheral. The pins are broken out on header S6/S7.
What exactly is the role of the AR100 device?
- The AR100 handles the fast real-time aspects, mainly the stepper motors and end stops.
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?
- Boards are shipping from Norway. Eventually shipping will be from a warehouse in the US
Known hardware issues for rev A7
Neopixels needs a lower value pull-up resistor than the 1K present on the board
List of changes to revision A7 from A6
- Step down AOZ2151EQI-30, lower dissipation.
- Separate fan over current protection.
- Use one of the electrolytic capacitors as input capacitor.
- Add a 10K pull-down on the USB power lines, so the USB over-current is unambiguous.
- Make op-amp more symmetric in order to improve the amplifier issue from A6.
- Add USR pin to the DBG header
- Add BOOT pin to the DBG header
- Move the USB activity LED close to the USB hub.
- Use CY7C65634 USB hub because GL850G-OHY37 is discontinued
- Change MCU and DBG connectors from 4 to 6 pins.
- Add SPI to S6/S7
- Add a guard ring on the edge on all layers.
- Use Kelvin connection on mosfets for Op-amps.
- Mitigate inrush current. Consider C214 = 1 nF from G to GND.
- Make better return paths for eth clock traces.
Migrating Klipper config from A6 to A7
Section [recore] | ||
---|---|---|
Before | After | |
revision: A6 | revision: A7 |
[tmc2209 stepper_x] | ||
---|---|---|
Before | After | |
uart_pin: ar100:PB1
tx_pin: ar100:PB0 |
uart_pin: ar100:PE16 |
[mcu] | ||
---|---|---|
Before | After | |
serial: /dev/ttyS4 | serial: /dev/ttyS2 |
[fan] | ||
---|---|---|
Before | After | |
pin: PB0 | pin: PF0 |