NOMAD - Cyberpunk2077 inspired guitar project

Pio

Well-known member
nomad_1.jpg

this project has been in the works for over a year now. The guitar is based on an DIY kit (Harley Benton JA) which is heavily modded and upgraded, mainly with electronics.

nomad_9.jpg
Hardware design is split in three main parts:

1. Pickguard, a large PCB itself using an Cypress PSoC5LP MCU is responsible for:
- most of the analog circuitry as pickup buffers, active hum cancelling system, analog pot controls
- digital controls as capacitive touch buttons and one X-Y pad (large X9 area)
- low EMI light control with constant current drivers - neon light, button leds and leds built into the P90 pickups
- generating CV control signals for the analog VCA+VCF (PT8211 + I2S used as cheap DC dac), controlling the volume and filter cutoff frequency + resonance.
nomad_2.jpg

2. Analog effect section consisting of an octave up (basically a precision rectifier), a state variable filter + VCA built around SSM2164 quad VCA chip and an 8 channel I2C volume controller. This chip is used as a switch to select the filter type (lowpass, highpass, bandpass, notch), bypass the octaver, mix in two DSP channels and combine everything into one mono output. The X axis of the touch pad controls the cutoff frequency and the Y axis takes over the resonance.
nomad_3.jpg

3. Power + DSP section placed in a 3D printed enclosure at the back of the guitar:
- It provides the power for everything. Initially i've used a ready made power bank, but after hacking around it to get the battery level i decided to design a more optimized version having all the fancy quick charge/PD charging options plus better 5V output filtering. 5V is converted to 3.3V with a buck converter, this is the main digital power bus, 5V is also boosted to 12V and regulated down to 9V as main analog supply rail (opamps, filters, VCA etc).
- Teensy4.1 + PSRAM, being the main DSP and display driver.
- 4 port USB hub, combining all the data and power into one USB-C socket. Here - it is used for the KitProg debugger for the PSoC MCU. Once the firmware is mature i'm going to remove it and use the PSoC's own USB for potential firmware upgrades in the future.
- Hardware MIDI input/output + Teensy's USB MIDI.
- 8 button RGB illuminated keypad. This is a separate sub-module controlled by a small risc-v MCU (CH32V003) doing all the keypad scanning, debouncing and LED control, talks to Teensy via I2C + interrupt line.
- 2 axis + button gamepad joystick for controlling the DSP effects.
nomad_6.jpgnomad_4.jpg
nomad_8.jpg

Display:
i wanted a small display with capacitive touch screen. One of the sources for such a display + nice looking bezel turned out to be a cheap P8 smart watch. I reverse engineered the original connections and designed a matching PCB with SPI (display control) and I2C (touch interface). LVGL9 is used for the GUI.
Main functions are: hardware setup and settings, guitar tuner and some demo animations.
p8.jpg

Keypad + RGB Led module:
4 buttons have (will have) a configurable functions, ie. play a sample, tap tempo etc. The other 4 used for quick preset access.
nomad_5.jpg

DSP:
where the Teensy4.1 shines. The first iteration of that board used ESP32-P4, however, after initial test and tries i decided i won't be needing any wireless, plus getting the performance out of RTOS brought many more issues, i've redesigned the board around T4.1, which i know and feel confident to work with.
Teensy is powered directly from the 3.3V bus using the trick with one LED supplying the power to the VBAT pin. USB is routed into one of usb hub ports.
Communication between the Teensy and the PSoC5LP happens via level shifted SPI bus + single interrupt line.

MIDI:
Teensy works as a MIDI merger combining messages coming via USB or the hardware inputs, sending them to the pickguard MCU and receiving CC from the PSoC. Touch sense buttons and the X-Y pad can be used to send MIDI messages, too.

Audio inputs:
both bridge + neck pickups are buffered and routed into stereo inputs of the AK4558 codec. Audio library runs on 32bit floating point math.

Digital effects:

1. Drone synth
. Initally i've experimented with building a sustainer pickup into the guitar. I did not want to sacrifice the neck P90 pickup for it, in the end i decided to go with synth based route.
Pressing the Drone button on the pickguard tells the Teensy to capture the current fundamental frequency and to start the drone synth. It is a combination of a few sinusoidal waves, base pitch, 2nd and 3rd harmonics, subharmonics used as ring modulation source. All this is controlled from a bunch of randomized control signal generators. They provide a smooth and always changing controls for the amplitude and vibrato applied to the drone components. Kind of a synth that never sounds the same. Sin waves are used since the output signal will be distorted in various effect pedals anyway.
The Drone has two voices to make the transition between two notes smooth. Plus it can be used a standard 2 voice synth playing the notes coming via MIDI. In the works is an envelope controlled ducker module, which automatically lowers the drone volume while playing. The overall drone volume is controlled with one section of the stacked potentiometer mounted on the pickguard PCB.

2. Simple looper with vinyl scratch option. Always recording a few seconds of audio and if necessary allowing to loop it and use emulated vinyl scratch on it. Not sure yet if i leave it this way or move the vinyl scratch to the next effect:

3. Sample player - special effects player. Pre loaded samples can be played or engaged in scratch mode, where the play speed and direction is controlled by the movement of the gamepad joystick. Still working on it...

The main concept for this guitar is not to make another instrument with built in amp sims, ready made sounds to be just amplified. What i wanted to focus on is shaping the guitar sounds that happens before any distortion, amp etc. Hence the filter + VCA section which can completely change the sounds of two P90 pickups, adding a second or third voice to it, intermodulating with whatever is being played using the strings. All this leads to many new interesting effects, sounds and even ways of playing. All the DSP based effects are added to the original sound only, the main signal is latency free. Saying that, the main, biggest and most useful feature on this guitar is one simple push pull switch which takes all the electronics out of the signal path and makes the instrument work as regular passive output completely analog guitar :)

A side quest was developing a pickup winder to make a pair of "cyberpunky" illuminated pair of P90 pickups. There are two LEDs inside each pickup, one (blue) shows the pickup is currently active and the other (pink) tells if the active hum cancelling system is enabled. The covers are 3D printed using a transparent resin.
pickupwinder_1a.jpgp90_cover.jpg

Since this is a Cyberpunk inspired project, there are some hidden "data links" visible only under UV light:
nomad_10.jpg
 
this looks incredible! I'm not super familiar with the game -- is there any guitar-related gameplay in Cyberpunk 2077, or is the inspiration purely aesthetic? 💗
 
I'm still waiting for new pickup covers, once installed i plan to make a proper photo session.
Guitars play a quite important role in the CP2077 game, you can even go home and play some riffs.
However, this one is not a reproduction of any guitar from the game. More a loose inspiration in style, combining the retro shape (Jazzmaster) with futuristic details and features. The looks and colors are actually inspired by one of the cars from the game.
 
Nomad_features.jpgnomad_15.jpg
Visually it's pretty much finished. The only hardware part requiring more work is the battery. The power bank will be replaced with two 21700 cells with charger/5V boost board based on IP5238 with I2C and few other signals exposed. Teensy will be able to directly read the charge/discharge status and the battery level.
NOMAD_Powerbank.jpg
 
Power section and related adventures:
for the power section i went with the IP5328 power bank controller chip, mainly because it's a compact one chip solution to get multiple fast charging protocols and a stable 5V output. Plus the IP5328 chip is one of not so many actually having any datasheet including the register map.
Nomad_powerbank1.jpg

1. Plug in detection and automatic power on.
Datasheet does not explain how exactly does it work, but simply applying a load to one of outputs is not the way. It needs either the USB data line for type A outputs or data/cc for the USB C in/out. I could wire the power bank's button to an external one, however from the start i wanted to have a bi stable power switch. A button can be accidentally pressed when the guitar is in a bag or case. Power bank can be turned on by a single button press or turned off by a quick double press.

2. Light load automatic shutdown.
Common for most of the power banks, if the load is under about 150mA it switches the outputs off. This can be reconfigured via I2C, however, i found out the settings get changed after plugging the charger. I assume the guitar with more low power model enabled will go below that threshold. One way to keep the power on is to tick the button every few seconds, it restarts the internal timer.

Solution for these two problems is solved by adding a small 6 pin Attiny9. It reads a standard on-off switch, generates pulses for the IP5328's button input and ticks it every 8 seconds to keep the output on while consuming almost no power: about 8.5uA when on and about 250nA when off.

Having the access to all the battery telemetry i was able to plot the discharge curve for the two 6000mAh cells using a current draw which is in ballpark with what the guitar will use 800mA -1A (direct battery current). I'm a bit skeptical about the measured total capacitance. The load was lower than the typical spec'd 2A, yet the internal voltage and current measurements might be off.
However, the important parameter, which is the discharge time looks promising, over 14 hours. It will be even longer when i implement more power saving features in the firmware and remove the PSoC programmer/debugger (~100mA).
discharge_curve.png
Btw, the DC load used to test the cells is also Teensy (LC) based:

dc_load.jpg
 
More power related adventures:
the idea from the post above is basically scrapped. Everything works very nice until such a power bank system gets near an electromagnetic guitar pickup, especially a single coil one as used in this guitar. It's simply too noisy to even have it around (like 5-10cm away). Not to mention to install it in the cavity at the back of the body.

So, slow charge with linear charger chip then. Back to the drawing board.
This time i'm going to incorporate all the power power related parts on the main DSP/Power board. There has been already a few changes/bodges, this is a chance to add them all, remove parts that are less useful to make place for the new power delivery system.
  • MCP73871 as the charger. Only 1A, a bit low, but i've got plenty of them waiting to be used.
  • INA3221 as current/voltage monitor, 3 channels
  • RY2203 - optional battery protection
  • ATTINY806 - always on in low power mode, battery monitoring, capacity meter (has EEPROM), talks to the INA3221 via bit banged I2C, accessed from the Teensy via slave I2C.
  • UCS3205 - have a few of them left from another project. It's a current limited USB-C power switch - used here as the main power switch. Should be able to limit the inrush current (lot's of decoupling capacitance). Long high current cables generate lots of noise, with this chip i can keep the currents on the pcb, the mechanical power switch will carry only a DC signal.
  • TPS6001 - 3.3V buck-boost, main power for the Teensy
  • TPS63060 5V boost - for the 5V rail, powers the whole pickguard interface, neon lights + RGB leds on the keypad.
  • AP3012 boost to 12V followed by ADP7102 9V voltage regulator - clean 9V supply for the analog part.
NOMAD_PowerDSP_T41_V2.jpg
The small breakout board is a power + SWD bus switch for the PSoC5LP KitProg debugger. I'm going to leave it inside with an option to disable it via either GUI or a console command. Both power and data lines have to be isolated, otherwise the target (pickguard) woud back feed the 5V through the data lines.
 
New DSP|Power boards arrived and i discovered i could actually make the external 3.3V supply in a more proper way, without any tricks with LEDs supplying voltage to the VBAT.

nomad_dsp_v5_1.jpg

I'm using the TPS63001 buck-boost DC-DC converter to keep the 3.3V bus stable with a Li-Ion battery as the power source. The enable pin threshold is 1.2V according to the datasheet. Tested in practice it worked reliably with 1.1V, which is the voltage Teensy is outputting on the PMIC_ON_REQ pin during the power up sequence.

I have desoldered the U4, the onboard 3.3V regulator

nomad_dsp_v5_6.jpg

and connected the PMIC_ON_REQ signal directly to the TPS63001 Enable pin.
T41_DCDC_mod2.png

Teensy still needs about 5V to enumerate on the USB. In my case i don't route the power wires through the USB sockets internally. I have applied the 5V directly to the two square pads you normally use to disconnect the USB VBUS. It can be supplied via the USB socket or the VIN pin or using the USB_VBUS test pin on the bottom layer.

T41_DCDC_mod.png

This ensures the proper power up sequence, just as with the stock linear onboard regulator but with a more efficient switching converter.

nomad_dsp_v5_4.jpg

Next step: write firmware for the low power battery monitor/fuel gauge based on Attiny806.
 
Back
Top