Electronics Production
February 19, 2024
Challenge
-
Group assignment:
- Characterize the design rules for your in-house PCB production process: document feeds, speeds, plunge rate, depth of cut (traces and outline) and tooling.🧐
- Document the workflow for sending a PCB to a board house.
- Document your work to the group work page and reflect on your individual page what you learned.
-
Individual assignments
- Make and test a microcontroller development board.😁
Group Assignment:
This week’s assignment proved to be immensely valuable for several reasons. Foremost, it provided me with the opportunity to invest time in gaining a deeper understanding of the machine I am working with, delving into its capabilities and limitations.
Conducting tests on various bits, specifically V-Bits with angles of 10, 20, and 30 degrees, provided insightful results. While the precision achieved with these V-Bits was commendable, the finish quality emerged as a consideration. Comparatively, End-Mills appeared to excel in finish quality. Notably, the V-Bit with a 0.1mm diameter and a 20-degree angle demonstrated impressive results at a depth of 0.0532mm. However, in contemplating a depth of 0.1mm, there is a consideration for potential improvements in edges and trace isolation.
For more information about the results refer to this Link
Individual Assignment
- For this assignment I will Fabricate the Quentorres board The original programmer created by Quentin Bolsée and redesigned by Adrián Torres.
During the Fabrication
-
I’ll be using FlatCam to generate the tool-path.
-
I’ll be using the below setting for the bits at each stage.
- V-Bit (0.1mm)(10 degree)
Setting | Milling ------------------ | -------------- Feed x-y: | 100 mm\min Spindle speed: | 8000RPM Plunge rate: | 60mm\min Depth of cut: | 0.0532mm
- V-Bit (0.1mm)(20 degree)
Setting | Milling ------------------ | -------------- Feed x-y: | 150 mm\min Spindle speed: | 8000RPM Plunge rate: | 60mm\min Depth of cut: | 0.0532mm & 0.1mm
- V-Bit (0.1mm)(30 degree)
Setting | Milling ------------------ | -------------- Feed x-y: | 120 mm\min Spindle speed: | 8000RPM Plunge rate: | 60mm\min Depth of cut: | 0.03mm & 0.0532mm
- End-Mill (0.5mm)
Setting | Milling ------------------ | -------------- Feed x-y: | 200 mm\min Spindle speed: | 8000RPM Plunge rate: | 60mm\min Depth of cut: | 0.0532mm
- End-Mill (0.4mm) (Drilling bit)
Setting | Milling ------------------ | -------------- Feed x-y: | 60 mm\min Spindle speed: | 8000RPM Plunge rate: | 60mm\min Depth of cut: | 0.0532mm
- End-Mill (0.8mm) (Drilling bit)
Setting | Drilling ------------------ | -------------- Feed x-y: | 1000 mm\min Spindle speed: | 8000RPM Plunge rate: | 300mm\min Depth of cut: | 1.8mm
- End-Mill (1mm) (2-flute)
Setting | Cutout ------------------ | -------------- Feed x-y: | 200 mm\min Spindle speed: | 8000RPM Plunge rate: | 100 mm\min Depth of cut: | Multi-depth (0.4-1.8)mm
Generating the tool path
As for the generation of tool path I’m used to Flatcam as I use it in my daily work
- I will Use Gerber files instead of PNG –> Lets Do it
Importing Gerbers and Excellon
-
In this part we will import the Gerber file for the traces and the Excellon for the drilling.
-
Then we need to double click on the Gerber inserted in order to generate the geometry.
Generating the Geometry
- In flatcam we can transform and draw new geometry as needed for the job.
- In some cases the person who is exporting the file from the design tool might have made some changing in the zero position so in this case you have to re-offset the whole board and also do some transformation on the board like (Rotating the board, Flipping, Scaling, and also Mirroring). In my case I have re-generated the files from KICAD in order to overcome this (Transformation), as it take time and not accurate some times.
- Now to generate the geometry we will choose Isolation Tool as we are making a PCB.
-
In this section we will choose the tool we are going to use. –> In my case I’m using V-bit (0.1mm \ 20 degree)
-
Then the number of passes. –> I will go for 1 pass
-
Then the overlap : which the percentage of overlapping between the first pass and the second one.
-
The we can generate the geometry.
Generating the Path
- The path is the way the tool will take to remove the copper.
- Here we will put the tool degree.
Important Note:
In flatcam the use of V-bit is different from End-Mill as the depth of cut here are going to be 0 which means the bit will only surface the trace but it will remove copper but only with the fine tip of the V-Bit.
To over come this you can use multi-depth or just change the tool from V-Bit to Normal (END-MILL) and choose the depth to 0.05mm or 0.1mm Depends on the quality of the bit you are using.
-
Then the feed rate X-Y and the plunge rate –> For me its important to keep the x-y feed rate as low as possible to protect the bit and the spindle on the highest speed as for the plunge its not that important in my case as I’m only traveling 0.05 in the z axis so it won’t make any difference.
-
Then we can generate the path.
-
Here you can see the plot has blue lines which means that the paths are generated and ready to exported as G-Code.
Generating the G-code
- The estimated time for the cut is there (11 min) –> you can change the speed during the operation.
- Hit generate G-code to export in NC extensions.
Now we are ready to run the machine to cut engrave the board on the copper.
Generate the drilling file
-
Now we need to generate the drilling file from the Excellon file by double clicking there.
-
We will see that we have 21 holes to drill 14 (o.8 mm) and 7 (1 mm).
-
We can choose the 1 mm and in this case we will generate all the holes in 0.8 mm tool but you can use separate tools if needed. –> In my case I will go only with 0.8 mm.
- Then we can select the tool and put the correct settings.
-
For the cut in the Z –> we will put the thickness of the entire board which is 1.77mm In my case I will go for 1.8mm to make sure its fully open.
-
Then you can select the feed rate of the Z –> In my case 300.
-
Then Hit generate to then generate the G-Code.
Cutout path
- We will double click on the Gerber file to choose the cutout tool.
-
Then we will choose the tool diameter –> 1mm in my case.
-
I will also choose the margin of the cutout from the traces. –> 1mm in my case.
-
Also I will choose the number of gaps to generate to hold the PCB with the entire board. –> Zero in my case
-
Then I will generate the geometry in order to choose the tool settings.
-
From the list I can choose the depth cut in Z and the need for multi-depth cut.
-
I will choose the spindle speed and the feed rate in the X-Y.
-
Now You can see the path in blue for the cutout and also the estimated time of the cut.
-
Then I will Hit Save CNC code to export the machine file.
Fabricate the Board
To fabricate the PCB Im using [Roland MonoFab SRM20]
- What makes this machine good the compatibility and the resolution {0.00099mm\step}.
- I will use to mill the board (V-Bit 0.1mm 20d egree).
- TO Drill (End-Mill 0.8 mm)
- TO Cutout the Board (End-Mill 1 mm 4 flutes)
Zero the axis
- I will start by zeroing the axis –> For the x-y just choose a place on the board and zero the x-y.
- For the Z axis I will use the multi-meter (Continuity feature).
Milling the PCB
- Then We will add the file we exported from the flatcam to V-panel to execute the Job.
- Its important to choose G54 when you zero the axis. so the machine can execute the Job.
This is because (FlatCam) generate {NC codes} so we have to choose work-piece coordination system which is (G54-G59).
User coordination system is more related to RML-1 Codes.
Check this documentation
Important Note: The machine will be able also to execute this file on the user coordinate system option but to stay on the safe side keep in mind to Zero the coordinate of G54, So you won’t go into complications.
-
After that press on cut to choose the file and then on output.
-
Now the machine will run to Mill the Board.
- After 11 min the Board Is ready.
Drilling
-
Now we will change the bit to 0.8 mm to Drill the holes.
-
We will repeat the same steps when we added the file to cut the traces.
-
We need also to zero the Z axis after changing the tool.
Important Note
We will use the same X-Y home previously set in order to have the same Transform when we cut the holes.
- Now the board is drilled.
Cutout the Board
In this part we will separate the PCB from the Board on the bed.
-
We will repeat the same process above as we have to change the tool and zero the z axis again.
-
Then we will add the cut file using the V-Panel.
-
Here we go the board is being Cut.
The Board Is Ready
Reflection on the process
-
This was not the first try to produce the board.
-
The took me 3 tries to have it done.
- The first try was using the V-Bit 0.1 mm 30 degree but unfortunately the output quality was too bad.
- I think the bit quality affect this.
-
The second try was very great as I have used the End-Mill (0.5 mm) and (0.4 mm drilling bit)
This is why I used the 0.4 bit (I used the drilling bit because I don't have normal end-mill)
- This why I use the 0.4 mm bit ( A trace between 2 pads ).
- This Why it wont wrong.
-
The third try I used the V-Bit 0.1 mm 20 degree Which was a successful try.
As you see the 1st board was good but the finish quality are so bad, the second one is perfect but it wont wrong at the end, but the third one was very good but not like the second one
Solder the Board
We will solder the parts now on the board
I have used the solder wire as we don’t have solder paste at the meanwhile, I have used a fine tip solder as the pads on the board are small.
After one Hour and a half the board is ready now
Programming the Board
The board can be programmed using the Arduino IDE
-
I have followed the following Documentation from Wiki Seeed
-
The first step to take is to install the board library from the board manager but before we have to paste the link in additional board manager URLS in the preferences.
- Then we need to open the board manager {ctrl+shift=B} and install the Board library.
- Then we need to open one of the examples {Blink Example} to test the Board.
- Then Choose the board from the board option after connecting it with the computer.
- Then Hit Upload to test.
Important Note:
To Enter the Boot mode I had to press on the B button on the Xiao board after pressing the upload so the board can take the compiled code from the Arduino IDE.
Then to run the code just Hit the R Button on the board.
Here We Go The Board is working fine
For the Code to run Properly we need to change some of the pens on the code so instead of builtLED variable Change it to 26 {Which is the first LED at the top}
To run all the LED’s just add the other pins {0 and 1}
Code
/*
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(26, OUTPUT);
pinMode(1, OUTPUT);
pinMode(0, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(26, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(26, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
digitalWrite(1, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(1, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
digitalWrite(0, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(0, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}