====== HowTo Setup and Flash Klipper on Anet ET4/Pro/X ====== ===== Tools needed ===== * RaspberryPi * ST-Link V2 ===== Raspberry Setup ===== * for the ease of sake, get the [[https://docs.mainsail.xyz/setup/mainsail-os|MainSailOS]] Raspberry Pi image * Flash it to the SD, for example with the [[https://www.raspberrypi.com/software/|Raspberry Pi Imager]] * boot raspberry * connect to http://mainsail.local or the http://ip address of your pi and access the mainsail website * update everything ===== printer config ===== * in machine -> config files add printer.cfg and open it * paste: * # This file contains common pin mappings for the Anet ET4 printer for klipper. [stepper_x] step_pin: PB6 dir_pin: !PB5 enable_pin: !PB7 rotation_distance: 40 microsteps: 16 endstop_pin: ^!PC13 position_min: -3 position_endstop: -3 position_max: 220 homing_speed: 50 [stepper_y] step_pin: PB3 dir_pin: PD6 enable_pin: !PB4 rotation_distance: 40 microsteps: 16 endstop_pin: ^!PE12 position_min: -8 position_endstop: -8 position_max: 220 homing_speed: 50 [stepper_z] step_pin: PA12 dir_pin: !PA11 enable_pin: !PA15 rotation_distance: 8 microsteps: 16 endstop_pin: ^!PE11 position_endstop: 250 position_max: 250 homing_speed: 12 second_homing_speed: 5 [extruder] step_pin: PB9 dir_pin: PB8 enable_pin: !PE0 full_steps_per_rotation: 200 gear_ratio: 3:1 rotation_distance: 23.132 microsteps: 16 nozzle_diameter: 0.400 filament_diameter: 1.750 heater_pin: PA0 # END_CONTROL sensor_pin: PA1 # TEMP_EXB1 sensor_type: EPCOS 100K B57560G104F control: pid pid_Kp: 20.375 pid_Ki: 0.844 pid_Kd: 123.016 min_temp: 0 max_temp: 250 [heater_bed] heater_pin: PE2 # BED_CONTROL sensor_pin: PA4 # TEMP_BED sensor_type: EPCOS 100K B57560G104F control: pid pid_Kp: 70.721 pid_Ki: 1.981 pid_Kd: 631.118 min_temp: 0 max_temp: 125 [fan] pin: PE3 # LAY_FAN [heater_fan fan1] pin: PE1 # END_FAN [mcu] baud: 115200 serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 restart_method: command [printer] kinematics: cartesian max_velocity: 500 max_accel: 3000 max_z_velocity: 12 max_z_accel: 50 [pause_resume] [filament_switch_sensor filament_sensor] switch_pin: PA2 # MAT_DET pause_on_runout: True # The printer ships without a probe, but the wiring loom is # already prepared for one [probe] pin: !PC3 # LV_DET z_offset: 0.2 ######################################## # EXP1 / EXP2 (display) pins ######################################## [board_pins] aliases: # P1 header P1_1=PD7, P1_3=PB2, P1_5=PE4, P1_7=PB1, P1_9=, P1_2=PD5, P1_4=PE5, P1_6=PB0, P1_8=PD4, P1_10=<3V3>, # P2 header P2_1= PE6, P2_3=PD15, P2_5=PD1, P2_7=PE8, P2_9=PE10, P2_2=PD13, P2_4=PD14, P2_6=PD0, P2_8=PE7, P2_10=PE9 [virtual_sdcard] path: /home/pi/gcode_files [pause_resume] [display_status] [screws_tilt_adjust] screw1: 10, 10 screw1_name: front left screw screw2: 10, 210 screw2_name: rear left screw screw3: 210, 210 screw3_name: rear right screw screw4: 210, 10 screw4_name: front right screw horizontal_move_z: 10. speed: 50. screw_thread: CW-M3 [gcode_macro CANCEL_PRINT] rename_existing: BASE_CANCEL_PRINT gcode: TURN_OFF_HEATERS CLEAR_PAUSE SDCARD_RESET_FILE BASE_CANCEL_PRINT [gcode_macro PAUSE] rename_existing: BASE_PAUSE # change this if you need more or less extrusion variable_extrude: 1.0 gcode: ##### read E from pause macro ##### {% set E = printer["gcode_macro PAUSE"].extrude|float %} ##### set park positon for x and y ##### # default is your max posion from your printer.cfg {% set x_park = printer.toolhead.axis_maximum.x|float - 5.0 %} {% set y_park = printer.toolhead.axis_maximum.y|float - 5.0 %} ##### calculate save lift position ##### {% set max_z = printer.toolhead.axis_maximum.z|float %} {% set act_z = printer.toolhead.position.z|float %} {% if act_z < (max_z - 2.0) %} {% set z_safe = 2.0 %} {% else %} {% set z_safe = max_z - act_z %} {% endif %} ##### end of definitions ##### SAVE_GCODE_STATE NAME=PAUSE_state BASE_PAUSE G91 G1 E-{E} F2100 G1 Z{z_safe} F900 G90 G1 X{x_park} Y{y_park} F6000 [gcode_macro RESUME] rename_existing: BASE_RESUME gcode: ##### read E from pause macro ##### {% set E = printer["gcode_macro PAUSE"].extrude|float %} ##### end of definitions ##### G91 G1 E{E} F2100 RESTORE_GCODE_STATE NAME=PAUSE_state BASE_RESUME (based on [[https://phennet-film.blogspot.com/2021/05/anet-et4-printercfg-this-setting-i-dont.html|PHeNNeT FiLM]]) * save & close ===== building the firmware ===== * //note: i wasnt able to make this with openblt work, but i will update if i find a way// * ssh into raspberry (use MobaXterm, it has an inbuild sftp client to pull the firmware) * cd klipper make menuconfig * choose settings: * [*] Enable extra low-level configuration options Micro-controller Architecture (STMicroelectronics STM32) Processor model (STM32F407) Bootloader offset (No bootloader) ---> Clock Reference (8 MHz crystal) ---> Communication interface (Serial (on USART1 PA10/PA9)) ---> (112500) Baud rate for serial port () GPIO pins to set at micro-controller startup * type Q to exit, verify with Y * make * after its finished copy firmware.bin from /home/pi/klipper/out/ to your pc (via MobaXterm, Filezilla(port 22) or WinSCP) ===== Flashing the Firmware ===== * attach your ST-Link to the printer * run STM32 ST-Link Utility * Target -> Connect * backup your bootloader if you are coming from stock * select adress 0x08000000 * left click Device Memory @ 0x08000000 -> Save to file -> original_bootloader.bin * Target -> Program * Start Adress: 0x08000000 * Filepath: your klipper.bin * Start * if you have problems connecting ST-Link after the successful flash, lower your Connection Frequency in Target -> Settings * Thats it. Restart your printer and click firmware restart in mainsail