From 118ddbdbad3776a93ff5316d8985b9d988ee0bcf Mon Sep 17 00:00:00 2001 From: Erik Strand <erik.strand@cba.mit.edu> Date: Fri, 10 May 2019 01:06:20 -0400 Subject: [PATCH] First electrically complete board design --- node_board/main.cpp | 106 +++++++++++++++++++++++++++----------------- 1 file changed, 65 insertions(+), 41 deletions(-) diff --git a/node_board/main.cpp b/node_board/main.cpp index 729c2b8..996fec3 100644 --- a/node_board/main.cpp +++ b/node_board/main.cpp @@ -18,7 +18,7 @@ public: min_cut_thickness_px_(to_px(min_cut_thickness_)) { png_writer_.allocate(width_px_, height_px_); - png_writer_.set_all_pixels(255); + png_writer_.set_all_pixels_black(); } int32_t to_px(double x) { @@ -95,59 +95,83 @@ int main() { // SOIC dims double const pad_width = 0.6; double const pad_height = 2.4; - //double const soic_width = 5; double const soic_height = 7; double const soic_pitch = 1.27; // SOIC pads - double const soic_pos_x = min_trace_thickness + min_cut_thickness; + double const soic_x_min = min_trace_thickness + min_cut_thickness; + double const soic_x_max = soic_x_min + 3 * soic_pitch + pad_width; double const soic_btm_y = 0.5 * (height - soic_height); double const soic_top_y = height - soic_btm_y; for (int32_t i = 0; i < 4; ++i) { - pad_x_min = soic_pos_x + i * soic_pitch; + pad_x_min = soic_x_min + i * soic_pitch; pad_x_max = pad_x_min + pad_width; pad_y_max = soic_btm_y + pad_height; - board.draw_pad(pad_x_min, pad_x_max, soic_btm_y, pad_y_max); + board.draw_rectangle(pad_x_min, pad_x_max, soic_btm_y, pad_y_max); pad_y_min = soic_top_y - pad_height; - board.draw_pad(pad_x_min, pad_x_max, pad_y_min, soic_top_y); + board.draw_rectangle(pad_x_min, pad_x_max, pad_y_min, soic_top_y); } - // Data/VCC divider - pad_x_min += pad_width + min_cut_thickness + min_trace_thickness; - pad_x_max = pad_x_min + min_cut_thickness; - pad_y_min = soic_btm_y - min_cut_thickness; - pad_y_max = soic_top_y + min_cut_thickness; - std::cout << "Power trace is " << width - pad_x_max << "mm\n"; - board.draw_rectangle(pad_x_min, pad_x_max, pad_y_min, pad_y_max, 0); - - // Ground/data divider - pad_x_min = min_trace_thickness; - pad_x_max = pad_x_min + min_cut_thickness; - board.draw_rectangle(pad_x_min, pad_x_max, soic_btm_y, soic_top_y, 0); - - // Ground pad links - pad_x_min += min_cut_thickness + 0.5 * (pad_width - min_trace_thickness); - pad_x_max = pad_x_min + min_trace_thickness; - pad_y_min = soic_btm_y - min_cut_thickness; - pad_y_max = soic_btm_y; - board.draw_rectangle(pad_x_min, pad_x_max, pad_y_min, pad_y_max, 255); - - // Data and power pad links - pad_y_min = soic_top_y - pad_height - min_cut_thickness; - pad_y_max = soic_top_y + min_cut_thickness; - board.draw_rectangle(pad_x_min, pad_x_max, pad_y_min, pad_y_max, 255); - pad_x_min += soic_pitch; - pad_x_max += soic_pitch; - board.draw_rectangle(pad_x_min, pad_x_max, pad_y_min, pad_y_max, 255); - - // Cable attachment dividers + // Ground pads and traces double const cable_pad_width = (width - 2 * min_cut_thickness) / 3; - pad_x_min = cable_pad_width; - pad_x_max = pad_x_min + min_cut_thickness; - board.draw_rectangle(pad_x_min, pad_x_max, 0, soic_btm_y - min_cut_thickness, 0); - pad_x_min += cable_pad_width + min_cut_thickness; - pad_x_max = pad_x_min + min_cut_thickness; - board.draw_rectangle(pad_x_min, pad_x_max, 0, soic_btm_y - 2 * min_cut_thickness, 0); + double const cable_pad_height = soic_btm_y - min_cut_thickness; + board.draw_rectangle(0, cable_pad_width, 0, cable_pad_height); + board.draw_rectangle(0, min_trace_thickness, 0, height); + board.draw_rectangle(soic_x_min + 0.5 * (pad_width - min_trace_thickness), + soic_x_min + 0.5 * (pad_width - min_trace_thickness) + min_trace_thickness, + cable_pad_height, + cable_pad_height + min_cut_thickness); + board.draw_rectangle(0, + cable_pad_width, + soic_top_y + 2 * min_cut_thickness + min_trace_thickness, + height); + + // Data pads and traces + double const data_pad_x_min = cable_pad_width + min_cut_thickness; + double const data_pad_x_max = data_pad_x_min + cable_pad_width; + board.draw_rectangle(data_pad_x_min, data_pad_x_max, 0, cable_pad_height); + board.draw_rectangle(data_pad_x_max, + soic_x_max + min_cut_thickness + min_trace_thickness, + cable_pad_height - min_cut_thickness, + cable_pad_height); + board.draw_rectangle(soic_x_max + min_cut_thickness, + soic_x_max + min_cut_thickness + min_trace_thickness, + cable_pad_height, + soic_btm_y + pad_height + min_cut_thickness); + board.draw_rectangle(soic_x_min + 0.5 * (pad_width - min_trace_thickness), + soic_x_max + min_cut_thickness + min_trace_thickness, + soic_btm_y + pad_height + min_cut_thickness, + soic_btm_y + pad_height + min_cut_thickness + min_trace_thickness); + board.draw_rectangle(soic_x_min + 0.5 * (pad_width - min_trace_thickness), + soic_x_min + 0.5 * (pad_width - min_trace_thickness) + min_trace_thickness, + soic_btm_y + pad_height + min_cut_thickness, + soic_top_y + min_cut_thickness); + board.draw_rectangle(soic_x_min + 0.5 * (pad_width - min_trace_thickness), + data_pad_x_max, + soic_top_y + min_cut_thickness, + soic_top_y + min_cut_thickness + min_trace_thickness); + board.draw_rectangle(data_pad_x_min, data_pad_x_max, soic_top_y + min_cut_thickness, height); + + // VCC pads and traces + double const vcc_pad_x_min = 2 * (cable_pad_width + min_cut_thickness); + board.draw_rectangle(vcc_pad_x_min, + width, + 0, + cable_pad_height - min_cut_thickness - min_trace_thickness); + board.draw_rectangle(width - min_trace_thickness, width, 0, height); + board.draw_rectangle(vcc_pad_x_min, + width, + height - cable_pad_height, + height); + double const vcc_pin_x = soic_x_min + soic_pitch + 0.5 * (pad_width - min_trace_thickness); + board.draw_rectangle(vcc_pin_x, + width, + soic_top_y - pad_height - min_cut_thickness - min_trace_thickness, + soic_top_y - pad_height - min_cut_thickness); + board.draw_rectangle(vcc_pin_x, + vcc_pin_x + min_trace_thickness, + soic_top_y - pad_height - min_cut_thickness, + soic_top_y); board.save("node_board_traces.png"); -- GitLab