 So, hello, my name is Guillaume Vier, I'm a software engineer at Chubby Data, and today we'll be talking about testing and more specifically how to build a local test fixture. So, just to go through the agenda, I'll start with some background, how this project started, what were the motivations, why we tried to do this. The architecture, we chose how we designed our test fixture, and then we look at the lessons learned and our conclusions. So, Chubby Data, it's a Belgian company founded in 2003, we're located in Brussels, and we specialize in telematics and mobile logistics solutions. And as part of this, we build our own tracking device, so it's a battery-powered tracking device, and here you've got a picture of the latest generation, so it's two PCBs stacked on top of each other, you've got four mounting holes, a few microcontrollers, sensors, GPS, and a modem, and you've got a connector for the battery and another connector that sits for the debugging port. So last year we finished that design, and the next step is when you've built a few prototypes and you're happy with the design, you have to go large scale and you have to go to manufacturing. So we work with the next company for that, we give them the manufacturing files, and they've got the entire assembly line, so they make the PCB, they solder the components, they run some optical inspection to check the solder joints, the placement of the components, and the last thing they need is a tool from us that can tell them whether a board is good, is valid, and they can deliver it to us, or it's broken and it has to go to the bin because it's beyond repair, or if there are some repairs that can be done. So the way it works is it's fixture where you put the board you want to test, and you load a firmware that's going to run a self-test, try to communicate with all the components, and give you a reason. So the very first test is the board booting, is there any short, and then we have a report for all of the components. And the last step is to program the production firmware. So we've got two microcontrollers, we need to program them before they go to the customer. We also need to write some identification on the board, on some eProm, so that's the final step of that process. Our board, it's quite small, it's six centimeters by three centimeters roughly. It's very densely crowded, which means that your test points are really small. There are 0.6 millimeter in diameter, and the minimum spacing is 1.27 millimeter. So traditionally you would choose a fixture like the one you see on the left-hand side. It's very sturdy, it's built for 100,000 of cycles, so you've got white pegs where you can locate your PCBs you want to test. So on the bottom plate, under the bottom plate you've got probes, test probes with a spring, and you've got the lid, and when you close the lid, those probes will come up through the plate and make contact with the board. So on that picture, what's great is you can test multiple devices at the same time. On that case, you can do three at the same time. The only thing is it's quite expensive to build, and if you've got more... If your target, you know your volume is a bit more modest, it's quite an investment. So we decided to start a project to look into how we could build something that does the same thing, but that is cheaper and that relies mostly on the chef components. So we've got three components to the system. So you've got the device and the test, and you need to interface with that device. So for this, we use the bed of naves. It's going to have the test probes, there's going to be a breakout connector where the test controller can connect and talk to the board, load some codes, measure some voltage, power it, power cycle if you need. And the last component, it's the flasher. So it's the component that's going to write, program your microcontrollers with the production firmware. So if you look on the internet, you will find lots of tutorials or other people with projects on bed of naves using poker pins, or you can see projects where they 3D printed a fixture. They are really good, but they all use probes that need a minimum spacing of 2.54 mm, which is twice bigger than what we've got, and we can't really reproduce that. So we settled with designing a custom PCB that will hold those test probes in place and help to locate the device over the probes. For the test controller, you could use a microcontroller. We decided for Raspberry Pi Zero because it's a very nice board to use. It's very easy to program. A microcontroller, you need someone with experience to write firmware, use the peripherals, it takes more time to develop. So we found it's easier to develop your codes on Raspberry Pi Zero and quicker. And for the flasher, we settled on OpenNoseCd, so it's a library that helps you debug or flash any type of microcontroller. So now let's dig into the details, the bed of naves. So as I mentioned before, it's a custom PCB we designed. So we use four screws that will help locate the device we want to test. In the first slide I showed you, if you remember, there are four mounting holes. So they will slot into the screws. And the probes will be able to make contact with the test points. So before that, I'm a software engineer. I had no experience with designing PCBs before this. So it was a great opportunity to learn. And I decided to learn using KeyCAD. So there are three steps to making PCB. The first one, before this, is to decide what test points you want to use. We've got dozens on the board. We don't need all of them for the test at the end of the production. So you have to select the few you need. You start with the schematics. So on the right-hand side, these are the test points we want to connect to on the device. And on the left-hand side, we just route them to a bigger connector that will be easier to connect to the Raspberry Pi Zero. The second step is to associate footprint to each of the components you want to use on your PCB. So for the connector, it's quite easy. There are standard footprints. We chose a standard male header with 2.54 mm spacing. The problem comes for the probes. You have to define your own footprint. And there are quite a few constraints to expect. The first one is, depending on the manufacturer, you choose to build your PCB. They've got different requirements, different classes of builds with the price that varies. So we try to stick to their standard class, and they define the pad-to-pad spacing and the minimum annular ring size that you need to respect. The next two constraints, they are imposed by the device you want to test. So in our case, we saw that the spacing was 1.27 mm. And the probe we chose, they have a diameter of 0.65 mm. So taking into account all those constraints, we came up with the dimensions of the pad. So it's 1.1 mm by 2 mm and 0.75 mm for the probe. Then the final step is to place those components on the PCB you're going to produce. So we decided on the silkscreen to draw the edge of the device in the test so that the operator cannot be confused on the position to put it in. Then the very important point is to get the test points coordinates right. You have to be sure that the coordinates are the same when you take them on the PCB you test and on the one you're going to design. And for this, there is a very nice feature in KeyCAD. You can set the origin points for the grids anywhere you want. And then for each component, you can place it relative to this origin. So this is what the layout looks like. So at the top, we've got two headers. This will have wires connected to the test controller. We placed all the footprints for the probes and we've got the four mounting holes. We made the PCB slightly larger than the size of the device in the test purely for practical reason. It's easier to drop your PCB and remove it without pulling everything together. So here's a picture of everything assembled. The four screws for positioning, the probes are soldered on the top PCB. And a nice thing to take into account in your design is the center of gravity of the board you're going to test. In our case, the probes are mostly located on one side, so it was tilted when you dropped it in place, so we added a little bit of foam. So the same assembly from the side. The bottom PCB helps with the alignment and keeping the probes vertical. And the probes, as I mentioned before, they are soldered only on the top layer where the connector is also soldered. So the next item is the test controller. We picked a Raspberry Pi Zero board. We run Tiny Core on it. It's a minimal litmus system. It runs entirely from RAM. So it's loaded that boot from the flash card and nothing gets written into it unless you manually run commands too. So it's quite good if you power cycle it. It's going to start in a good frame where your setup is going. And we wrote all the test scripts in Python. And the Raspberry Pi communicates with the board and the test using the UART. Now I mentioned before we want to measure some voltages. And one drawback of using the Pi Zero is that you get no analog inputs. So we added an advertisement on top. It's called the Automation P-HAT. It's built by Piermoroni. And the good thing is they have a relay that we can use to power and power off the board that we test. And they've got three ADCs that we use to measure the voltages on the board. And the great thing is this addon comes with a Python library. So you open running in a few minutes. It's very well documented. It's very easy to use. It's very good. Now for the last part, the flasher, I mentioned we're going to use OpenOCD. So we've got two microcontrollers on the board that we need to flash. We compiled OpenOCD to run on Tynical. And we need to add the GPIO BitBank support so you can use the SWDE feature. So it's just I added the command to build the library. It's running on Pi Zero and we defined a script for each of the microcontrollers. So OpenOCD has a lot of scripts configured for each controller. The only thing you need to add are the pins you're going to use on the Pi header. You need to set them up properly for the SWDE clock and the IO. And then you're good to go. So the conclusions of this project is the cost comparison, purely looking at hardware, not the effort to develop the software. Initially, we asked a few codes to build a standard test fixture from other companies that specialize in this and we got numbers ranging from three to six K. They had two additional parts. They're roughly in a few hundred euro. Now if you look at the price of all the components we used, all together it's less than 100 euros. And the conclusions are, so we managed to build something that's cheap and robust. We've tested hundreds of boards without any mechanical problems. The contacts are made properly with the dude between the props and the test points. It works quite well. It's easy to build and to replicate. If the manufacturer needs to speed up the testing, it's quite easy to build a new setup and give it to him. Now one limitation is it's well suited to our needs and our volume. If you're trying to do fancy things like using RF props, it's going to be difficult. Whereas the standard test fixture, they've got props for anything you need. You can do vacuum testing, you can do pretty much anything. You can have props from the two sides, from the bottom, from the top. So the conclusion is it's good for our needs. It might interest other people. So we thought it was a nice idea to share how we made it. And to conclude, here's a picture of the full assembly. So on the left-hand side we've got the bed of nails. We added a clamp on the side to maintain the dudes and have enough pressure on the test props. In the middle we've got the Pi Zero, the test controller and the P-hat. They're all wired up to the bed of nails. And on the right-hand side we've got a Raspberry Pi where we connect the Pi Zero into it. And so basically the manufacturer just needs to plug a keyboard and a screen in the Raspberry Pi and it's good to go. So we can test all the boards. And so that's pretty much it. If you've got any questions. Why did you choose to make a hat directly for the Pi rather than a separate board from using... I mean you could have put everything on the board plugged on the Pi. So we wonder about this initially. One reason is that was my first PCB so I tried to keep it simple. Second reason is we wanted to do ourselves as little as possible. And we found very quickly a hat that does everything we need so why do we do it again? Almost everything, not the probing itself. No, the probing was really the only thing we had to do ourselves. And have you estimated in the cost, comparison of cost, the amount of time you spent on the design? So for the... I mean you worked on the design and set up the thing so it should be when you compare the cost for the two solutions. There is a missing line. I agree. What's accounted is purely the cost of parts. The effort involved was not counted. But the effort to make the PCB, to design the PCB, it was three to four days. Hi, thank you for your talk. Did it help you to detect a lot of bad things in your PCB? Yes, actually it does. So on the first batch of production there were components that the optical inspection thought were well placed. But then when we run them through the test, the test was failing. And we could see, even when you are, you could see that the component was slightly skewed and you could see the solder parts underneath. So it helped us to go back to the manufacturer and say, look, can we improve the placement of the components? And they reprogrammed the optical inspection. And so we improved the yield batch over batch using that setup. Thank you. Hello, I have a question about does this fixture save the test results somehow so you can check the yield or how good is the production if it's implemented in production. And if it's not, do you think it's possible to do that? So you're asking if the manufacturer can do this without the fixture? If, imagine that you have this fixture in a production and then you have to check how good are the unit under test that you are checking. So you have to somehow save the measurement or test results if it's possible to do that. To get like matrix test results for both? For example, the voltage measurements on the ADC is not going to be the same in any unit under test. It's going to be a tolerance. Can you, do you save that measurement somehow and then you can afterwards study the results? So we don't save the results now. There's a range. We account for the accuracy of the ADC. So basically one thing is on the board, we've got different voltage rates and there's one DC-DC that you can set the voltage by soldering a resistor or not. So we mainly check that we've got the right voltage that we soldered the resistor in the right place. Thank you. Thanks for the talk. You said this is a more interesting solution for modest volumes. Yes. What kind of volumes should we think about? It's roughly, I'd say under 10,000 volts a year. Okay, and above it would be worth investing maybe in the more expensive solution. Yes, for one reason is that with the expensive solution you can test multiple volts at the same time. Right. So you save on this time and on the test cost. Thanks. I had a question. Do you know the wearing of the tester? You know how the frequency, you have to change the Pogo pins if they are broken or if they don't make contact correctly. How many volts can you test without replacing the tester board? So according to the datasheet, they are rated for I think 100,000 cycles. And so far we've tested over a thousand volts with one setup without needing to replace any of them. Okay, I think that's all we have time for now. No, sorry, we need to move on. But thank you very much for that super interesting talk. So yeah, round of applause please for the presenter.