This part of the site is now the Primary. The original site is still available for reference at - caggius.wordpress.com
This section will be updated as and when I see new issues and solutions....
Feel free to send me any additions !
My advice to anyone planning to install an SKR Board with Marlin for the first time is to keep it simple.
When you install a Marlin build system for the first time, then proove that in simple stages.
Build the default ATMega solution first.
Then change platform io and Marlin for the processor and board only, build that.
Then you can start adding your boards features in stages.
Doing this you will always know what changes/setup caused a build failure making debugging a lot easier at the cost of an extra hour or so. This will save the beginner a lot of time.
Do not apply all your advance features at one time. Start with a basic setup and get that working first
TMCs in legacy mode not UART or SPI
Display in emulation mode
Manual bed levelling and no BLTouch
Physical end-stop switches and do not use TMC homing
Then add one enhancement at a time. That way you will get a better sense of achievement and will not waste time going round in circles debugging multiple problems that can interact with each other.
The following sections are meant as some help for those using a BTT SKR Board with an ANet like setup.
They are a collection of responses (mine and others) to queries on the ANet and BTT Facebook Groups.
The list has embedded links so click on the item to jump to that topic.
I see a lot of posts on the 3D printer facebook forums “My motherboard just died on me, again” the posters shouting IN CAPITALS about the poor quality of Chinese manufacturers. Occasionally they are right but, more often than not, they themselves are the most likely cause of the demise. One blown board is bad luck, two or more failures and it is far more likely that it is something that you are doing and not a manufacturing fault.
Most 3D printing enthusiasts have not had any formal electronics training and do not understand the electrostatic handling requirements for modern boards. They falsely believe that a 32 bit board is as robust the older 8 bit boards. The modern 32 bit printer boards all use 3.3V ARM chips. These chips use a technology which is a far more fragile than that used on the older 8 bit 5V ATMEL controllers.
You only have to walk across the room on a Nylon mix carpet and you can build up enough static charge to fry a CMOS board when you touch it or something connected to it e.g. the SDCard Holder, or hot end wiring.
So when building, or just using the printer, e.g. swapping the SDCard out, always take ESD precautions and ground yourself first. For example by touching the power supply case first. One precaution you can take is to earth the printers metalworks providing an easier route to ground for a spark than through the electronics.
Avoid moving the X or Y axis manually, the stepper motors will act as voltage generators. On the original A8 printer, with the power turned off, the 2004 display backlight will illuminate when you move the X or Y carriage. If you move a carriage fast enough then the voltage they generate is sufficient to blow the stepper drivers and if you are unlucky the main processor as well.
Most motherboards provide 5V feeds on the end stop connections (to supply active sensors) but the SKR’s only have 3.3V tolerant sensor pins. So make sure you do not accidentally or by design short these together. End stop switches should be wired open circuit and activate to ground the sensor wire, this avoids having to voltage/level shift the signals. If you buy an active sensor (inductive, optical, hall effect or BLTouch) check that their output is ground switching and does not have an internal 5V pull up resistor. Where possible use an Optical Isolator board to separate an active sensor from the mainboard.
Powering up any board with a stepper driver plugged in the wrong way around is a sure way to write off both the driver and main board.
Not normally fatal, but troubling are noisy power supplies. The combination of the cheap noisy power supplies provided with the original 8 bit printers and the much faster 32 bit main boards (100MHz vs 16MHz) can cause problems on the serial connections (TFT, UART, SPI and SDCARD). So you may need to dial down the serial speeds and/or add some additional bypass Capacitors. I run with an extra 1000uF 16V Capacitor in the Z Max end stop socket.
Regular Maintenance and Pre-flight checks are essential. A 3D printer has a lot of moving parts and the moving wires attached to the carriages will eventually fracture or fully snap and can short-out. So inspect the wiring to the bed and hot end before turning the printer on.
The most commonly reported known failure causes on an SKR 1.3 are:
The hot end temperature sensor line, caused either by a 12V short from the heater element to the sensor or a static discharge through the X carriage.
The bed heater cable having a partial break and overheating or a full break and shorting to the bed sensor.
Cleaning the hotend ! Using a wire brush is asking for a broken thermistor or a costly short circuit.
You will get a thermal runaway report if the reported hot end temperature does not rise quick enough. Marlin assumes that the heater has dropped out and is setting fire to your house, so switches itself off.
Feb 21 - For the past couple of weeks I have been experiencing Thermal Runaways and today after a failed print (big filament blob) every subsequent print has failed for a thermal runaway. I think these were actually two separate faults but the first could well have been exacerbated by the second if it had been present/partially present before the failed print . The first was a badly located parts cooling fan nozzle which was blowing directly on the hot end extruder causing a 10 degree drop in extruder temperature that could not be recovered in time as I was printing at 225C which is towards the top limit of the ANet heater.
The second failed print, I suspect, was actually stuck to the Thermocouple/Heater cables and in clearing it I pulled the thermocouple out of the hot end by just a millimetre. With the result that it was underreporting the extruder temperature by 20C to 30C and it never reported reaching the target print temperature in the allowed time, although it was actually a lot hotter. I was lucky as the thermocouple did not short to the heater and blow the main board.
There are several causes of Thermal Runaway and you just have to work down the list until you find yours.
Use your eyes ! Check the thermocouple is seated in the heater block properly and that the connectors are pushed home fully. Be very careful if you are using the provided thermocouple screw to clamp the wiring - I create a small soft washer using some PTFE Sheet to prevent the screw cutting through the thermocouple insulation.
If the temperature is showing zero - then the Thermocouple is either open circuit or not connected to the board.
If the temperature is showing room temperature then the thermocouple is connected to the board. But it may not be connected properly to the Hot End.
From the Marlin Interface, select Temperature - Set Nozzle to 40C - Does the Hot End temperature Rise ?
Using a thermometer check that the actual Hot End and the temperature reported by Marlin match. If you have a thermometer capable of higher temperatures then set the Nozzle temperature higher.
I use an external type K lead pushed between silicon sock and the heater block and observe the two temperature readings as the block heats. If they differ significantly then it is likely that your thermocouple is not seated properly in the block, has faulty wiring or is misconfigured in Marlin.
Use your eyes ! Check the heater is in the block and not loose - but make sure NOT to over tighten the grub screw and short the power rail to the block and thermistor sensor blowing the main board.
Then check the wiring to the MOSFET and/or main board. Carefully feel the connectors to make sure that they are not too hot - caused by a poor, partially broken or loose connection. Check the connectors are screwed on tight.
On the SKR 1.3 the hot bed is supplied by its own 20A fuse . Everything else, including the extruder's hot end heater, is supplied by the other 10A fuse.
Check for blown fuses or loose/poor fitting fuses as this can cause problems.
The MOSFET's are ground (-ve) switching and the +ve 12V/24V rail is permanently on (hence it is easy to short the hot end to the thermistor whilst cleaning).
Look at the LED's on the SKR to see if they are on or flashing in operation, then use a multimeter (or a car light bulb) across both output terminals to see if the MOSFET is actually switching.
Both of them ? If you install an external MOSFET, curiously, you can connect the internal MOSFET output wiring to the switch lines of an external MOSFET in either orientation !
Why is my print bed not getting hot?
There are a number of possible causes.
1 – The bed heater has failed
2 – The bed heater connector has broken
3 – The wiring to the bed heater has broken
4 – The MOSFET has failed
5 – The Power to the MOSFET has failed (Fuse blown)
6 – The Controller chip pin is damaged and not requesting Power
7 – The Thermostat is saying the print bed is already up to temperature
Debugging is easiest performed in a different order.
a) Turn on the printer (using the Marlin interface)
Do the Bed and Hot End Thermostats shows similar readings ? Mine show 20C and 21C. If they are close then the thermostats would appear to be working.
c) is there 12V on the bed +ve output?
Measure the voltage from the Bed +ve output of the main board to the power supply input ground. Do NOT use the Bed -ve connector. If you have 12V the fuse and board track is OK. If it fails then you have a problem between the fuse and the Bed +ve connector, normally a bad fuse holder connection.
d) From the main Marlin menu choose Temperature, then Bed and set the target to 50C and click to start it.
On an SKR 1.3, does the green LED between the legs of Q2 turn on ? If yes, then the Controller is telling the MOSFET to turn on and supply power to the heater.
c) Is the bed MOSFET (Q2) working? Whilst it is still trying to reach 50C (solid green light) measure the voltage across both bed heater terminals it should show 12V. If not we need to test both connections.
e) Now Measure the voltage from the 12V +ve supply (not the heater +ve), to the heater bed -ve output, if this shows 0V then the MOSFET is not switching. If it does show 12V then the board is OK and you have a bad heater or more likely a wire snapped from the board to the bed.
f) Most bed heaters have a red LED underneath that shows if the heater is running. If the red bed LED goes on in time to the Q2 green LED and there is no heat then the heater is broken.
If you do not have a red LED then unplug the bed and measure the voltage across the red and black wires to check that you have a connection from the processor board.
Most RepRap 12864 style displays were designed for use with an 8 or 16Mhz ATMel controller. However the newer 32 bit boards can run at 100+Mhz so what was a nice wide signal/data pulse from an 8MHz controller can now appear as a narrow glitch/spike to an old style LCD display, causing what appears as a corrupt display. So the signal widths need to be modified in software.
Add the following defines
#define ST7920_DELAY_1 DELAY_NS(0)
#define ST7920_DELAY_2 DELAY_NS(250)
#define ST7920_DELAY_3 DELAY_NS(250)
My TFT display shows “No printer connected”.
You need to have defined both Serial Ports and set the BAUDRATE on both the TFT and the Main Board to the same value. The TFT connection is a simple RX/TX serial pair and does not contain a separate clock line, hence the need to make sure that both ends are set to the same frequency.
I am using the following settings successfully. However I have seen people advise swapping the PORT values to -1, and 0. Both ways work on my set up….
#define SERIAL_PORT 0
#define SERIAL_PORT_2 -1
#define BAUDRATE 115200
The BAUDRATE wants to be as fast as is reliable. The default, shipped value, on the TFT is 115200 so start there. If it does not work then either slow it down 57600 or try adding an additional bypass capacitors to the 5V rail, I have a 1000uF 15V across the Z-MAX endstop. You can try upping it to 250000, but as a) mine works at 115200 and b) to change the TFT requires a recompile of the TFT software – I have not bothered.
The connection delay on startup is normal. But if it does not go away then there is a comms problem between the boards.
Try downloaded and reloading the latest TFT code and the icon/font packs. If you upload just the code without the icon/font packs being on the SDcard it will look silly.
…add a helpful link here.
See above make sure you have added the icon/font pack so that it can display the instructions on how to calibrate!
The Touch display does not like being touched all the time. So make sure that your case is not leaning on the display front!
Work in progress…..
The motor voltage and current is what determines the motor temp so the motor temperature will not change with a simple stepper driver upgrade. Turn/tune your current down to what is needed for the speed you want to run and no more!
On my ANet A8 stock board the current was 0.74A (Peak) and my motors ran between 29C and 37C in ambient 22C. Dual Z on the stock board ran 1.3V 1.48A.
The A4988 uses Peak current measurement not RMS (Root Mean Square) so you need to divide their numbers by 1.41 for TMC.
I am currently running SKR V1.3 and TMC2208s and I am able to run at 523mA (RMS) and motor temperatures 26C to 34C with the hottest TMC heatsink getting to 47C with no cooling.
Either turn your cable through 180 degrees and replug or invert the axis in Marlin.
I will update this later…..
BTT sell the V3 is two different versions. 1) with the R0 jumper soldered to the underside to enable UART mode and 2) DIY without the jumper – you need to solder your own.
On an SKR 1.4 or Turbo, the 2209s DEBUG Pin shares the same line as the matching end-stop which has caused lot's of report's of issues.
There are 2 types of 8729. Pull the board look underneath there should be 2 identical resistors either 100R or 220R they have different VRef calculations. Sounds like you have set VRef for 100R VR=Ix0.5 type on a 220R board VR=Ix1.1
No don’t, just don’t.
On my ANet A8 the Nema 17 stepper motors will turn 1.8 degrees per step which is the equivalent of 200 positions per complete revolution. One full rotation of the X Motor on the A8 will move the X carriage roughly 32mm. Which would give us a single step of 0.16mm on the X axis which is not quite enough accuracy for a good quality print.
Modern stepper driver circuits are able to improve on this full 1.8-degree step by differentially energizing both sets of coils on the motor to create additional microsteps. Most stepper drivers are capable of at least 16 discrete microsteps per full step, creating a total of 3,200 positions per complete revolution, which translates to a single step motion of 0.01mm which is easily good enough as it far exceeds the mechanical accuracy of our cheap 3D printers.
Stepping up the mainboards workload to try and control the full 256 microstep capability of a modern stepper driver makes no sense. The processor would have to handle 16 times as many stepper pulses for each driver with no perceptible change to print quality. However letting the TMC stepper use interpolation to smooth the motor motion does make sense.
The datasheets show that the 2208 has an RDSOn resistance of 300mOhm and the 2209 has an RDSOn resistance of 210mOhm, so it so will run cooler than the 2208. But if you run either below 800mA WaterOtt says you can use passive cooling (that is no fan) in most climates.
If your printer appears to be using the wrong numbers of steps or bed size then you could be using the old data stored in EEPROM. BTT test their boards with E3 data and this is not compatible with ANet printers.
So you need to initialise the EEPROM with your setup.
Reset the SKR EEPROM default data to the new firmware values.
From Pronterface execute the following command sequence
1) M502 Load hard coded defaults from the new firmware
2) M500 Write all values to the EEPROM
3) M503 List out the EEPROM Data for validation.
The SKR 1.3 and 1.4 actually do not have an EEPROM so Marlin "spoofs" this by saving data in the top of FLASH Program memory.
There are a number of issues with the board not being able to read the SDCard
The physical socket has broken pins, the card will not stay in, does not latch, does not make good contact.
The card is too large (memory size not physical)
The card is the wrong format, or has been formatted with too large a sector size
The LPC 1768/9 processor pin has been fried by an ESD spark when you plugged/unplugged the card. Always ground yourself on the PSU cover before handling the SKR board.
Your Marlin Configuration is pointing at the wrong SDCARD, it should be LCD or ONBOARD.
Your Marlin Configuration SDCARD detect sense line is inverted - This caught me out on the 2.0.8.2 upgrade !
Make sure that you use a card of 32Gb or less, I am using a 32GB Samsung EVO Plus U1/Class 10 Card. This has worked, for me, in both the TFT and the SKR boards’ SDCARD slots.
Format it as FAT32, MBR not GPT.
Give it an 8 character name.
It is recommended when updating firmware to use an empty SDCARD. But I have found this not to be necessary on the SKR 1.3 as I frequently use the same SDCARD that has my gcode files on it.
This is probably just working as designed. Two separate programs (Marlin and PC) trying to do simultaneous block level writes to an SDCARD's FAT (File Allocation Table) would result in a corrupt SDCARD. So Marlin ensures only one process can access the SDCARD at a time. Marlin can be made to release the SDCARD for PC access by using “Release Media” from the Marlin menus then unplug/replug the USB cable and the Macbook/PC will remount the card.
Look in configuration_adv.h for “SDCARD_CONNECTION” This define tells Marlin where to look for gcode files to be printed.
Set this option to one of the following:
LCD – Use the SD drive in the external Display
ONBOARD – Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
CUSTOM_CABLE – Use a custom cable to access the SD (as defined in a pins file).
Marlin will default to using the ‘LCD’ eg the TFT24 SDCARD for gcode files.
If SDCARD_CONNECTION is set as LCD then the onboard SDCARD (The SKR's SDCARD) will by default, if connected, be mounted for use by your PC/Macbook. If this is changed to ONBOARD then Marlin will auto initialise the SDCARD for its own use (printing the gcode) and it then blocks the PC/Macbook mount.
If you want to stop the PC/Macbook auto-mount then setting #define NO_SD_HOST_DRIVE will block it. I use this to stop my MAC from complaining every time I switch the printer off.
With a step down Voltage Converter (buck Converter) this can work.
But be careful as you can push the supply past its design – my A8 was supplied with a 12V 20Amp supply and if the bed and extruder are on at the same time (my start up code heats up both simultaneously) then I am consuming 13+ Amps before adding the pi at 3 or 4 Amps.
Your peak load with everything turned on if you add 5 stepper drivers at 800mA plus fans could then exceed 20Amps.
But as most loads are switching during printing the mean load is actually a lot less (typically between 6 and 10 Amps on mine) but you will get occasional peaks of maximum load. Just how good these cheap supplies are at handling such highly variable currents is anyones guess.
Personally I would never run a supply at more than 75% of the quoted rating (as this is often a peak current and not a constant current rating) so I would switch out the supply for a 30Amp one before adding a pi!
Do NOT use an unmodified ANET 5V Zonestar 2004 display with the SKR Board. The 5V on the switches will damage the 3.3V SKR boards ADC Input if not blow the entire chip.
See: https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3/issues/4
It can be modified but for the time and cost you should probably just buy a replacement. If you really want to use it then the hardware and firmware changes are discussed here.
1 – In legacy mode you can run the same Step/Dir signals from the processor to multiple stepper drivers, one for each motor.
2 – Sharing of UART or SPI Signals between steppers is problematic and not something I have looked at so I can not comment on. I will look into this later….
3 – You can run multiple stepper motors off a single stepper driver. Using either
a) Parallel Motor Module from eBay (ie a parallel splitter cable)
A Parallel Motor module requires twice the current as there are two motor paths to go down – On my old Anet A8 motherboard it shipped with A4988’s they used 740mA for the X,Y&E Motors and 1.5A for the dual Z.
b) Serial Motor Module from eBay (ie a Serial splitter cable)
A Serial Motor module runs the current serially through both motors – but requires twice the voltage (1 drop for each motor) so it would probably require a 24V Supply to work correctly.
4 – Use spare Extruder stepper boards for the second Z motor. If you need a 3rd Z then the BTT SKR pro has 6 stepper slots.
In Marlin configuration_adv.h
Uncomment the dual define
#define Z_DUAL_STEPPER_DRIVERS
This has been replaced in 2.0.5 by
#define NUM_Z_STEPPER_DRIVERS 2
Marlin configuration.h set the Z2 Driver Type to the same as Z
In this case TMC2208 in Legacy mode for ease of initial debug
#define Z_DRIVER_TYPE TMC2208_STANDALONE
…
#define Z2_DRIVER_TYPE TMC2208_STANDALONE
Marlin will then apply the Z motor settings to Z2
If you are planning on switching to 24V then there are a few catches and about $25 extra costs.
Your fans are 12V so will need to either a) change for higher voltage ones or b) you will need a 24V to 12V buck converter for the extruder fan and rewire the +ve rail for the PWM parts cooling fan (to run it off 12V).
Then check if your hot bed has two heater circuits connected in parallel, if so you can rewire them in series for 24V use or you will need to replace it.
The hot end heater will also be a 12V cartridge (25W or 40W) that will need changing as that it is too high a current to run off a cheap buck converter.
RepRap Style ‘StepStick” drivers are operated by just 3 pins Enable, Step and Direction.
Aside: the Enable pin, dependant on the StepStick Driver may be inverted or not and incorrectly setting this could cause the motor to not move. However Marlin will recognise this and setting the correct Driver will invert the Enable signal if necessary.
They are configured by a further 3 pins called MS1, MS2 & MS3 and also by setting the maximum motor current using the VRef potentiometer. The BTT SKR Boards documentation confuses this by starting the count at 0 not 1 i.e. MS0, MS1 & MS2.
Aside: Just to be more confusing the SKR1.4 board also provides a jumper to break the Reset line, that must also be connected for certain driver types, see below.
The Reference Voltage must always be set before plugging the motor in. If you do not have VRef set correctly then the motor may a) not have sufficient current to turn b) have too much and be overdriven then overheat, or c) the StepStick driver itself can burn out.
Once the correct voltages are set you can power down and then connect/reconnect the motors.
Aside: If you are using UART/SPI to configure the motor current I still recommend that you set a safe value on the potentiometer or wind it down to 0, just in case of wiring or jumper plugging errors.
The following discussion uses the ANet A8’s Nema 17 Motor as an example. This motor has a maximum Peak current of 900mA.
You can measure the VRef on the centre of the potentiometer so just clamp your +ve meter lead to the screwdriver shaft !
Polulu A4988 VRef
Warning! Ok to start off with while all A4988 boards should have the same outputs they do not all have the same design or use the same components! So get the microscope out and find the S1 and S2 sense resistors on your stepper board. These are going to be either 0.05 (R050) or 0.1 Ohm (R100).
From https://reprap.org/wiki/Pololu_stepper_driver_board we get
Vref = I_TripMax * 8 * Rs
So for the ANet Nema 17 Max Current of 0.9 Amp and my cheap Chinese A4988 copy board S1,S2 are 0.1 Ohm
Vref = 0.9 * 8 * 0.1 = 0.72V (This is the motors rated maximum)
But to avoid overdriving the motor I am using 90% of Maximum or 0.65V. This happens to be the value that the stock ANet board uses for X, Y and E. The Dual Z Axis is simply wired in parallel and the current increased to 1.78A and Vref= 1.3V. See the circuit diagram linked here https://github.com/ralf-e/ANET-3D-Board-V1.0
TMC 2208/9 VRef
For simplicity you can just use the calculator provided by TMC on this page
https://wiki.fysetc.com/TMC2208/
Warning – Trinamic use RMS (root mean square) not peak current for their calculation.
Maximum Peak Current from the ANet Motor Spec is 0.9A peak = 0.9*0.707 = 0.636 Irms
Actual Current ANet uses Imax = 0.74A * 0.707 = 0.523Irms
Vref = Irms * 1.41
Max Vref = 0.636 * 1.41 = 0.90V (Strange world, calculation gives us VRef == IPeak)
Use 90% of Max Vref for safety = 0.81V (Using 0.80V) == 570mA Irms == 0.805
Then dial this down to the Anet Vref = 0.523 * 1.41 = 0.74V
LV8729 VRef
If you are using the LV8729 then like the A4988 you will need to check what the value of sense resistors are before calculating and setting VRef.
There are 2 versions of LV8729 with either R100 or R220 sense resistors.
2 X R100: Desired motor current * 0.5 = Vref
2 X R220: Desired motor current * 1.1 = Vref
For R220 sensors our working current is 0.715V.
DRV8825 VRef
The DRV8825 operates similarly to the LV8729
2 X R100: Desired motor current * 0.5 = Vref
Printer mainboards follow the RepRap model and provide a 2-pin connector for each MS pin and you configure the stepstick by simply adding or removing the corresponding jumpers placed across these connectors.
Together the 3 jumpers are used to define the number of additional microsteps (or ticks) that the normal full step is sub divided by. Unfortunately all of the StepSticks uses different jumpers settings, see the table above.
So an A4988 with no jumpers would move our motor one full step for every step pulse it receives. An A4988 with all 3 jumpers would require 16 step pulses to move our motor through the same 1.8 degrees full step. A TMC2208/9 would require just 2 jumpers, you must never plug the 3rd jumper for a TMC2208/9. Finally the DRV8825 and LV8729 would require just 1 jumper.
As you can see from the BTT image you must also plug the fourth jumper on an SKR 1.4 board for the A4988 or DRV8825s
Follow this link to Luke Jobs Harrison’s fix for the BTT sensor not working.
Unlike the SKR V1.3, which has a set of jumpers to connect/disconnect the stepstick drivers diagnostic pins to/from the X,Y,Z minimum endstop sensor lines, the SKR V1.4 shares the one physical track between both.
So if you use, for example, a TMC2209 stepstick driver, which shiops with the debug pin populated (one of the 2 extra pins on the short side of the TMC2209 board) it is assumed by BTT that you will be using soft homing and not microswitches.
If you want to use physical microswitches for end stop sensors then you need to disconnect that pin somehow. By one of:
a) cutting it off
b) bending it over
c) heating it and pushing it up to the topside
d) use standoff connectors to raise the stepstick board above the existing socket.
Just to be confusing the 3 SKR boards do not use the same platform.io configuration. Indeed it is the two V1.4 boards that differ from each other and not as you would expect the V1.3 from the two V1.4’s! So to be clear:
SKR V1.3 and SKR V1.4 (non turbo) both use the LPC1768 processor at 100MHz so need:
default_envs = LPC1768
The SKR V1.4 Turbo uses the LPC1769 processor at the faster 120MHz speed. In reality these have the same pinouts and the same internal structure/registers. So they are basically the same chip – but have a different crystal clock speed so Marlin needs some timing settings adjusted for displays and serial connections. So this needs:
default_envs = LPC1769