I found my CR10S Pro occasionally missed steps in the Y-axis, which is the moving bed.
At first I tried to remedy this by reducing acceleration settings in the slicing software and this did help, but it wasn't a complete cure. I also checked the grub screws on the motor pulley, guide rollers and belt tension to make sure it was not too loose nor tight. The problem continued.
I concluded lost steps were due to two possible reasons:
1) A lack of torque / power from the motor.
The motor used on the CR10S Pro Y-axis is the same one used for the smaller CR10, yet it is expected to push and pull a larger mass. With a 5mm steel under-carriage, 4mm heated bed as well as a 4mm removable top plate there is plenty of inertia to this assembly and the motor is pretty small.
2) A lack of instantaneous power delivery for the stepper driver.
While the power supply has plenty of capacitance (energy storage for immediate short term power delivery) with 3000uF sitting on the output, the PCB housing the stepper drivers does not (only 440uF bulk capacitance on-board). I wondered if the stepper driver may be momentarily starved of current if the heated bed happens to switch on (relay temperature controlled) at the same time the stepper driver makes a high current demand.
Step 1: A Motor With More Torque and Power
The solution to point 1 is actually quite easy.
The default motor is a Nema 17 with 0.4NM holding torque and is rated for 1.5A max current.
NEMA is a motor mount size standard.
I quickly found an alternative NEMA 17 motor which has 0.59NM holding torque and 2A current rating. This higher spec is backed up by the fact the motor has a slightly longer body, but will still fit inside the CR10S Pro case.
I've heard people talk of upgrading the motors with an aim to be smoother and more silent. That is not the goal here, I want reliability and speed.
I was tempted to go for an even more powerful 65NM motor and could have, but the body was too long to fit in the case so would require a hole cutting in the bottom. The CR10S Pro rubber feet would still have kept the motor from touching the table top but I didn't want to cut a hole in the case.
The specific motor I bought was the 17HS19-2004S1 from Stepper Online.
I bought it on eBay. I am not recommending this motor specifically, but at least you could follow the same wiring pattern if you use it.
Step 2: More Drive Current
To drive the more current hungry 2A motor, we need to tweak the current limit on the stepper driver.
The CR10S Pro uses new Trinamic TMC2208 driver chips, rather than the Allegro A4988 used in the older CR10S.
In the CR10S Pro they are running on 24V.
Downloading the datasheet we see right in the headline specs that it can support up to a 2A motor. Great!
This means later on we can crank the driver up to full power to match our new 2A motor.
We’ll also add some extra bulk capacitance for immediate power deliver to the motors.
Step 3: Dissasembly
We need to remove the old motor and install the new one.
Remove the rear rail cover.
Loosen the motor screws to let the belt tension off.
Take the belt off the motor pulley. Just pull it upwards and turn the pulley. The belt will progressively ride off the pulley.
Remove the pulley from the motor shaft. There are two grub screws.
Now flip the printer and unscrew the base panel. I recommend putting something under the Y-Axis so the wires don’t hit the table.
Now unscrew the motor completely and remove it. Disconnect the wires too.
Step 4: Wireing the New Motor
To connect the new motor, first we need to identify the wires of the driver output. There are 4 wires and they should be paired to a coil in the motor. Coil A must have a Positive and a Negative connection, Coil B also has a Positive and a Negative.
It's possible as described below to figure out the correct wiring, but don't worry too much if it seems confusing (I struggle to explain it) because if you get it wrong either the motor won't turn, or it will just turn in the wrong direction. If it doesn't turn, you have two positives on one coil and two negatives on the other coil. If it turns the wrong direction all you need to do is put the wires from Coil A on Coil B and vise-versa.
We can identify each coil because the resistance across a coil from Positive to Negative will be very low, while there should be no connection at all between two separate coils.
We find that the coils on the original motor are connected a little strange. The motor has 6 pins rather than 4 and Coil A is connected on pin 1 and 4, while Coil B is on pin 3 and 6. Pin 2 and 5 are simply not connected. We can see this reflected in the wiring to the motor as the centre wires are crossover over each other.
We can also see the original motor has a DC resistance of 2.2 ohms.
Measuring the new motor we find the connections are a more reasonable layout with Coil A on pin 1 and 2, with Coil B on pin 4 and 5. Red & Blue. Black & Green. We also find this motor has a DC resistance of 1.2 Ohms supporting its claim of drawing more current. (DC resistance does not directly reflect the current drawn when feeding an AC sine wave such as from a stepper driver).
Now we need to connect the wires to the new motor. I added my own plug (JST XH series) as I have the bits to do it, but you may prefer to simply solder the wires together. If you are using the exact same motor I did, you can copy the wiring. Just remember to insulate them! Also check the motor rotation direction before final re-assembly.
Step 5: Re-assemble Y-Axis
Reassemble the Y-Axis, but do not replace the bottom case cover yet. We need to tweak the PCB.
Assembly is the reverse of assembly.
The shaft on the new motor does not have the flat part extend all the way down, so the pulley grub screws will need to bite on the round shaft. That's not really a problem, I added some non-permanent locktite 243 on the shaft to reduce chances of slipping.
Also note the belt needs to be on the bearings at the other end of the line.
I found the belt needed very little added tension (by pulling the motor backwards). The belt shouldn't be super tight and stiff, it only needs enough tension to stay well engaged with the teeth on the pulley. Toothed belts do not need high friction.
Step 6: Boost the Current Limit
To drive the more current hungry 2A motor, we need to tweak the current limit on the stepper driver.
The datasheet says the maximum output current is set by a voltage reference on pin-17 in combination with the value of current sense resistors.
Looking at the PCB we find an adjustable potentiometer on pin 17 and sense resistors marked as 0.15 ohms.
All we need to do is turn the knob!
Without even needing to use the given formula, the datasheet tells us in a tidy table on page 51 that with 0.15 ohm sense resistors, the voltage on pin 17 should be 2.5V for full power operation to drive a 2A peak (1.4A RMS) current motor.
When we measure the voltage between power supply negative (AKA ground) and the pin on the potentiometer that leads to the driver chip, I got the following values:
X-Axis V Ref 1.42V
Y-axis V Ref 1.44V
Z-Axis V Ref 1.74V
E-Axis V Ref 1.42V (extruder)
Following the equation on Page 52 we know that the default RMS current limit is as below. I also include a spreadsheet my Dad kindly wrote to calculate the current limit from any Rsense and Vref value:
X-Axis I Limit 0.73A RMS
Y-axis I Limit 0.74A RMS
Z-Axis I Limit 0.89A RMS
E-Axis I Limit 0.73A RMS
Note that these are RMS values meaning they are average, not peak. Peak current will be higher and most motors are rated at their peak (max) current. RMS will be Peak Current * 0.707.
The Z-Axis driver is feeding the dual Z-Axis motors in parallel, which is why they have set it to allow more drive current, but they are also smaller motors which is why we don't see twice the current limit.
To prepare the stepper board for the new 2A peak current stepper we must set the V Ref for the Y-Axis to 2.5V.
Note: Actually, this gives us 1.3A RMS or 1.8A peak. We can only go higher by changing the sense resistors on the PCB from 0.15Ohm to a lower value of 0.1Ohm, but I will not be doing that in this tutorial. They are 1206 SMD package size resistors. Doing that we could exceed motor max rated current up to 1.77A RMS or 2.5A Peak.
Measure between power supply negative and the middle pin on the potentiometer (see photos) and slowly tweak it until you get the desired value of 2.5V.
TAKE GREAT CARE with the meter probes and screwdriver not to touch any other parts of the PCB. The last thing we want is to short something and blow the whole system.
Step 7: Increase Capacitence
Finally, before closing up we can add more capacitance to the stepper driver board to help it deal with intense current demands.
Be real careful here. Or skip this step, it might add nothing beneficial anyway. These are not high voltages, but there is high current and can make some nasty sparks and bangs if something gets shorted.
Anyway if you are confident let's carry on.
Extra capacitance directly on the driver board will give the drivers their own power reserve should the main power supply be drawn on for other duties temporarily.
Additional note: I just read a couple of comments from Reddit user 33cl that support my suspicion about the heated bed pulling high peak currents.
33cl says: "I had print issues... For 99% its a PSU issue who cant handle the pluses from the heating bed while printing." "A guy in a FB Group measured the Pro. Peak bed only is up to 480W for 2-4 seconds." After adding an extra PSU 33cl says, "Im happy that the problem is gone."
This is easily done by adding a big capacitor on the main power input terminal block in tandem with the main power wires.
I used a 25V 4700uF capacitor from Vishay. You might alternatively use 1000uF or 2200uF. I don't think I'd go higher than 4700uF.
I would usually suggest a 35V rated part since the power supply is outputting 24V, very close to the 25V rating of the capacitor. However I know the capacitor I used is about the highest quality money can buy and it will not have a hard life sitting on the regulated output of the power supply. If you can, use a good branded part like Panasonic or Nichicon.
It was a little tight to fit in the space, so I temporarily unbolted the heated bed relay.
I bent the power wires at a neat 90-degree angle to keep them close to the case and make space for the capacitor. I later added a bit of silicone sealant gunk to ensure the capacitor and wires do not move accidentally.
DO NOT INSTALL THE CAPACITOR BACKWARDS. IT WILL VIOLENTLY EXPLODE!
Take care to ensure the negative lead of the capacitor (always marked on the capacitor case) goes to the negative of the power supply (black wire). Also ensure both wires and capacitor leads are actually in the terminal block clamps. The first time I did this I accidentally got the wires somehow beneath the clamp mechanism (even though they were in the plastic terminal block) and I wondered why I suddenly had a non-functioning machine.
1) Oh yes, I also pulled off the unused IDC header socket to provide better airflow over the driver chips.
2) Upon testing I found the fan that blows on the stepper drivers vibrated when the Y-Axis moved at certain speeds. It sounded kind of nasty. It was easily cured by mounting the fan body loosely to the chassis and keeping the screws from vibrating out with a bit of loctite.
Step 8: Test Print
Put the case back together and run yourself a test print!
Don't forget to make sure your axis are all nicely aligned after handling the printer.
When I ran this file before, I had two failures in a row even when reducing 'jerk' acceleration in Cura to 10.
After the upgrade it has printed just right first time with 'jerk' acceleration at 20.
This file has lots of fast jerking motion as the outer wall is infilled with jerk moves. I'm sure adjusting the slicer settings could fix that, but it's not the point, I want a reliable printer and that is what I appear to have now!