Skip to content

5. Electronics production

Group Assignment: Characterizing the machine

Roland SRM-20

For this week’s group assignment we had to characterize the specifications of our PCB production process on our Roland SRM-20. The software that we used for milling was Fab Modules, online at FabModules and send RML-1 files trough Roland VPanel sender.

HARDWARE

Setup

  • Tool: Milling machine
  • Model: Roland SRM-20 (203.2 (X) x 152.4 (Y) x 60.5 (Z) mm Working Area)
  • Endmill: 1/64 (0.4mm) - 1/32 (0.79mm)
  • Materials: FR1 board; 20mm MDF (sacrificial plane)

We did a linetest using these two files:

  1. linetest.png to milling the traces with 1/64 bit;
  2. linetest.interior.png to cut the outline with 1/32 bit.

Before attempting to mill we had set the machine as follows:

  1. prepare a sacrificial plane;
  2. using the double-sided adhesive tape, attach the 20mm MDF plane to the table; then attack the FR1 base on the sacrificial plane;

    Advice

    put the double-sided tape very flat on the surfaces.

  3. attach the milling bit in the collet and make sure it is 2 or 3 mm from the surface of the FR1;

  4. zeroing the Z height, dropping the tip on the plane, making sure that the Z can theoretically get off at least the right amount to be able to mill.

    Advice

    In case you have not left enough space to get down to milling, the spindle will rise upwards moving as if it were milling.

  5. zeroing the X and Y axes starting from the left-bottom side of the FR1 board.

SOFTWARE

The SRM-20 has a good mechanical resolution and the software resolution depend by the type of gcode that the sender manage:

Software Resolution:

RML-1 NC code RML-1 NC code
inches/step 0.000039 0.000039 mm/step 0.01 0.001

As the smallest track to be milled was 1 mills, we chose to generate an RML-1 code with a resolution of 0.01mm, then we had used FabModules to generate the RML-1 codes:

for Traces —>

modules

and send it to the milling machine trough by VPanel for SRM-20, we looked for the right setting of zero Z, Spindle (8000 rpm) and Cutting Speed (168 mm/min obtained from 70% of FabModules presetting - 4 mm/s).

The right one is the 2nd to the bottom.

for Outline —>

At that time we were ready to cut the outline, but generating the RML code we have found an error, and we had thought that Neil played us a joke, why??

The red line on the bottom represent a Travel, without milling, and this happen because the .png image has a bottom row of transparent pixels.

We had repaired the linetest.interior.png with Adobe Photoshop and we had generated a new one called linetest.interior2.png. At this point we had rebuilded the RML code and attached the 1/32 endmill to cut the board.

in-circuit programmer

FabISP - Brian version

Brian

1. Milling

Once the hardware has been prepared as described above in Hardware section of the group assignment, I’ve generated RML-1 code CAM trough Fabmodules again, starting from Brian’s PNG

I’ve used 168 mm/min (2.8 mm/s) Cut Speed and decreased Spindle Speed trought by VPanel around 8500 rpm fabmodules_traces

fabmodules_traces

Than I’ve take the Zero point for X/Y and Z axes and launch the CUT adding the .rml files to the jobs, 1 by 1. fabmodules_traces fabmodules_traces

2. Assembling

Prepare the following Components to assembly on the PCB:

Components

  • 1x ATtiny45
  • 2x 1kΩ resistors
  • 2x 499Ω resistors
  • 2x 49Ω resistors
  • 2x 3.3v zener diodes
  • 2x LEDs
  • 1x 100nF capacitor
  • 1x 2x3 pin header

Note

The components that must be installed in the correct orientation:

  • 3.3v zener diodes
  • LEDs
  • ATtiny45

At this point brush all the pads with the flux, and with a stylo solder cover the pads with the tin, heating them.

Remember that solds must be shiny and glossy

Now you have to remove the excess flux, washing the PCB with soap and water (if you have it in your Lab, you can use the isopropyl alcohol), taking care to dry it later, to prevent board oxidation.

After this, you can use the Hot Air solder to pick and place all the components, but remember the correct orientation of some of them.

At the end of the assembly work … Next time I’ve to pay attention to reduce the temperature of the hot air solder.

2. Programming

I usually use the GNU AVR toolchain on Windows 10 to program the AVR microcontrollers, well I can’t reinstall it but I can make a sanity check, as follows:

Advice

at the prompt you can run:

  C:\Users\ntngr>make -v
  GNU Make 3.81
  Copyright (C) 2006  Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.
  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
  PARTICULAR PURPOSE.

  This program built for i386-pc-mingw32

  C:\Users\ntngr>avr-gcc --version
  avr-gcc (WinAVR 20100110) 4.3.3
  Copyright (C) 2008 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


  C:\Users\ntngr>avrdude --version

  avrdude: no programmer has been specified on the command line or the config file
         Specify a programmer using the -c option and try again


  C:\Users\ntngr>avrdude -c avrisp2 -p t45

  avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


  avrdude done.  Thank you.


  C:\Users\ntngr>

All is right! and all the programs are in the PATH

Well, after check your system you can Download the Firmware for the FabISP and Build it, once you have unzip it in a folder, launching make you have a new couple of files, and one of them is an .HEX file.

Having nano in your PATH in Windows, you can Run nano Makefile and you can edit the file according to which programmer you will use. In my case I’ve used ATAVRISP2, and I’ve changed the programmer with avrisp2; Save & Exit.

NOW!! all is ready to program your FabISP.

Follow this few simple steps:

  1. use the USB ports of your PC to connect your board and your programmer;
  2. use an FC-6P cable to connect the two programmer;
  3. RUN make flash

    C:\Users\ntngr\fts_firmware_bdm_v1>make flash
    avrdude -p attiny45 -c avrisp2 -P usb -e \
                    -U flash:w:fts_firmware.hex
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.03s
    avrdude: Device signature = 0x1e9206
    avrdude: erasing chip
    avrdude: reading input file "fts_firmware.hex"
    avrdude: input file fts_firmware.hex auto detected as Intel Hex
    avrdude: writing flash (2470 bytes):
    
    Writing | ################################################## | 100% 2.52s
    avrdude: 2470 bytes of flash written
    avrdude: verifying flash memory against fts_firmware.hex:
    avrdude: load data flash data from input file fts_firmware.hex:
    avrdude: input file fts_firmware.hex auto detected as Intel Hex
    avrdude: input file fts_firmware.hex contains 2470 bytes
    avrdude: reading on-chip flash data:
    
    Reading | ################################################## | 100% 2.02s
    avrdude: verifying ...
    avrdude: 2470 bytes of flash verified
    
    avrdude: safemode: Fuses OK
    
    avrdude done.  
    
  4. RUN make fuses

    avrdude -p attiny45 -c avrisp2 -P usb \
                -U lfuse:w:0xE1:m -U hfuse:w:0xDD:m \
                -U efuse:w:0xFF:m
    
    avrdude: AVR device initialized and ready to accept instructions
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: Device signature = 0x1e9206
    avrdude: reading input file "0xE1"
    avrdude: writing lfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.00s
    
    avrdude: 1 bytes of lfuse written
    avrdude: verifying lfuse memory against 0xE1:
    avrdude: load data lfuse data from input file 0xE1:
    avrdude: input file 0xE1 contains 1 bytes
    avrdude: reading on-chip lfuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: verifying ...
    avrdude: 1 bytes of lfuse verified
    avrdude: reading input file "0xDD"
    avrdude: writing hfuse (1 bytes):
    
    Writing | ################################################## | 100% 0.00s
    
    avrdude: 1 bytes of hfuse written
    avrdude: verifying hfuse memory against 0xDD:
    avrdude: load data hfuse data from input file 0xDD:
    avrdude: input file 0xDD contains 1 bytes
    avrdude: reading on-chip hfuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: verifying ...
    avrdude: 1 bytes of hfuse verified
    avrdude: reading input file "0xFF"
    avrdude: writing efuse (1 bytes):
    
    Writing | ################################################## | 100% 0.00s
    
    avrdude: 1 bytes of efuse written
    avrdude: verifying efuse memory against 0xFF:
    avrdude: load data efuse data from input file 0xFF:
    avrdude: input file 0xFF contains 1 bytes
    avrdude: reading on-chip efuse data:
    
    Reading | ################################################## | 100% 0.00s
    
    avrdude: verifying ...
    avrdude: 1 bytes of efuse verified
    
    avrdude done.  Thank you.
    
    This will set up all of the fuses except the one that disables the reset pin.

  5. RUN make rstdisbl to disable the reset pin.

  6. desolder a reset jump on the board.

Try to recognize it on Windows OS torught by Device_Manager and check if it’s present in list … usbtiny

To try if my FabISP is fully working, the other student, Michele, had programmed his FabISP with mine.