Skip to content

An optimized Python PCB flashing station built for Marquardt U.S during my work as a Software Engineer Intern.

Notifications You must be signed in to change notification settings

ethbak/azor-flashing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 

Repository files navigation

azor_banner

Static Badge Static Badge Static Badge Static Badge Static Badge

⚡ AZOR Flashing

AZOR Flashing is a Python-native solution to a faulty printed-circuit board flashing station on the AZOR assembly line at Marquardt U.S.. This station is responsible for more than $10,000,000 in product and provides the functionality to flash, download, and run application code, pair key fob and gateway boards with unique hex values, and crystal trim board headers to optimize Bluetooth frequency strength.

Using Python multithreading and hardware optimization for quick JTAG connections, this rebuild reflects a significant improvement in efficiency over the previous station, cutting down production time by 89% while utilizing a less resource-intensive setup.

A responsive and functional GUI accompanies the Python automation, providing clear status indicators and live instructions to allow for efficient use by untrained operators. This, alongside detailed process checks, ensures a favorable fallout rate of less than 1%.

🎥 Videos

✨ Functionality

User Interface

gui

A clear, simple, and informative UI was necessary for untrained operators to use effectively. The left sidebar records Machine Information, including shift and lifetime totals for the amount produced, amount failed, current cycle time, and average cycle time, while the right sidebar contains ANDON-inspired status icons for the different stages of the flashing process.

The bottom of the screen contains two terminal-like text boxes, which display outputs from SmartSnippets and winIDEA, the programs used to flash the PCBs, in real-time. This allows for Engineers to quickly troubleshoot when boards are not flashed correctly, and give operators the chance to see the program to ensure it is working.

Finally, the center of the screen displays instructions and current program status, allowing operators to easily follow instructions to switch out and stage components in the correct order. This location is also used to notify operators when a board fails flashing and allows them to restart the program when necessary.

Flashing

flashing

The program utilizes SmartSnippets Toolbox CLI and winIDEA API to flash code to the PCBs. It uses a set of custom-made nests that allow for a fast JTAG connection, providing a significant increase in efficiency over the UART connection that was previously used.

Crystal Trimming

flashing

The program optimizes the low-energy Bluetooth signal strength of each PCB by modifying the OTP (One Time Programmable) header of each board to set the Calibration Flag and Crystal Trim values. To do so, the existing nests were modified to introduce a power supply directly to the board itself, providing a workaround that allowed the OTP memory to be modified over the JTAG connection.

Process Tests

flashing

Each step of the flashing program is checked by a series of efficient and conducive process tests. As the program is running, outputs from the terminals towards the bottom of the screen are scanned for success messages, while other things like the OTP header and the winIDEA application code are checked separately by reading the PCB's memory or checking the output logs.

When the program detects a failure, execution of all of the concurrent flashing processes stops immediately, and the operator is instructed to place the part in the Reject bin and to press ENTER to try again with a new kit.

Multithreading

flashing

To further improve efficiency, (and ultimately cut production time by 89%), the program utilizes concurrent flashing threads that allow for the Fobs and the Gateway to be flashed at the same time. This introduced challenges relating to race conditions and similar complications, requiring multiple global flags and mutex locks to be utilized.

At the same time, the program uses other threads to display the GUI, count cycle time, and provide functionality for the stop/reset buttons. Working through this further highlighted the need for organized flags and mutex locks to allow for a consistent and reliable program execution.

📀 Technologies / Dependencies

Static Badge Static Badge Static Badge Static Badge Static Badge Static Badge

🔨 Hardware

  • Dell Latitude 5580 w/ Windows 10

    dell
  • Fob and Gateway Nests

    nests
  • 2x Dialog DA14580 Development Boards

    devkit
  • iSYSTEM iC5000 BlueBox

    bluebox
  • Triple Power Supply

    powersupply

🏎️ Performance

Average Cycle Time

  • Current: 1m 02s
  • Original: 4m 33s

Fallout Rate

  • Current: <1%
  • Original: >50%

These improvements reflect savings of over 4,000 labor hours and $100,000 in related costs over the project's lifetime.

🖥️ Where's the Code?

This application was developed for sole use by Marquardt U.S. and is therefore not available for open source or public use as per my employment agreement.

This README file simply serves to provide a detailed depiction of my contribution to the project during my time as a Software Engineer at Marquardt.

👨‍💻 Contributors

Ethan Baker - Software Development, Hardware Development

Matthew Teabo - Hardware Development

About

An optimized Python PCB flashing station built for Marquardt U.S during my work as a Software Engineer Intern.

Topics

Resources

Stars

Watchers

Forks