User:DaveX

From RepRap
Jump to: navigation, search

My Wallace Build

My Wallace is currently in a mostly assembled state with these pieces:

Things to do:

Mistakes

  • Don't assume a metric rod in the US is 1m long.
  • Don't overcurrent the steppers. Pololu's drivers can do a nice job of limiting the current, but can overdrive the 1A/coil steppers if you want them to. I think I had damaged my Y stepper earlier by trying it on a circuit for the higher current extruder, then since I was fighting too much friction on Y with the new steel LMUU6s, I upped the current until a new failure: odd pulsing due to thermal overload of the Pololus. By adding a heatsink I was able to increase the current further, compounding my problem, as I still didn't get motion on Y. Then I noticed that the holding torque on X driven by a much lower current was much stronger than the holding torque on Y. My Y stepper was weak and feverish, compared to my strong and cool X stepper. Bummer. I ordered a replacement and spare. In the future it might be good to Thevinin-ize the stepper and set the current with a dummy resistance load. A couple of fat resistors would be much cheaper than a stepper-shaped heater.
  • Don't strip the nut-trap on the Z-axis couplers.
  • Do file/use flats on your stepper motor shafts. They don't need to be much, but without flats the pulleys and couplers might slip.
  • Make the hobbed bolt groove well defined so the filament does not ride up to different diameters and change the steps/meter extrusion calibration.

My Wallace Rod Sizes

My NEMA14/6mm Wallace ended up with my smooth rod pairs as 350x300x430, which produces travel of 172x218x220 with my extruder, as can be seen in the set of huge pictures in User:DaveX/WallacePics With an ~110mm Accessible Wade's extruder assembly, and 65mm(=30+35) for the x-end sockets for a NEMA14/6mm bar Wallace, it looks like I'd need about 380mm for a 200mm working length along the X axis. A narrower extruder than I used could allow up to 40mm additional travel in X. For 200mm of motion in Y, it looks like I'd need to allow for 2x20mm for the bed mounts plus 62mm for the NEMA14/6mm base, or 282mm of smooth rod. 36" (914mm) bars minus (375mm + 282mm - 4mm kerf) would leave 257mm for Z, allowing 200 for the base, bed, extruder, hotend, etc., as listed on the spreadsheet would leave a total build volume of about 200x200x57mm. Since changing/upgrading Y looks the most simple, one might choose to cut a pair of 36" rods as 380x(914-380-370=160)x370 for a build volume of about 202x82x170mm, while planning to cut a pair of 282mm+ rods out of a third smooth rod to get the full 200mm of Y travel. DaveX 19:22, 18 February 2012 (UTC)

For a NEMA14/6mm rod machine, the threaded rod sizes could be: (In parentheses are examples for smooth rods of 380x282x370, or build volume 200x200x170 DaveX 17:07, 8 February 2012 (UTC))

  • X-Base threaded pair: ~16mm shorter than the X-smooth rods (350.5-16=334.5mm)
  • Z-leadscrew threaded pair: ~100mm shorter than the Z-smooth rods
  • Y feet threaded rods to outline the travel envelope: 62mm+2*Y_travel+2*20, (62+220*2=502mm) (Note: This may be excessive: With most of the weight of the assembly in the middle, preventing tipping would require less than half the platform overhang.)
  • Z-bar top clamp threaded bar: ~30mm shorter than the X-smooth rods (380-30=350mm) (Note: You might want to cut the top-clamp threaded rod to the full length of the X-smooth rods so you could flip the z_top_clamps to the outside of the build volume.)

Calculations


# R code for estimating feed rates, etc.:

stepsPerSec <- 15570 *16/20; # per http://reprap.org/wiki/Teacup_Firmware#Distances_as_expressed_in_steps for a 16mhz chip
stepsPerM <- c(13576,13576,400000,160423)
maxFeedPerMin <- stepsPerSec / stepsPerM * 1000 *60 
safetyFactor <- 1/(4*2)  # divide by 4 axes, and factor of 2
maxFeedPerMin * safetyFactor    #  == 6881.2610 6881.2610  233.5500  582.355 mm/minute
maxFeedPerMin * safetyFactor /60 # == 114.687684 114.687684   3.892500   9.705591 mm/second

maxMMperMin = c(6881,6881,233,680) ## Teensy w/ 4,4,2,4 microstepping on a Wallace 2012-10-13
#Steps/sec at max feeds:
maxMMperMin/60*stepsPerM/1000  # == 1556.941 1556.941 1553.333 1818.127

# Resolution:
1/stepsPerM*1000 # == 0.073659399 0.073659399 0.002500000 0.00623352 mm/step

Thermistor/PID tuning per PID_Tuning

Tuning a Wildseyed_Simple_Hot_End w/ 6.8 ohm resistor, EPCOS 100K 57540 thermistor, and 12V = 21W full power using a MYPIN TD4-SNR-SSR PID with type K thermocouple, a 1K2:4K7 resistor divider on the output to a VNP4904 Protected_Mosfet.


Temp DutyCycle Thermistor R Commercial PID Kp,Ki,Kd Teacup P,I,D
35.0 6.5%/C, 157.5, 39.3 16.58, 0.10, 2.37 4243, 7, 1213
60.0 6.0 31630
100.0 15.7 10108 1.1%/C, 35.5s, 8.8s 2.81, 0.08, 3.13 719,5, 400
120.0 22.5 5802 1.0%/C, 32.0s, 8.0s 2.55, 0.08, 3.14 652, 5 400
135.0 26.5 3967
150.0 28.5 2840 1.2%/C, 29.0s, 7.2s 3.06, 0.10, 2.35 783, 7, 1204
170.0 34.0 1829
185.0 43.7 1347 0.8%/C, 27s, 6.7s 2.04, 0.08, 3.28 522, 5, 1681
190.0 45.9 1200 0.8%/C, 26s, 6.5s 2.04, 0.08, 3.18 522, 5, 1631
200.0 51.0 977


Assuming the conversions for Teacup from commercial parameters are:

   R: teaFmCom<-function(pct,ti,td){kp=pct/100*255*1024/4;ki=kp/ti/4;kd=td/kp*1024*1024/8;c(kp,ki,kd)}

Thermistor Table for Marlin

// Thermistor lookup table for Marlin
// ./createTemperatureLookupMarlin.py --rp=4637 --t1=25.0:100000.0 --t2=120.0:5802.0 --t3=185.0:1347.0 --num-temps=72
// Steinhart-Hart Coefficients: 0.000717660398363705, 0.000186784265315157,  3.18427171449207e-07 
//#define NUMTEMPS 71
const short temptable[NUMTEMPS][2] PROGMEM = {
   {(short)(21.19*OVERSAMPLENR), 350}, // v=0.103483867653 r=97.9992062395 res=3.76463006603 C/count
   {(short)(22.53*OVERSAMPLENR), 345}, // v=0.110028769061 r=104.336687894 res=3.50397437308 C/count
   {(short)(23.98*OVERSAMPLENR), 340}, // v=0.117074886755 r=111.178491845 res=3.25880055534 C/count
   {(short)(25.53*OVERSAMPLENR), 335}, // v=0.124665956579 r=118.571575919 res=3.02841291403 C/count
   {(short)(27.21*OVERSAMPLENR), 330}, // v=0.132849868457 r=126.567873064 res=2.81213201544 C/count
   {(short)(29.02*OVERSAMPLENR), 325}, // v=0.14167907391 r=135.224880306 res=2.60929527968 C/count
   {(short)(30.97*OVERSAMPLENR), 320}, // v=0.151211031158 r=144.606324586 res=2.41925749914 C/count
   {(short)(33.08*OVERSAMPLENR), 315}, // v=0.161508690159 r=154.782916473 res=2.24139128763 C/count
   {(short)(35.36*OVERSAMPLENR), 310}, // v=0.172641019723 r=165.833204394 res=2.07508746163 C/count
   {(short)(37.82*OVERSAMPLENR), 305}, // v=0.184683578461 r=177.844544025 res=1.91975535546 C/count
   {(short)(40.49*OVERSAMPLENR), 300}, // v=0.197719130772 r=190.914199806 res=1.77482307209 C/count
   {(short)(43.38*OVERSAMPLENR), 295}, // v=0.211838308251 r=205.150598204 res=1.63973767203 C/count
   {(short)(46.52*OVERSAMPLENR), 290}, // v=0.227140315775 r=220.674755583 res=1.51396530261 C/count
   {(short)(49.92*OVERSAMPLENR), 285}, // v=0.243733679975 r=237.621907185 res=1.39699127035 C/count
   {(short)(53.60*OVERSAMPLENR), 280}, // v=0.261737035768 r=256.143368154 res=1.28832005919 C/count
   {(short)(57.61*OVERSAMPLENR), 275}, // v=0.281279943959 r=276.408662656 res=1.18747529757 C/count
   {(short)(61.95*OVERSAMPLENR), 270}, // v=0.302503729459 r=298.607963203 res=1.09399967759 C/count
   {(short)(66.68*OVERSAMPLENR), 265}, // v=0.325562325356 r=322.954889497 res=1.00745482926 C/count
   {(short)(71.81*OVERSAMPLENR), 260}, // v=0.350623102554 r=349.689724538 res=0.927421153435 C/count
   {(short)(77.39*OVERSAMPLENR), 255}, // v=0.377867657992 r=379.083115856 res=0.853497616757 C/count
   {(short)(83.45*OVERSAMPLENR), 250}, // v=0.40749252616 r=411.440341593 res=0.785301512119 C/count
   {(short)(90.05*OVERSAMPLENR), 245}, // v=0.439709768759 r=447.106235425 res=0.722468188339 C/count
   {(short)(97.23*OVERSAMPLENR), 240}, // v=0.474747385581 r=486.470881188 res=0.664650752683 C/count
   {(short)(105.03*OVERSAMPLENR), 235}, // v=0.512849476106 r=529.976208295 res=0.611519750032 C/count
   {(short)(113.52*OVERSAMPLENR), 230}, // v=0.554276065854 r=578.123643176 res=0.562762822531 C/count
   {(short)(122.74*OVERSAMPLENR), 225}, // v=0.599302494508 r=631.483000948 res=0.518084353696 C/count
   {(short)(132.76*OVERSAMPLENR), 220}, // v=0.6482182448 r=690.702836269 res=0.477205101041 C/count
   {(short)(143.63*OVERSAMPLENR), 215}, // v=0.701325072984 r=756.52251418 res=0.439861821436 C/count
   {(short)(155.43*OVERSAMPLENR), 210}, // v=0.75893428496 r=829.786312172 res=0.40580689362 C/count
   {(short)(168.22*OVERSAMPLENR), 205}, // v=0.821362988878 r=911.459925639 res=0.374807942441 C/count
   {(short)(182.05*OVERSAMPLENR), 200}, // v=0.888929148269 r=1002.64982268 res=0.346647469777 C/count
   {(short)(197.01*OVERSAMPLENR), 195}, // v=0.961945263294 r=1104.62598373 res=0.321122497343 C/count
   {(short)(213.14*OVERSAMPLENR), 190}, // v=1.04071052629 r=1218.84867031 res=0.298044227104 C/count
   {(short)(230.50*OVERSAMPLENR), 185}, // v=1.1255013369 r=1347.0 res=0.277237725543 C/count
   {(short)(249.15*OVERSAMPLENR), 180}, // v=1.21656012748 r=1491.02126668 res=0.258541638705 C/count
   {(short)(269.12*OVERSAMPLENR), 175}, // v=1.31408254671 r=1653.15714373 res=0.241807945834 C/count
   {(short)(290.45*OVERSAMPLENR), 170}, // v=1.41820318194 r=1836.00815141 res=0.226901760464 C/count
   {(short)(313.14*OVERSAMPLENR), 165}, // v=1.52898017011 r=2042.59306955 res=0.213701189171 C/count
   {(short)(337.18*OVERSAMPLENR), 160}, // v=1.64637924837 r=2276.4233466 res=0.202097259822 C/count
   {(short)(362.55*OVERSAMPLENR), 155}, // v=1.77025801764 r=2541.59201343 res=0.191993933235 C/count
   {(short)(389.19*OVERSAMPLENR), 150}, // v=1.9003514162 r=2842.88017776 res=0.183308214683 C/count
   {(short)(417.03*OVERSAMPLENR), 145}, // v=2.03625959556 r=3185.88488062 res=0.175970384838 C/count
   {(short)(445.94*OVERSAMPLENR), 140}, // v=2.17743952204 r=3577.17297559 res=0.169924373688 C/count
   {(short)(475.79*OVERSAMPLENR), 135}, // v=2.32320165201 r=4024.466792 res=0.165128305847 C/count
   {(short)(506.41*OVERSAMPLENR), 130}, // v=2.47271290863 r=4536.86872239 res=0.161555251787 C/count
   {(short)(537.60*OVERSAMPLENR), 125}, // v=2.62500689639 r=5125.13360987 res=0.159194227172 C/count
   {(short)(569.14*OVERSAMPLENR), 120}, // v=2.7790018201 r=5802.0 res=0.158051492039 C/count
   {(short)(600.79*OVERSAMPLENR), 115}, // v=2.93352595391 r=6582.59409258 res=0.158152213659 C/count
   {(short)(632.29*OVERSAMPLENR), 110}, // v=3.08734978992 r=7484.92374634 res=0.15954257211 C/count
   {(short)(663.39*OVERSAMPLENR), 105}, // v=3.2392232755 r=8530.48437062 res=0.162292406859 C/count
   {(short)(693.85*OVERSAMPLENR), 100}, // v=3.38791592799 r=9745.00426547 res=0.166498527173 C/count
   {(short)(723.41*OVERSAMPLENR), 95}, // v=3.53225719957 r=11159.3643176 res=0.172288840421 C/count
   {(short)(751.86*OVERSAMPLENR), 90}, // v=3.67117433177 r=12810.7364144 res=0.179827492456 C/count
   {(short)(779.00*OVERSAMPLENR), 85}, // v=3.80372512229 r=14743.9971537 res=0.189321265866 C/count
   {(short)(804.68*OVERSAMPLENR), 80}, // v=3.92912350773 r=17013.4892649 res=0.201027548833 C/count
   {(short)(828.78*OVERSAMPLENR), 75}, // v=4.04675657068 r=19685.2237751 res=0.215264274379 C/count
   {(short)(851.19*OVERSAMPLENR), 70}, // v=4.1561924037 r=22839.6429003 res=0.232422343948 C/count
   {(short)(871.87*OVERSAMPLENR), 65}, // v=4.257179083 r=26575.0989991 res=0.252981199788 C/count
   {(short)(890.81*OVERSAMPLENR), 60}, // v=4.34963571436 r=31012.2515227 res=0.277528410588 C/count
   {(short)(908.01*OVERSAMPLENR), 55}, // v=4.43363703396 r=36299.6455618 res=0.306784402698 C/count
   {(short)(923.52*OVERSAMPLENR), 50}, // v=4.50939334084 r=42620.8175756 res=0.341633831197 C/count
   {(short)(937.42*OVERSAMPLENR), 45}, // v=4.57722760904 r=50203.3833742 res=0.383165578898 C/count
   {(short)(949.77*OVERSAMPLENR), 40}, // v=4.6375515104 r=59330.7103511 res=0.43272405261 C/count
   {(short)(960.68*OVERSAMPLENR), 35}, // v=4.69084182718 r=70356.9740827 res=0.49197539708 C/count
   {(short)(970.26*OVERSAMPLENR), 30}, // v=4.73761840645 r=83726.6679177 res=0.562993593122 C/count
   {(short)(978.62*OVERSAMPLENR), 25}, // v=4.77842445789 r=100000.0 res=0.648373340786 C/count
   {(short)(985.87*OVERSAMPLENR), 20}, // v=4.81380966636 r=119886.11324 res=0.751379455965 C/count
   {(short)(992.12*OVERSAMPLENR), 15}, // v=4.84431630692 r=144286.753934 res=0.876146722456 C/count
   {(short)(997.47*OVERSAMPLENR), 10}, // v=4.87046832652 r=174353.970913 res=1.02795055861 C/count
   {(short)(1002.04*OVERSAMPLENR), 5}, // v=4.89276319694 r=211566.759697 res=1.21357887377 C/count
   {(short)(1005.91*OVERSAMPLENR), 0}  // v=4.91166624153 r=257833.434887 res=1.4418515647 C/count
};

Thermistor Table for Teacup

I used an EPCOS B57560G1104 100K Beta_25/100=4092 thermistor in Teacup, so this is one of my thermistor table fragments. Note that for Teacup, the temperatures are C*4.

// Thermistor lookup table for RepRap Temperature Sensor Boards (http://reprap.org/wiki/Temperature_Sensor_2_0)
// Made with createTemperatureLookup.py (https://github.com/triffid/Teacup_Firmware/blob/master/createTemperatureLookup.py)
//           (patched per https://github.com/drf5n/Teacup_Firmware/blob/Gen7/createTemperatureLookup.py)
// default thermistor lookup table
// You may be able to improve the accuracy of this table in various ways.
//   1. Measure the actual resistance of the resistor. It's "nominally" 4.7K, but that's ± 5%.
//   2. Measure the actual beta of your thermistor:http://reprap.org/wiki/MeasuringThermistorBeta
//   3. Generate more table entries than you need, then trim down the ones in uninteresting ranges.
// In either case you'll have to regenerate this table, which requires python, which is difficult to install on windows.
// Since you'll have to do some testing to determine the correct temperature for your application anyway, you
// may decide that the effort isn't worth it. Who cares if it's reporting the "right" temperature as long as it's
// keeping the temperature steady enough to print, right?
// Temp*4 table from https://github.com/triffid/Teacup_Firmware/blob/master/createTemperatureLookup.py
// ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=2700 --beta=4092 --max-adc=1023 --min_adc=20 --multiplier=4 --vadc=5.0
// r0: 100000
// t0: 25
// r1: 0 (parallel with rTherm)
// r2: 2700 (series with rTherm)
// beta: 4092
// min adc: 20 at 0.09765625 V
// max adc: 1023 at 4.9951171875 V
// ADC counts from 20 to 1023 by 52
#define NUMTEMPS 20
// {ADC, temp*4 }, // temp         Rtherm     Vtherm      resolution   power
uint16_t temptable[NUMTEMPS][2] PROGMEM = {
   {  20,   1548}, //  387.20 C,       54 Ohm, 0.098 V, 5.62 C/count, 0.18mW
   {  72,   1080}, //  270.22 C,      204 Ohm, 0.352 V, 1.09 C/count, 0.61mW
   { 124,    920}, //  230.13 C,      372 Ohm, 0.605 V, 0.57 C/count, 0.99mW
   { 176,    823}, //  205.99 C,      560 Ohm, 0.859 V, 0.39 C/count, 1.32mW
   { 228,    754}, //  188.57 C,      773 Ohm, 1.113 V, 0.29 C/count, 1.60mW
   { 280,    699}, //  174.77 C,     1016 Ohm, 1.367 V, 0.24 C/count, 1.84mW
   { 332,    652}, //  163.18 C,     1295 Ohm, 1.621 V, 0.21 C/count, 2.03mW
   { 384,    612}, //  153.02 C,     1620 Ohm, 1.875 V, 0.19 C/count, 2.17mW
   { 436,    575}, //  143.82 C,     2002 Ohm, 2.129 V, 0.17 C/count, 2.26mW
   { 488,    541}, //  135.28 C,     2458 Ohm, 2.383 V, 0.16 C/count, 2.31mW
   { 540,    508}, //  127.16 C,     3012 Ohm, 2.637 V, 0.15 C/count, 2.31mW
   { 592,    477}, //  119.26 C,     3700 Ohm, 2.891 V, 0.15 C/count, 2.26mW
   { 644,    445}, //  111.43 C,     4576 Ohm, 3.145 V, 0.15 C/count, 2.16mW
   { 696,    413}, //  103.47 C,     5729 Ohm, 3.398 V, 0.16 C/count, 2.02mW
   { 748,    380}, //   95.18 C,     7317 Ohm, 3.652 V, 0.16 C/count, 1.82mW
   { 800,    344}, //   86.25 C,     9643 Ohm, 3.906 V, 0.18 C/count, 1.58mW
   { 852,    304}, //   76.21 C,    13374 Ohm, 4.160 V, 0.21 C/count, 1.29mW
   { 904,    256}, //   64.14 C,    20340 Ohm, 4.414 V, 0.26 C/count, 0.96mW
   { 956,    190}, //   47.64 C,    37959 Ohm, 4.668 V, 0.39 C/count, 0.57mW
   {1008,     55}  //   13.89 C,   170100 Ohm, 4.922 V, 1.25 C/count, 0.14mW
};

Experimenting with Transclusion

Transclusion is a wiki-technique of including text from other pages. Templating is a form of Transclusion, which uses a template page with fields, which are filled in when called. MediaWiki uses curly braces around the page to be included to pull the data into the page to be dispayed. E.g.: {{:RepRap}} There are tools for choosing and including parts of pages, https://en.wikipedia.org/wiki/Wikipedia:Transclusion#Selective_transclusion but some are extensions that may not be available here. It seems as if this wiki does not use the #lst extension, nor the ParserFunctions extension. it also looks like you can't do conditional transclusion, but you can do the includeonly/

Example: " Some other text " is text included here from User:DaveX/junk

Experimenting with ParserFunctions

The following tries to use the ParserFunctions MediaWiki extension:

equal → equal

If it works, what you should have seen is:

equal → equal