From 3c01b60a8846748d918e131d9307f7bce5a3e217 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor <kevin@koconnor.net> Date: Sun, 29 Mar 2020 11:06:06 -0400 Subject: [PATCH] docs: Update FAQ with TMC2208 "standalone" mode workaround Signed-off-by: Kevin O'Connor <kevin@koconnor.net> --- docs/FAQ.md | 45 ++-------------- docs/img/tmc2208.svg | 110 --------------------------------------- docs/img/tmc2208.svg.png | Bin 5858 -> 0 bytes 3 files changed, 5 insertions(+), 150 deletions(-) delete mode 100644 docs/img/tmc2208.svg delete mode 100644 docs/img/tmc2208.svg.png diff --git a/docs/FAQ.md b/docs/FAQ.md index 1cf89f08c..2c7af7c77 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -256,46 +256,11 @@ configured in Marlin. ### My TMC motor driver turns off in the middle of a print -Short answer: Do not use the TMC2208 driver in "standalone mode" with -Klipper! Do not use the TMC2224 driver in "stealthchop standalone -mode" with Klipper! - -Long answer: Klipper implements very precise timing. - - - -In the above picture, if Klipper is requested to move along the red -line and if each black line represents the nominal location to step a -stepper, then in the middle of that movement Klipper will arrange to -take a step, change the step direction, and then step back. Klipper -can perform this step, direction change, and step back in a very small -amount of time. - -It is our current understanding that the TMC2208 and TMC2224 will -react poorly to this when they are in "stealthchop" mode. (It is not -believed any other TMC drivers are impacted.) It is believed that when -the driver sees the two step requests in a small time frame that it -dramatically increases current in anticipation of high acceleration. -That high current can trip the driver's internal "over current" -detection which causes the driver to disable itself. - -This pattern of steps can occur on all stepper motors and on all -robot kinematics. - -The TMC2208 and TMC2224 do work well with Klipper when run-time -configuration mode is used (that is, when a wire is routed from the -micro-controller to the PDN-UART pin and the printer config file has a -corresponding [tmc2208] config section). When using run-time -configuration, either configure the drivers to use "spreadcycle mode" -or configure them to use "stealthchop mode" with a reasonable -"stealthchop threshold". If one wishes to exclusively use -"stealthchop" mode with run-time UART configuration then make sure the -stealthchop_threshold is no more than about 10% greater than the -maximum velocity of the given axis. It is speculated that with a -reasonable stealthchop threshold, then if Klipper sends a "step, -direction change, step back" sequence, the driver will briefly -transition from stealthchop mode, to spreadcycle mode, and back to -stealthchop mode, which should be harmless. +If using the TMC2208 (or TMC2224) driver in "standalone mode" then +make sure to use the +[latest version of Klipper](#how-do-i-upgrade-to-the-latest-software). A +workaround for a TMC2208 "stealthchop" driver problem was added to +Klipper in mid-March of 2020. ### I keep getting random "Lost communication with MCU" errors diff --git a/docs/img/tmc2208.svg b/docs/img/tmc2208.svg deleted file mode 100644 index 50b277356..000000000 --- a/docs/img/tmc2208.svg +++ /dev/null @@ -1,110 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="210mm" - height="297mm" - viewBox="0 0 210 297" - version="1.1" - id="svg8" - inkscape:export-filename="/home/kevin/src/reprap/firmware/klipper/docs/img/tmc2208.svg.png" - inkscape:export-xdpi="96" - inkscape:export-ydpi="96" - inkscape:version="0.92.4 (unknown)" - sodipodi:docname="tmc2208.svg"> - <defs - id="defs2"> - <linearGradient - id="linearGradient4609" - osb:paint="solid"> - <stop - style="stop-color:#ffffff;stop-opacity:1;" - offset="0" - id="stop4607" /> - </linearGradient> - </defs> - <sodipodi:namedview - id="base" - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1.0" - inkscape:pageopacity="1" - inkscape:pageshadow="2" - inkscape:zoom="0.98994949" - inkscape:cx="385.77852" - inkscape:cy="710.19584" - inkscape:document-units="mm" - inkscape:current-layer="layer1" - showgrid="true" - inkscape:pagecheckerboard="false" - inkscape:window-width="1182" - inkscape:window-height="699" - inkscape:window-x="237" - inkscape:window-y="79" - inkscape:window-maximized="0"> - <inkscape:grid - type="xygrid" - id="grid4530" /> - </sodipodi:namedview> - <metadata - id="metadata5"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> - </cc:Work> - </rdf:RDF> - </metadata> - <g - inkscape:label="Layer 1" - inkscape:groupmode="layer" - id="layer1"> - <path - style="fill:none;fill-rule:evenodd;stroke:#fc0000;stroke-width:0.30706427px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 66.149367,77.39651 c 30.339928,59.83134 53.090253,40.04114 74.076273,0" - id="path4613" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 39.6875,93.270833 127,0" - id="path4534" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 39.6875,103.85417 127,0" - id="path4534-2" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 39.6875,114.4375 127,0" - id="path4534-4" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 39.6875,125.02083 127,0" - id="path4534-4-7" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - <path - style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - d="m 39.6875,82.6875 127,0" - id="path4534-4-75" - inkscape:connector-curvature="0" - sodipodi:nodetypes="cc" /> - </g> -</svg> diff --git a/docs/img/tmc2208.svg.png b/docs/img/tmc2208.svg.png deleted file mode 100644 index 0bfb37a89e9973a6224e53e6f976931184052379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5858 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 TD>Mt-M?=gnTVJ9WdEfs(iD60+