|
|
(6 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| [[File:Redeem.png|center]] | | [[File:Redeem.png|center]] |
− | ==Configuration Settings==
| + | Redeem is the firmware that controls Replicape and Revolve. It's similar to other 3D-printer firmwares in that it translates G-code into synchronous stepper movements and maintains temperatures. |
| | | |
− | *All units are in SI-units internally in Redeem, but g-codes often expose mm etc.
| + | The software can be found in the redeem repository: https://github.com/intelligent-agent/redeem |
− | *<code>default.cfg</code> is the bible, all configs must be defined in there.
| |
− | *All configurations in default.cfg can be overridden
| |
− | *default.cfg and printer.cfg can be changed with updates. <code>local.cfg</code> can not.
| |
− | *Here is the config hierarchy: <code>local.cfg</code> > <code>printer.cfg</code> > <code>default.cfg</code>
| |
| | | |
− | For Redeem, the preferred way to handle configuration is through the web
| + | This page is an overview of the configuration and architecture of Redeem. All pages here is related to the configuration and use of Redeem. You will typically not install Redeem directly, but instead use the version that comes with [[Umikaze]]. |
− | interface. The web interface is available through
| + | <br> |
− | [http://kamikaze.local kamikaze.local] assuming you have your BeagleBone on the
| + | [[Redeem architecture]] <br> |
− | local network and you are using Umikaze 2.1.1.
| + | [[Redeem settings]]<br> |
− | | + | [[Redeem g-codes]]<br> |
− | The config files for redeem are present in the folder <code>/etc/redeem/</code>.
| + | [[Redeem m-codes]]<br> |
− | There are three files for setting the configuration. <code>default.cfg</code> is the
| |
− | catch-all at the bottom. It will contain all the possible options and '''should not be touched'''. Second is <code>printer.cfg</code> which is a symlink and
| |
− | specific to a printer. Look in the folder to find one that matches your
| |
− | printer. If you cannot find one, make it! *Otherwise leave the existing
| |
− | one as is.* Finally is local.cfg which contains quirks or other
| |
− | individual settings. The <code>local.cfg</code> will not be overwritten by new
| |
− | software updates and can contain stuff like microstepping, stepper
| |
− | current, offsets as well as any bed compensation matrices etc.
| |
− | | |
− | Now normally all settings can come from your specific <code>printer.cfg</code> config
| |
− | file, but if no one has made that file, you need to set this stuff up
| |
− | yourself. Most of the stuff in the config files is in SI units. This is
| |
− | perhaps different than what other firmwares do, where the focus is on
| |
− | optimization rather than ease of use. Note that it is important to keep
| |
− | the section headers in the same case as the examples or <code>default.cfg</code> as | |
− | they are case sensitive.
| |
− | | |
− | <div class="alert alert-success">
| |
− | ===='''Important'''====
| |
− | If you edit a config file incorrectly, redeem will fail to load and
| |
− | you will be unable to connect in octoprint. You must use headers, as
| |
− | shown in the examples, and consistent spacing/formatting. Also the first
| |
− | time you load octoprint you will not have any config files listed in
| |
− | settings/redeem, you are supposed to load a blank local.cfg file. You
| |
− | shouldn't need to do this again unless you reflash the image. However,
| |
− | if you find that your config files suddenly when missing, simply close
| |
− | your browser tab and reopen octoprint and they should return.
| |
− | </div>
| |
− | <div class="alert alert-info">
| |
− | ===='''Info'''====
| |
− | If you are not writing your own new printer.cfg, keep all your printer settings in local.cfg to avoid getting any setting over-written by a redeem update.
| |
− | </div>
| |
− | | |
− | ===System===
| |
− | | |
− | The system section has only Replicape board revision and log level. For
| |
− | debugging purposes, set the log level to 10, but keep it at 20 for
| |
− | normal operations, since logging is very CPU intensive and can cause
| |
− | delays during prints at high speed. On later versions of Redeem, the
| |
− | board revision is read from the EEPROM on the Replicape.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [System]
| |
− | | |
− | # CRITICAL=50, # ERROR=40, # WARNING=30, INFO=20, DEBUG=10, NOTSET=0
| |
− | loglevel = 20
| |
− | | |
− | # If set to True, also log to file.
| |
− | log_to_file = True
| |
− | | |
− | # Default file to log to, this can be viewed from octoprint
| |
− | logfile = /home/octo/.octoprint/logs/plugin_redeem.log
| |
− | | |
− | # Plugin to load for redeem, comma separated (i.e. HPX2Max,plugin2,plugin3)
| |
− | plugins =
| |
− | | |
− | # Machine type is used by M115
| |
− | # to identify the machine connected.
| |
− | machine_type = Unknown
| |
− | </syntaxhighlight>
| |
− | | |
− | | |
− | ===Geometry===
| |
− | | |
− | The geometry section contains stuff about the physical layout of your
| |
− | printer. What the print volume is, what the offset from the end stops
| |
− | is, whether it's a Normal XY style printer, a Delta printer, an H-belt
| |
− | type printer or a CoreXY type printer.
| |
− | | |
− | It also contains the bed compensation matrix. The bed compensation
| |
− | matrix is used for compensating any rotation the bed has in relation
| |
− | to the nozzle. This is typically not something you write yourself, but
| |
− | instead it is found by probing the bed at different locations by use | |
− | of the G-code G29. The G29 command is a macro command, so it only runs
| |
− | other G-codes and you can override it yourself in the local.cfg file
| |
− | or in the printer.cfg file if you are a printer manufacturer.
| |
− | | |
− | <div class="alert alert-info">
| |
− | ===='''Info'''====
| |
− | Homing works differently on cartesian and delta printers. Please refer to :doc:`/support/howto/homing`.
| |
− | </div>
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Geometry]
| |
− | # 0 - Cartesian
| |
− | # 1 - H-belt
| |
− | # 2 - Core XY
| |
− | # 3 - Delta
| |
− | axis_config = 0
| |
− | | |
− | # The total length each axis can travel
| |
− | # This affects the homing endstop searching length.
| |
− | # travel_* can be left undefined.
| |
− | # It will be determined by soft_end_stop_min/max_*
| |
− | # travel_x = 0.2
| |
− | # ...
| |
− | | |
− | # Define the origin in relation to the endstops
| |
− | # offset_* can be left undefined.
| |
− | # It will be determined by home_speed and soft_end_stop_min/max_*
| |
− | # offset_x = 0.0
| |
− | # ...
| |
− | | |
− | # The identity matrix is the default
| |
− | bed_compensation_matrix =
| |
− | 1.0, 0.0, 0.0,
| |
− | 0.0, 1.0, 0.0,
| |
− | 0.0, 0.0, 1.0
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Delta===
| |
− | Several variables are needed for defining the geometry of the delta setup.
| |
− | | |
− | Terminology:
| |
− | | |
− | * Effector is the thing that is in the centre and moves (the one with the hot end)
| |
− | * The distance from the centre of the effector to where the rods are mounted is the effector offset.
| |
− | * Carriage is those that move up and down along the columns.
| |
− | | |
− | <div class="alert alert-danger">
| |
− | ===='''Warning'''====
| |
− | I've not figured out what the carriage offset does. You should think
| |
− | this was the offset from the carriages to the rods, but I've not
| |
− | gotten that top work. Seems broken. Instead, add the carriage offset
| |
− | to the effector offset.
| |
− | | |
− | For more information on correcting delta calibration, see the :doc:`/support/printers/delta`.
| |
− | </div>
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Delta]
| |
− | | |
− | # DEPRECATED IN 2.1.1
| |
− | # Distance head extends below the effector.
| |
− | Hez = 0.0
| |
− | | |
− | # Length of the rod
| |
− | L = 0.135
| |
− | | |
− | # Radius of the columns (distance from column to the center of the build plate)
| |
− | r = 0.144
| |
− | | |
− | # Effector offset (distance between the joints to the rods to the center of the effector)
| |
− | Ae = 0.026
| |
− | Be = 0.026
| |
− | Ce = 0.026
| |
− | | |
− | # Carriage offset (the distance from the column to the carriage's center of the rods' joints)
| |
− | A_radial = 0.0
| |
− | B_radial = 0.0
| |
− | C_radial = 0.0
| |
− | | |
− | # DEPRECATED IN 2.1.1
| |
− | # Compensation for positional error of the columns
| |
− | # (For details, read: https://github.com/hercek/Marlin/blob/Marlin_v1/calibration.wxm)
| |
− | # Positive values move the tower to the right, in the +X direction, tangent to it's radius
| |
− | A_tangential = 0.0
| |
− | B_tangential = 0.0
| |
− | C_tangential = 0.0
| |
− | | |
− | # NEW IN 2.1.1
| |
− | A_angular = 0.0
| |
− | B_angular = 0.0
| |
− | C_angular = 0.0
| |
− | </syntaxhighlight> | |
− | | |
− | Here is a visual depiction of what the length and radius looks like:
| |
− | [[File:L and R.png|center|600px]] | |
− | | |
− | | |
− | Here is what the Hez looks like:
| |
− | [[File:Hez.png|center|600px]]
| |
− | | |
− | ===Steppers===
| |
− | | |
− | This section has the stuff you need for the the steppers:
| |
− | | |
− | * the number of steps pr mm for each axis
| |
− | * the stepper max current
| |
− | * the microstepping
| |
− | * acceleration
| |
− | * max speed
| |
− | * the option to invert a stepper (so you don't have to rotate the stepper connector),
| |
− | * the decay mode of the current chopping on the motor drives (see the :ref:`ConfigStepperDecay` for more information.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'> | |
− | # Stepper e is ext 1, h is ext 2
| |
− | [Steppers] | |
− | </syntaxhighlight>
| |
− | | |
− | ====Microstepping====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | microstepping_x = 3
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | {| class="wikitable"
| |
− | ! style="text-align:left;"| Value
| |
− | ! Gives
| |
− | |-
| |
− | |0
| |
− | |Full step
| |
− | |-
| |
− | |1
| |
− | |Half step
| |
− | |-
| |
− | |2
| |
− | |Half step, interpolated to 256
| |
− | |-
| |
− | |3
| |
− | |Quarter step
| |
− | |-
| |
− | |4
| |
− | |16th step
| |
− | |-
| |
− | |5
| |
− | |Quarter step, interpolated to 256 microsteps
| |
− | |-
| |
− | |6
| |
− | |16th step, interpolated to 256 microsteps
| |
− | |-
| |
− | |7
| |
− | |Quarter step, StealthChop, interpolated to 256 microsteps
| |
− | |-
| |
− | |8
| |
− | |16th step, StealthChop, interpolated to 256 microsteps
| |
− | |}
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | #Current
| |
− | current_x = 0.5
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | <div class="alert alert-danger">
| |
− | ===='''Warning'''====
| |
− | Never run the Replicape with the steppers running above 1.0A without cooling.
| |
− | Never exceed 1.2A of regular use either - the TMC2100 drivers aren't
| |
− | rated higher. If you need more current to drive two motors off the
| |
− | same stepper, use slave mode with a second driver (usually H). While it
| |
− | means splitting off your wiring of the stepper motors you had going to
| |
− | a single driver, but it also means you avoid overheating your drivers.
| |
− | </div>
| |
− | | |
− | ====Ratios====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # steps per mm:
| |
− | # Defined how many stepper full steps needed to move 1mm.
| |
− | # Do not factor in microstepping settings.
| |
− | # For example: If the axis will travel 10mm in one revolution and
| |
− | # angle per step in 1.8deg (200step/rev), steps_pr_mm is 20.
| |
− | steps_pr_mm_x = 4.0
| |
− | steps_pr_mm_y = 4.0
| |
− | steps_pr_mm_z = 50.0
| |
− | steps_pr_mm_e = 6.0
| |
− | steps_pr_mm_h = 6.0
| |
− | steps_pr_mm_a = 6.0
| |
− | steps_pr_mm_b = 6.0
| |
− | steps_pr_mm_c = 6.0
| |
− | | |
− | backlash_x = 0.0
| |
− | backlash_y = 0.0
| |
− | backlash_z = 0.0
| |
− | backlash_e = 0.0
| |
− | backlash_h = 0.0
| |
− | backlash_a = 0.0
| |
− | backlash_b = 0.0
| |
− | backlash_c = 0.0
| |
− | </syntaxhighlight>
| |
− | | |
− | ====Enable / Disable====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # Which steppers are enabled
| |
− | in_use_x = True
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | ====Direction====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # Set to -1 if axis is inverted
| |
− | direction_x = 1
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | ====Decay====
| |
− | | |
− | The decay mode affects the way the stepper motor controllers
| |
− | decays the current. Basically slow decay will give more of a hissing
| |
− | sound while standing still and fast decay will cause the steppers to
| |
− | be silent when stationary, but loud when stepping. The microstepping_
| |
− | settings is :math:`2^x`, so <code>microstepping_x = 2</code> means <code>2^2 = 4</code>.
| |
− | <code>3</code> then is <code>2^3 = 8</code> or one-eighth.
| |
− | | |
− | On Replicape Rev B, there are 8 levels of decay. Please consult the [http://www.trinamic.com/_scripts/download.php?file=_articles%2Fproducts%2Fintegrated-circuits%2Ftmc2100%2F_datasheet%2FTMC2100_datasheet.pdf data sheet for TMC2100]
| |
− | on the different options.
| |
− | | |
− | There are three settings that are controlled on the TMC2100 by the decay mode or rather “chopper configuration”: CFG0,
| |
− | CFG4 and CFG5 in the TMC2100 data sheet.
| |
− | | |
− | {| class="wikitable"
| |
− | | CFG0
| |
− | | DIS - 140 Tclk (recommended)
| |
− | | EN - 236 Tclk (medium)
| |
− | | Sets chopper off time (Duration of slow decay phase)
| |
− | |-
| |
− | | CFG4
| |
− | | DIS: (recommended): low hysteresis with ≈4% offull scale current.
| |
− | | EN: high setting with ≈6% of full scale current at sense resistor.
| |
− | | Sets chopper hysteresis (Tuning of zero crossing precision)
| |
− | |-
| |
− | |CFG5
| |
− | | DIS - 16 (best performance for StealthChop)
| |
− | | EN - 24 (recommended, most universal choice)
| |
− | | Sets chopper blank time ( Duration of blanking of switching spike )
| |
− | |}
| |
− | | |
− | | |
− | {| class="wikitable"
| |
− | ! Value
| |
− | ! CFG0
| |
− | ! CFG4
| |
− | ! CFG5
| |
− | |-
| |
− | | 0 || 0 || 0 || 0
| |
− | |-
| |
− | | 1 || 0 || 0 || 1
| |
− | |-
| |
− | | 2 || 0 || 1 || 1
| |
− | |-
| |
− | | 3 || 0 || 1 || 1
| |
− | |-
| |
− | | 4 || 1 || 0 || 0
| |
− | |-
| |
− | | 5 || 1 || 0 || 1
| |
− | |-
| |
− | | 6 || 1 || 1 || 0
| |
− | |-
| |
− | | 7 || EN_CFG0 || EN_CFG4 || EN_CFG5
| |
− | |}
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # Set to True if slow decay mode is needed
| |
− | slow_decay_x = 0
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | ====Slave====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # A stepper controller can operate in slave mode,
| |
− | # meaning that it will mirror the position of the
| |
− | # specified stepper. Typically, H will mirror Y or Z,
| |
− | # in the case of the former, write this: slave_y = H.
| |
− | slave_x =
| |
− | slave_y =
| |
− | slave_z =
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | | |
− | ====Timeout====
| |
− | | |
− | If you want to enable slave mode for a stepper driver, meaning it will
| |
− | mirror the movements of another stepper motor exactly, you need to use
| |
− | <code>slave_y = H</code> if you want the H-stepper motor to mirror the moves
| |
− | produced by the Y-stepper motor. Remember to also set the <code>steps_pr_mm</code>
| |
− | to the same value on the the motors mirroring each other, and also the
| |
− | direction. Most likely you will want the current to be the same as well.
| |
− | | |
− | # Enable the slave stepper driver (<code>in_use_h = True</code>)
| |
− | # The syntax for selecting which axis is the master and which the slave is:
| |
− | I want to slave H to Z (H follows everything Z does) then you use <code>slave_z = H</code>.
| |
− | # If you have any endstops acting on the master axis, then you should
| |
− | do the same thing for the slave axis, otherwise it will just keep on
| |
− | turning. For example, on a delta with Z1 connected to a bed probe and
| |
− | Z2 connected to the tower limit switch: <code>end_stop_Z1_stops =
| |
− | x_neg, y_neg, z_neg, h_neg</code> and <code>end_stop_Z2_stops = z_pos,h_pos</code>.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | # Stepper timout
| |
− | use_timeout = True
| |
− | timeout_seconds = 500
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Planner===
| |
− | | |
− | The acceleration profiles are trapezoidal, i.e. constant acceleration.
| |
− | One will probably see and hear a difference between Replicape/Redeem and
| |
− | the simpler 8 bit boards since all path segments are cut down to 0.1 mm
| |
− | on delta printers regardless of speed and there is also a better
| |
− | granularity on the stepper ticks, so you will never have quantized steps
| |
− | either. Further more, all calculations are done with floating point
| |
− | numbers, giving a better precision on calculations compared to 8 bit
| |
− | microcontrollers.
| |
− | | |
− | This section is concerned with how the path planner caches and paces the
| |
− | path segments before pushing them to the PRU for processing.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Planner]
| |
− | | |
− | # size of the path planning cache
| |
− | move_cache_size = 1024
| |
− | | |
− | # time to wait for buffer to fill, (ms)
| |
− | print_move_buffer_wait = 250
| |
− | | |
− | # if total buffered time gets below (min_buffered_move_time) then wait for (print_move_buffer_wait) before moving again, (ms)
| |
− | min_buffered_move_time = 100
| |
− | | |
− | # total buffered move time should not exceed this much (ms)
| |
− | max_buffered_move_time = 1000
| |
− | | |
− | # DEPRECATED IN 2.1.1
| |
− | # max segment length
| |
− | max_length = 0.001
| |
− | </syntaxhighlight>
| |
− | ====Accelleration====
| |
− | This sets the accelleration pr stepper in m/s². For XYZ, the slowest step rate of the axis in conjunction with the accelleration rate will govern the maximum accelleration in any direction.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | acceleration_x = 0.5
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | ====Jerk====
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | max_jerk_x = 0.01
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | ====Max speed====
| |
− | This sets the maximum speed of each stepper. The maximum speed in any direction will limit the total speed for the move.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | | |
− | # Max speed for the steppers in m/s
| |
− | max_speed_x = 0.2
| |
− | ...
| |
− | </syntaxhighlight>
| |
− | ====Minimum buffered move time====
| |
− | If total buffered time gets below (min_buffered_move_time) then wait for (print_move_buffer_wait) before moving again, (ms)
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | min_buffered_move_time = 100
| |
− | </syntaxhighlight>
| |
− | | |
− | ====E axis active====
| |
− | When true, movements on the E axis (eg, G1, G92) will apply
| |
− | to the active tool (similar to other firmwares). When false,
| |
− | such movements will only apply to the E axis.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | e_axis_active = True
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Cold ends===
| |
− | | |
− | Replicape has three thermistor inputs and a Dallas one-wire input.
| |
− | Typically, the thermistor inputs are for high temperatures such as hot
| |
− | ends and heated beds, and the Dallas one-wire input is used for
| |
− | monitoring the cold end of a hot end, if you know what I mean... This
| |
− | section is used to connect a fan to one of the temperature probes, so
| |
− | for instance the fan on your extruder will start as soon as the
| |
− | temperature goes above 60 degrees. If you have a Dallas one-wire
| |
− | temperature probe connected on the board, it will show up as a file-like
| |
− | device in Linux under /sys/bus/w1/devices/. Find out the full path and
| |
− | place that in your local.cfg. All Dallas one-wire devices have a unique
| |
− | code, so yours will be different than what you see here.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | | |
− | [Cold-ends]
| |
− | # To use the DS18B20 temp sensors, connect them like this.
| |
− | # Enable by setting to True
| |
− | connect-ds18b20-0-fan-0 = False
| |
− | connect-ds18b20-1-fan-0 = False
| |
− | connect-ds18b20-0-fan-1 = False
| |
− | | |
− | # This list is for connecting thermistors to fans,
| |
− | # so they are controlled automatically when reaching 60 degrees.
| |
− | connect-therm-E-fan-0 = False
| |
− | ...
| |
− | connect-therm-H-fan-1 = False
| |
− | ...
| |
− | # For your part cooling fan, you'll want to set this to True for the correct Fan-input so your slicer can control it.
| |
− | # If your part-cooling fan is connected to the Fan0 input, use this:
| |
− | add-fan-0-to-M106 = True
| |
− | ...
| |
− | | |
− | # If you want coolers to
| |
− | # have a different 'keep' temp, list it here.
| |
− | cooler_0_target_temp = 60
| |
− | | |
− | # If you want the fan-thermistor connections to have a
| |
− | # different temperature:
| |
− | # therm-e-fan-0-target_temp = 70
| |
− |
| |
− | # if you have a Titan Aero (or any other all-metal) hotend, you'll want the fan on the hotend to turn on
| |
− | # automatically above 50C. To make the fan connected to the Fan1 input turn on when the hotend reaches 60C
| |
− | # (provided that the hotend is connected to "thermistor extruder 1", also referred to as E).
| |
− | connect-therm-E-fan-1 = True
| |
− | therm-e-fan-1-target_temp = 50
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Heaters===
| |
− | The heater section controls the PID settings and which temperature
| |
− | lookup chart to use for the thermistor. If you do not find your
| |
− | thermistor in the chart, you can find the Steinhart-Hart coefficients
| |
− | from the [http://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm NTC Calculator] online tool.
| |
− | | |
− | Some of the most common thermistor coefficients have already been
| |
− | implemented though, so you might find it here:
| |
− | | |
− | ===Thermistors===
| |
− | An example configuration for `E`. The most
| |
− | important thing to change should be the sensor name matching the
| |
− | thermistor. The Kp, Ti and Td values will be set by the M303 auto-tune
| |
− | and the rest of the values are for advanced tuning or special cases.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | | |
− | [Heaters]
| |
− | sensor_E = B57560G104F
| |
− | pid_Kp_E = 0.1
| |
− | pid_Ti_E = 100.0
| |
− | pid_Td_E = 0.3
| |
− | ok_range_E = 4.0
| |
− | max_rise_temp_E = 10.0
| |
− | max_fall_temp_E = 10.0
| |
− | min_temp_E = 20.0
| |
− | max_temp_E = 250.0
| |
− | path_adc_E = /sys/bus/iio/devices/iio:device0/in_voltage4_raw
| |
− | mosfet_E = 5
| |
− | onoff_E = False
| |
− | prefix_E = T0
| |
− | max_power_E = 1.0
| |
− | | |
− | ...
| |
− | </syntaxhighlight> | |
− | | |
− | ====Steinhart-Heart====
| |
− | {| class="wikitable"
| |
− | ! Name
| |
− | ! Comment
| |
− | |-
| |
− | | B57540G0104F000 || EPCOS100K with b= 4066K
| |
− | |-
| |
− | | B57560G1104F || EPCOS100K with b = 4092K
| |
− | |-
| |
− | | B57560G104F || EPCOS100K with b = 4092K (Hexagon)
| |
− | |-
| |
− | | B57561G0103F000 || EPCOS10K
| |
− | |-
| |
− | | NTCS0603E3104FXT || Vishay100K
| |
− | |-
| |
− | | SEMITEC-104GT-2 || Semitec (E3D V6)
| |
− | |-
| |
− | | DYZE || DYZE hightemp thermistor
| |
− | |-
| |
− | | HT100K3950 || RobotDigg.com's 3950-100K thermistor (part number HT100K3950-1)
| |
− | |}
| |
− | | |
− | ====PT100 type thermistors====
| |
− | | |
− | {| class="wikitable"
| |
− | ! Name
| |
− | ! Comment
| |
− | |-
| |
− | | E3D-PT100-AMPLIFIER || E3D PT100
| |
− | |-
| |
− | | PT100-GENERIC-PLATINUM || Ultimaker heated bed etc.
| |
− | |}
| |
− | | |
− | | |
− | Linear v/deg Scale Thermocouple Boards
| |
− | 20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)20:17, 19 October 2018 (CEST)[[User:Elias|Elias]] ([[User talk:Elias|talk]])
| |
− | | |
− | {| class="wikitable"
| |
− | ! Name
| |
− | ! Comment
| |
− | |-
| |
− | | Name | Comment
| |
− | |-
| |
− | | Tboard | 0.005 Volts pr degree
| |
− | |}
| |
− | | |
− | ===PID autotune===
| |
− | With version 1.2.6 and beyond, the PID autotune algorithm is fairly
| |
− | stable. To run an auto-tune, use the M-code M303. You should see the
| |
− | hot-end or heated bed temperature oscillate for a few cycles before
| |
− | completing. To set temperature, number of oscillations, which hot end to
| |
− | calibrate etc, try running “M303?” or see the description of the :ref:`M303`.
| |
− | | |
− | ===Endstops===
| |
− | | |
− | Use this section to specify whether or not you have end stops on the
| |
− | different axes and how the end stop inputs on the board interacts with
| |
− | the steppers. The lookup mask is useful for the latter. In the default
| |
− | setup, the connector marked X1 is connected to the stepper on the
| |
− | X-axis. For CoreXY and H-bot this is different in that two steppers are
| |
− | denied movement in one direction, but allowed movement in the other
| |
− | direction given that one of the end stops has been hit.
| |
− | | |
− | Also of interest is the use of two different inputs for a single axis
| |
− | and direction. Imagine using one input to control the lower end of the
| |
− | Z-axis and a different input to probe the bed with G20/G30.
| |
− | | |
− | If you are not seeing any movement even though no end stop has been hit,
| |
− | try inverting the end stop.
| |
− | | |
− | See also this [http://www.thing-printer.com/end-stop-configuration-for-redeem/ blog post and video] for a more thorough explanation.
| |
− | | |
− | Soft end stops can be used to prevent the print head from moving beyond
| |
− | a specified point. For delta printers this is useful since they cannot
| |
− | have end stops preventing movement outside the build area.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Endstops]
| |
− | # Which axis should be homed.
| |
− | has_x = True
| |
− | ...
| |
− | # Number of cycles to wait between checking
| |
− | # end stops. CPU frequency is 200 MHz
| |
− | end_stop_delay_cycles = 1000
| |
− | | |
− | # Invert =
| |
− | # True means endstop is connected as Normally Open (NO) or not connected
| |
− | # False means endstop is connected as Normally Closed (NC)
| |
− | invert_X1 = False
| |
− | ...
| |
− | # If one endstop is hit, which steppers and directions are masked.
| |
− | # The list is comma separated and has format
| |
− | # x_cw = stepper x clockwise (independent of direction_x)
| |
− | # x_ccw = stepper x counter clockwise (independent of direction_x)
| |
− | # x_neg = stepper x negative direction (affected by direction_x)
| |
− | # x_pos = stepper x positive direction (affected by direction_x)
| |
− | # Steppers e and h (and a, b, c for reach) can also be masked.
| |
− | #
| |
− | # For a list of steppers to stop, use this format: x_cw, y_ccw
| |
− | # For Simple XYZ bot, the usual practice would be
| |
− | # end_stop_X1_stops = x_neg, end_stop_X2_stops = x_pos, ...
| |
− | # For CoreXY and similar, two steppers should be stopped if an end stop is hit.
| |
− | # similarly for a delta probe should stop x, y and z.
| |
− | end_stop_X1_stops =
| |
− | ...
| |
− | soft_end_stop_min_x = -0.5
| |
− | ...
| |
− | soft_end_stop_max_x = 0.5
| |
− | ...
| |
− | | |
− | </syntaxhighlight>
| |
− | ====Multi-extrusion====
| |
− | | |
− | Currently Redeem does not yet support tool offsets for dual or
| |
− | multi-extrusion. These offsets must be configured in the slicer, instead
| |
− | of in the firmware, for now.
| |
− | | |
− | ===Servos===
| |
− | | |
− | Servos are controlled by two on-chip PWMs and share connector with
| |
− | Endstop X2 and Y2.
| |
− | | |
− | - Servo 0 is on pin P9\_14
| |
− | - Servo 1 is on pin P9\_16
| |
− | | |
− | Use :ref:`m280` to set
| |
− | the servo position. Note that multiple servos can be present, the init
| |
− | script will continue to initialize servos as long as there are higher
| |
− | indexes, so keep the indexes increasing for multiple servos.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Servos]
| |
− | # For Rev B, servo is either P9_14 or P9_16.
| |
− | # Not enabled for now, just kept here for reference.
| |
− | # Angle init is the angle the servo is set to when redeem starts.
| |
− | # pulse min and max is the pulse with for min and max position, as always in SI unit Seconds.
| |
− | # So 0.001 is 1 ms.
| |
− | # Angle min and max is what angles those pulses correspond to.
| |
− | servo_0_enable = False
| |
− | servo_0_channel = P9_14
| |
− | servo_0_angle_init = 90
| |
− | servo_0_angle_min = -90
| |
− | servo_0_angle_max = 90
| |
− | servo_0_pulse_min = 0.001
| |
− | servo_0_pulse_max = 0.002
| |
− | | |
− | </syntaxhighlight>
| |
− | | |
− | ===Z-Probe===
| |
− | | |
− | Before attempting the configuration of a Z probe make sure your printer
| |
− | is moving in the right direction and that your hard endstops and your
| |
− | soft endstops are configured correctly please refer to the endstop
| |
− | section.
| |
− | | |
− | | The standard configs for Z-probe should work for most. The real
| |
− | difficulty lies in making the macro for the whole probing procedure.
| |
− | The offsets are the distance from the probe point to the nozzle. Here
| |
− | are the standard values:
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Probe]
| |
− | length = 0.01
| |
− | speed = 0.05
| |
− | accel = 0.1
| |
− | offset_x = 0.0
| |
− | offset_y = 0.0
| |
− | </syntaxhighlight>
| |
− | | |
− | For more information, check out the :doc:`/support/howto/zprobes` page.
| |
− | | |
− | ===Rotary Encoders===
| |
− | | |
− | <div class="alert alert-danger">
| |
− | ===='''Warning'''====
| |
− | work in progress.
| |
− | </div>
| |
− | <syntaxhighlight lang="Python" line='line'> | |
− | [Rotary-encoders]
| |
− | enable-e = False
| |
− | event-e = /dev/input/event1
| |
− | cpr-e = -360
| |
− | diameter-e = 0.003
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Filament Sensors===
| |
− | | |
− | <div class="alert alert-danger">
| |
− | ===='''Warning'''====
| |
− | work in progress. See the blog post `Filament Sensor <http://www.thing-printer.com/filament-sensor-3d-printer-replicape/>`_.
| |
− | | |
− | </div>
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Filament-sensors]
| |
− | # If the error is > 1 cm, sound the alarm
| |
− | alarm-level-e = 0.01
| |
− | </syntaxhighlight>
| |
− | | |
− | ===Watchdog===
| |
− | | |
− | The watchdog is a time-out alarm that will kick in if the
| |
− | /dev/watchdog file is not written at least once pr. minute. This is a
| |
− | safety issue that will cause the BeagleBone to issue a hard reset if
| |
− | the Redeem daemon were to enter a faulty state and not be able to
| |
− | regulate the heater elements. For the watchdog to start, it requires
| |
− | the watchdog to be resettable, with the proper kernel command line ``omap\_wdt.nowayout=0``.
| |
− | | |
− | This should be left on at all time as a safety precauchion, but can be
| |
− | disabled for development purposes. This is not the same as the stepper
| |
− | watchdog which only disables the steppers.
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [Watchdog]
| |
− | enable_watchdog = True
| |
− | | |
− | </syntaxhighlight>
| |
− | | |
− | ===Macros===
| |
− | | |
− | The macro-section contains macros. Duh. Right now, only G29, G31 and G32
| |
− | has macro definitions and it's basically a set of other G-codes. To make
| |
− | a new macro, you need to also define the actual g-code file for it. That
| |
− | is beyond this wiki, but look at [https://github.com/intelligent-agent/redeem/src/73c21486b1e294570a125e9fac6c9cef9b4f273b/redeem/gcodes/G29.py?at=develop G29] in the repository.
| |
− | | |
− | <div class="alert alert-warning">
| |
− | ===='''Note'''====
| |
− | Each line in macros section needs to be spaced the same or you may
| |
− | not be able to connect in octoprint. Most Inductive sensors don't need
| |
− | probe type defined to work. To simply turn an inductive sensor on and
| |
− | off change the example macro with the g31/g32 macro's i have listed
| |
− | here. The g32 may need adjusting to match your z1 endstop settings.
| |
− | Undock turns probe on, Dock turns it off. Check your Macro and setup
| |
− | carefully, in the g29 example, at the end of each probe point it docks
| |
− | your probe then homes z before the start of the next point, which in
| |
− | some printers can crash your probe into the bed possibly causing damage.
| |
− | </div>
| |
− |
| |
− | If you find that your probe routine is probing the air, your z
| |
− | axis is most likely moving in the wrong direction for the probing
| |
− | to work. It seems redeem only probes in one direction and this
| |
− | can't be changed in the probing settings. So, You will need to
| |
− | swap your z direction, in the [steppers] section using
| |
− | direction\_z = -1 or direction\_z = +1, then confirm your z
| |
− | stops/homing, ect work make corrections as required. You will also
| |
− | most likely need to change under [Geometry] travel\_z direction.
| |
− | This should trick the probe into moving in the correct direction.
| |
− | | |
− | **G31**
| |
− | ::
| |
− | | |
− | M574 Z2 ; Probe up (Dock sled)
| |
− | | |
− | **G32**
| |
− | ::
| |
− | | |
− | M574 Z2 z_ccw, h_ccw ; Probe down (Undock sled)
| |
− | | |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | | |
− | [Macros]
| |
− | G29 =
| |
− | M561 ; Reset the bed level matrix
| |
− | M558 P0 ; Set probe type to Servo with switch
| |
− | M557 P0 X10 Y20 ; Set probe point 0
| |
− | M557 P1 X10 Y180 ; Set probe point 1
| |
− | M557 P2 X180 Y100 ; Set probe point 2
| |
− | G28 X0 Y0 ; Home X Y
| |
− | | |
− | G28 Z0 ; Home Z
| |
− | G0 Z12 ; Move Z up to allow space for probe
| |
− | G32 ; Undock probe
| |
− | G92 Z0 ; Reset Z height to 0
| |
− | G30 P0 S ; Probe point 0
| |
− | G0 Z0 ; Move the Z up
| |
− | G31 ; Dock probe
| |
− | | |
− | G28 Z0 ; Home Z
| |
− | G0 Z12 ; Move Z up to allow space for probe
| |
− | G32 ; Undock probe
| |
− | G92 Z0 ; Reset Z height to 0
| |
− | G30 P1 S ; Probe point 1
| |
− | G0 Z0 ; Move the Z up
| |
− | G31 ; Dock probe
| |
− | | |
− | G28 Z0 ; Home Z
| |
− | G0 Z12 ; Move Z up to allow space for probe
| |
− | G32 ; Undock probe
| |
− | G92 Z0 ; Reset Z height to 0
| |
− | G30 P2 S ; Probe point 2
| |
− | G0 Z0 ; Move the Z up
| |
− | G31 ; Dock probe
| |
− | | |
− | G28 X0 Y0 ; Home X Y
| |
− | | |
− | M561 U; (RFS) Update the matrix based on probe data
| |
− | M561 S; Show the current matrix
| |
− | M500; (RFS) Save data
| |
− | | |
− | | |
− | G31 =
| |
− | M280 P0 S320 F3000 ; Probe up (Dock sled)
| |
− | | |
− | G32 =
| |
− | M280 P0 S-60 F3000 ; Probe down (Undock sled)
| |
− | | |
− | | |
− | </syntaxhighlight>
| |
− | | |
− | ===Plugins===
| |
− | | |
− | ====HPX2Max====
| |
− | Dual extrusion with the HPX2Max extruder.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [HPX2MaxPlugin]
| |
− | # The channel on which the servo is connected. The numbering correspond to the Fan number
| |
− | servo_channel = P9_14
| |
− | | |
− | # Extruder 0 angle to set the servo when extruder 0 is selected, in degree
| |
− | extruder_0_angle = 20
| |
− | | |
− | # Extruder 1 angle to set the servo when extruder 1 is selected, in degree
| |
− | extruder_1_angle = 175
| |
− | </syntaxhighlight>
| |
− | | |
− | ====DualServo====
| |
− | A more general dual extrusion using a servo for switching between hot ends.
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | [DualServoPlugin]
| |
− | # The pin name of where the servo is located
| |
− | servo_channel = P9_14
| |
− | # minimum pulse length
| |
− | pulse_min = 0.01
| |
− | pulse_max = 0.02
| |
− | angle_min = 0
| |
− | angle_max = 180
| |
− | extruder_0_angle = 87.5
| |
− | extruder_1_angle = 92.5
| |
− | </syntaxhighlight>
| |
− | | |
− | ====StartButton====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | #todo
| |
− | </syntaxhighlight>
| |
− | | |
− | ====VCNL4000====
| |
− | <syntaxhighlight lang="Python" line='line'>
| |
− | #todo
| |
− | </syntaxhighlight>
| |
− | | |
− | <div class="alert alert-info">
| |
− | ==='''Info'''===
| |
− | There is a configuration page where you can choose what ``printer.cfg`` links to and edit ``local.cfg``.
| |
− | </div> | |
− | | |
− | ==Redeem Architecture==
| |
− | | |
− | Redeem is the Replicape firmware; it is a daemon process that chews G-codes
| |
− | and spits out coordinates. The software can be found in the redeem repository:
| |
− | https://github.com/intelligent-agent/redeem
| |
− | | |
− | Architecture
| |
− | ------------
| |
− | | |
− | Most of Redeem is written in Python, with the exception of the most
| |
− | heavily used gcode commands: G0/G1. These have been optimized in C.
| |
− | This allows rapid development of new features which are infrequently
| |
− | run -- such as bed leveling -- using python's scripting language capabilities
| |
− | of garbage collection and extensive libraries
| |
− | | |
− | | |
− | .. figure:: media/redeem_stack.png
| |
− | :figclass: inline
| |
− | | |
− | Installation
| |
− | ------------
| |
− | | |
− | The recommended method for installation is to use the Umikaze image which includes
| |
− | operating system, redeem, octoprint and all the dependencies needed.
| |
− | | |
− | from Package
| |
− | 20:19, 19 October 2018 (CEST)20:19, 19 October 2018 (CEST)~~
| |
− | | |
− | If you'd rather install the Redeem firmware on your own operating system, you can use
| |
− | the Debian repository packages for Replicape and Toggle:
| |
− | | |
− | ::
| |
− | | |
− | wget -O - http://kamikaze.thing-printer.com/apt/public.gpg | apt-key add -
| |
− | echo "deb http://kamikaze.thing-printer.com/apt ./" >> /etc/apt/sources.list
| |
− | apt-get update
| |
− | | |
− | from Source
| |
− | 20:19, 19 October 2018 (CEST)20:19, 19 October 2018 (CEST)~
| |
− | | |
− | enable kernel repo: http://repos.rcn-ee.com/(debian|ubuntu)
| |
− | | |
− | ::
| |
− | | |
− | apt-get install am335x-pru-package pru-software-support-package swig python-smbus
| |
− | mkdir -p /usr/src
| |
− | cd /usr/src
| |
− | git clone https://github.com/intelligent-agent/redeem.git
| |
− | cd redeem
| |
− | make install
| |
− | mkdir -p /etc/redeem
| |
− | cp configs/* /etc/redeem
| |
− | cp data/* /etc/redeem
| |
− | | |
− | | |
− | | |
− | | |
− | Updating
| |
− | --------
| |
− | .. versionadded:: 2.0.5
| |
− | | |
− | The octoprint\_redeem plugin should provide a prompt when there is a
| |
− | redeem update available, and the wizard should work in almost all cases.
| |
− | If it doesn't, or if you prefer knowing the gritty details of how to do
| |
− | this by hand, here are the manual instructions:
| |
− | | |
− | login as root and execute these commands:
| |
− | | |
− | ::
| |
− | | |
− | cd /usr/src/redeem
| |
− | git pull
| |
− | python setup.py clean install
| |
− | cp configs/* /etc/redeem
| |
− | systemctl restart redeem
| |
− | | |
− | | |
− | Develop branch
| |
− | --------------
| |
− | .. versionchanged:: 2.0.5
| |
− | | |
− | If your printer suffers from problems that are being addressed or if you
| |
− | want to help test the next version of redeem, you need to switch your
| |
− | installation to the develop branch of Redeem. **Beware: there be bugs
| |
− | and dragons in this code!**
| |
− | | |
− | To do so, follow these instructions:
| |
− | | |
− | ::
| |
− | | |
− | cd /usr/src
| |
− | rm -r redeem
| |
− | git clone https://github.com/intelligent-agent/redeem.git
| |
− | cd redeem
| |
− | git checkout develop
| |
− | make clean install
| |
− | systemctl restart redeem
| |