SHARE
TWEET

Slightly modified Compact Direct Drive Extruder for MK7

a guest Mar 10th, 2015 256 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     // Compact direct drive bowden extruder for 1.75mm filament
  2.     // Licence: CC BY-SA 3.0, http://creativecommons.org/licenses/by-sa/3.0/
  3.     // Author: Dominik Scholz <schlotzz@schlotzz.com> and contributors
  4.     // Using MK8 style hobbed pulley 13x8mm from: https://www.reprapsource.com/en/show/6889
  5.     // visit: http://www.schlotzz.com
  6.     // changed: 2014-04-04, added idler slot and funnel on bowden side for easier filament insertion
  7.     // changed: 2014-04-27, placed base and idler "printer ready"
  8.     // changed: 2014-09-22, fixed non-manifold vertexes between base and filament tunnel
  9.     // changed: 2014-11-13, added bowden inlet
  10.      
  11.      
  12.     /*
  13.             design goals:
  14.             - using 13x8mm hobbed pulley
  15.             - filament diameter parametric (1.75mm or 3mm)
  16.             - using 608zz bearing
  17.             - using M5 push fit connector
  18.     */
  19.      
  20.     // avoid openscad artefacts in preview
  21.     epsilon = 0.01;
  22.      
  23.     // increase this if your slicer or printer make holes too tight
  24.     extra_radius = 0.1;
  25.      
  26.     // major diameter of metric 3mm thread
  27.     m3_major = 2.85;
  28.     m3_radius = m3_major / 2 + extra_radius;
  29.     m3_wide_radius = m3_major / 2 + extra_radius + 0.2;
  30.      
  31.     // diameter of metric 3mm hexnut screw head
  32.     m3_head_radius = 3 + extra_radius;
  33.      
  34.     // drive gear
  35.     drive_gear_outer_radius = 12.00 / 2;
  36.     drive_gear_hobbed_radius = 11 / 2;
  37.     drive_gear_hobbed_offset = 3.2;
  38.     drive_gear_length = 11;
  39.     drive_gear_tooth_depth = .5;
  40.      
  41.     // base width for frame plate
  42.     base_width = 15;
  43.     base_length = 60;
  44.     base_height = 8;
  45.      
  46.     // nema 17 dimensions
  47.     nema17_width = 42.3;
  48.     nema17_hole_offsets = [
  49.             [-15.5, -15.5, 1.5],
  50.             [-15.5,  15.5, 1.5],
  51.             [ 15.5, -15.5, 1.5],
  52.             [ 15.5,  15.5, 1.5 + base_height]
  53.     ];
  54.      
  55.     // inlet type
  56.     inlet_type = 0; // 0:normal, 1:push-fit
  57.      
  58.      
  59.     //// filament
  60.     filament_diameter = 1.75; // 1.75, 3.00
  61.     filament_offset = [
  62.             drive_gear_hobbed_radius + filament_diameter / 2 - drive_gear_tooth_depth,
  63.             0,
  64.             base_height + drive_gear_length - drive_gear_hobbed_offset - 2.5
  65.     ];
  66.      
  67.      
  68.      
  69.      
  70.      
  71.     // helper function to render a rounded slot
  72.     module rounded_slot(r = 1, h = 1, l = 0, center = false)
  73.     {
  74.             hull()
  75.             {
  76.                     translate([0, -l / 2, 0])
  77.                             cylinder(r = r, h = h, center = center);
  78.                     translate([0, l / 2, 0])
  79.                             cylinder(r = r, h = h, center = center);
  80.             }
  81.     }
  82.      
  83.      
  84.      
  85.     // mounting plate for nema 17
  86.     module nema17_mount()
  87.     {
  88.             // settings
  89.             width = nema17_width;
  90.             height = base_height;
  91.             edge_radius = 27;
  92.             axle_radius = drive_gear_outer_radius + 1 + extra_radius;
  93.      
  94.             difference()
  95.             {
  96.                     // base plate
  97.                     translate([0, 0, height / 2])
  98.                             intersection()
  99.                             {
  100.                                     cube([width, width, height], center = true);
  101.                                     cylinder(r = edge_radius, h = height + 2 * epsilon, $fn = 128, center = true);
  102.                             }
  103.                    
  104.                     // center hole
  105.                     translate([0, 0, -epsilon]      )
  106.                             cylinder(r = 11.25 + extra_radius, h = base_height + 2 * epsilon, $fn = 32);
  107.      
  108.                     // axle hole
  109.                     translate([0, 0, -epsilon])
  110.                             cylinder(r = axle_radius, h = height + 2 * epsilon, $fn = 32);
  111.      
  112.                     // mounting holes
  113.                     for (a = nema17_hole_offsets)
  114.                             translate(a)
  115.                             {
  116.                                     cylinder(r = m3_radius, h = height * 4, center = true, $fn = 16);
  117.                                     cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  118.                             }
  119.             }
  120.     }
  121.      
  122.      
  123.     // plate for mounting extruder on frame
  124.     module frame_mount()
  125.     {
  126.             // settings
  127.             width = base_width;
  128.             length = base_length;
  129.             height = base_height;
  130.             hole_offsets = [
  131.                     [0,  length / 2 - 6, 2.5],
  132.                     [0, -length / 2 + 6, 2.5]
  133.             ];
  134.             corner_radius = 3;
  135.      
  136.             difference()
  137.             {
  138.                     // base plate
  139.                     intersection()
  140.                     {
  141.                             union()
  142.                             {
  143.                                     translate([0, 0, height / 2])
  144.                                             cube([width, length, height], center = true);
  145.                                     translate([base_width / 2 - base_height / 2 - corner_radius / 2, 0, height + corner_radius / 2])
  146.                                             cube([base_height + corner_radius, nema17_width, corner_radius], center = true);
  147.                                     translate([base_width / 2 - base_height / 2, 0, 6])
  148.                                             cube([base_height, nema17_width, 12], center = true);
  149.                             }
  150.      
  151.                             cylinder(r = base_length / 2, h = 100, $fn = 32);
  152.                     }
  153.      
  154.                     // rounded corner
  155.                     translate([base_width / 2 - base_height - corner_radius, 0, height + corner_radius])
  156.                             rotate([90, 0, 0])
  157.                                     cylinder(r = corner_radius, h = nema17_width + 2 * epsilon, center = true, $fn = 32);
  158.      
  159.                     // mounting holes
  160.                     for (a = hole_offsets)
  161.                             translate(a)
  162.                             {
  163.                                     cylinder(r = m3_wide_radius, h = height * 2 + 2 * epsilon, center = true, $fn = 16);
  164.                                     cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  165.                             }
  166.      
  167.                     // nema17 mounting holes
  168.                     translate([base_width / 2, 0, nema17_width / 2 + base_height])
  169.                             rotate([0, -90, 0])
  170.                             for (a = nema17_hole_offsets)
  171.                                     translate(a)
  172.                                     {
  173.                                             cylinder(r = m3_radius, h = height * 4, center = true, $fn = 16);
  174.                                             cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  175.                                     }
  176.             }
  177.     }
  178.      
  179.      
  180.     // inlet for filament
  181.     module filament_tunnel()
  182.     {
  183.      
  184.             width = 12;
  185.             length = nema17_width;
  186.             height = filament_offset[2] - base_height + 6;
  187.      
  188.             translate([0, 0, height / 2])
  189.             {
  190.                     difference()
  191.                     {
  192.                             union()
  193.                             {
  194.                                     // base
  195.                                     translate([-height / 2, 0, 0])
  196.                                             cube([width + height, length, height], center = true);
  197.      
  198.                                     // inlet strengthening
  199.                                     translate([0, -length / 2, -height / 2 + filament_offset[2] - base_height])
  200.                                             rotate([90, 0, 0])
  201.                                                     cylinder(r = 3.5, h = 1, center = true, $fn = 32);
  202.      
  203.                                     // outlet strengthening
  204.                                     translate([0, length / 2, -height / 2 + filament_offset[2] - base_height])
  205.                                             rotate([90, 0, 0])
  206.                                                     cylinder(r = 3.5, h = 1, center = true, $fn = 32);
  207.      
  208.                                     // idler tensioner
  209.                                     intersection()
  210.                                     {
  211.                                             translate([5, -length / 2 + 8, 0])
  212.                                                     cube([width, 16, height], center = true);
  213.                                             translate([-17.8, -20 ,0])
  214.                                                     cylinder(r = 27, h = height + 2 * epsilon, center = true, $fn = 32);
  215.                                     }
  216.      
  217.                             }
  218.      
  219.                             // middle cutout for drive gear
  220.                             translate([-filament_offset[0], 0, 0])
  221.                                     cylinder(r = 11.25 + extra_radius, h = height + 2 * epsilon, center = true, $fn = 32);
  222.      
  223.                             // middle cutout for idler
  224.                             translate([11 + filament_diameter / 2, 0, 0])
  225.                                     cylinder(r = 12.5, h = height + 2 * epsilon, center = true, $fn = 32);
  226.      
  227.                             // idler mounting hexnut
  228.                             translate([filament_diameter + 1, -nema17_width / 2 + 4, .25])
  229.                                     rotate([0, 90, 0])
  230.                                             cylinder(r = m3_radius, h = 50, center = false, $fn = 32);
  231.                             translate([filament_diameter + 3, -nema17_width / 2 + 4, 5])
  232.                                     cube([2.5 + 3 * extra_radius, 5.5 + 2.5 * extra_radius, 10], center = true);
  233.                             translate([filament_diameter + 3, -nema17_width / 2 + 4, 0])
  234.                                     rotate([0, 90, 0])
  235.                                             cylinder(r = 3.15 + 2.5 * extra_radius, h = 2.5 + 3 * extra_radius, center = true, $fn = 6);
  236.                            
  237.                             // rounded corner
  238.                             translate([-height - width / 2, 0, height / 2])
  239.                                     rotate([90, 0, 0])
  240.                                             cylinder(r = height, h = length + 2 * epsilon, center = true, $fn = 32);
  241.                            
  242.                             // funnnel inlet
  243.                             if (inlet_type == 0)
  244.                             {
  245.                                     // normal type
  246.                                     translate([0, -length / 2 + 1 - epsilon, -height / 2 + filament_offset[2] - base_height])
  247.                                             rotate([90, 0, 0])
  248.                                                     cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1 + epsilon / 1.554,
  249.                                                             h = 3 + epsilon, center = true, $fn = 16);
  250.                             }
  251.                             else
  252.                             {
  253.                                     // inlet push fit connector m5 hole
  254.                                     translate([0, -length / 2 - 1 + 2.5 + epsilon, -height / 2 + filament_offset[2] - base_height])
  255.                                             rotate([90, 0, 0])
  256.                                                     cylinder(r = 2.25, h = 5 + 2 * epsilon, center = true, $fn = 16);
  257.      
  258.                                     // funnel inlet outside
  259.                                     translate([0, -length / 2 + 4, -height / 2 + filament_offset[2] - base_height])
  260.                                             rotate([90, 0, 0])
  261.                                                     cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1,
  262.                                                             h = 2, center = true, $fn = 16);
  263.      
  264.                             }
  265.      
  266.                             // funnnel outlet inside
  267.                             translate([0, 12, -height / 2 + filament_offset[2] - base_height])
  268.                                     rotate([90, 0, 0])
  269.                                             cylinder(r1 = filament_diameter / 2, r2 = filament_diameter / 2 + 1.25,
  270.                                                     h = 8, center = true, $fn = 16);
  271.      
  272.                             // outlet push fit connector m5 hole
  273.                             translate([0, length / 2 + 1 - 2.5 + epsilon, -height / 2 + filament_offset[2] - base_height])
  274.                                     rotate([90, 0, 0])
  275.                                             cylinder(r = 5, h = 15 + 2 * epsilon, center = true, $fn = 16);
  276.      
  277.                             // funnel outlet outside
  278.                             translate([0, length / 2 - 4, -height / 2 + filament_offset[2] - base_height])
  279.                                     rotate([90, 0, 0])
  280.                                             cylinder(r1 = filament_diameter / 2 + 1, r2 = filament_diameter / 2,
  281.                                                     h = 2, center = true, $fn = 16);
  282.      
  283.                             // filament path
  284.                             translate([0, 0, -height / 2 + filament_offset[2] - base_height])
  285.                                     rotate([90, 0, 0])
  286.                                             cylinder(r = filament_diameter / 2 + 2 * extra_radius,
  287.                                                     h = length + 2 * epsilon, center = true, $fn = 16);
  288.                            
  289.                     }
  290.             }
  291.      
  292.     }
  293.      
  294.      
  295.     // render drive gear
  296.     module drive_gear()
  297.     {
  298.             r = drive_gear_outer_radius - drive_gear_hobbed_radius;
  299.             rotate_extrude(convexity = 10)
  300.             {
  301.                     difference()
  302.                     {
  303.                             square([drive_gear_outer_radius, drive_gear_length]);
  304.                             translate([drive_gear_hobbed_radius + r, drive_gear_length - drive_gear_hobbed_offset])
  305.                                     circle(r = r, $fn = 16);
  306.                     }
  307.             }
  308.     }
  309.      
  310.      
  311.     // render 608zz
  312.     module bearing_608zz()
  313.     {
  314.             difference()
  315.             {
  316.                     cylinder(r = 11, h = 7, center = true, $fn = 32);
  317.                     cylinder(r = 4, h = 7 + 2 * epsilon, center = true, $fn = 16);
  318.             }
  319.     }
  320.      
  321.      
  322.     // render 624zz
  323.     module bearing_624zz()
  324.     {
  325.             difference()
  326.             {
  327.                     cylinder(r = 6.5, h = 5, center = true, $fn = 32);
  328.                     cylinder(r = 2, h = 5 + 2 * epsilon, center = true, $fn = 16);
  329.             }
  330.     }
  331.      
  332.      
  333.     // idler with 608 bearing
  334.     module idler_608()
  335.     {
  336.             width = nema17_width;
  337.             height = filament_offset[2] - base_height + 4;
  338.             edge_radius = 27;
  339.             hole_offsets = [-width / 2 + 4, width / 2 - 4];
  340.             bearing_bottom = filament_offset[2] / 2 - base_height / 2 - 6;
  341.      
  342.             // base plate
  343.             translate([0, 0, height / 2])
  344.             difference()
  345.             {
  346.                     union()
  347.                     {
  348.                             // base
  349.                             intersection()
  350.                             {
  351.                                     cube([width, width, height], center = true);
  352.                                     cylinder(r = edge_radius, h = height + 2 * epsilon, $fn = 128, center = true);
  353. // @CHANGE: increased x from 19 to 20
  354.                                     translate([20, 0, 0])
  355.                                             cube([15, nema17_width + epsilon, height], center = true);
  356.                             }
  357.                            
  358.                             // spring base enforcement
  359.                             translate([17.15, -nema17_width / 2 + 4, .25])
  360.                                     rotate([0, 90, 0])
  361.                                             cylinder(r = 3.75, h = 4, $fn = 32);
  362.                     }
  363. // @CHANGE: decreased x from 11 to 10    
  364.                     translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, bearing_bottom])
  365.                     difference()
  366.                     {
  367.                             // bearing spare out
  368.                             cylinder(r = 11.5, h = 60, $fn = 32);
  369.      
  370.                             // bearing mount
  371.                             cylinder(r = 4 - extra_radius, h = 7.5, $fn = 32);
  372.      
  373.                             // bearing mount base
  374.                             cylinder(r = 4 - extra_radius + 1, h = 0.5, $fn = 32);
  375.                     }
  376.      
  377.                     // bearing mount hole
  378. // @CHANGE: decreased x from 11 to 10
  379.                     translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, 0])
  380.                             cylinder(r = 2.5, h = 50, center = true, $fn = 32);
  381.      
  382.                     // tensioner bolt slot
  383.                     translate([17.15, -nema17_width / 2 + 4, .25])
  384.                             rotate([0, 90, 0])
  385.                                     rounded_slot(r = m3_wide_radius, h = 50, l = 1.5, center = true, $fn = 32);
  386.      
  387. // @CHANGE: increased x from -12 to -11
  388.                     translate([-11, -20 ,0])
  389.                             cylinder(r = 27, h = height + 2 * epsilon, center = true, $fn = 32);
  390.      
  391.                     // mounting hole
  392.                     translate([15.5, 15.5, 0])
  393.                     {
  394.                             cylinder(r = m3_wide_radius, h = height * 4, center = true, $fn = 16);
  395.                             cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  396.                     }
  397.      
  398.             }
  399.  
  400. // @CHANGE: decreased x from -12 to -11    
  401.             translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, filament_offset[2] - base_height])
  402.                     %bearing_608zz();
  403.     }
  404.      
  405.      
  406.      
  407.     module compact_extruder()
  408.     {
  409.             // motor plate
  410.             nema17_mount();
  411.      
  412.             // mounting plate
  413.             translate([-nema17_width / 2 - base_height, 0, base_width / 2])
  414.                     rotate([0, 90, 0])
  415.                             frame_mount();
  416.      
  417.             // filament inlet/outlet
  418.             translate([filament_offset[0], 0, base_height - epsilon])
  419.                     filament_tunnel();
  420.      
  421.             // drive gear
  422.             color("grey")
  423.                     %translate([0, 0, base_height - 2.5])
  424.                             drive_gear();
  425.      
  426.             // filament
  427.             color("red")
  428.                     %translate(filament_offset - [0, 0, epsilon])
  429.                             rotate([90, 0, 0])
  430.                                     cylinder(r = filament_diameter / 2, h = 100, $fn = 16, center = true);
  431.      
  432.      
  433.     }
  434.      
  435.     compact_extruder();
  436.     translate([0, 0, 9])
  437.             idler_608();
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top