Difference between revisions of "Recore A5"

From iagent
Jump to: navigation, search
(Known Issues)
(Performance)
 
(6 intermediate revisions by the same user not shown)
Line 938: Line 938:
 
graphical.target reached after 11.421s in userspace
 
graphical.target reached after 11.421s in userspace
 
</pre>
 
</pre>
 +
 +
===USB read and write speed===
 +
Software: Reflash v1.0.1<br>
 +
Disk: WD Elements SE<br>
 +
USB write speed:  31.0 MB/s<br>
 +
USB read speed: 33.0 MB/s<br>
 +
<pre>
 +
root@recore:~# dd if=/dev/zero of=/mnt/usb/random.bin bs=1M count=1000 conv=fsync
 +
1000+0 records in
 +
1000+0 records out
 +
1048576000 bytes (1.0 GB, 1000 MiB) copied, 34.3159 s, 30.6 MB/s
 +
</pre>
 +
 +
<pre>
 +
root@recore:~# dd if=/mnt/usb/random.bin of=/dev/null
 +
2048000+0 records in
 +
2048000+0 records out
 +
1048576000 bytes (1.0 GB, 1000 MiB) copied, 30.9869 s, 33.8 MB/s
 +
</pre>
 +
  
 
==Measured voltages==
 
==Measured voltages==
Line 1,167: Line 1,187:
 
===Offset on thermistor readings===
 
===Offset on thermistor readings===
 
The TVS diodes have too high leakage current causing an offset on the readings at low temperatures.
 
The TVS diodes have too high leakage current causing an offset on the readings at low temperatures.
===USB C does not show up===
+
===USB C does not show up as a device===
 
The USB C connector does not work in high speed mode, only in full speed and low speed. In order to force it to  
 
The USB C connector does not work in high speed mode, only in full speed and low speed. In order to force it to  
not try to be in full speed mode, you will need to place a USB full speed only hub in between.
+
not try to be in full speed mode, you will need to place a '''USB full speed only''' hub in between a host computer and the USB-C connector.
 +
 
 +
===Serial number is not present on the board===
 +
On Recore A6 and A7, the serial number and calibration data is stored in a special hardware boot partition on the eMMC. This partition will not be removed during a complete eMMC erase. For Recore A5, the serial number is written on the bottom of the board. Now that there are multiple versions of the hardware, some additional steps are taken as part of the flashing process to set the right device tree and Klipper config file for the hardware revision. For Recore A5, you will need to set the serial number manually.
 +
# Boot into Reflash in the normal way.
 +
# SSH into the board.
 +
# Download the migration script <pre>sudo wget -O /usr/local/bin/create-recore-a5-config https://raw.githubusercontent.com/intelligent-agent/Reflash/main/bin/prod/create-recore-a5-config</pre>
 +
# Make the script executable <pre>sudo chmod +x /usr/local/bin/create-recore-a5-config</pre>
 +
# Run the script using your own serial number <pre>sudo create-recore-a5-config <serial number></pre>

Latest revision as of 20:45, 17 June 2024

Contents

Recore Rev A5

Recore header.png

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 or 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 A5. For previous hardware revisions, please see:

Hardware overview

Wiring diagram

Recore-wire-diagram.png

Power domain overview

Power domain overview.png

Pinout

Recore pinout.png

A64

I 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.

Pinout
Name Bank and pin Number
END STOP 0 PH4 228
END STOP 1 PH5 229
END STOP 2 PH6 230
END STOP 3 PH7 231
END STOP 4 PH8 232
END STOP 5 PH9 233
STEP 0 PL4 4
STEP 1 PL5 5
STEP 2 PL6 6
STEP 3 PL7 7
STEP 4 PL8 8
STEP 5 PL9 9
STEP 6 PL10 10
STEP 7 PL11 11
DIR 0 PE8 136
DIR 1 PE9 137
DIR 2 PE10 138
DIR 3 PE11 139
DIR 4 PE12 140
DIR 5 PE13 141
DIR 6 PE14 142
DIR 7 PE15 143
STEP DIAG 0 PE0 128
STEP DIAG 1 PE1 129
STEP DIAG 2 PE2 130
STEP DIAG 3 PE3 131
STEP DIAG 4 PE4 132
STEP DIAG 5 PE5 133
STEP DIAG 6 PE6 134
STEP DIAG 7 PE7 135
OC-ALERT PG0 192
OC-RESET PG1 193
EN-HP PG2 194
UC-INT-1 PG3 195
UC-NRST PG4 196
UC-BOOT PG5 197
ES-EN-12V PG8 200
EN-HDMI-PWR PG9 201
EN-THERMISTORS PG10 202
EN-ENDSTOPS PG11 203
USB-PWR-EN-0 PH0 224
USB-PWR-EN-1 PH1 225
USB-PWR-EN-2 PH2 226
USB-PWR-EN-3 PH3 227
GAIN-ENABLE-T0 PD4 100
GAIN-ENABLE-T1 PH11 235
GAIN ENABLE T2 PE17 145
GAIN ENABLE T3 PB2 34
PU-ENABLE-T0 PD6 102
PU-ENABLE-T1 PD24 120
PU ENABLE T2 PF0 160
PU ENABLE T3 PF1 161
STEPPER UART 2 TX PB0 32
STEPPER UART 2 RX PB1 33
STEPPER UART 3 TX PD0 96
STEPPER UART 3 RX PD1 97

STM32F031

Pinout
Name Bank and pin Number
THERMISTOR 0 PA0 6
THERMISTOR 1 PA1 7
THERMISTOR 2 PA2 8
THERMISTOR 3 PA3 9
BOARD VOLTAGE PA4 10
BOARD CURRENT PA5 11
BOARD TEMPERATURE PA6 12
COLD JUNCTION PA7 13
FAN 0 PB0 14
FAN 1 PB1 15
FAN 2 PB5 28
FAN 3 PB4 27
HEATER E0 PA8 18
HEATER E1 PA9 19
HEATER E2 PA10 20
HEATER BED PA11 21
USER LED PA12 22
EXT 1 PB8 32
EXT 2 PB7 30

Inductive Sensor

Connect the inductive sensor on ES0. You can choose either 5V or 12V output on the voltage pin.

Pinout
Name Number
Black signal
Blue GND
Brown 12V

DBG header

This header is used for interacting with u-boot and getting early debug messages from the Linux kernel

Pinout
Pin Function
1 UART RX
2 UART TX
3 NC
4 GND

MCU header

This header is used for connecting additional MCU peripherals.

Pinout
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

LEDS meaning
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 H1 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 Reserved
D18 By the USB C connector Linux Heartbeat
D19 By the A64 SoC CPU activity
D20 By the STM32 Klipper running on STM32

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]

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.

Due to space constraints, the TMC2209s use internal sense resistors for measuring current in a constant current setup. The R_REF as specified in the TMC2209 datasheet is a 6.8K resistor giving a maximum peak current of 1.92 A, RMS current of 1.35 A.

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

BLtouch

Setting up BLtouch can be done by using the following section

[bltouch]
sensor_pin: ^ar100:PH7
control_pin: PB7
speed: 7
pin_move_time: 0.675
sample_retract_dist: 10
pin_up_reports_not_triggered: True
pin_up_touch_mode_reports_triggered: True
z_offset: 2.22
x_offset: -28
y_offset: -13

Current limits

Current limit
Name Limit
5V-ES 1 A
USB host each 1 A
Thermistors 1 A
MCU connector 1.5 A (shared with other things)

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.

Also enable the pull-up. Add this to the file

/etc/systemd/system/klipper.service
ExecStartPre=/bin/sh -c "echo enabled > /sys/devices/platform/e2-consumer/state"

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

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

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 193=0
gpioset 1 193=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 193=0

Enable 24V input

gpioset 1 194=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 203=1

To disable again

gpioset 1 203=0

To switch to 12V output on ES5

gpioset 1 200=1

To disable again

gpioset 1 200=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

HDMI power

echo 201 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio201/direction
echo 1 > /sys/class/gpio/gpio201/value

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 read the OTP registers

echo -n -e "\x5\x0\x5\x21" > /dev/ttyS2
echo -n -e "\x5\x0\x5\x21" > /dev/ttyS3
echo -n -e "\x5\x1\x5\x97" > /dev/ttyS2
echo -n -e "\x5\x1\x5\x97" > /dev/ttyS3
echo -n -e "\x5\x2\x5\x7a" > /dev/ttyS2
echo -n -e "\x5\x2\x5\x7a" > /dev/ttyS3
echo -n -e "\x5\x3\x5\xcc" > /dev/ttyS2
echo -n -e "\x5\x3\x5\xcc" > /dev/ttyS3

To set the OTP register to use RDSon:

echo -n -e "\x5\x0\x84\x0\x0\xbd\x6\xac" > /dev/ttyS2

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. In order to enable the bias, this line can be run from the command line:

sudo sh -c "echo enabled >  /sys/devices/platform/e1-consumer/state"

To enable this on boot, add it to the systemd klipper file as a ExecStartPre directive:

/etc/systemd/system/klipper.service

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

Voltage summary

root@recore:~# cat /sys/kernel/debug/regulator/regulator_summary
 regulator                      use open bypass  opmode voltage current     min     max
---------------------------------------------------------------------------------------
 regulator-dummy                 17   23      0 unknown     0mV     0mA     0mV     0mV 
    usb_phy_generic.3.auto-vcc    1                                 0mA     0mV     0mV
    1f02c00.pinctrl-vcc-pl        1                                 0mA     0mV     0mV
    vcc-3v3                       8    7      0 unknown  3300mV     0mA  3300mV  3300mV 
       1c30000.ethernet-phy-io    1                                 0mA     0mV     0mV
       1c30000.ethernet-phy       1                                 0mA     0mV     0mV
       1c20800.pinctrl-vcc-ph     1                                 0mA     0mV     0mV
       1c11000.mmc-vmmc           1                                 0mA  3300mV  3400mV
       1c20800.pinctrl-vcc-pd     1                                 0mA     0mV     0mV
       1c20800.pinctrl-vcc-pg     1                                 0mA     0mV     0mV
       1c20800.pinctrl-vcc-pb     1                                 0mA     0mV     0mV
    vdd-cpux                      2    1      0 unknown  1200mV     0mA  1040mV  1300mV 
       cpu0-cpu                   1                                 0mA  1200mV  1200mV
    dcdc4                         0    0      0 unknown  1100mV     0mA     0mV     0mV 
    vcc-dram                      1    0      0 unknown  1360mV     0mA  1360mV  1360mV 
    vdd-sys                       1    0      0 unknown  1100mV     0mA  1100mV  1100mV 
    vcc-phy                       1    0      0 unknown     0mV     0mA     0mV     0mV 
    vcc-vref-e0                   0    1      0 unknown   700mV     0mA   700mV   700mV 
       e0-consumer-controlled     0                                 0mA     0mV     0mV
    vcc-vref-e1                   0    1      0 unknown   700mV     0mA   700mV   700mV 
       e1-consumer-controlled     0                                 0mA     0mV     0mV
    vcc-pll-avcc                  1    0      0 unknown  3000mV     0mA  3000mV  3000mV 
    vcc-hdmi                      2    1      0 unknown  3300mV     0mA  3300mV  3300mV 
       1ee0000.hdmi-hvcc          1                                 0mA     0mV     0mV
    current-control               1    0      0 unknown   700mV     0mA   700mV   700mV 
    vcc-vref-e2                   1    1      0 unknown   700mV     0mA   700mV   700mV 
       e2-consumer-controlled     1                                 0mA     0mV     0mV
    vcc-vref-e3                   0    1      0 unknown   700mV     0mA   700mV   700mV 
       e3-consumer-controlled     0                                 0mA     0mV     0mV
    emmc-io                       3    2      0 unknown  1800mV     0mA  1800mV  1800mV 
       1c11000.mmc-vqmmc          1                                 0mA     0mV     0mV
       1c20800.pinctrl-vcc-pc     1                                 0mA     0mV     0mV
    eldo2                         0    0      0 unknown   700mV     0mA     0mV     0mV 
    eldo3                         0    0      0 unknown   700mV     0mA     0mV     0mV 
    fldo1                         0    0      0 unknown  1200mV     0mA     0mV     0mV 
    vdd-cpus                      1    0      0 unknown  1100mV     0mA  1100mV  1100mV 
    vcc-rtc                       1    0      0 unknown  3000mV     0mA  3000mV  3000mV 
    vcc-ref                       1    0      0 unknown  3300mV     0mA  3300mV  3300mV 
    vcc-iref                      1    0      0 unknown  3300mV     0mA  3300mV  3300mV 
 5v-buck                          3    2      0 unknown  5000mV     0mA  5000mV  5000mV 
    usb1-vbus3                    1    0      0 unknown  5000mV     0mA  5000mV  5000mV 
    usb1-vbus4                    1    0      0 unknown  5000mV     0mA  5000mV  5000mV 
 usb1-vbus1                       1    0      0 unknown  5000mV     0mA  5000mV  5000mV 
 usb1-vbus2                       1    0      0 unknown  5000mV     0mA  5000mV  5000mV 
 hdmi-vbus                        1    1      0 unknown  5000mV     0mA  5000mV  5000mV 
    7e000000.framebuffer-vcc-hdmi   0                                 0mA     0mV     0mV

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

USB read and write speed

Software: Reflash v1.0.1
Disk: WD Elements SE
USB write speed: 31.0 MB/s
USB read speed: 33.0 MB/s

root@recore:~# dd if=/dev/zero of=/mnt/usb/random.bin bs=1M count=1000 conv=fsync
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 34.3159 s, 30.6 MB/s
root@recore:~# dd if=/mnt/usb/random.bin of=/dev/null
2048000+0 records in
2048000+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 30.9869 s, 33.8 MB/s


Measured voltages

Instruments used:

  • Siglent SDM3065X, 6.5 digit multimeter
  • 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

Offset and Gain Measurements

Input voltage measured with SDM3065X, output voltage measured with 3458A. Programmable Voltage reference used was the DIY DAC cape made by Elias. Measurements should be repeated with HP 3245A.

Op-amp gain measurements
Vin (mV) Vout (V) Gain
1.0103 0.754 95.73
2.0038 0.8492 95.78
3.013 0.9457 95.72
4.0032 1.04 95.60
5.0108 1.1372 95.78
6.0016 1.232 95.76
7.0094 1.3285 95.76
8.0015 1.4235 95.76
9.0106 1.5201 95.76
10.0005 1.615 95.77
11.0102 1.7116 95.76
12.0042 1.8067 95.75
13.0142 1.9035 95.76
14.0056 1.9985 95.76
15.0145 2.095 95.76
16.0055 2.1899 95.76
17.0145 2.2865 95.75
18.0055 2.3813 95.75
19.0163 2.4783 95.76
20.0067 2.5723 95.72

Vin-vs-vout.png

An experiment was done using an HP 3245A and a HP 3458A measuring the input and output voltages and calculating offset and gain. This will become a part of a calibration routine during final testing and flashing, values should be stored with the board.

Input 1	Vin	Vout	Offset	
	0.0003	0.6685	0.6685	
				
Vin set	Vin	Vout	Gain	Deviation
-5 mV	-4.9983	0.1840	96.93	0.16
0 mV	0.0003	0.6685	96.76	-0.01
5 mV	5.0000	1.1523	96.77	0.00
10 mV	10.0013	1.6355	96.69	-0.08
15 mV	15.0005	2.1198	96.75	-0.01
20 mV	20.0005	2.6025	96.70	-0.07
	Average gain		96.77	
				
				
				
Input 2	Vin	Vout	Offset	
	0.0017	0.6485	0.6483	
				
				
Vin set	Vin	Vout	Gain	Deviation
-5 mV	-4.9961	0.1722	95.30	-0.07
0 mV	0.0017	0.6485	95.37	-0.01
5 mV	5.0014	1.1253	95.37	-0.01
10 mV	10.003	1.6025	95.39	0.01
15 mV	15.0021	2.0793	95.38	0.01
20 mV	20.0023	2.5559	95.37	-0.01
	Average gain		95.38	
				
				
Input 3	Vin	Vout	Offset	
	0.0013	0.6560	0.6559	
				
				
Vin set	Vin	Vout	Gain	Deviation
-5 mV	-4.9969	0.1794	95.35	-0.02
0 mV	0.0013	0.6560	95.35	-0.03
5 mV	5.0012	1.1329	95.38	0.01
10 mV	10.0025	1.6098	95.37	-0.01
15 mV	15.0015	2.0864	95.36	-0.02
20 mV	20.0013	2.5631	95.35	-0.02
	Average gain		95.36	
				
				
Input 4	Vin	Vout	Offset	
	0.0024	0.6498	0.6496	
				
				
Vin set	Vin	Vout	Gain	Deviation
-5 mV	-4.9954	0.1714	96.98	1.18
0 mV	0.0024	0.6498	94.50	-1.31
5 mV	5.0015	1.1283	95.96	0.16
10 mV	10.0028	1.6069	95.83	0.02
15 mV	15.0024	2.0853	95.78	-0.02
20 mV	20.0022	2.5642	95.78	-0.02
	Average gain		95.81	

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. VCC-5V-ripple-A4.png

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.

Temperature-fan-off.pdf.png

Temperature-fan.pdf.png

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. Inrush current A3.png

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. SDS5034X PNG 66.png

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

Recore-A5-calibration.png

FAQ

Q: Where can I ask for help?

A: You can join the Discord: https://discord.gg/bCnp9H5SB5

Q: What comes in the box with the Recore? Specifically, terminal connectors for power, etc?

A: It's only the board, no connectors at all. There will be a bag of connectors available to purchase eventually, but for now you will have to supply your own.

Q: What's the maximum current draw for heat bed?

A: This has been tested up to 20 A

Q Why are there unused and unbroken out pins on the STM32 MCU?

A: The pins that are needed from the MCU have been routed out plus two pins available on an external header.

Q: I have a gadget that I want to connect with SPI. Is that possible?

A: 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.

Q: What exactly is the role of the AR100 device?

A: The AR100 handles the fast realtime aspects, mainly the stepper motors

Q: What voltage fans are supported?

A: 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.

Q: Where is the board layout file?

A: The Layout file will not be available. It is an "open schematic" board, not open source hardware

Q: Where are you shipping from?

A: Early prototypes (Rev A4) will be shipping from Norway. Eventually shipping will be from a warehouse in the US

Known Issues

Noisy thermocouple readings

Because the op-amp gain is programmable with a GPIO pin, the level is not pulled down hard enough, so noise is coupled into the gain of the op-amp.

Offset on thermistor readings

The TVS diodes have too high leakage current causing an offset on the readings at low temperatures.

USB C does not show up as a device

The USB C connector does not work in high speed mode, only in full speed and low speed. In order to force it to not try to be in full speed mode, you will need to place a USB full speed only hub in between a host computer and the USB-C connector.

Serial number is not present on the board

On Recore A6 and A7, the serial number and calibration data is stored in a special hardware boot partition on the eMMC. This partition will not be removed during a complete eMMC erase. For Recore A5, the serial number is written on the bottom of the board. Now that there are multiple versions of the hardware, some additional steps are taken as part of the flashing process to set the right device tree and Klipper config file for the hardware revision. For Recore A5, you will need to set the serial number manually.

  1. Boot into Reflash in the normal way.
  2. SSH into the board.
  3. Download the migration script
    sudo wget -O /usr/local/bin/create-recore-a5-config https://raw.githubusercontent.com/intelligent-agent/Reflash/main/bin/prod/create-recore-a5-config
  4. Make the script executable
    sudo chmod +x /usr/local/bin/create-recore-a5-config
  5. Run the script using your own serial number
    sudo create-recore-a5-config <serial number>