Professional Profile

Chuck Faber

I am a computer engineer with an M.S. in Electrical and Computer Engineering from Portland State University with a focus in embedded systems, living in Portland, OR.

I have a wide variety of interests including: radio communications, RTL design and verification for FPGAs and ASICs, machine learning, and embedded systems software.

Below are a selection of various projects and experiences I've engaged in..

Other projects can be found in my general project photo album or by visiting my GitHub account using the links above.

NASA Internship project: Radio System Modularization

In the summer of 2021, I participated in a remote internship with the NASA Glenn Research Center. The primary goal of this internship was to develop a framework for modularizing our group's large and convoluted HDL code base that had become unmanageable, with a secondary goal of implementing automated unit testing of new radio module designs in VHDL. We ended up leveraging the open-source IP management software FuseSoC as well as writing our own tool to interface this with other tools to implement a system that drew upon common principles in software development for use with FPGA development.

This solution enabled not only an organizing principle for existing code but provided a framework for rapid prototyping of new designs from a library of well-tested building blocks for diverse teams to draw from.

This internship gave me a lot of experience in developing automated unit tests, GitLab Continuous Integration, and systems engineering.

Language: VHDL, Python

Software: Xilinx Vivado, GHDL, FuseSoC, Docker, Gitlab CI

Single Precision Floating Point Module (ADD/SUB)

In this project, I learned about the many verification features and methods offered by the SystemVerilog HDL, including assertions, classes, constrained randomization, and how to develop robust test benches. In this project, I along with a partner designed the add/subtract unit of our IEEE754 Floating Point Core.

It ended up being one of the most successful operations in the core, with a failure rate of about 0.0004% to 0.01% using hundreds of thousands of random test cases, and even these failures were minor precision mismatches which often did not effect the final value. Our unit could even handle special cases such as denormalized numbers, NaN's, infinity, etc.

I also developed the classes, methods, definitions, and the testbench used to test this operation and the other operations of our FPU core.

I learned a lot about hardware verification from this project and it has inspired me to pursue more hardware verification based courses.

Language: SystemVerilog

Software: QuestaSim/ModelSim

Jump Rope Fitness Game

During quarantine, for a class project, our team decided that people stuck at home didn't have as much opportunity to stay active. I really enjoyed rhythm based games like Bit.Trip Runner and we thought up this game that allows the player to jump and duck according to the beats of the song. Some of the features of this were that the code is adaptable to different BPM of different songs, and the game play is easily customizable as the movements were based on a set array.

This project gave me my first deep-dive into developing on an FPGA, and using HDL tools like Vivado. We also implemented a custom Android app which gave us a lot of experience in Java.

We used Bluetooth Low Energy for wireless communication helping me to learn a lot more about BLE protocols and the BLE stack.

Language: SystemVerilog, C, Java

Hardware: Nexys Artix-7 FPGA Dev Board, Android, Raspberry Pi, ESP32 , BLE

Click for more photos.

Python Programmed "On Air" Sign

During the quarantine due to COVID-19, we all had to get very acquainted with Zoom for our courses, and remain in close quarters with our loved ones. My specific problem was my husband liked to barge into my room when I was in the middle of meetings which was mildly embarrassing for him and for me.

My solution was to create a sign that would wirelessly light up outside my door when my Zoom Mic was active so he would know when not to interrupt.

Programmed in Python, implemented with a Raspberry Pi.

Language: Python

Microcontroller: Raspberry Pi

SLA UV Curing Chamber

The Electronics Prototyping Lab (EPL) at Portland State is a student-run makerspace that allows any PSU student to come in to work on personal and course projects. One of the prototyping tools they offer is 3D printing. They have several 3D printers, one of which is an SLA resin printer. 3D printed resin parts must be cured for about 30 minutes to an hour using UV light at 400nm wavelength.

For this project, I led a team of other students in developing a curing chamber for the EPL to use. This project involved a lot of coding in C, a lot of electronic design, and a lot of physical design and prototyping. I designed a custom PCB in EagleCAD to work with an ESP32 microcontroller and other sensors and routed it on one of the EPL's PCB routers before stuffing the board.

We created a poster for this project and it won the prize for best poster.

Click for more photos.

Language: C

Microcontroller: ESP32

Click for more photos.

SatNOGS Ground Station

SatNOGs is a global open-source satellite ground station network. These ground stations can be purchased, made custom, or made using the designs provided by the SatNOGs community. Portland State Aerospace Society (PSAS) is launching Oregon's first Cube Satellite in the next few years, and of course we needed a ground station to be able to listen to and communicate with the satellite. There is one large ground station which was built on top of the roof of the engineering building, but another big part of PSAS is the outreach we do to other students within PSU and younger students from schools in the area. They wanted a ground station that would be accessible to these students as the roof is off-limits to everyone but specialized crew.

In this project I used the open-source designs to build a ground station that will track satellites as they cross the sky and listen to their signals using a helical antenna with software defined radio. I did have a hand in designing some adapters to convert the European style components to work with US sized PVC.

I also made a few improvements to the SatNOGs rotator firmware to work better with Minicom so we could test sending azimuth and elevation commands to the controller manually. These improvements were accepted by the developers and merged with their master branch on GitLab.

This project was a good way to get my hands dirty with a variety of prototyping equipment and skills such as 3D CAD, 3D printing, machine shop tools, soldering and reflow soldering, programming, and troubleshooting.

Language: C

Microcontroller: Raspberry Pi & Arduino Pro

ESP32 Weather Station

I worked with a team in a project management class designed to teach us skills for completing large and complex projects to develop this weather station. It uses an ESP32 and communicates with the online service "WeatherUnderground" via wifi to get the current weather conditions, and displays them attractively in this laser-cut box. We also implemented an LCD screen to display the temperature and the current time.

Lighting was done with RGB LED strips and attractive lighting patterns and displays were programmed into this project.

Click for more photos.

Language: C

Microcontroller: ESP32

Copy of L'SPACE Academy Level 1 Team 50 Video Presentation.mp4

NASA L'SPACE PreLIM. DESIGN REVIEW

The NASA L'Space Academy is a 12 week online, interactive program for students interested in pursuing a career with NASA or other space organizations. We were organized into teams of 10 members, and tasked with developing a PDR (Preliminary Design Review), a document that demonstrates that a proposed mission concept meets all risk, cost, and schedule constraints, as well as establishes the basis for mission design.

Our goal was to identify the presence of ice at one of the 44 NASA designated Human Landing Sites. Our ten members were spread across California, Oregon, and Washington, and most of our work was done remotely.

I served as a deputy project manager for this team and with our project manager helped guide our team to complete our goal in a timely manner and to the standards expected by NASA. Specifically I organized members to develop initial design concepts, to complete rigorous research, and established systems for making group decisions. Project-wise, I developed the initial concept of the probe darts, designed their structure in CAD, as well as established the scientific basis for how our probes would determine the presence of water.

This project helped me learn how to work in a diverse team of members with diverse skillsets, and guide all of them in developing a single coherent product.

Skills: Fusion 360, JMARS, Project Management

APRS Packet Encoder

One of my goals has been to launch a weather balloon with a payload and use it to take photos and track its location live. This project was one step towards this goal. We were tasked with completing a project in C in an introductory programming course, so we decided to try to create an APRS beacon from scratch. This turned out to be an incredibly difficult task, considering I had to learn how to implement sensors and GPS modules to take environmental and position data, fully understand the AX.25 packet encoding protocol, understand how to generate cyclic redundancy checksums, not to mention, use the resulting data packet and try to modulate sine wave frequencies for radio transmission using FSK (frequency shift keying) modulation. I'm glad to say I accomplished all of these tasks! However, I did have trouble with our radio transceiver.

Our signal was quite weak so unfortunately, we didn't get to test full functionality of the beacon by sending it up anywhere. I also wanted to test if the encoding would translate properly with an AX.25 packet modem, and we didn't get the chance to do that by the end of the project. Still I learned an immense amount from this project and will come back to it again someday.

Click for more photos.

Language: C

Microcontroller: Arduino Mega

Click for more photos.

Knife Edge THz Beam Characterization

I worked as a research assistant for the Portland State THz Research Lab over several quarters. One of the projects I completed for this lab was building a knife-edge method beam obstructer. The purpose of this was to occlude the beam bit by bit until it was fully obstructed and measure the transmission of the beam at each step. The transmission data was then processed to produce an intensity profile of the beam. The reason we needed such an indirect method of beam characterization is that THz beams are not visible to the human eye, and thus we couldn't tell whether or not the beam was aligned properly.

For this project I stepped the knife-edge blade (the black rectangle in the photo) using a ball-screw rail actuator which was controlled with an Arduino Uno, which in turn was controlled by a front-end LabView program I designed. The LabView program was used to initiate a measurement, take data, display it, and store it.

I wrote a MatLab script to process the raw transmission data to produce the beam profiles using published analytical methods for this method of beam measurement.

A research poster was created and presented at Portland State.

Language: C, LabView, MatLab

Microcontroller: Arduino Uno

MatLab Traffic INtersection

For our MatLab course, we were tasked with designing, programming, and building a working traffic intersection with crosswalks. For our project I also included turn lanes which used Hall-Effect sensors to sense the presence of a car, and light sensors to turn on street lamps.

This project was coded completely in MatLab and used LabJack data acquisition hardware for GPIO control.

This was a fun project that taught me a lot about the basics of programming and electronics, and getting together a larger complex project with many different parts.

Click for more photos.

Language: MatLab

Hardware: LabJack

Click for more photos.

Rube-Goldberg Mechanism

This project was for an introductory engineering course in our department. We were tasked with creating a Rube-Goldberg mechanism. I was very proud of the product I created with my teammates.

Unfortunately, I didn't take and video of it working, (but trust me, it worked). My section of the mechanism was made mostly from K'nex, and paper tracks which marbles could run across.

It included an sound maker, some counterweight elevators, an electromagnetic pendulum release, a vinegar and baking soda volcano, a balloon pop, and several track switches among other things.

Language: C

Microcontroller: Arduino

Python Coded Spy Bear

This was one of the first programming/hardware projects I've undertaken, and it was conducted while I was a middle school teacher. I attended a professional development event called "PiCademy" which was hosted in the Computer History Museum in Mountain View, CA. Several teachers were all given Raspberry Pi's and taught about the ways we could use them in our classes.

In particular I was teaching an elective that I had decided to make an engineering elective and was wondering how I could implement these micro-computers into our activities. The finale activity of this event was to present some project we created using our Raspberry Pi's at the end of the weekend.

My teacher partner and I decided to create a Spy Bear which used a Pi Camera and was able to wirelessly send live video to another computer using a Python script we wrote.

Click for more photos.

Language: Python

Microcontroller: Raspberry Pi

Click to go to game.

Scratch Lost Woods Zelda Game

I took an online MOOC (massive open online course) called CS50 which was hosted by HarvardX, and was an introduction to computer science. One of the first projects given to us was to create a program in Scratch, a graphical coding language often used to introduce children (and beginners such as myself at the time) to programming.

I have always been a fan of the Legend of Zelda series, and decided to create a custom game based on that series. Though a formal programming language wasn't used, it helped get me acquainted with a lot of common programming structures such as loops, conditionals, and threads.

Language: Scratch