mirror of
https://github.com/atomic14/kicad-coil-plugins.git
synced 2024-10-18 09:06:57 +00:00
Auto wiring up for new larger stator completed
This commit is contained in:
parent
7c7df2add0
commit
e604178bd0
4 changed files with 201 additions and 136 deletions
|
@ -22,6 +22,7 @@
|
|||
" flip_x,\n",
|
||||
" optimize_points,\n",
|
||||
" chaikin,\n",
|
||||
" rotate_point,\n",
|
||||
")\n",
|
||||
"from pcb_json import (\n",
|
||||
" dump_json,\n",
|
||||
|
@ -46,42 +47,45 @@
|
|||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Track width and spacing\n",
|
||||
"TRACK_WIDTH = 0.127\n",
|
||||
"TRACK_SPACING = 0.127\n",
|
||||
"\n",
|
||||
"# via defaults\n",
|
||||
"VIA_DIAM = 0.8\n",
|
||||
"VIA_DRILL = 0.4\n",
|
||||
"\n",
|
||||
"# this is for a 1.27mm pitch pin\n",
|
||||
"PIN_DIAM = 1.0\n",
|
||||
"PIN_DRILL = 0.65\n",
|
||||
"\n",
|
||||
"# this is for the PCB connector - see https://www.farnell.com/datasheets/2003059.pdf\n",
|
||||
"PAD_WIDTH = 6\n",
|
||||
"PAD_WIDTH = 3\n",
|
||||
"PAD_HEIGHT = 2\n",
|
||||
"PAD_PITCH = 2.5\n",
|
||||
"\n",
|
||||
"# where to put the input pads\n",
|
||||
"INPUT_PAD_RADIUS = 19.5\n",
|
||||
"\n",
|
||||
"# PCB Edge size\n",
|
||||
"STATOR_RADIUS = 23\n",
|
||||
"STATOR_HOLE_RADIUS = 5\n",
|
||||
"SCREW_HOLE_RADIUS = 20\n",
|
||||
"SCREW_HOLE_DRILL_DIAM = 2.3 # 2.3mm drill for a 2mm screw\n",
|
||||
"STATOR_RADIUS = 25\n",
|
||||
"STATOR_HOLE_RADIUS = 5.5\n",
|
||||
"\n",
|
||||
"# Track width and spacing\n",
|
||||
"TRACK_WIDTH = 0.127\n",
|
||||
"TRACK_SPACING = 0.127\n",
|
||||
"# where to puth the mounting pins\n",
|
||||
"SCREW_HOLE_DRILL_DIAM = 2.3 # 2.3mm drill for a 2mm screw\n",
|
||||
"SCREW_HOLE_RADIUS = STATOR_RADIUS\n",
|
||||
"\n",
|
||||
"# where to put the input pads\n",
|
||||
"INPUT_PAD_RADIUS = STATOR_RADIUS - (PAD_WIDTH / 2 + VIA_DIAM + TRACK_SPACING)\n",
|
||||
"\n",
|
||||
"# Coil params\n",
|
||||
"TURNS = 9\n",
|
||||
"COIL_CENTER_RADIUS = 11.8\n",
|
||||
"COIL_VIA_RADIUS = 12.8\n",
|
||||
"TURNS = 12\n",
|
||||
"COIL_CENTER_RADIUS = 16\n",
|
||||
"COIL_VIA_RADIUS = 17\n",
|
||||
"\n",
|
||||
"# where to place the pins\n",
|
||||
"# CONNECTION_PINS_RADIUS = 16.5\n",
|
||||
"\n",
|
||||
"USE_SPIRAL = False\n",
|
||||
"\n",
|
||||
"LAYERS = 2"
|
||||
"LAYERS = 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -100,12 +104,12 @@
|
|||
"# templates must be simetric around the X axis and must include the center points on both size (e.g. (X1, 0).... (X2, 0) )\n",
|
||||
"# template must also be convex\n",
|
||||
"template = [\n",
|
||||
" (-1.5, 0),\n",
|
||||
" (-1.5, -0.1),\n",
|
||||
" (1.9, -0.8),\n",
|
||||
" (-3.5, 0),\n",
|
||||
" (-3.5, -0.01),\n",
|
||||
" (1.9, -1.45),\n",
|
||||
" (1.9, 0.0),\n",
|
||||
" (1.9, 0.8),\n",
|
||||
" (-1.5, 0.1),\n",
|
||||
" (1.9, 1.45),\n",
|
||||
" (-3.5, 0.01),\n",
|
||||
"]"
|
||||
]
|
||||
},
|
||||
|
@ -264,37 +268,28 @@
|
|||
"mounting_holes = []\n",
|
||||
"silk = []\n",
|
||||
"\n",
|
||||
"# create the pads at CONNECTION_PINS radius - 2 for each of the coils, A, B and C\n",
|
||||
"# angle_A = 0\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_A - 30, \"A\"))\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_A + 30, \"A\"))\n",
|
||||
"\n",
|
||||
"# angle_B = 120\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_B - 30, \"B\"))\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_B + 30, \"B\"))\n",
|
||||
"\n",
|
||||
"# angle_C = 240\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_C - 30, \"C\"))\n",
|
||||
"# pads.append(create_pad(CONNECTION_PINS_RADIUS, angle_C + 30, \"C\"))\n",
|
||||
"# shift the coils aronnd to make connections a bit easier\n",
|
||||
"COIL_ROTATION = -360 / 12\n",
|
||||
"\n",
|
||||
"coil_angles = []\n",
|
||||
"for i in range(12):\n",
|
||||
" angle = i * 360 / 12 + COIL_ROTATION\n",
|
||||
" coil_angles.append(angle)\n",
|
||||
"\n",
|
||||
"# the main coils\n",
|
||||
"coil_labels = [\"A\", \"B\", \"C\"]\n",
|
||||
"coils_f = []\n",
|
||||
"coils_b = []\n",
|
||||
"for i in range(12):\n",
|
||||
" angle = i * 360 / 12\n",
|
||||
" angle = coil_angles[i]\n",
|
||||
" if (i // 3) % 2 == 0:\n",
|
||||
" coil_A_f = translate(rotate(points_f, angle), COIL_CENTER_RADIUS, angle)\n",
|
||||
" coil_A_b = translate(rotate(points_b, angle), COIL_CENTER_RADIUS, angle)\n",
|
||||
" else:\n",
|
||||
" # slightly nudge the coils so that they don't overlap when flipped\n",
|
||||
" coil_A_f = translate(\n",
|
||||
" rotate(flip_y(points_f), angle - 2), COIL_CENTER_RADIUS, angle\n",
|
||||
" )\n",
|
||||
" coil_A_b = translate(\n",
|
||||
" rotate(flip_y(points_b), angle - 2), COIL_CENTER_RADIUS, angle\n",
|
||||
" )\n",
|
||||
" coil_A_f = translate(rotate(flip_y(points_f), angle), COIL_CENTER_RADIUS, angle)\n",
|
||||
" coil_A_b = translate(rotate(flip_y(points_b), angle), COIL_CENTER_RADIUS, angle)\n",
|
||||
" # keep track of the coils\n",
|
||||
" coils_f.append(coil_A_f)\n",
|
||||
" coils_b.append(coil_A_b)\n",
|
||||
|
@ -312,15 +307,15 @@
|
|||
"# create tracks to link the A coils around the center\n",
|
||||
"connection_via_radius_A = connection_radius1 + 3 * TRACK_SPACING + VIA_DIAM / 2\n",
|
||||
"coil_A1_A2_inner = (\n",
|
||||
" [get_arc_point(0, connection_via_radius_A)]\n",
|
||||
" + draw_arc(0, 3 * 360 / 12, connection_radius1)\n",
|
||||
" + [get_arc_point(3 * 360 / 12, connection_via_radius_A)]\n",
|
||||
" [get_arc_point(coil_angles[0], connection_via_radius_A)]\n",
|
||||
" + draw_arc(COIL_ROTATION, coil_angles[3], connection_radius1)\n",
|
||||
" + [get_arc_point(coil_angles[3], connection_via_radius_A)]\n",
|
||||
")\n",
|
||||
"tracks_f.append(coil_A1_A2_inner)\n",
|
||||
"coil_A3_A4_inner = (\n",
|
||||
" [get_arc_point(6 * 360 / 12, connection_via_radius_A)]\n",
|
||||
" + draw_arc(6 * 360 / 12, 9 * 360 / 12, connection_radius1)\n",
|
||||
" + [get_arc_point(9 * 360 / 12, connection_via_radius_A)]\n",
|
||||
" [get_arc_point(coil_angles[6], connection_via_radius_A)]\n",
|
||||
" + draw_arc(coil_angles[6], coil_angles[9], connection_radius1)\n",
|
||||
" + [get_arc_point(coil_angles[9], connection_via_radius_A)]\n",
|
||||
")\n",
|
||||
"tracks_f.append(coil_A3_A4_inner)\n",
|
||||
"# connect up the bottoms of the A coils\n",
|
||||
|
@ -335,9 +330,9 @@
|
|||
"vias.append(create_via(coil_A3_A4_inner[-1]))\n",
|
||||
"\n",
|
||||
"# create tracks to link the B coils around the center - this can all be done on the bottom layer\n",
|
||||
"coil_B1_B2_inner = draw_arc(1 * 360 / 12, 4 * 360 / 12, connection_radius1)\n",
|
||||
"coil_B1_B2_inner = draw_arc(coil_angles[1], coil_angles[4], connection_radius1)\n",
|
||||
"tracks_b.append(coil_B1_B2_inner)\n",
|
||||
"coil_B3_B4_inner = draw_arc(7 * 360 / 12, 10 * 360 / 12, connection_radius1)\n",
|
||||
"coil_B3_B4_inner = draw_arc(coil_angles[7], coil_angles[10], connection_radius1)\n",
|
||||
"tracks_b.append(coil_B3_B4_inner)\n",
|
||||
"# connect up the bottoms of the A coils\n",
|
||||
"coils_b[1].append(coil_B1_B2_inner[0])\n",
|
||||
|
@ -347,9 +342,9 @@
|
|||
"\n",
|
||||
"# create tracks to link the C coils around the center\n",
|
||||
"connection_via_radius_C = connection_via_radius_A + 3 * TRACK_SPACING + VIA_DIAM / 2\n",
|
||||
"coil_C1_C2_inner = draw_arc(2 * 360 / 12, 5 * 360 / 12, connection_via_radius_C)\n",
|
||||
"coil_C1_C2_inner = draw_arc(coil_angles[2], coil_angles[5], connection_via_radius_C)\n",
|
||||
"tracks_f.append(coil_C1_C2_inner)\n",
|
||||
"coil_C3_C4_inner = draw_arc(8 * 360 / 12, 11 * 360 / 12, connection_via_radius_C)\n",
|
||||
"coil_C3_C4_inner = draw_arc(coil_angles[8], coil_angles[11], connection_via_radius_C)\n",
|
||||
"tracks_f.append(coil_C3_C4_inner)\n",
|
||||
"# connect up the bottoms of the B coils\n",
|
||||
"coils_b[2].append(coil_C1_C2_inner[0])\n",
|
||||
|
@ -364,49 +359,54 @@
|
|||
"\n",
|
||||
"# connect the last three coils together\n",
|
||||
"common_connection_radius = SCREW_HOLE_RADIUS - (SCREW_HOLE_DRILL_DIAM / 2 + 0.5)\n",
|
||||
"tracks_f.append(draw_arc(9 * 360 / 12, 11 * 360 / 12, common_connection_radius))\n",
|
||||
"coils_f[9].append(get_arc_point(9 * 360 / 12, common_connection_radius))\n",
|
||||
"coils_f[10].append(get_arc_point(10 * 360 / 12, common_connection_radius))\n",
|
||||
"coils_f[11].append(get_arc_point(11 * 360 / 12, common_connection_radius))\n",
|
||||
"tracks_f.append(draw_arc(coil_angles[9], coil_angles[11], common_connection_radius))\n",
|
||||
"coils_f[9].append(get_arc_point(coil_angles[9], common_connection_radius))\n",
|
||||
"coils_f[10].append(get_arc_point(coil_angles[10], common_connection_radius))\n",
|
||||
"coils_f[11].append(get_arc_point(coil_angles[11], common_connection_radius))\n",
|
||||
"\n",
|
||||
"# connect the outer A coils together\n",
|
||||
"outer_connection_radius_A = SCREW_HOLE_RADIUS + (SCREW_HOLE_DRILL_DIAM / 2 + 0.5)\n",
|
||||
"tracks_f.append(draw_arc(3 * 360 / 12, 6 * 360 / 12, outer_connection_radius_A))\n",
|
||||
"coils_f[3].append(get_arc_point(3 * 360 / 12, outer_connection_radius_A))\n",
|
||||
"coils_f[6].append(get_arc_point(6 * 360 / 12, outer_connection_radius_A))\n",
|
||||
"outer_connection_radius_A = SCREW_HOLE_RADIUS - (SCREW_HOLE_DRILL_DIAM / 2 + 0.5)\n",
|
||||
"tracks_f.append(draw_arc(coil_angles[3], coil_angles[6], outer_connection_radius_A))\n",
|
||||
"coils_f[3].append(get_arc_point(coil_angles[3], outer_connection_radius_A))\n",
|
||||
"coils_f[6].append(get_arc_point(coil_angles[6], outer_connection_radius_A))\n",
|
||||
"\n",
|
||||
"# connect the outer B coils together\n",
|
||||
"outer_connection_radius_B = outer_connection_radius_A - TRACK_SPACING - VIA_DIAM / 2\n",
|
||||
"tracks_b.append(\n",
|
||||
" [get_arc_point(4 * 360 / 12, outer_connection_radius_B)]\n",
|
||||
" + draw_arc(4 * 360 / 12, 7 * 360 / 12, outer_connection_radius_A)\n",
|
||||
" + [get_arc_point(7 * 360 / 12, outer_connection_radius_B)]\n",
|
||||
" [get_arc_point(coil_angles[4], outer_connection_radius_B)]\n",
|
||||
" + draw_arc(coil_angles[4], coil_angles[7], outer_connection_radius_A)\n",
|
||||
" + [get_arc_point(coil_angles[7], outer_connection_radius_B)]\n",
|
||||
")\n",
|
||||
"coils_f[4].append(get_arc_point(coil_angles[4], outer_connection_radius_B))\n",
|
||||
"coils_f[7].append(get_arc_point(coil_angles[7], outer_connection_radius_B))\n",
|
||||
"vias.append(\n",
|
||||
" create_via(get_arc_point(4 * 360 / 12 + COIL_ROTATION, outer_connection_radius_B))\n",
|
||||
")\n",
|
||||
"vias.append(\n",
|
||||
" create_via(get_arc_point(7 * 360 / 12 + COIL_ROTATION, outer_connection_radius_B))\n",
|
||||
")\n",
|
||||
"coils_f[4].append(get_arc_point(4 * 360 / 12, outer_connection_radius_B))\n",
|
||||
"coils_f[7].append(get_arc_point(7 * 360 / 12, outer_connection_radius_B))\n",
|
||||
"vias.append(create_via(get_arc_point(4 * 360 / 12, outer_connection_radius_B)))\n",
|
||||
"vias.append(create_via(get_arc_point(7 * 360 / 12, outer_connection_radius_B)))\n",
|
||||
"\n",
|
||||
"# connect the outer C coilds together\n",
|
||||
"outer_connection_radius_C = SCREW_HOLE_RADIUS - (SCREW_HOLE_DRILL_DIAM / 2 + 0.5)\n",
|
||||
"# outer_connection_radius_C = outer_connection_radius_B - TRACK_SPACING - VIA_DIAM / 2\n",
|
||||
"tracks_b.append(draw_arc(5 * 360 / 12, 8 * 360 / 12, outer_connection_radius_C))\n",
|
||||
"coils_f[5].append(get_arc_point(5 * 360 / 12, outer_connection_radius_C))\n",
|
||||
"coils_f[8].append(get_arc_point(8 * 360 / 12, outer_connection_radius_C))\n",
|
||||
"vias.append(create_via(get_arc_point(5 * 360 / 12, outer_connection_radius_C)))\n",
|
||||
"vias.append(create_via(get_arc_point(8 * 360 / 12, outer_connection_radius_C)))\n",
|
||||
"\n",
|
||||
"# create pins for the input\n",
|
||||
"# for angle in range(0, 360, 15):\n",
|
||||
"# pins.append(create_pin(CONNECTION_PINS_RADIUS, angle, \"A\"))\n",
|
||||
"\n",
|
||||
"# coils_f[0].append(get_arc_point(0, CONNECTION_PINS_RADIUS))\n",
|
||||
"# coils_f[1].append(get_arc_point(1 * 360 / 12, CONNECTION_PINS_RADIUS))\n",
|
||||
"# coils_f[2].append(get_arc_point(2 * 360 / 12, CONNECTION_PINS_RADIUS))\n",
|
||||
"\n",
|
||||
"# coils_f[0].append(get_arc_point(15, CONNECTION_PINS_RADIUS))\n",
|
||||
"# coils_f[1].append(get_arc_point(15 + 1 * 360 / 12, CONNECTION_PINS_RADIUS))\n",
|
||||
"# coils_f[2].append(get_arc_point(15 + 2 * 360 / 12, CONNECTION_PINS_RADIUS))\n",
|
||||
"outer_connection_radius_C = outer_connection_radius_B - TRACK_SPACING - VIA_DIAM / 2\n",
|
||||
"tracks_b.append(\n",
|
||||
" draw_arc(\n",
|
||||
" 5 * 360 / 12 + COIL_ROTATION,\n",
|
||||
" 8 * 360 / 12 + COIL_ROTATION,\n",
|
||||
" outer_connection_radius_C,\n",
|
||||
" )\n",
|
||||
")\n",
|
||||
"coils_f[5].append(\n",
|
||||
" get_arc_point(5 * 360 / 12 + COIL_ROTATION, outer_connection_radius_C)\n",
|
||||
")\n",
|
||||
"coils_f[8].append(\n",
|
||||
" get_arc_point(8 * 360 / 12 + COIL_ROTATION, outer_connection_radius_C)\n",
|
||||
")\n",
|
||||
"vias.append(\n",
|
||||
" create_via(get_arc_point(5 * 360 / 12 + COIL_ROTATION, outer_connection_radius_C))\n",
|
||||
")\n",
|
||||
"vias.append(\n",
|
||||
" create_via(get_arc_point(8 * 360 / 12 + COIL_ROTATION, outer_connection_radius_C))\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"# create mounting holes at 45 degree angles\n",
|
||||
"mounting_holes = [\n",
|
||||
|
@ -428,20 +428,16 @@
|
|||
"pads.append(create_pad((INPUT_PAD_RADIUS, PAD_PITCH), PAD_WIDTH, PAD_HEIGHT, \"b\"))\n",
|
||||
"\n",
|
||||
"# connect coil A to the top pad\n",
|
||||
"pad_connection_point_x = INPUT_PAD_RADIUS + PAD_WIDTH / 2 - VIA_DIAM\n",
|
||||
"coils_f[0].append((pad_connection_point_x, -PAD_PITCH))\n",
|
||||
"vias.append(create_via(((pad_connection_point_x, -PAD_PITCH))))\n",
|
||||
"pad_connection_point_x = INPUT_PAD_RADIUS\n",
|
||||
"pad_angle = np.rad2deg(np.arcsin(PAD_PITCH / pad_connection_point_x))\n",
|
||||
"coils_f[0].append(get_arc_point(coil_angles[0], pad_connection_point_x))\n",
|
||||
"vias.append(create_via(get_arc_point(coil_angles[0], pad_connection_point_x)))\n",
|
||||
"# connect coil B to the middle pad\n",
|
||||
"coils_f[1].append((pad_connection_point_x, 0))\n",
|
||||
"vias.append(create_via(((pad_connection_point_x, 0))))\n",
|
||||
"coils_f[1].append((pad_connection_point_x + PAD_WIDTH / 2 + VIA_DIAM / 2, 0))\n",
|
||||
"vias.append(create_via(((pad_connection_point_x + PAD_WIDTH / 2 + VIA_DIAM / 2, 0))))\n",
|
||||
"# connect coil C to the bottom pad\n",
|
||||
"coils_f[2].append(\n",
|
||||
" get_arc_point(\n",
|
||||
" 2 * 360 / 12, SCREW_HOLE_RADIUS - (SCREW_HOLE_DRILL_DIAM / 2 + TRACK_SPACING)\n",
|
||||
" )\n",
|
||||
")\n",
|
||||
"coils_f[2].append((pad_connection_point_x, PAD_PITCH))\n",
|
||||
"vias.append(create_via(((pad_connection_point_x, PAD_PITCH))))"
|
||||
"coils_f[2].append(get_arc_point(coil_angles[2], pad_connection_point_x))\n",
|
||||
"vias.append(create_via(get_arc_point(coil_angles[2], pad_connection_point_x)))"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
@ -454,8 +450,16 @@
|
|||
"tracks_in1 = []\n",
|
||||
"tracks_in2 = []\n",
|
||||
"if LAYERS == 4:\n",
|
||||
" tracks_in1 = tracks_b\n",
|
||||
" tracks_in2 = tracks_f\n",
|
||||
" tracks_in1 = tracks_b.copy()\n",
|
||||
" tracks_in2 = tracks_f.copy()\n",
|
||||
"\n",
|
||||
"# these final bits of wiring up to the input pads don't need to be duplicated\n",
|
||||
"tracks_b.append(\n",
|
||||
" [(pad_connection_point_x + PAD_WIDTH / 2, 0), (pad_connection_point_x, 0)]\n",
|
||||
")\n",
|
||||
"tracks_b.append(draw_arc(coil_angles[0], -pad_angle, pad_connection_point_x, 1))\n",
|
||||
"tracks_b.append(draw_arc(coil_angles[2], pad_angle, pad_connection_point_x, 1))\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"# dump out the json version\n",
|
||||
"json_result = dump_json(\n",
|
||||
|
|
|
@ -45,39 +45,41 @@
|
|||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Track width and spacing\n",
|
||||
"TRACK_WIDTH = 0.127\n",
|
||||
"TRACK_SPACING = 0.127\n",
|
||||
"\n",
|
||||
"# via defaults\n",
|
||||
"VIA_DIAM = 0.8\n",
|
||||
"VIA_DRILL = 0.4\n",
|
||||
"\n",
|
||||
"# this is for a 1.27mm pitch pin\n",
|
||||
"PIN_DIAM = 1.0\n",
|
||||
"PIN_DRILL = 0.65\n",
|
||||
"\n",
|
||||
"# this is for the PCB connector - see https://www.farnell.com/datasheets/2003059.pdf\n",
|
||||
"PAD_WIDTH = 6\n",
|
||||
"PAD_WIDTH = 3\n",
|
||||
"PAD_HEIGHT = 2\n",
|
||||
"PAD_PITCH = 2.5\n",
|
||||
"\n",
|
||||
"# PCB Edge size\n",
|
||||
"STATOR_RADIUS = 23\n",
|
||||
"SCREW_HOLE_RADIUS = 20\n",
|
||||
"SCREW_HOLE_DRILL_DIAM = 2.3 # 2.3mm drill for a 2mm screw\n",
|
||||
"STATOR_RADIUS = 25\n",
|
||||
"STATOR_HOLE_RADIUS = 5.5\n",
|
||||
"\n",
|
||||
"# where to put the input pads\n",
|
||||
"INPUT_PAD_RADIUS = 19.5\n",
|
||||
"# where to puth the mounting pins\n",
|
||||
"SCREW_HOLE_DRILL_DIAM = 2.3 # 2.3mm drill for a 2mm screw\n",
|
||||
"SCREW_HOLE_RADIUS = STATOR_RADIUS\n",
|
||||
"\n",
|
||||
"# Track width and spacing\n",
|
||||
"TRACK_WIDTH = 0.127\n",
|
||||
"TRACK_SPACING = 0.127\n",
|
||||
"# where to put the input pads\n",
|
||||
"INPUT_PAD_RADIUS = STATOR_RADIUS - (PAD_WIDTH / 2 + VIA_DIAM + TRACK_SPACING)\n",
|
||||
"\n",
|
||||
"# Coil params\n",
|
||||
"TURNS = 18\n",
|
||||
"COIL_CENTER_RADIUS = 12.2\n",
|
||||
"\n",
|
||||
"# where do we want to stop routing any tracks?\n",
|
||||
"MAX_TRACK_RADIUS = SCREW_HOLE_RADIUS - (SCREW_HOLE_DRILL_DIAM / 2 + TRACK_SPACING * 2)\n",
|
||||
"TURNS = 24\n",
|
||||
"COIL_CENTER_RADIUS = 16\n",
|
||||
"COIL_VIA_RADIUS = 17\n",
|
||||
"\n",
|
||||
"# where to place the pins\n",
|
||||
"CONNECTION_PINS_RADIUS = 16.5\n",
|
||||
"# CONNECTION_PINS_RADIUS = 16.5\n",
|
||||
"\n",
|
||||
"USE_SPIRAL = False\n",
|
||||
"\n",
|
||||
|
@ -380,17 +382,19 @@
|
|||
"vias.append(create_via(get_arc_point(angle_C_opp, COIL_CENTER_RADIUS)))\n",
|
||||
"\n",
|
||||
"# connect the front copper opposite coils together\n",
|
||||
"common_connection_radius = MAX_TRACK_RADIUS\n",
|
||||
"common_connection_radius = SCREW_HOLE_RADIUS - (\n",
|
||||
" TRACK_SPACING + SCREW_HOLE_DRILL_DIAM / 2\n",
|
||||
")\n",
|
||||
"common_coil_connections_b = draw_arc(angle_A_opp, angle_C_opp, common_connection_radius)\n",
|
||||
"coil_A_opp_f.append(get_arc_point(angle_A_opp, common_connection_radius))\n",
|
||||
"coil_B_opp_f.append(get_arc_point(angle_B_opp, common_connection_radius))\n",
|
||||
"coil_C_opp_f.append(get_arc_point(angle_C_opp, common_connection_radius))\n",
|
||||
"\n",
|
||||
"tracks_b.append(common_coil_connections_b)\n",
|
||||
"tracks_f.append(common_coil_connections_b)\n",
|
||||
"\n",
|
||||
"vias.append(create_via(get_arc_point(angle_A_opp, common_connection_radius)))\n",
|
||||
"vias.append(create_via(get_arc_point(angle_B_opp, common_connection_radius)))\n",
|
||||
"vias.append(create_via(get_arc_point(angle_C_opp, common_connection_radius)))\n",
|
||||
"# vias.append(create_via(get_arc_point(angle_A_opp, common_connection_radius)))\n",
|
||||
"# vias.append(create_via(get_arc_point(angle_B_opp, common_connection_radius)))\n",
|
||||
"# vias.append(create_via(get_arc_point(angle_C_opp, common_connection_radius)))\n",
|
||||
"\n",
|
||||
"# wires for connecting to opposite coils\n",
|
||||
"connection_radius1 = STATOR_HOLE_RADIUS + (2 * TRACK_SPACING)\n",
|
||||
|
@ -464,29 +468,64 @@
|
|||
")\n",
|
||||
"pads.append(create_pad((PAD_PITCH, INPUT_PAD_RADIUS), PAD_HEIGHT, PAD_WIDTH, \"b\"))\n",
|
||||
"\n",
|
||||
"# connect coil A to the top pad\n",
|
||||
"pad_connection_point_y = INPUT_PAD_RADIUS + PAD_WIDTH / 2 - VIA_DIAM\n",
|
||||
"input_pad_connection_radius = SCREW_HOLE_RADIUS + SCREW_HOLE_DRILL_DIAM / 2 + 0.5\n",
|
||||
"# connect coil A to the right pad\n",
|
||||
"pad_angle = np.rad2deg(np.arcsin(PAD_PITCH / INPUT_PAD_RADIUS))\n",
|
||||
"input_connection_radius = common_connection_radius - (TRACK_SPACING + VIA_DIAM / 2)\n",
|
||||
"tracks_f.append(\n",
|
||||
" draw_arc(angle_A, 80, input_pad_connection_radius, 5)\n",
|
||||
" + [(PAD_PITCH, pad_connection_point_y)]\n",
|
||||
" draw_arc(angle_A, angle_A - 30, input_connection_radius, 1) + [coil_A_f[-1]]\n",
|
||||
")\n",
|
||||
"# connect coil B to the middle pad\n",
|
||||
"tracks_f.append(\n",
|
||||
" [(0, pad_connection_point_y)] + draw_arc(90, angle_B, INPUT_PAD_RADIUS, 5)\n",
|
||||
"vias.append(create_via(get_arc_point(angle_A - 30, input_connection_radius)))\n",
|
||||
"tracks_b.append(\n",
|
||||
" [get_arc_point(angle_A - 30, input_connection_radius)]\n",
|
||||
" + draw_arc(angle_A - 30, 90 - pad_angle, common_connection_radius, 1)\n",
|
||||
")\n",
|
||||
"# connect coil C to the bottom pad\n",
|
||||
"tracks_f.append(\n",
|
||||
" [(-PAD_PITCH, pad_connection_point_y)]\n",
|
||||
" + draw_arc(100, angle_C, input_pad_connection_radius, 5)\n",
|
||||
")\n",
|
||||
"coil_A_f.append(get_arc_point(angle_A, input_pad_connection_radius))\n",
|
||||
"coil_B_f.append(get_arc_point(angle_B, INPUT_PAD_RADIUS))\n",
|
||||
"coil_C_f.append(get_arc_point(angle_C, input_pad_connection_radius))\n",
|
||||
"\n",
|
||||
"vias.append(create_via((-PAD_PITCH, pad_connection_point_y)))\n",
|
||||
"vias.append(create_via((0, pad_connection_point_y)))\n",
|
||||
"vias.append(create_via((PAD_PITCH, pad_connection_point_y)))"
|
||||
"# connect the C coil to the left pad\n",
|
||||
"tracks_f.append(\n",
|
||||
" draw_arc(angle_C, angle_C - 30, input_connection_radius, 1) + [coil_C_f[-1]]\n",
|
||||
")\n",
|
||||
"vias.append(create_via(get_arc_point(angle_C - 30, input_connection_radius)))\n",
|
||||
"tracks_b.append(\n",
|
||||
" draw_arc(angle_C - 30, 90 + pad_angle, common_connection_radius, 1)\n",
|
||||
" + [get_arc_point(angle_C - 30, input_connection_radius)]\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"# connect the B coil to the middle pad\n",
|
||||
"tracks_f.append(\n",
|
||||
" [get_arc_point(90, input_connection_radius - (PAD_WIDTH))]\n",
|
||||
" + draw_arc(angle_B, angle_B - 30, input_connection_radius, 1)\n",
|
||||
" + [coil_B_f[-1]]\n",
|
||||
")\n",
|
||||
"vias.append(create_via(get_arc_point(90, input_connection_radius - (PAD_WIDTH))))\n",
|
||||
"tracks_b.append(\n",
|
||||
" [\n",
|
||||
" get_arc_point(90, input_connection_radius - (PAD_WIDTH)),\n",
|
||||
" get_arc_point(angle_B - 30, input_connection_radius),\n",
|
||||
" ]\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"# pad_connection_point_y = SCREW_HOLE_RADIUS - (TRACK_SPACING + SCREW_HOLE_DRILL_DIAM / 2)\n",
|
||||
"# input_pad_connection_radius = SCREW_HOLE_RADIUS - (TRACK_SPACING + SCREW_HOLE_DRILL_DIAM / 2)\n",
|
||||
"# tracks_f.append(\n",
|
||||
"# draw_arc(angle_A, 80, input_pad_connection_radius, 5)\n",
|
||||
"# + [(PAD_PITCH, pad_connection_point_y)]\n",
|
||||
"# )\n",
|
||||
"# # connect coil B to the middle pad\n",
|
||||
"# tracks_f.append(\n",
|
||||
"# [(0, pad_connection_point_y)] + draw_arc(90, angle_B, INPUT_PAD_RADIUS, 5)\n",
|
||||
"# )\n",
|
||||
"# # connect coil C to the bottom pad\n",
|
||||
"# tracks_f.append(\n",
|
||||
"# [(-PAD_PITCH, pad_connection_point_y)]\n",
|
||||
"# + draw_arc(100, angle_C, input_pad_connection_radius, 5)\n",
|
||||
"# )\n",
|
||||
"# coil_A_f.append(get_arc_point(angle_A, input_pad_connection_radius))\n",
|
||||
"# coil_B_f.append(get_arc_point(angle_B, INPUT_PAD_RADIUS))\n",
|
||||
"# coil_C_f.append(get_arc_point(angle_C, input_pad_connection_radius))\n",
|
||||
"\n",
|
||||
"# vias.append(create_via((-PAD_PITCH, pad_connection_point_y)))\n",
|
||||
"# vias.append(create_via((0, pad_connection_point_y)))\n",
|
||||
"# vias.append(create_via((PAD_PITCH, pad_connection_point_y)))"
|
||||
]
|
||||
},
|
||||
{
|
||||
|
|
17
helpers.py
17
helpers.py
|
@ -1,5 +1,6 @@
|
|||
import numpy as np
|
||||
|
||||
|
||||
# get the point on an arc at the given angle
|
||||
def get_arc_point(angle, radius):
|
||||
return (
|
||||
|
@ -10,6 +11,10 @@ def get_arc_point(angle, radius):
|
|||
|
||||
# draw an arc
|
||||
def draw_arc(start_angle, end_angle, radius, step=10):
|
||||
# make sure start_angle is less then end_angle
|
||||
if start_angle > end_angle:
|
||||
start_angle, end_angle = end_angle, start_angle
|
||||
|
||||
points = []
|
||||
for angle in np.arange(start_angle, end_angle + step, step):
|
||||
x = radius * np.cos(np.deg2rad(angle))
|
||||
|
@ -29,6 +34,18 @@ def rotate(points, angle):
|
|||
]
|
||||
|
||||
|
||||
# rotate a point
|
||||
def rotate_point(x, y, angle, ox=0, oy=0):
|
||||
x -= ox
|
||||
y -= oy
|
||||
qx = x * np.cos(np.deg2rad(angle)) - y * np.sin(np.deg2rad(angle))
|
||||
qy = x * np.sin(np.deg2rad(angle)) + y * np.cos(np.deg2rad(angle))
|
||||
qx += ox
|
||||
qy += oy
|
||||
return qx, qy
|
||||
|
||||
|
||||
|
||||
# move the points out to the distance at the requited angle
|
||||
def translate(points, distance, angle):
|
||||
return [
|
||||
|
|
|
@ -3,6 +3,8 @@ import pandas as pd
|
|||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
from helpers import rotate
|
||||
|
||||
|
||||
def create_pin(radius, angle, name):
|
||||
return {
|
||||
|
@ -12,13 +14,14 @@ def create_pin(radius, angle, name):
|
|||
}
|
||||
|
||||
|
||||
def create_pad(point, width, height, layer):
|
||||
def create_pad(point, width, height, layer, angle=0):
|
||||
return {
|
||||
"x": point[0],
|
||||
"y": point[1],
|
||||
"width": width,
|
||||
"height": height,
|
||||
"layer": layer,
|
||||
"angle": angle,
|
||||
}
|
||||
|
||||
|
||||
|
@ -141,6 +144,8 @@ def plot_json(json_result):
|
|||
pad["height"],
|
||||
fill=True,
|
||||
color=color,
|
||||
# rotate by the angle
|
||||
angle=pad["angle"],
|
||||
)
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in a new issue