XYZPrinting Davinci 1.0a Klipper configs

Hey folks, new Klipper user here, trying to build a config for my XYZprinting davinci 1.0a, it’s a cheap chinese printer, and found very little in regards to specs. (26.3 KB)

I’ve managed to come across a pinout excel sheet I’ve been working on, though the moment I send a command I get a printer not ready.

So this will be my project for the forseeable future, here’s my config file so far for those interested.
printer.cfg (6.6 KB)

See ya!
The doooop.

1 Like

Funny, I picked up this exact model (fairly cheap) recently and was planning to gut the electronics and replace them. It hadn’t occurred to me that it might be possible to run Klipper on the stock board. I’m very curious how you get along with the project.

One thing putting mine on hold (other than working on too many other printers) is that mine seems to be overshooting its endstop points. The end result is when it tries to calibrate, it completely misses the contact points so fails (off by ~5mm+).

What do you mean by misses? as in it reachs an x, y end stop and skips some teeth?

Also, just asking what firmware you are currently using?

I’ve not modified it at all yet, stock firmware.
When I try an run the calibration procedure, it will:

  • home
  • heat the nozzle
  • wipe the nozzle in X direction
  • attempt to wipe the nozzle in the Y direction and miss by about 5mm to the outside
  • move to the front-right bed-clamp and attempt to touch it (the auto-calibration works by contacting the metal nozzle to the metal clamp to close the circuit) and miss by about 5mm to the right (same direction as it missed the nozzle wiper)

I’m not sure why it’s doing this. I haven’t torn it down yet, but the opto-interrupter flag does not appear to be damaged at all.

Any update on progress with the XYZprinters?
For calibration failure Check and make sure your belts are all timed correctly. If either the X or Y axis have skipped a few teeth and got out of square it will miss bed, crash and fail.

I own a Da Vinci 1.0 pro (bowden) and a 1.0 AiO (direct).
I just started to gut the AiO and prep it for a Rapsberry Pi zero W with SKR 1.4.
Going to be a slow process for me. The mechanical side will be easy, Buy, I am not familar with the software side and have a lot to learn and figure out.
Once AiO is working well the 1.0 Pro will get switch over also.

Plan is for these to be a learning bed in prep to build a Voron printer.

I’m not sure what you mean by “timed correctly”. That’s what the endstop is for, for setting the (zero) origin.
If it skips teeth after zeroing, that’d be a definite problem, but it’s going straight from the endstop to far short of where it’s supposed to go (no impacts, no skips).

The SKR will certainly be a huge upgrade. I’m curious if you plan to try and get the scanner working. You might be able to use some of the code from the openscan project. I’d get at least a Pi Zero 2 W though (it’s basically a downclocked Pi 3 in a Pi Zero form-factor). Unless you don’t plan to use a camera with it, then a Pi Zero W should be fine (assuming you’re using the Pi for Octoprint).

If you have the funds for a Voron… I would not waste my time with the XYZ unless you really love projects. :slight_smile: That’s my excuse… and my XYZ is at the end of a list of projects (just something to keep me from getting bored once all the others are done).

Yeah, that is basically what I meant by “timed correctly”. I chased this problem for a day a couple years ago. Did not realize it was out of square till I took the top off and started investigating (keep it on a shelf).

I have stripped all the scanner parts out of the machine. I was not impressed with the performance of the scanning feature.
I have very little use for a scanner at this time aslo. If I ever get to the point where I want/need one, I will either build or purchase one.

The purpose of converting these machines over to klipper is mainly a learning experience. Also to have extra machines for the kids to run.

The next build will get a pi zero 2 w.
I have had most of the hardware need for this build laying around for a walso.

After I am comfortable with setting up and getting the firmware/software working I will look into a VORON build. I really like the possibility of a true mechanical autoleveling verse a software bed mesh compensation. The combination of both has some possible benefits also.

I have a list of projects usually always going🤣.Currently also working on a makermade maslow cnc router upgrade. Built my own z axis and dust collection. Also designing some automotive components for a hotrod friend.

If you’ve ever dealt with custom building Marlin, Klipper is a breeze in comparison. The hardest part about Klipper is flashing it, and that’s super easy with the SKR boards. You’re going to love it.
There’s even an installer script that automates the entire setup for you, although I’ve not tried it (it came out well after I was comfortable with Klipper).

I totally get it about having extra hardware laying around. :smiley:

The mechanical auto-tramming is why I went with a triple-Z with my design (I really need to finish the cable routing design in that thing, and redesign the hotend mount, and the part cooler duct, and…).

One really nice thing about the XYZ (once you get it up and running) is it should (being fully enclosed) be able to produce some nice ABS parts for your Voron… in theory, anyways.

I’m totally jealous of the CNC setup… I would so love to have the shop room for one!

Thanks for the good info.

This is my first dive into firmware.
Never had to setup marlin from scratch.
I have been running the stock xyz firmware and slicing with simplify3d. The 3d printers at work we run stock also.
I have been watch Nero3d’s videos. I have the pi zero w setup with uart connected to the skr 1.4 and working ish, pretty easy. I am stuck on creating the printer.config file as I have never done it before. I need to take time and read and experiment. LOL!

The xyz (when running good) does print really nice abs parts. We originally bought to protype for our small family business. But very limited in what you can tweak for setting. No firmware adjustments.

I am hoping with the klipper upgrade I get it to be a good quick prototype machine and print viron parts! Use it to print the development models and run “final” versions on the voron.

This also gives me time to decide between a trident and 2.4 design. I like the precision of the 3 point leadscrew bed leveling, but intrigued by the 4 point auto level gantry design.
I am thinking the trident maybe more reliable for my use. Thinking about a full heated inclosure (heated) with a high temp hot end. Add ability to print carbon nylons, PC and maybe even Ultem or PEEK.
Those would be upgrades down the road as it evolves.

Good choice with the UART communication. I finally tried that on one of my printers a few months ago, mainly because I was mounting the Pi on the inside and didn’t want to route the USB externally just to connect the two boards. It’s worked great and I think I’m going to do the same with other printers too (for the same reason).

That’s good to hear about the XYZ (that it prints ABS well). I bought mine used for fairly cheap mainly because it was fully enclosed and I figured I could update it cheaper than I could build an enclosed machine from scratch. My intent was to dedicate it to ABS for building other printer parts (I’ve been using PETG for years and love it, but ABS has a tiny bit more thermal headroom, AIUI). I then ended up finding great deals on a few other printers and got overwhelmed with projects. :smiley:
I’m also out of room :man_facepalming:
You’ve made me reconsider… I may bump the XYZ closer to the top of my list again. :slight_smile:

I just tried the keychain demo from the firmware… took many tries to get the bed adjusted to where it looked like the filament was laying down properly (remember, mine won’t calibrate). I finally got it to where the initial wipe is 0.24mm thick and it looks OK, although it appears to be overextruding on the first layer. I’m wondering if it’s supposed to be 0.3mm 1st layer for that one. The only way I could get it to complete a first layer was to scrub the bed with 99.9% IPA then drench it with hairspray.
Unfortunately, after it finished, half of the corners were curled up badly (one >1.5mm)
What do you use for ABS adhesion? ABS slurry? (I might have some Acetone somewhere)

I use good old Elmer’s glue sticks. My wife buys them for school in bulk. Use it straight on the glass or aluminum bed. The purple ones work best so you see where the glue is. Dries clear.
Clean with warm water on cloth every few prints and re apply.

The XYZ AiO and 1.0 Pro are very close in design. Big difference is between bowden and direct drive. The core structure of the machine is decent and probable the least expensive closed machine. I figured with electronics upgrade it could be an even better machine. I pretty much only use ABS for prints.
It prints well out of the box, but is greatly limited by the factory firmware and software.

If I have time I am.going to tinker with it some tomorrow. Has been a busy week at work.

Here’s my printer.cfg for my daVinci Pro, mind you its highly modified. Its with a MKS Gen L v1.0 board

step_pin: PF0
dir_pin: !PF1
enable_pin: !PD7
microsteps: 32
rotation_distance: 40
endstop_pin: tmc2209_stepper_x:virtual_endstop
position_endstop: -28
position_min: -28
position_max: 220
homing_speed: 30
homing_retract_dist: 0

[tmc2209 stepper_x]
uart_pin: PF5
interpolate: False
run_current: 0.800
sense_resistor: 0.110
#stealthchop_threshold: 999999
diag_pin: ^PK1
driver_SGTHRS: 60

step_pin: PF6
dir_pin: PF7
enable_pin: !PF2
microsteps: 32
rotation_distance: 40
endstop_pin: tmc2209_stepper_y:virtual_endstop
position_endstop: -3
position_min: -3
position_max: 220
homing_speed: 30
homing_retract_dist: 0

[tmc2209 stepper_y]
uart_pin: PK2
interpolate: False
run_current: 0.800
sense_resistor: 0.110
#stealthchop_threshold: 999999
diag_pin: ^PG1
driver_SGTHRS: 60

step_pin: PL3
dir_pin: !PL1
enable_pin: !PK0
microsteps: 32
rotation_distance: 4
endstop_pin: probe:z_virtual_endstop
position_min: -2.5
position_max: 225
homing_speed: 10

[tmc2208 stepper_z]
uart_pin: PL5
interpolate: False
run_current: 0.800
sense_resistor: 0.110
#stealthchop_threshold: 999999

step_pin: PA4
dir_pin: !PA6
enable_pin: !PA2
microsteps: 32
rotation_distance: 7.63
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PB4
sensor_type: NTC 100K beta 3950
sensor_pin: PK5
control: pid
#pid_Kp: 31.102
#pid_Ki: 1.938
#pid_Kd: 124.797
min_temp: 15
max_temp: 270
max_extrude_only_distance: 500
min_extrude_temp: 170
#pressure_advance = 0.60

[tmc2208 extruder]
uart_pin: PK4
interpolate: False
run_current: 0.800
sense_resistor: 0.110
#stealthchop_threshold: 999999

[heater_fan my_nozzle_fan]
pin: PB1
heater: extruder
fan_speed: 1.0
heater_temp: 30.0

[controller_fan my_controller_fan]
pin: PH4
fan_speed: 1.0

pin: PH6

[output_pin caseled_pin]
pin: PL7
value: 1

heater_pin: PH5
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PK6
control: pid
#pid_kp: 73.281
#pid_ki: 1.551
#pid_kd: 865.636
min_temp: 15
max_temp: 105

[heater_generic heater_chamber]
heater_pin: PK3
sensor_type: NTC 100K beta 3950
sensor_pin: PK7
control: watermark
min_temp: 15
max_temp: 70
gcode_id: C

[verify_heater heater_chamber]
max_error: 120
check_gain_time: 120
hysteresis: 5
heating_gain: 1

[gcode_macro M141]
{% set S = params.S|default(0) %}
SET_HEATER_TEMPERATURE HEATER=heater_chamber target={S}

serial: /dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0

kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 15
max_z_accel: 150
square_corner_velocity: 5.0

sensor_pin: ^PD3
control_pin: PB5
x_offset: -20
y_offset: 0
#z_offset: 0
pin_move_time: 0.4

speed: 90
horizontal_move_z: 5
mesh_min: 10,10
mesh_max: 200,200
probe_count: 6,6
fade_start: 0.5
fade_end: 2.5
mesh_pps: 2,2

screw1: 120,180
screw1_name: Front Center Screw
screw2: 208,26
screw2_name: Left Rear Screw
screw3: 32,26
screw3_name: Right Rear Screw

home_xy_position: 125,105
speed: 90.0
z_hop: 5
z_hop_speed: 10.0

[gcode_macro G29]

[gcode_macro Start_Print]
G92 E0
G1 E5 F1800

[gcode_macro Start_Print_ABS]
M141 S55
M140 S100
M190 S100
M104 S245
M109 S245
G92 E0
G1 E5 F1800

[gcode_macro Start_Print_EasyNylon]
M140 S50
M190 S50
M104 S245
M109 S245
G92 E0
G1 E5 F1800

[gcode_macro Start_Print_PLAPro]
M140 S60
M190 S60
M104 S220
M109 S220
G92 E0
G1 E5 F1800

[gcode_macro Stop_Print]
G92 E0
G1 E-5 F1800
G1 Z220 F600
G1 X0 Y0 F7200

[gcode_macro Bed_Screw]

[gcode_macro Home_All]
G1 Z220 F600
G1 X0 Y0 F7200

[gcode_macro caseled_off]
SET_PIN PIN=caseled_pin VALUE=0

[gcode_macro caseled_on]
SET_PIN PIN=caseled_pin VALUE=1

Any up dates on getting the printer.cfg file working for the Da Vinci 1.0 board?

I bought a Ender 3 and an orange pi to test Klipper (FLUIDD) and have it runnig pretty well.
Got frustrated with my XYZ AIO and Pro 1.0 (XYZ software and firmware is not great…).

Last night I took a spare pi zero w, set it up with FLUIDDPI and flashed the XYZ AIO.
I can successfully connect to the printer. That being said it, shortly after it shuts down due to an MCU temperatur error. I am assuming it is because it does nto like something in the printer.cfg file, I downloaded what you posted to start with, but have not dug into it or the pinout yet.


So quick backstory…
My internet went down over the weekend, service said quickest was today… SO: your wondering why I bring that up… :wink:

I spent that time getting my Davinci 1.0 (not A) up and running on Klipper!

I read [TheDup] post on his 1.0a last week and decided I would like to try too. Well I succeded and wanted you guys to be the first ones to hear it.

before I begin, let me say Thank You to TheDup… you got me going with making this work. Your config and your spreadsheet helped in getting me started. So Friday I got the gumption to do it, and boom I got it and am so happy :wink: one of the most interesting and yet ez installs

first 2 comments
A) I noticed that you had a 1.0a in your original post, but in your printer.cfg the pins you have listed are for a 1.0 not a 1.0a.

In the spreadsheet there are 3 tabs. 1st is for 1.0 and 2.0, 2nd is for 1.0a and 2.0a, and 3rd for AiO printers. (youll need to use different pins than I do)
B) in your printer.cfg file you have it set as a corexy but the davinci is a cartesian… (but you probably knew that wink wink)

Now on to the goodies :wink:

as a prereq: I loaded Debian on an old i3 4gb MSI laptop and installed kiuah, then klipper, mainsail, python3, ffluid, and mpg-streamer.

I began by flashing the davinci firmware then my journey into printer.cfg began :wink:

[*] Enable extra low-level configuration options
Micro-controller Architecture (SAM3/SAM4/SAM E70 (Due and Duet)) —>
Processor model (SAM3x8e (Arduino Due)) —>
Communication interface (USB) —>
USB ids —>
(!PA12,!PA13,PA0,PB5,PD6,!PB4,!PD5,!PD9) GPIO pins to set at micro-controller startup

Note: I added the Pins for heaters, motors, and step pins
The heaters and motors for safety so they dont kick in till klipper starts
The step pins so one of the advanced klipper features work. (endstop to motor phasing)

I started with a copy of sample-cartesian.cfg and updating the mcu id and then…

Starting with the basics getting pins, directions,and endstops (with and without !) working correctly (what the hell is a tilde anyway :wink:

Mucked around with direction and enable pins till they all went in the right directions.

I’ve got so much to tell, but this post is already long.

Thermistors were the biggest pain, but I think I got em
Based on research and older repetier work from
[luc-github] [Repetier-Firmware-4-Davinci]
(GitHub - luc-github/Repetier-Firmware-4-Davinci: Repetier-Firmware-0.92 based for DaVinci printer (Beta - so far so good))**
and others I finally got the thing running.

The enable pins and directions for the x and y steppers didnt take much, but a bit of a surprise though when working on the Zed…

MM Per Rotation…eh
Who woulda thunk migrating to a new printer OS was like going from imperial to metric, or learning the “New Math”… :wink:

As it says in the manual, just take the old motion settings from your printer in steps_per_mm and convert to mm_per_full_rotation (ya easier said blabla)

Steps for Z:
(200 steps per rotation is default, and omitted in most example printer.cfg’s, but listed for refrence in my config anyways; so get over it… :slight_smile:

Original posted config had 16 microsteps for all motors, and 40mm for x and y, and 8mm per rotation for z; Which is consistant with newer printers with a T8 lead screw.

But as found in additional late night reading in fluidd/klipper/config/docs (below is a snippet)
For example, the common “T8 leadscrew” has a rotation distance of 8mm (it has a pitch of 2mm and has 4 separate threads).
Older printers with “threaded rods” have only one “thread” on the lead
screw and thus the rotation distance is the pitch of the screw. (The
screw pitch is the distance between each groove on the screw.) So, for
example, an M6 metric rod has a rotation distance of 1 and an M8 rod
has a rotation distance of 1.25mm.

The Davinci is indeed one of those “Older printers” with a threaded rod for z-axis

snippit from eeprom save from my davinci 1.0
80.0000 X-axis steps per mm
80.0000 Y-axis steps per mm
2560.0000 Z-axis steps per mm
200.000 X-axis max. feedrate [mm/s]
200.000 Y-axis max. feedrate [mm/s]
5.000 Z-axis max. feedrate [mm/s]
40.000 X-axis homing feedrate [mm/s]
40.000 Y-axis homing feedrate [mm/s]
4.000 Z-axis homing feedrate [mm/s]


16 microsteps per full step
200 full steps per rotation
3200 microsteps per rotation
2560 steps_per_mm
1.25 mm per rotation

sounds like a M8 threaded rod to me…
After further review I was able to use 16 steps and 1.25 so I edited out my rant and updated the config.

With that I’m getting full range of bed movement now and it even sounds like the original davinci in zed moves

But for now on to the extruder:

99.000">Extr.1 steps per mm
50.000">Extr.1 max. feedrate [mm/s]
20.000">Extr.1 start feedrate [mm/s]
5000.000">Extr.1 acceleration [mm/s^2]

and halt:

Preempted by thermistors:

before I can move on to setting up extruding pins, directions, and steps; I first have to get the temps right!

I tried the original printer.cfg thermistor settings in it but they give wrong readings.

I start off with a idle machine with Repetier firmware, reports 20c/21c for hotend and bed respectivly.

@ambient the hotend stays a bit cooler than the bed (always noticed that) must be a metal thing…

after flashing with klipper the temps are 84.8c hotend and 47.1c bed using the ATC Semitec 104GT-2 set for hotend, and EPCOS 100K B57560G104F set on the Bed

Well… thats not right :wink:

It took some time but I finally got them by defining my own thermistors.

The thermistors are indeed Epcos, but they are not the 104F… I found the info needed buried in old .91 repetier for davinci… like i had to dig on an old laptop I originaly used to put repetier on my davinci

Ill post my whole printer.cfg later in the post. but here is the info on the thermistor setups without the pins, pids and other settings. just for readability…

Now please be aware although it seems to be working just fine ( I dont have a good thermometer to validate the temps ) till then use at your own risk.
After updating with these, I see 25c/24c at ambient and am able to verfiy both at 39c is 39c using a forehead temp scanner as it only goes to 104f, (humans are so cold…) after that it shows Hi and not the temp… ugh

But I am able to hit 270 on the extruder and 120 on the bed as reported inside Klipper… alot hotter than I usually run but wanted to ensure I could get there.

The PID tunes go fine as well. So I am hopeful in this regard.

[thermistor DAVINCI_ext]
temperature1: 25
resistance1: 100000
beta: 2470

sensor_type: DAVINCI_ext
pullup_resistor: 51000
min_temp: -20
max_temp: 300

[thermistor DAVINCI_bed]
temperature1: 25
resistance1: 440000
beta: 4036

sensor_type: DAVINCI_bed
pullup_resistor: 51000
min_temp: 10
max_temp: 150

Now after getting the basics I started adding all the luxury items
As of now have the following added.

First is the dimensions
All the other printers in the world are 0,0 is front left corner of the bed…
Originaly the DaVinci coordinates was 200x200x200 with 0,0 at the rear right corner nerest the filament dump box.
The optical endstops on the Davinci 1.0 are outside the build area, and originally they were positioned @ x-33 y-12 z0 (fyi 1.0A is different even at that step and so endstops and min max position would need changed to match yours.)

However that being said (and this may upset some davinci users) I turned the coordinates around on my DaVinci Klipper config to industry standard 0,0 being front left corner…
Full range is now x-4, y-5 to x233, y212 with endstops being at x233, y212, z0

Both cpu fan and hotend fans are activly controlled and displayed off/on in fluidd (A part fan is in the config but not installed on my printer yet)

I have added the DaVinci mcu temprature as well

Filament runout and Filament motion sensors are both working and can be disabled in Tune page in Fluidd.

LCD LED and Case LED’s are working and can be turned off in Fans & Outputs in Fluidd

I have the buzzer working and can be called from macros. But I have questions on it, like there is a slider that appears in Fluidd, it seems to have a 0 - 1 both being off, and .1 - .99 on and effectivly being a volume control… ?? is this an affect of soft pwm? is this digital amplitude modulation (thinking of possibilities… :slight_smile: ) I had assumed it would change frequency (tone)

I also have the Top Cover sensor working, although other than just showing on the Tune page in Fluidd thats about all I did with it so far.
I may in the future try to to kick off a pause and filament change and resume only when lid is shut. (think safety)

I added in the Cartrige slots in hopes that one day i can get it to read the materials temps etc like thier doing with reading spool barcodes on MMU’s… but for now, its just listed in the tune page next to top cover.

Although the Winstar LCD is a hd44780 compatible display, its not working at the moment. But I was able to enable 5 of the 6 buttons and do see the screen changes when button is pressed (its a font thing i have a feeling, as I do see symbols and text on the screen)

The biggest button on the front I made into the Kill button :wink:

Next is Bed Probing:
this includes (corner probe pads)
currently the probe has no offsets defined:

  1. the nozzle to probe z offset cancels out with the offset of pad to bed height.
  2. the probe points I have in .cfg already take into accout the x offset of the inductive probe. However in thinking of it, an X offset and slightly different probe points could be accomplished if needed for bed_tilt to be more affective.

and some macros for bed leveling is working

The Probe is working and tested good.
*see below for best tramming steps I have come up with for this config.

  1. Run BED_SCREWS_ADJUST in Tools
    This moves the nozzle to 3 points on the bed just above each screw. Do the paper thingy with each, with thin paper it should just loose enough to pull out (still some tension) and hit accept on each. It then it goes to each of the three corners probe pads to let you verfiy the probe sees the pad. *issue command Query_Probe in a console window on another tab for each pad, switch between tabs to run the command to see if it says TRIGGERED before hitting accept on each of the 3 pads.
    At any time if youve made changes, click changed and it will reverify each pad again.

    This runs a test of the three corners and tells you how much to turn each screw to bring them level(er).
    2b) Run the Multi-probe Macros for the corner your trying to get level, it will show in the console results of 10 probes on each. This way you can try to adjust the screws on-the-fly.

  3. Then finally run the BED_TILT_CALIBRATION in Macros
    This will have the system probe (ALL 4) corners and automaticly adjust the zed to the bed for that session, or similar to bed_mesh it can optionally be saved for later boots by choosing save-restart.
    3b) call that macro before each print, it should help that first layer lay down smooth :wink:

*Note BED_TILT is not compatible with BED_MESH which requires a bltouch type probe to wander around the bed and probe many positions.

at the moment I’m currently working on some of the other advanced klipper items like:



I commented out those for the post so it doesnt error on a 1st boot.
So far endstop_phase is working but its interesting to say the least.
I made macros to help update them when it detects a change which seems too often imo. probably a mix of worn or loose belts and optical endstops. Ive had over 2000hrs of print time on it :wink: Luv my DaVinci
sorry for all the edits, but wanted to fix some of the typos and formatting :wink:
come to think of it, should I be stripping the Pids out for posting too??
I’m just getting started but Its been real fun getting this done…
And sorry for such a long post!

macros.cfg (1.9 KB)
printer.cfg (7.0 KB)

1 Like

@glabifrons Its the same way on mine, its not a nozzle wipe on Y its a wipe for the probe . but like you said the wipe for the nozzle is to the X with in my case a silicone strip between two stainless tabs.

Ok guys update from today on Thermistors and Temps
Two main takeways from this update.
Klipper is the coolest thing ever! the tools it has are incredible.

1st) I added pwm_cycle_time = 0.0166 to the extruder and bed and walla it took care of the flickering Case LED during warmups

2nd) So yesterday with further testing, I found that with the Betas’ in the printer.cfg I posted were way off.

I could set the bed to 50 and it would get to 50, but set it to 100 and wouldnt get there, it held around 70c

So today I used a really great command in the console in Klipper.
QUERY_ADC It allows you to see what is going on realtime with the heaters with this full command:
QUERY_ADC NAME=“heater_bed” PULLUP=51000
QUERY_ADC NAME=“extruder” PULLUP=51000
It showed me the current adc values, as well as the resistance when the pullup value is added.
I know the DaVinci uses 51k pullup, and I was expecting 100k on the exp and the bed at 440000 at 25c

Well what do you know when I got up, this morning (I opened top and front doors up last night)
It was 21c on the wall clock, but 20 reported in Klipper.

$ QUERY_ADC NAME=“heater_bed” PULLUP=51000
// ADC object “heater_bed” has value 0.896642 (timestamp 33.430)
// resistance 442431.778 (with 51000 pullup)

$ QUERY_ADC NAME=“extruder” PULLUP=51000
// ADC object “extruder” has value 0.662698 (timestamp 16.760)
// resistance 100200.000 (with 51000 pullup)

So I started by placing the thermometer on the bed and another leaning on the extruder and closed the doors.

A few min later after warming up to enclosed temps

// ADC object “extruder” has value 0.662118 (timestamp 136.260)
// resistance 99940.464 (with 51000 pullup)
// ADC object “heater_bed” has value 0.894505 (timestamp 130.730)
// resistance 432437.500 (with 51000 pullup)

This means the 25c setting I had was wrong!.
In reality its 440k @21c on the bed, and 100k @21c on the extruder.

So I changed to original default modified to 21c @100k ext & 21c @ 440k bed, But left the beta’s as-is.
However the temps still didnt match the thermometers I had placed on them

So running up to 50c & 70c and watching the resistance, and the getting temp the thermometer reaches.
In order to determine the beta, the calculator needs 2 temps resistances, so I made a new beta for each based on observation at temps from the printer

I ran both through the beta calculator with the following values.

Resistance 1 (Ω)
Resistance 2 (Ω)
Temperture 1 (°C)
Temperature 2 (°C)
β (K)

Resistance 1 (Ω)
Resistance 2 (Ω)
Temperture 1 (°C)
Temperature 2 (°C)
β (K)


[thermistor DAVINCI_ext]
beta: 3946.31 # 21c@100k 50c@30k
temperature1: 21 # taken from original post but changed to 21
resistance1: 100000


[thermistor DAVINCI_bed]
beta: 2584.36 # 21c@440k 50c@200k
temperature1: 21
resistance1: 440000
#beta: 2470 # original value from configuration.h .91 davinci repetier

// ADC object “extruder” has value 0.364103 (timestamp 759.260)
// resistance 29201.613 (with 51000 pullup)
// ADC object “heater_bed” has value 0.798962 (timestamp 754.930)
// resistance 202683.571 (with 51000 pullup)

Looks better, but the bed… :frowning:

// ADC object “heater_bed” has value 0.592033 (timestamp 1510.730)
// resistance 74010.101 (with 51000 pullup)

calibration tool reports 112f which is 44c

Im going to shoot for 50c on the thermometer and see what the resistance is and reput the beta

updated with results

Resistance 1 (Ω)
Resistance 2 (Ω)
Temperture 1 (°C)
Temperature 2 (°C)
β (K)

updated printer.cfg with
beta: 4072.88 # 21c@440k 50c@137k

restart and
set to 50 and reports

$ QUERY_ADC NAME=“heater_bed” PULLUP=51000
// ADC object “heater_bed” has value 0.715537 (timestamp 5172.330)
// resistance 128285.331 (with 51000 pullup)

now to go to 70 which should be 158 and max on calibration tool

149f is 65c

I found the typo and need to rerun heater_bed…

reset numbers to

Resistance 1 (Ω)
Resistance 2 (Ω)
Temperture 1 (°C)
Temperature 2 (°C)
β (K)

[thermistor DAVINCI_bed]
temperature1: 21 # taken from original post but changed to 21
resistance1: 440000
beta: 4174.14 # new beta 21c@440k 70c@58k NTC Thermistors - Calculate Beta Values | Ametherm

[thermistor DAVINCI_ext]
temperature1: 21
resistance1: 100000
beta: 3946.31 # 21c@100k 50c@30k

The Bed is now reporting 70c in Klipper & 158.5f on thermometer wohoo!

Good to go on that one for now, still a bit off on the extruder, I think it could be improved with 3 temps instead of a beta… maybe…

I’ve seen other configs mentioning that low temps wernt as accurate as higher temps…

hmm but for now I’ve got to get a better thermometer to test higher temps ugh…

But wanted to update you guys on my progress… This is so fun!
I’m posting a cleaned up printer.cfg and macros.cfg from todays work.

Have a great day
printer.cfg (7.5 KB)
macros.cfg (2.2 KB)


For what it is worth, if you can take 3 temperature/resistance measurements then you can directly use the Steinhart-Hart method to characterize the thermistor. That method has much better accuracy than the “beta” method. Configuration reference - Klipper documentation


Thank you, I did exactly that!
The progress I made yesterday was extra ordinary by using the built in tool “query_adc” to reference the resistances against a digital thermometer I was able to create the three temps like you suggest.
I started with ambient, then mid upper and then high temps… kept getting alot of “Math domain” errors but finally got these to go…
I cant verify the high temps as my temp probe only goes to 114c.
Ill be borrowing a really good one this sunday. hope to have this finished then.
Ill post my latest printer.cfg and macros.cfg
(the big break came when I finaly cracked the case and looked at the resistors on the mobo. They are indeed both 4.7k. I adjusted the config accordingly.
The commands I ran were:
query_adc name=heater_bed pullup=4700
// ADC object “heater_bed” has value 0.883700 (timestamp 13896.630)
// resistance 35712.598 (with 4700 pullup)

query_adc name=extruder pullup=4700
// ADC object “extruder” has value 0.659463 (timestamp 13884.760)
// resistance 9101.721 (with 4700 pullup)

printer.cfg (10.1 KB)
macros.cfg (2.2 KB)

I have got to see if my Pi is picking up my Da Vinci at all, as OctoPrint doesn’t, so I can flash. But @DaVinci10 , inspiring work. Thank you very much! Mucho help if I can get it flashed! And works better with my budget than having to rebuild the whole thing, just try it with ABS. Thanks again! If it isn’t normal for Octo to miss the XYZ, someone hit me up so I can have a better idea of the problem I am looking for. Thanks!