Advertisement
Guest User

Slightly modified Compact Direct Drive Extruder for MK7, v2

a guest
Mar 10th, 2015
258
0
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.     // @CHANGE: increased +4 to +6
  338.                 height = filament_offset[2] - base_height + 6;
  339.                 edge_radius = 27;
  340.                 hole_offsets = [-width / 2 + 4, width / 2 - 4];
  341.     // @CHANGE: increased -6 to -5.5
  342.                 bearing_bottom = filament_offset[2] / 2 - base_height / 2 - 5.5;
  343.          
  344.                 // base plate
  345.                 translate([0, 0, height / 2])
  346.                 difference()
  347.                 {
  348.                         union()
  349.                         {
  350.                                 // base
  351.                                 intersection()
  352.                                 {
  353.                                         cube([width, width, height], center = true);
  354.                                         cylinder(r = edge_radius, h = height + 2 * epsilon, $fn = 128, center = true);
  355.     // @CHANGE: increased x from 19 to 20
  356.                                         translate([20, 0, 0])
  357.                                                 cube([15, nema17_width + epsilon, height], center = true);
  358.                                 }
  359.                                
  360.                                 // spring base enforcement
  361.                                 translate([17.15, -nema17_width / 2 + 4, .25])
  362.                                         rotate([0, 90, 0])
  363.                                                 cylinder(r = 3.75, h = 4, $fn = 32);
  364.                         }
  365.     // @CHANGE: decreased x from 11 to 10    
  366.                         translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, bearing_bottom])
  367.                         difference()
  368.                         {
  369.                                 // bearing spare out
  370.                                 cylinder(r = 11.5, h = 60, $fn = 32);
  371.          
  372.                                 // bearing mount
  373.                                 cylinder(r = 4 - extra_radius, h = 7.5, $fn = 32);
  374.          
  375.                                 // bearing mount base
  376.                                 cylinder(r = 4 - extra_radius + 1, h = 0.5, $fn = 32);
  377.                         }
  378.          
  379.                         // bearing mount hole
  380.     // @CHANGE: decreased x from 11 to 10
  381.                         translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, 0])
  382.                                 cylinder(r = 2.5, h = 50, center = true, $fn = 32);
  383.          
  384.                         // tensioner bolt slot
  385.                         translate([17.15, -nema17_width / 2 + 4, .25])
  386.                                 rotate([0, 90, 0])
  387.                                         rounded_slot(r = m3_wide_radius, h = 50, l = 1.5, center = true, $fn = 32);
  388.          
  389.     // @CHANGE: increased x from -12 to -11
  390.                         translate([-11, -20 ,0])
  391.                                 cylinder(r = 27, h = height + 2 * epsilon, center = true, $fn = 32);
  392.          
  393.                         // mounting hole
  394.                         translate([15.5, 15.5, 0])
  395.                         {
  396.                                 cylinder(r = m3_wide_radius, h = height * 4, center = true, $fn = 16);
  397.                                 cylinder(r = m3_head_radius, h = height + epsilon, $fn = 16);
  398.                         }
  399.          
  400.                 }
  401.      
  402.     // @CHANGE: decreased x to 10, changed z to +1.5
  403.                 translate([drive_gear_hobbed_radius + 10 - 0.25 + filament_diameter, 0, filament_offset[2] - base_height + 1.5])
  404.                         %bearing_608zz();
  405.         }
  406.          
  407.          
  408.          
  409.         module compact_extruder()
  410.         {
  411.                 // motor plate
  412.                 nema17_mount();
  413.          
  414.                 // mounting plate
  415.                 translate([-nema17_width / 2 - base_height, 0, base_width / 2])
  416.                         rotate([0, 90, 0])
  417.                                 frame_mount();
  418.          
  419.                 // filament inlet/outlet
  420.                 translate([filament_offset[0], 0, base_height - epsilon])
  421.                         filament_tunnel();
  422.          
  423.                 // drive gear
  424.                 color("grey")
  425.                         %translate([0, 0, base_height - 2.5])
  426.                                 drive_gear();
  427.          
  428.                 // filament
  429.                 color("red")
  430.                         %translate(filament_offset - [0, 0, epsilon])
  431.                                 rotate([90, 0, 0])
  432.                                         cylinder(r = filament_diameter / 2, h = 100, $fn = 16, center = true);
  433.          
  434.          
  435.         }
  436.          
  437.         compact_extruder();
  438.         translate([0, 0, 8.1])
  439.                 idler_608();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement