Helmut Uwe Terton spacer

Helmut Uwe [OOVAE] Terton - Fab Academy

spacer spacer
spacer
spacerFab Academy Logo

Electronics Production - Assignment Week 8

Assignment tasks for Week 8:
 
Group assignment

  • characterize the design rules for your in-house PCB production process
  • send a PCB out to a board house
     
    Individual assignment
  • make and test a microcontroller development board
  • extra credit: make it with another process
     

    Contents



     

    Characterize the design rules for your in-house PCB production process

    Last year (2023) I collaborated with Dorian and Lisa, their documentation in regards of the in-house PCB production can be accessed via below links:
     
    Dorian Somers
    Lisa Schilling
     
    The following line test graphic had been designed in Adobe Illustrator in vector format and then saved as in PNG format. This format can be used with the MODS online tool.
    The MODS tool allows for Gerber code creation based on bitmap image formats. The images have to be in black and white inverted.
     
    MODS: https://pub.fabcloud.io/project/mods/
     
    We leaned to use MODS in our weekly tutorial from Ahmed.
     
    Below is are e few different image files used for line testing. Line testing is the process of testing different settings of the CNC router and several tools.

    Line Test Illustrator image
    Fig.1 - Line Test Illustrator image
    Line Test Illustrator file inverse
    Fig.2 - Line Test Illustrator file inverse
    PCB line test Illustrator
    Fig.3 - PCB line test graphic drawn in Adobe Illustrator in vector format
    Line test cut out
    Fig.4 - Line test cut-out saved in PNG format
    Line test cut out invert
    Fig.5 - Line test cut-out inverted saved in PNG format
    Mods: G code generator
    Fig.6 - Mods application used to generate G-code (Gerber code)
    Mods: G code generator for Roland MX20/40
    Fig.7 - Mods: G code generator for Roland MDX20/40
    DR Engrave
    Fig.8 - DR Engrave application used to generate routing path
    Line Test Path
    Fig.9 - Line Test Path Simualtion
    V Panel
    Fig.10 - V Panel application that drives the Roland MX40 tool head in axis X,Y and Z.
    Roland MX40 Mini CNC router
    Fig.11 - My lab has a Roland MDX-40A Mini CNC Router for PCB production
    Fig.12 - Here the CNC router can be seen routing into a MDF panel for a test.
    Line test in MDF with Roland MX40 using sensor
    Fig.13 - Here we can see the finished routing test and the height sensor (round metal cyclinder) used for callibrating the router tool.
    Group Line Test Result Lisa Schilling
    Fig.14 - Line test created by Lisa Schilling from the Kamp Lintfort lab.
    Group Line Test Result Lisa Schilling
    Fig.15 - Lisa's line test - close up.


     

    Make and test a microcontroller development board

    In our weekly tutorial we used KiCad to design a development board that is the host to a Seeeduino XIA ESP32-C or samd21.
    I have decided to buy a samd21 processor, the only one available in Australia at the time.
    To determine the circuit board layout I wanted to make a prototype using a breadboard, conventional old style resistors, LED and button. This did allow me to visualise the set-up which I then could transfer to the KiCad software and design the layout for the PCB to be routed.
    I googled some Arduino code to be used for the breadboard prototype, see Figure 17. Similar to the line test work pipeline, black and white inverted images were created to be used in MODS to create G-Code (Gerber-Code). The code was loaded via the VPanel app to the Roland MDX-40A router to route the traces and to eventually cut out the board from the copper plated plastic board (Single laminated copper clad, 15cm x 15cm, 1.5mm thickness.
    It needed a few attempts to get it all right, I experienced broken off tools, uneven router bed, double sided tape that came off to name a few.
     
    The following components needed to be soldered onto the PCB:

    • Seed Studio XIAO SAMD21 (Pre-Soldered)
    • 0Ω resistor
    • 499Ω resistor
    • 1kΩ resistor
    • 1x LED (orange)
    • button
    • 1 x 2row male header
    • 2 x female 1 row horizontal headers
    After some testing of LED working without soldering on the SAMD21 it was decided that everything should be working and all components had been soldered onto the board, the correct code programmed and loaded.
     
    Luckily everything was working this time :-)
     
    Seeeduino XIAO samd21 pin out
    Fig.16 - Seeeduino XIAO SAMD21 pin out
    Breadboard prototype: Making a LED blink via pressing a button
    Fig.17 - Breadboard prototype: Making a LED blink via pressing a button
    Fig.18 - Breadboard prototype: making a LED blink via pressing a button

    Arduino code that makes the LED come on when the button is pressed

      const int buttonPin = 6;     // the number of the pushbutton pin
    const int ledPin =  13;      // the number of the LED pin
    
    int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      buttonState = digitalRead(buttonPin);
    
      // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
      if (buttonState == HIGH) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
      } else {
        // turn LED off:
        digitalWrite(ledPin, LOW);
      }
    }
    
    
    Arduino Code: Making the LED blink via button press
    Fig.19 - Arduino Code: Making the LED blink via button press
    KICAD Footprinting Design
    Fig.20 - KICAD Footprinting Design
    KICAD Footprinting Design Traces
    Fig.21 - KICAD Footprinting Design Traces
    PCB development board traces, black and white PNG
    Fig.22 - PCB development board traces, black and white PNG
    Cut-Out PCB development board, black and white PNG
    Fig.23 - Cut-Out PCB development board, black and white PNG
    G-Code creation via the Mods online tool
    Fig.24 - G-Code creation via the Mods (2024 version) online tool
    Fig.25 - Roland MDX 40A engraving the traces for the development board
    Broken drouter tool, failed PCB board
    Fig.26 - Broken drouter tool, failed PCB board
    Failed engraving due to uneven router bed
    Fig.27 - Failed engraving due to uneven router bed
    PCB traces routed with routing dust on top
    Fig.28- PCB traces routed with routing dust on top
    Successful traces routed
    Fig.29 - Successful traces routed
    PCB has been cut out from the copper plate
    Fig.30 - PCB has been cut out from the copper plate
    The PCB board needs some more work. More space between the solder pads need to be routed, this was acheived by using a dreml router
    Fig.31 - The PCB board needs some more work. More space between the solder pads need to be routed, this was acheived by using a dreml router
    Soldered on LED test
    Fig.32 - the LED has been soldered on first, the SAMD21 been placed on pads and LED tested - success
    Finished soldering all components
    Fig.33 - Finished soldering all components"
    Fig.34 - the Arduino code from the breadboard prototype has been altered to work with the different pin-outs and to fit the PCB design

     

    Working code to make the LED blink when button is pressed

        //Pressing a button that will light up a LED and make it blink
    
    const int buttonPin = 7;     // the number of the pushbutton pin
    const int ledPin =  6;      // the number of the LED pin
    
    int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      buttonState = digitalRead(buttonPin);
    
      // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
      if (buttonState == HIGH) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
      delay(1000); // Wait for 1000 millisecond(s)
      // turn the LED off by making the voltage LOW
      digitalWrite(6, LOW);
      delay(1000); // Wait for 1000 millisecond(s)
    }
    }
     
     
    Complete development board with headers for input and output
    Fig.35 - Complete development board with headers for input and output
    Fig.36 - Bread board prototype: making a LED come on (no blink) via pressing a button
    Fig.37 - Bread board prototype: making a LED blink via pressing a button

     
    G-Code files for Roland MX40
     
    Cut-Out for Seeediono XIAO Samd 21 fab_xiao_interior.png.rml
     
    Traces for Seeediono XIAO Samd 21 fab_xiao_traces.png.rml
     
    Line Test Cut-Out line_test_cutout_inverse.png.rml
     
    Line Test Interior line_test_inverse.png.rml


     

    Last update: 29/02/2024


    Jump to top of the page