I thought I would post about upgrades to my FT-6 with an SKR PRO, TMC 2209 w/sensorless homing, BL Touch and some woes with Borosilicate glass. This is a little scattered and I’m not going to correct spelling too much, this isn’t a journal paper lol and I think people would rather have the info than a LaTeX report with proper references.
The forum won't let me post links or many pics, but the link at the bottom to a Google drive folder has this same post with links in it. Maybe someone can let me post the full post here with links?
I could really use some .step Solidworks, or any CAD file for the ACM bed frame that the bed sits on. I am designing a new bed frame so the dimensions of where the linear bearings and leadscrew mount go would be very helpful.
I decided to upgrade the PSU’s because of this: http://folgerforum.com/t/stock-psu-went-up-in-flames/1188 I have separate 5V and 24V meanwell PSU's LRS-50 and RSP-500, the 24V has PFC function, and can be commanded to shut down remotely, and has a voltage compensation function. I didnt use either because the remote control needs a positive signal to turn it off, but I want it to default to off when the RPi is powering up and when the printer ON switch is pressed. I did notice the cooling fan kick on once when the 24V psu had been on for a while. I mounted the PSU's, SSR and relays all to the top electronics box plate so that it can all be serviced as an assembly just by removing the 4 screws for the top plate. I wanted separate PSU’s because I want to be able to shut off all but the RPi with Octoprint for safety, say if a mosfet gets stuck/fails ON on the SKR Pro, which can be detected using the tempfailsafe plugin. I used 20A solid copper wire for all AC power lines except the braided ones going to the bed heater. The way I have the 4 channel relay wired is that relay 1 must be on (this turns on the 24V PSU) in order for relay 2 to have any power coming into its common or center wire which means the bed can’t get power unless the 24V PSU is on and the SKR Pro has power. The 24V and bed power are wired to the NO or normally open port on the relays. I have a button in Octoprint with the enclosure plugin setup to turn on and off the 2nd relay to the bed and it defaults to ON when octprint starts up. I have a ground wire tying the 5V and 24V ground together so that the DC part of both PSU’s have the same ground, makes all the electronics play nice together (make sure if you do this to only tie the DC black or – or grounds, not the positives and not any of the hot or black AC lines!). When I first powered up the 5V psu, I got a blinking green light on it (warning condition), so I disconnected a few things, waited a bit and it started fine and I hooked the rest up and been working fine ever since.
The power switch turns on the 5V which turns on the RPi and thus Octoprint. Then I can turn on the 24V with Gcode or PSU plugin. I have a sainsmart 4 channel relay (Only using 2 channels right now but an enclosure heater might be nice someday), and the VCC to JD-VCC jumper is removed. The RPi can only handle 3.3V while arduinos can do 5V. I powered the high power relay side of the board directly from the 5V PSU to the JD-VCC pin and GND. I removed the 1000 Ohm resistor and put in a 220 for R1.
see the pics. Sainsmart publishes a way to use external transistors, but the relay board already includes optoisolators that have transistors built into them, so I figure just change R1 and keep it simple. I didn’t do any calculations or check specs on the optoisolator, but I measured 0.05, 2, 3, and 3.3V on various pins so the RPi should be fine in operation. I am feeding 3.3V to VCC on the board from the RPi 3.3V pins. Also, I added a wire to go from the 3.3V output on the SKR PRO back to a pin on the RPi to directly sense if the 24V PSU is on (OK so 24V psu comes on and power goes to SKR Pro, then circuitry in SKR Pro provides 12, 5, and 3.3V power outputs on the board, RPi is only 3.3V tolerant so the 3.3V being on on the SKR PRO indicates the 24V PSU is on) using the PSU plugin.
I bought fans from digikey for the hotend and part coolers with ball bearings 1204KL-04W-B50-B00 and B5015E24B-BSR. Mostly as a safety concern, never had an issue with cheap ali fans though. The stock 30x30 fan barely moves any air. One issue here is there do not seem to be high quality 24V 30x30 fans, the highest V is 12V, I just plugged that into one of the 12V power ports on the SKR Pro.
I installed a genuine FOTEK 25DA SSR but reused the heatsink. I heard these fail closed so this is just a safety measure. I am using one of the channels on the 4 Channel relay to switch off the power to this SSR as well, which I can control using the octoprint enclosure plugin. Id say if its under $10 its a fake. Supposedly the fake ones are ok but just can't handle the stated current. itsheaters is a US vendor for FOTEK.
The stock power switch from folgertech OMNICON CW2B-10A-T is actually a pretty good switch it seems. But when I got it they had used automotive style crimp on connectors that were barely holding the wires in them. What I did was use automotive female style spade connectors, but open them up slightly smaller than 20A solid core copper wiring for houses where the wires go in and soldered it all together with 2 layers of heatshrink (AC volts here need extra insulation). I bent the solid wires so that when the switch is inserted from the right it lines up with the proper PSU connections. You have to tie all the neutrals and grounds to the 2 psu’s and the bed.
I also found an “Intelligent Power Meter” the ZMAi-90. It can measure AC current, volts, does some filtering etc. It has UART outputs on it so that may be able to talk to the RPi in octoprint someday, but for now it has it’s own app. I may install this soon, they are on Ali and about $20.
BL Touch & Dual Thermistors: The folgertech carriage PCB seems designed to either transfer stepper signals or bed probe sensor signals depending on what connector is soldered to it (direct drive or Bowden setup). If set up for a bed sensor, there is an extra pin not broken out that is needed. I traced it and soldered to the PCB in the electronics box and soldered a pin to it at the carriage, see pics. This way I can transfer all signals through ethernet cable and get some shielding. I also installed a second thermistor for the hotend and set the config to use redundant thermistors, I found I need the trigger to be 15 degrees and not 10, otherwise the printer will emergency shut down during heatup. I use a 50W heater from ali so heatup is fast, and one side of the heat block must be heating up faster than the other. At steady state, the 10 degree difference is fine. On the SKR PRO for the BLTouch, there is a 4 pin connector with PA2, GND, PA1, 5V. PA2 is the white wire on the BLTouch or the zmin. PA1 is the yellow wire or the servo part of the BLTouch. Tie both grounds together at the carriage PCB. The extra wire I soldered on in the electronics box and pin at the carriage I used as the zmin or PA2. I just added all the wires to a 4 pin connector at the SKR PRO.
I twisted every single wire pair on the whole printer, everywhere. Heaters, thermistors, steppers, power cables, BLTouch (I did not twist the solid copper AC wires but I did twist the braided AC wires to the bed) etc. Overkill, maybe. But I want to try using native 256 steps to the 2209’s without interpolation (I need to figure out how many mm/sec I can move for non printing moves at 256 with the clock speed of the SKR pro), and also I noticed before when I had absolutely no wire twisting that my temp readings for the hotend and bed thermistors were quite jumpy. Now they are very calm and steady. I had to go through the stepper cables and trace the wires. The wire colors are not consistent on stepper cables, but the wire locations seem to be. To check your stepper, just use a voltmeter on resistance mode or continuity, and see which pins connect. These pins are a winding in the stepper and need to be twisted all the way back to the control board to cancel out EMF. I attached a hand drawn pic of my convention. Basically on the 4pin end of a stepper cable, the two outer pins form a pair, but on the 6 pin connector, the outer pin and the opposite center pin form a pair. I found the best way to twist wires and actually have them hang neatly on their own is to disconnect the wires at one end at the plug, and manually wrap them around each other the whole way while using your thumbs to keep from introducing any twist into each individual wire if that makes sense. Any ribbon or connected cable will need to be separated. If you use a drill or just twist from one end without disconnecting, the wire will just bunch up and make a mess as soon as you let go. Yes, it’s a lot of work, but in my opinion worth it. I am not sure if sensorless homing has any chance of working on this printer if the wires were not twisted as it can be very finicky and touchy depending on the settings. Also I took out the PCB with X and Y endstops on the gantry under the Y motor, and drilled another hole through the ACM plate for the y stepper so it gets mounted with 4 screws instead of 3 (I did see some warping/sinking of the stepper into the ACM because of only using 3 screws). I ran standard stepper cable to the y motor and took out one of the Ethernet cables. The braided Ethernet cables are even smaller gauge than solid core, and IMO not suitable for stepper motor currents. The sensorless homing sets the Y current at ~600, and half would flow through each pair. If you use my firmware settings, the stepper directions assume no wires have been switched/flipped in the stepper cables. When testing X the first time, just do a 1mm movement to see if you need to flip one of the X stepper motor cables, but the folgertech splitter reverses one of the motors so shouldn’t be needed. With all the twisting the wires take up more space, so larger conduit is needed.
TMC 2209 findings:
I set the homing current to 10 mAh as a test for something else, but it homed just as strong as with say 400 mAh. Setting it low makes the homing sensitivity give you a larger range of values that will work. My theory is that the homing current needs to be exceeded or rise significantly to register as a stop, but a stepper can only pull so much current when moving or stopped so it may never be exceeded. So if you set the homing current low, then when that current is exceeded it registers. Whats not clear is how can the firmware or driver get 300 or 600 mAh for the current to use normally when set to 10 mAh for homing idk. If you home or move an axis many times without a fan or active cooling on the TMC 2209’s the homing sensitivity will change, ie it will not be as sensitive and you will have to keep reducing the sensitivity to get it to move towards the end stop and trigger, but then it will trigger angrily with stalling and more noise or just not trigger. With no fan I just turn off the steppers immediately after homing to keep them cool.
I used a small screw on/into the ACM to adjust it so that both sides of the gantry hit at the exact same time when homing. I don’t want the gantry crashing/bumping twisting things.
Square wave stepping is needed with TMC 2209’s when using linear advance in marlin 2.0
Useful commands for TMC drivers:
M914 to set homing sensitivity (I ended with X sensitivity at 84 and Y at 88)
M122 (Not M112 !!)
Octoprint Plugins: temperature failsafe plugin,thespaghettidetective, Bed visualizer, bltouch, cancel objects, Enclosure, emergency stop, betterheatertimeout, floating navbar, gcodeeditor, octolapse, navbar temp, eeprom marlin editor, firmware uploader, printtimegenious, psu control, tempsgraph, octoprint anywhere
Supposedly LinoBarreca is working on remote firmware upload to the SD card. And supposedly its working in octoprint. But didn’t work for me.
Marlin settings: You must turn EEPROM emulation on in pins and in configuration for it to work. Zmin pin must change to PA2 in pins instead of PG8. It may work just by setting Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN but I wanted to be sure.
HOME_USING_SPREADCYCLE should be off for 2209’s from what I see, because comment “TMC2209 requires STEALTHCHOP enabled for SENSORLESS_HOMING” Also “It is recommended to set [XYZ]HOMEBUMP_MM to 0” I tried increasing the homing federate to help sensorless homing, nope doesn’t help sometimes it would just hit and grind or trigger early, getting the sensitivity dialed in is much more sensitive at faster speeds, if anything, slower would be better, stock speed of 50 is fine for X Y.
One post said having quickhome on causes sensorless homing to fail. I saw no difference in how it works with that on or off. Some guys said to try homing in spreadcycle, but that invalidates the comment to home in stealthchop for the 2209. Some guys said to set hybrid threshold to 0, but then your printing will not be as good since everything will be in spreadcycle.
Once you make a new firmware and put the .bin file on the SD card, the SKR pro will flash once it powers up, I believe indicating that it is writing the .bin file to its internal memory, yes it has internal memory in addition to the micro sd card on it so if you pull the sd card out and power up, its still got firmware in there. If .cur is on the sd card, it means the skr pro did its internal transfer and upload of the firmware. When you put in a new firmware .bin, let the lights stop flashing, then run m502,m500,m501 and wait several seconds between each command, this makes sure all the settings are loaded. I’ve seen homing sensitivities and currents not change if this isn’t done right.
Files to update when updating to new marlin: platformio.ini, configuration, configuration_adv, pins, tmc_util.h
Also I manually changed sg_guard_period in Marlin/src/feature/tmc_util.h . Its hidden deep within the bowels of the code lol. This is one of the things that turning on “Improve homing reliability” uses it also makes it so marlin tunes the current it will run the steppers at during the print (I think) along with “IMPROVE_HOMING_RELIABILITY tunes acceleration and jerk when * homing and adds a guard period for endstop triggering”. I found my X current at 300 and Y around 600 after its done homing, but set to 800 in config_adv. But when I command say G0 F12000 X100 it just stutters and makes noise. In fact anything above F6000 (100 mm/sec) causes it to stutter for X. If I use M906 to set a higher current I can go faster without stuttering, but does this just undo whatever using improve homing reliability does? Idk. I have to figure that out still. For now I can set it as a starting script in my slicer. What sg_guard_period means is that marlin will get the axis moving for 0.4 seconds before using sensorless homing to find the endstop, which means the homing sensitivity can be higher. I changed this to 1000ms or 1 sec to really get the axes moving, higher may be even better, I also changed the homing backoff to 10mm so that you can repeatedly hit g28 and have successful homes.
I tried changing pins so that the Z channel with dual outputs could be used directly for the two X motors. This did not work. The steppers were much louder and not very smooth. But sensorless homing absolutely would not work. With sensitivity set to 255 and homing current set to 10, the gantry would crash into the frame every time if allowed. When sensorless homing is working and sensitivity to high it always triggers early. This needs a bug submitted to marlin, you should be able to use a stepper slot for whatever you want. My theory is that the SKR PRO runs the two Z ports in series, where the folgertech splitter is parallel (this making the steppers noiser)(the folgertech splitter reverses one motor), I have not traced the wires though so idk, and this affects how the 2209 calibrates itself, or that the firmware does some fancy things behind the scenes for X and for Z that changing just the pins does not address, and probably the diag pin is not present for modification in the pins file which may be why sensorless homing didn’t work but it would seem changing the endstop pins would be changing the diag pin. If you change the pins for X and Z to swap them, you must change all the endstop pins too otherwise the axes will not move.
Make sure you run your PID autotunes again M303 E0 S200 C8 or M303 E-1 S60 C8
Useful Thingiverse files:
2175956 I used the 5015 BLTouch version. Fits dual Bowden fine on FT-6 just need 2 nuts (8 total) to hold 30x30mm fan as a spacer.
I use a USB DYMO Label Maker | LabelManager that can print on heatshrink (will not print on anything bigger than ½” the cartridges are too big):
So I saw many of you just clipping a sheet of borosilicate or glass to the heater, and that seems like it would be ok, but I was looking at the bed data created from a 15x15 UBL leveling routine in Marlin and the stock aluminum bed is clearly quite wavy, see pics. My main concern with clipping on some glass was that there will be poor contact between the AL and glass so poor heat transfer. I’m not sure if radiant heat from the aluminum would make up for this, but I wanted to use as many of the parts on hand so I decided to try some 3M 468MP adhesive tape like is used on printbite bed surfaces. I tried that on my C3D Beast V2, and it worked ok, but edges would curl quite a bit (I changed bed temps, 1st layer heights, speeds, layers 1-3 with no cooling, more squish less squish on and on and sometimes I would get it to work ok but I never trusted it, and what forced me to take it off was a very long print in the center of the 500x500 bed basically sucked up the center and permanently deformed the print surface. But I did learn about these adhesives so I wanted to use them to make a heater, AL, glass sandwich. My first attempt was using the 3M 468MP adhesive as it is thicker, and their product listing says if the surfaces are not totally smooth to use the thicker 468. The printbite uses 467. My idea was to slightly bend the aluminum bed as I adhered it to the glass and worked the bubbles out. Well in the process of doing this the glass cracked. I could still print on it, but I wanted to run some more tests. I heated up the sandwich to 140 to see how things would do. I could see that the adhesive was not holding on in several locations. On the C3D beast V2 the heater is glued directly to the glass, so I thought this could work on the FT-6. I waterjet cut a sheet of 5mm boro with the stock holes plus extra holes between the others to aid in leveling and mounting. I carefully peeled the heater off the stock AL bed and cleaned the adhesive off with 2/3 gallon acetone, microfiber cloths, and a plastic putty knife (way too much work!) As soon as I heated up this assembly, the glass cracked at about 60-70 degrees and also the adhesive bubbled up so bad that the entire heater separated from the glass with a giant bubble over it, I did squish them together and achieve some contact, but not good enough at all to leave it. Also, the entire perimeter of the glass was basically cold. Heat does not flow through the glass at all, so there are huge stresses in it from gluing the heater right to the glass. Another issue with this test was that I could not use countersunk screws as was done with the stock AL bed, which has its issues. After reading a post on reprap I think using HVAC grade high temp RTV or auto RTV silicone to glue the heater on to AL or glass would be better than the tapes. I may try gluing the heater on with 467mp instead of 468 right to the glass to see if it bubbles up. My plan was to have the glass with the heater lay on top of 2 sheets of the white insulation sheets you can get from Ali for beds, to provide some force upward on the heater to the glass, and so the glass would be supported in the center. The insulation does help restore the heatup time of the bed close to what it was with just the AL bed, but with the big cutouts in the ACM, there is not enough support to keep the heater in firm contact with the glass without adhesive. I thought no adhesive and just the glass laying on the heater could work but the insulation does not provide enough pressure to keep it all in contact. When I pulled the heater off of the stock AL bed with the stock adhesive that comes on the heater (idk what that adhesive is, there was no labeling on the backing), there were huge air bubbles there too. So I don’t think any of the clear tape style adhesives is a good plan. On the C3D Beast V2 the silicone heater is sticking better, but even there there are big bubbles, and I now think part of the reason the printbite didn’t work so good is because the heater was glued directly to the glass and the heaters heat unevenly and there is no heatspreader.
TK Ward at CNC 3D Printer Parts is working on a 3 Z motor setup for the FT-6. I’m not sure if he is making an entirely new bed frame with that. I love the SKR pro, and I don’t really want to have to use a stepper expander or switch to a duet for the expander, and the Beast V2 has a 3 leadscrew bed system tied together with a GT2 belt, so I think a 3 leadscrew setup with belt tying together on the FT-6 would be better, with some adjustments possible at each leadscrew like the Beast. Once dialed in it should stay the same.
I need to print parts that span the entire bed for drones so flatness and heat transfer is important for me.
So all that to say, I think a new bed assembly is needed for the FT-6. I have a design I am working on for this, I may get it machined out.
Another realization with using sensorless homing is that there are several inches of extra usable print area possible just looking at the linear rails and how things move, and a new bed frame and glass sheet should be designed to take advantage of this. I think ¼” heatspreader may allow using the stock heater but still get enough heat out to the edges, but a larger heater may be good too.
- Tune junction deviation using STL on Thingiverse 3463159
- Tune filaswitch for the 2 in 1 hotend
- Install an RPi camera
- Install brass brush to clean nozzle due to more bed travel
- Test out cooling for the steppers, TMC 5160/5161 may be better for cooling at higher currents but no package deal/expensive
If you got to here you got your reading in for the day! Thanks for reading, and comments, suggestions, improvements are very welcome thank you.
Google Drive and Marlin Config Files: