Marlin 2.x for a CR-10 V3

I’ve been wanting a 3D printer for a while and finally bought one. I ended up with a Creality CR-10 V3 based on a friends recommendation.

CR-10 V3

I added a BL Touch v3.1 to it and then, instead of using the Creality provided firmware based on Marlin 1.1.6 that still says “CR-10 V2” all over it, I built Marlin 2.0.6 for it with a lot of help from some friends.

Here’s my original Reddit post: https://www.reddit.com/r/CR10/comments/i8obod/marlin_2x_on_a_cr10_v3/

Here are my configuration files and some pre-compiled firmware if you want to use it “as is” and not have to build your own: https://git.pickysysadmin.ca/FiZi/cr-10-v3-marlin-config

I’ve just completed a print and appears to have worked just fine so I think this firmware works.

32 thoughts on “Marlin 2.x for a CR-10 V3

  1. Thank you a lot!!! Working wonderfully. Why is the temperature is limited to 240 only? I used 260 for my PETG before on CR10-v3 Titanium Extruder, and now it’s limited to 240.

    • Looks like 240 might be a default in Marlin 2.x

      If you look in Configuration.h around line 469 these settings are commented out:


      // Above this temperature the heater will be switched off.
      // This can protect components from overheating, but NOT from shorts and failures.
      // (Use MINTEMP for thermistor short/failure protection.)
      #define HEATER_0_MAXTEMP 255
      #define HEATER_1_MAXTEMP 275
      #define HEATER_2_MAXTEMP 275
      #define HEATER_3_MAXTEMP 275
      #define HEATER_4_MAXTEMP 275
      #define HEATER_5_MAXTEMP 275
      #define HEATER_6_MAXTEMP 275
      #define HEATER_7_MAXTEMP 275
      #define BED_MAXTEMP 120

      I suspect if you changed this:

      #define HEATER_0_MAXTEMP 255

      to this:

      #define HEATER_0_MAXTEMP 260

      You’d get your max temp of 260c back.

      I can look into it when the next Marlin Firmware comes out. I don’t print that hot.

      Are you sure the Max is 240c and not 255c?

    • Ah ha, found the answer:

      https://github.com/MarlinFirmware/Marlin/issues/15484

      MAXTEMP is defined as “if a heater reaches this temperature there’s something seriously wrong and we need to do an emergency stop”. By default you can only set a heater temperature to MAXTEMP minus 15 degrees – the extra is so the error condition doesn’t trigger when the temperature is converging to the set value. If you need to set the temperature to 250C you need to set MAXTEMP to 265.

      So 255 – 15 = 240

      You’d need to change:

      #define HEATER_0_MAXTEMP 255

      To:

      #define HEATER_0_MAXTEMP 275

      I will do this next Marlin update since our printers are rated for 260c.

  2. Hey Eric, This is awesome!
    I also recently got a BL touch from Creality and it kept bugging me that it had the V2 label instead of V3 (Just one of little details that makes a big difference haha) I tried downloading their source code, but then realised the status screen uses an image and not text for the top left corner.

    I was just curious, have you had any issues with the power recovery feature with this firmware? I was doing some searching of v1 vs v2 and it seems Marlin 2 uses more memory than v1 and on a few boards Marlin v2 doesn’t work correctly due to memory requirements. What I can’t seem to work out is if the V3 has an 8-bit board or not, as I found it strange that Creality was still using v1 on new printers. Thought perhaps this could have been a factor. (or they got lazy haha)

    Again, thanks heaps for this! I plan to try it out anyway once my current print is finished.

    Cheers
    Dale

    • I believe the V3 uses an 8-bit board. When I compile the firmware I specify the build environment to be “mega2560”.

      A quick Google for “mega2560” comes up with this: https://store.arduino.cc/usa/mega-2560-r3 which says “The 8-bit board with 54 digital pins, 16 analog inputs, and 4 serial ports.”

      I have not tested the power loss/resume function. I have my printer hooked up directly to a Octoprint VM and don’t use the SD card. I suspect for the resume function to work the print has to be on the SD card.

  3. Will this also work without BLTouch? I don’t currently have one but would like to upgrade to marlin 2.0.x since I think I am having issues with the stock version of the firmware.

    • I haven’t tested it but I don’t see why it wouldn’t work with out a BLTouch attached.

      Just don’t run any of the mesh leveling Gcode and you’re probably fine.

      You can always test and if it doesn’t work revert to the stock firmware. Low risk and doesn’t take long.

      If you want to alter the firmware yourself you basically want to comment out (add //) line 31 in configuration.h:

      //#define CR10V2_BLTOUCH

      With the next release of Marlin I will start compiling a BLTouch and non-BLTouch version of the firmware (if I remember).

      I highly recommend getting a BLTouch.

      • Thank you i will try that.

        I have one ordered but it will take a few days to arrive. But i am having issues with the stock firmware.
        Tough i think i received a lemon since my v3 keeps freezing and i have to hard reset.

        I figured it try another firmware and see if it might reset the pcb. Thanks for answering my question though. and having both versions is a great idea for those people like myself who don’t get bltouch right from the start.

      • Hi Eric,
        I first tried it with your precompiled version of 2.0.7. this did not properly work since i do not have the BLTouch.
        Then I recompiled a Version of your own code with the line changes:

        line #31 commented out
        // Is the BLTouch option installed?
        //#define CR10V2_BLTOUCH

        line # 665, 668 & 669 set to false and removed the ENABLED(CR10V2_BLTOUCH)
        // Mechanical endstop with COM to ground and NC to Signal uses “false” here (most common setup).
        #define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Z_MIN_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the endstop.
        #define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
        #define Z_MAX_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the endstop.
        #define Z_MIN_PROBE_ENDSTOP_INVERTING false // ENABLED(CR10V2_BLTOUCH) // Set to true to invert the logic of the probe.

        this runs Marlin 2.0.7 on CR10v3 without the BLTouch. Thanks for all your hardwork.
        -Lex

        • Thanks for the update! Odd you had to comment out multiple lines. I thought commenting out the bit on Line 31 automatically disabled all BLTouch related code in the firmware.

          Will keep an eye on it for the next release.

  4. Hi Eric

    Firstly, thanks for the pre-compiled. Saved me a lot of time in figuring out how to compiled i myself. While testing the resume on power failure feature, the screen went berserk and was showing weird large chinese characters. I realized the ‘The POWER_LOSS_RECOVERY’ flag is not uncommented in Configuration_adv.h. Would you please uncomment it and compile a build! This would be much appreciated.

  5. Hi Eric,

    thank you for this nice work and the constructive discussion! Most likely I will buy myself today an CR-10 V3 printer, and I will be able to follow up more with you.

    Do you still recommend this printer for small details (like mechanical parts), and for big prints as well? Does it give accurate and good quality prints?

    • Honestly I wouldn’t call myself an expert on any of this. I still have a TON to learn compared to those that have been doing it for years.

      Now that I’ve worked out the kinks in my CR-10 V3 and learned enough to troubleshoot basic printing problems I’m definitely happy with it. Should I have bought a Prusa instead? Maybe.

      I’d hit up some of the 3D Printing Subreddits if you’re looking for advice on what to buy.

  6. Hi there,
    I have upgraded my current Marlin 2.0.5 (that was having some jerk issues), with your latest https://git.pickysysadmin.ca/FiZi/cr-10-v3-marlin-config/-/releases/2.0.7.2_2020-11-10-1103, thru the Mattercontrol firmware updater. Fw upload went ok, the LCD is working and I can pester with settings.

    Issues:
    1. I can’t connect to the printer any longer :(
    2. Printer itself is more or less working, while it is clearly having some extrusion steps issues (wire is being janked in an out :D)
    3. I will try to revert to the previous version, or any other hex … do you have any recovery procedure?

    Pro:
    Bed leveling is working fine, a test print show the nozzle brushing the plate.

  7. Hello,
    Managed to recover access back using avrdude; quite a strange behavior indeed; I was not expecting this kind of connection issue!

    I flashed back my previous fw using AVRDude, now the app is working again.

    For everyone out there, AVRDude command line was the following:

    .\avr\bin\avrdude -p atmega2560 -C .\avr\etc\avrdude.conf -c wiring -P com4 -b 115200 -F -U flash:w:crealitylatest.hex -v

    Note:
    1. – P com4 ; my printer is on COM4
    2. flash:w:crealitylatest.hex ; w is for write, followed by filename

    Luckyly I’m doing a backup each time I try a new firmware :)

    • Thanks for the tips. I’m sure someone will find this helpful if they run into the same problem.

      I use the ‘Firmware Updater‘ plugin in Octoprint to load up my firmware. I’ve yet to run into any issues like you described. Worst case I’ve had to power cycle/unplug/plug my printer to get it to be recognized again. I have yet to have to revert but obviously your mileage may vary.

      I also had a problem where my print head was being dragged across the print even with z-hop enabled and a very generous hop value. I ended up solving the problem (I think) by re-leveling my X arm. It was slightly lower on one side.

      • I am a windows user; still need to setup octoprint over Raspi 3 and dedicate it to printing: I have tried to run it in a container with no luck so far. I haven’t much time to dedicate to this project, unfortunately.

        Current issue with 2.0.5 – the jerk model for movement is not correct: the carriage is standing in the same place too much and the filament will ooze at each corner. I have read that is a known bug of that release; I should enable the standard jerk routine as the “advanced” is failing.

        Yep, that X arm issue happened to me too – I have another printer and can tell that those steppers are a bit underpowered. If you sligthly press the carriage bridge on one side, you will end up misaligning; this won’t happen with the other printer.

        note: bltouch bed leveling behavior from 2.0.5 to 2.0.6 has changed: with 2.0.5 at each point probed, the bltouch probe pin would stove; with >2.0.6, the pin will become red for an instant then the carriage move to the next point.

        I think we have a slightly different printer – I have the CR-10 V2 + Creality BLTouch; so a simple firmware drop-in would not work, I will prolly need to recompile from the basic; each toolchain I’m trying seems to have some bug at a certain step, I’m a bit p!ssed.

          • Update: I’m using the latest 2.0.7.2; with Creality V2 configs.

            Bugs solved:
            #define BAUDRATE 115200
            Serial disconnection was caused by a wrong serial speed; that was set to 250.000 in the default configs.

            Bugs still open:
            After a bed leveling, the nozzle is still around 10mm over the plate, printing on air – your firmware version was working fine.
            were you using the bugfix release?

          • Checking the configurations I’m using I have this:

            #define BAUDRATE 250000

            That being said my Octoprint is configured for ‘automatic’ when connecting to my printer, I think it negotiates 250000 and “just works”. Maybe you’ve got a bad USB cable or not enough bandwidth on your USB bus? There was one point where I was writing a ton of data to a USB HD using the same USB BUS as my printer and the printer kept dropping it’s connecting and rebooting.

            I can’t actually find anything in the manual or on the website about what the buad rate is supposed to be for the CR-10 V3.

            I wonder if your height issue has something to do with your z-offset?

            I’ve completed 2 prints using my 2.0.7.2 firmware I built a few days ago. Previous to that I was using 2.0.7.1 with no issue.

  8. Thank you, thank you, thank you!
    Lost filament runout abilities after installing Octoprint with original firmware. I really didn’t want to wire it directly to the Raspberry Pi as I thought it shouldn’t be necessary. Doing some research on Marlin 2.0 firmware I ran across your Reddit thread. I really haven’t seen anyone else attempt this yet for our particular printer and I don’t think it would be something I’d attempt on my own at this time. I made some adjustments to align the print with the bed properly and adjusted speed and distant values for the filament change in the advanced park feature (G600). I also adjusted the Park Point to my liking and of course changed Probe Z offset values to match my setup and including the probe to bed offset in that part.
    If you’d like I’m happy to share my changes with you.
    Thank you also for your clear instructions in setting up the Firmware Update Plugin, it was very helpful.
    Have a beer on me!
    Thanks again

    • You’re very welcome! and thank you for the tip!

      Please feel free to share and customization details here or via my e-mail.

      Not going to lie, I’ve just completely bypassed my filament run out sensor and have been relying on weighing my spool and printers and using Excel to keep track of where I think I’m at. Have yet to finish a spool to see how accurate this system is.

      • I was considering doing that exact same thing but the thought about having a bunch of end rolls kicking around turned me off of it!
        The runout sensor works great in Marlin 2.0 after the config changes, you should really try it out. You’ll be able to use those rolls up with confidence!
        Sent you my changelog.

  9. Hey guys, fantastic work here. I do have some questions. I have a brand new cr-10 v3 which I promptly upgraded with an authentic BLTouch. However, when trying your firmware I get a VERY strange sound from the z-stepper motors. I can manually move them via pronter, or disabled with no sound or issues. However, during print it occurs. Also after about 4 or 5 layers the z- appears to not be raising anymore or correctly as the nozzel begins dragging through the spent filament. I have rolled back to the cr-10 v2 w/ bltouch software on the website and the issue resolves. Any ideas what this could be?

    Thanks in advance.

    • I did have a similar issue but I didn’t think it was firmware related. I ended up re-leveling my z axis and I believe that cleared things up for me. I haven’t had any nozzle scraping since then.

      • I’ve done a bunch of tinkering and managed prints to cooperate rather nicely using your firmware, it was related to the x crossbar. I have narrowed down the weird goose honking (best I can describe). It is related to the titan direct drive. Once I noticed and figured it out it can been seen on every retraction. I will take it apart later today and see if I can lubricate anything or decipher the exact cause. This is my first go with a titan. I have 2 other micro-swiss direct drives on ender 3 pro machines.

        My guess is that there are some different values in the firmware possibly related to retraction? I have yet to look. Seems more likely the noise issue should or could be resolved with the physical direct drive itself and was just masked by settings.

        Thanks again for all your work.

        • This is great info. I think I know the honking you’re talking about.

          Let me know if you find any setting tweaks that help.

          Beyond the odd noise from time to time prints come out just fine for me.

        • Hi Kenny,
          Try changing the DEFAULT_RETRACT_ACCELERATION value (in Configuration.h) down to 500. Retraction movements are quite a bit smoother after that, I brought the other acceleration values down to 500 as well.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.