Difference between revisions of "Recore"

From iagent
Jump to: navigation, search
(FAQ)
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Recore Rev A5==
+
==Recore==
 
[[File:Recore header.png]]
 
[[File: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:  
 
Recore is a 3D-printer control board running Linux. It is specifically tailored to be compatible with Klipper and OctoPrint. The main features are:  
Line 12: Line 12:
 
* Comes with Debian Linux with Klipper and OctoPrint installed
 
* Comes with Debian Linux with Klipper and OctoPrint installed
  
This document is for Recore Revision A5. For previous hardware revisions, please see:
+
Choose a revision:
 +
* [[Recore_A6]]
 +
* [[Recore_A5]]
 
* [[Recore_A4]]
 
* [[Recore_A4]]
 
* [[Recore_A3]]   
 
* [[Recore_A3]]   
* [[Recore_A2]]
+
* [[Recore_A2]]
 
 
==Hardware overview==
 
[[File:Recore_pinout.png|1024px]]
 
[[File:Recore-wire-diagram.png|1024px]]
 
 
 
===Pinout===
 
====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.
 
 
 
{| class="wikitable"
 
!colspan="3"|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====
 
{| class="wikitable"
 
!colspan="3"|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.
 
{| class="wikitable"
 
!colspan="2"|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
 
{| class="wikitable"
 
!colspan="2"|Pinout
 
|-
 
|Pin
 
|Function
 
|-
 
|1
 
|UART RX
 
|-
 
|2
 
|UART TX
 
|-
 
|3
 
|NC
 
|-
 
|4
 
|GND
 
|-
 
|}
 
 
 
====MCU header====
 
This header is used for connecting additional MCU peripherals.
 
{| class="wikitable"
 
!colspan="3"|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
 
{| class="wikitable"
 
!colspan="3"|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 [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-04BE/10238369 | Digi-key]]
 
 
 
Two pin male: TBP01P1-508-02BE [[https://www.digikey.com/en/products/detail/cui-devices/TBP01P1-508-02BE/10238367 | 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
 
{| class="wikitable"
 
!colspan="3"|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
 
<pre>
 
[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
 
</pre>
 
 
 
==Current limits==
 
{| class="wikitable"
 
!colspan="2"|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.
 
===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: 
 
<pre>
 
[Extruder]
 
...
 
sensor_type: PT100 INA826
 
adc_voltage: 3.27
 
</pre>
 
 
 
The pull-up must also be disabled.
 
 
 
===PT1000===
 
Make sure the pull-up is enabled and the gain is set to 1.
 
 
 
=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:
 
* <b>Input power</b> 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.
 
* <b>Thermo couple power</b> Controls +5V/1A output to the ADCs. This can be used for turning on power to the analog pins.
 
* <b>End stop power</b> 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.
 
* <b>4 USB host power domains</b> Controls 5V/1A current output to the usb host connectors. These are turned on by u-boot.
 
*<b>HDMI 5V output</b> Controls the 5V/1A HDMI output. Turned on by u-boot.
 
 
 
====Input stage====
 
Reset over current protection and set it in "one-shot" mode.
 
<pre>
 
gpioset 1 193=0
 
gpioset 1 193=1
 
</pre>
 
 
 
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.
 
<pre>
 
gpioset 1 193=0
 
</pre>
 
 
 
Enable 24V input
 
<pre>
 
gpioset 1 194=0
 
</pre>
 
 
 
====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
 
<pre>
 
gpioset 1 203=1
 
</pre>
 
 
 
To disable again
 
<pre>
 
gpioset 1 203=0
 
</pre>
 
 
 
To switch to 12V output on ES5
 
<pre>
 
gpioset 1 200=1
 
</pre>
 
To disable again
 
<pre>
 
gpioset 1 200=0
 
</pre>
 
 
 
====End stops values====
 
To see what value the end stops have
 
<pre>
 
gpioget 1 228 # ES 5
 
gpioget 1 229
 
gpioget 1 230
 
gpioget 1 231
 
gpioget 1 232
 
gpioget 1 233 # ES 0
 
</pre>
 
 
 
====HDMI power ====
 
<pre>
 
echo 201 > /sys/class/gpio/export
 
echo out > /sys/class/gpio/gpio201/direction
 
echo 1 > /sys/class/gpio/gpio201/value
 
</pre>
 
 
 
====TMC2209====
 
In window/shell 1:
 
<pre>
 
stty -F /dev/ttyS2 raw -echoe -echo
 
xxd -c 4 /dev/ttyS2
 
</pre>
 
In window/shell 2:
 
<pre>
 
echo -n -e '\x5\x0\x6\x6F' > /dev/ttyS2
 
</pre>
 
The return should be along the lines of
 
<pre>
 
00000000: 0500 066f  ...o
 
00000004: 05ff 0620  ...
 
00000008: 0001 4058  ..@X
 
</pre>
 
 
 
To read the OTP registers
 
<pre>
 
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
 
</pre>
 
 
 
To set the OTP register to use RDSon:
 
<pre>
 
echo -n -e "\x5\x0\x84\x0\x0\xbd\x6\xac" > /dev/ttyS2
 
</pre>
 
 
 
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.
 
<pre>
 
gpioget 1 128
 
gpioget 1 129
 
gpioget 1 130
 
gpioget 1 131
 
gpioget 1 132
 
gpioget 1 133
 
</pre>
 
 
 
==== 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:
 
<pre>
 
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
 
</pre>
 
 
 
To see the ADC readings:
 
<pre>
 
stty -F /dev/ttyS3 38400 raw
 
cat /dev/ttyS3
 
</pre>
 
You should see something like
 
<pre>
 
ADC T0: 0
 
ADC T1: 0
 
ADC T2: 0
 
ADC T3: 0
 
ADC U: 2338
 
ADC I: 0
 
ADC TB: 3417
 
</pre>
 
 
 
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:
 
<pre>
 
cat /dev/ttyS4 | awk '/I:/ { printf "scale=4; (%i/4096)*165\n", $3; fflush(); }' | bc -l
 
</pre>
 
 
 
====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 :
 
<pre>
 
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();}'
 
</pre>
 
 
 
===Reading Input Voltage===
 
To see voltage on the input, it can be converted like this:
 
<pre>
 
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
 
</pre>
 
 
 
===Thermistor inputs===
 
To enable pull-up on input for using thermistors for temperature measurements:
 
<pre>
 
gpioset 1 102=1
 
gpioset 1 120=1
 
gpioset 1 160=1
 
gpioset 1 161=1
 
</pre>
 
 
 
Setting Op-amp gain to 1:
 
<pre>
 
gpioget 1 100
 
gpioget 1 235
 
gpioget 1 145
 
gpioget 1 34
 
</pre>
 
 
 
In the device tree file, the gpio/ldos must be set to gpio input:
 
<pre>
 
&gpio0_ldo {
 
  function = "gpio_in";
 
};
 
</pre>
 
 
 
===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 [https://product.tdk.com/info/en/catalog/datasheets/503021/tpd_commercial_ntc-thermistor_ntcg_en.pdf 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:
 
 
 
<pre>
 
gpioset 1 102=0
 
gpioset 1 120=0
 
gpioset 1 160=0
 
gpioset 1 161=0
 
</pre>
 
 
 
Also, the op-amp needs a gain of 100:
 
<pre>
 
gpioset 1 100=0
 
gpioset 1 235=0
 
gpioset 1 145=0
 
gpioset 1 34=0
 
</pre>
 
 
 
Finally, the input bias needs to be enabled. The following LDOs needs to be enabled:
 
<pre>
 
reg_ldo_io0
 
reg_ldo_io1
 
reg_dldo3
 
reg_dldo4
 
</pre>
 
 
 
=Performance=
 
==Start-up time==
 
With a maximum clock for MMC2 of 200 MHz, here is the start-up time:
 
<pre>
 
root@recore-3:~# systemd-analyze
 
Startup finished in 5.128s (kernel) + 11.567s (userspace) = 16.695s
 
graphical.target reached after 11.421s in userspace
 
</pre>
 
 
 
==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<br>
 
VDD uC: 3.312 V
 
 
 
Voltage from the PMIC supplied as bias:<br>
 
0.706 V <br>
 
 
 
====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.
 
 
 
{| class="wikitable"
 
!colspan="3"|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
 
|}
 
 
 
[[File: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.
 
 
 
<pre>
 
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
 
</pre>
 
 
 
====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. [[File: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.
 
 
 
[[File: Temperature-fan-off.pdf.png|1024px]]
 
 
 
[[File:Temperature-fan.pdf.png|1024px]]
 
 
 
====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.
 
[[File:Inrush current A3.png|1024px]]
 
 
 
===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.
 
[[File: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
 
 
 
=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.
 

Latest revision as of 00:58, 23 January 2022

Recore

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

Choose a revision: