For my home-brew Teensy Hearing Aid, I'm using the Teensy Audio Board as my audio interface. The heart of the Teensy Audio Board is the Freescale SGTL5000 stereo codec. This codec is very flexible, with lots of virtual knobs for tuning your system to suit your own application. For my hearing aid, it is important for me to understand all settings related to loudness. So, today, I'm going to look at the impact of the headphone volume control.
System Block Diagram: The figure above is taken from the datasheet for the SGTL5000. All of the blocks in yellow are analog gain stages. The headphone volume control is at the end of the chain, on the upper right. It says that the headphone volume can be adjusted from -52 dB to +12 dB.
Teensy Audio Library: Because this SGTL5000 is embedded within the Teensy Audio Board, I control it via the Teensy Audio Library. The library hides many of the details of controlling the SGTL5000. For example, it allows the user to control the headphone volume simply by commanding a value somewhere between 0.0 and 1.0. Presumably, 0.0 maps to the -52 dB setting and 1.0 maps to the +12 dB setting.
Measuring the Response: To see what this means for my system, I wrote a sketch for the Teensy that uses the Teensy Audio Library to continuously generate a nearly full-scale sine wave and to output it via the headphone jack (code is shared here). The volume setting for the headphone output is controlled via potentiometer on the Teensy Audio Board. To see the effect of the headphone volume setting, I measured the RMS voltage produced at the headphone jack using a Fluke handheld digital multi-meter.
Results: The figure above shows the values that I measured. As can be seen, the response in the middle section is linear, which is great. At the low end, my results do deviate from linear, but that's presumably because my multi-meter had difficulty measuring such small signals (-50dBV is only 3.2 mVrms!).
Saturation: The interesting result happens at the high end of my graph where I turn up the volume control to its highest values. Here, my results saturate -- increasing the volume command does not increase the output voltage. The break-over point is at a command of about 0.85. This corresponds to an output signal level of +1.5 dBV, which is 1.2 Vrms, which is 3.4 Vpk-pk. Since the power supply to the SGTL5000 is only 3.3V, it is not surprising that the output saturates when I ask for the output signal to be greater than the power rails.
Best Setting to Use: Saturation will sound bad. It will cause distortion in the audio. To keep my hearing aid sounding good, I want to avoid this saturation. If my full-scale sine wave causes saturation at a volume setting of 0.85, I am going to set my volume to 0.8.