项目分享| 这个无线蓝牙耳机有点高级(贵)
-
蓝牙设备无处不在,从无线扬声器和车载信息娱乐系统到无线耳机。随着低功耗蓝牙 (BLE) 的 LE Audio 的出现,引入了一种新的高质量、低功耗音频编解码器,称为低复杂性通信编码 (LC3)。LC3 在相同比特率条件下提供更好的音质。
今天分享的这个项目是制作一个 DIY 立体声系统,使用 LC3 编解码器演示同步通道 (ISO) 上的音频播放,并使用快速傅里叶变换 (FFT) 将音频数据转换为频域显示。
硬件设置
使用的是 Nordic Semiconductor 的 nRF5340 音频开发套件,该套件是低功耗蓝牙音频产品的推荐平台,可用作 USB 加密狗,从 PC 发送或接收音频数据。它还可以用作商务耳机、广播接收器或真无线立体声 (TWS) 耳机。
nRF5340开发套件有三个主要组件:nRF5340 SoC、nPM1100 PMIC 和 Cirrus Logic 的 CS47L63 Audio DSP。 其中CS47L63的高性能DAC和差分输出驱动器经过优化,可直接连接到外部耳机负载。
此项目需要3个Nordic nRF5340套件,1个作为网关,2个作为耳机设备。网关通过 USB 或 I2S串行总线接收来自外部源、计算机或智能手机的立体声(2 声道)音频数据,并将其转发到耳机。头戴式耳机是一种接收器设备,用于播放从网关获取的音频。每个耳机接收单声道(1 声道)音频数据,并可以单独在扬声器上播放。
在这个项目中,使用带有内置放大器的 USB 立体声扬声器。这种扬声器可以通过 2 毫米 TRS(Tip-Ring-Sleeve)插孔接收 3.5 声道(左/右)音频数据。Tip 和 Ring 通常分别连接到左右单声道,套筒接地。
nRF5340 Audio DK 仅将音频输出到音频插孔的左声道。这是因为开发套件上使用的是单声道硬件编解码器芯片。需要一个外部 TRS(或 TRRS)插孔来组合左/右单声道,如下面的模式所示。
我们使用带有面包板扩展板的 nRF5340 DK 来放置TRRS 音频插孔。
在这里,nRF5340 DK有两个用途,它使用相同的连接将DAC输出旁路到连接到USB扬声器的TRRS音频插孔,并将音频数据输入到ADC引脚ADC0和ADC2进行FFT分析。
为了显示FFT频谱,TFT显示扩展板堆叠在面包板扩展板的顶部。
设置开发环境
对于开发工作,制作者使用的是macOS,但所有平台的设置过程都是相似的。首先,需要从这里下载桌面版 nRF connect:https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Connect-for-desktop/Download。
nRF Connect for Desktop 是一款跨平台工具,支持使用 nRF5340 Audio DK 进行测试和开发。按照上面链接中的安装指南进行操作即可。安装完成后,打开应用程序并单击工具链管理器,然后选择 nRF Connect SDK v2.1.0。
默认情况下,SDK 安装在 MacOS 的 /opt/nordic/ncs 目录下。安装完成后,单击“打开终端”,这将打开一个命令行终端,其中初始化了所有环境变量,以快速开始开发。
Audio DK 应用程序
将使用位于:
/opt/nordic/ncs/v2.1.0/nrf/applications/nrf5340_audio 目录中的示例应用程序。两种设备类型、网关和头戴式耳机将使用相同的代码库,但固件不同。网关和头戴式耳机都在连接的常时等量流 (CIS) 模式下运行,这是应用程序的默认模式。在默认配置中,网关应用程序使用 USB 串行端口作为音频源。由于将使用智能手机作为音频数据源,因此需要通过将以下行附加到 prj.conf 文件来切换到使用 I2S 串行连接。
CONFIG_AUDIO_SOURCE_I2S=y此外们需要一根音频插孔电缆,将音频源(智能手机)连接到开发套件上的模拟 LINE IN 以使用 I2S。网关和头戴式耳机的应用程序工作流程如下。
网关
· 网关通过 I2S 接收来自音频源的音频数据。
· 音频数据被发送到同步模块,然后由软件编解码器进行编码。
· 编码的音频数据将发送到蓝牙 LE 主机。
· 主机将编码的音频数据发送到网络核心上 nRF53 的 LE 音频控制器子系统。
· 子系统将音频数据转发到硬件无线电,并将其发送到头戴式耳机设备。
耳机
· 头戴式耳机在网络核心端的硬件无线电上接收编码的音频数据。
· 每个头戴式耳机上运行的 nRF53 的 LE 音频控制器子系统将编码的音频数据发送到头戴式耳机应用核心上的蓝牙 LE 主机。
· 音频数据被发送到流控制模块并放置在FIFO缓冲区中。
· 音频数据从FIFO缓冲器发送到同步模块。
· 音频数据由软件编解码器解码。
· 解码后的音频数据通过 I2S 发送到硬件音频输出。
nRF5340 音频应用程序仅支持 LC3 软件编解码器,该编解码器专为与 LE Audio 一起使用而开发。
构建并刷新 nRF5340 Audio DK 固件
构建应用程序并将其编程到 Audio DK 的推荐方法是运行 buildprog.py Python 脚本,该脚本位于:/opt/nordic/ncs/v2.1.0/nrf/applications/nrf5340_audio/tools/buildprog 该脚本自动执行选择配置文件和构建应用程序不同版本的过程。该脚本取决于:
/opt/nordic/ncs/v2.1.0/nrf/applications/nrf5340_audio/tools/buildprog/nrf5340_audio_dk_devices.json
文件中定义的设置。需要在 nRF5340 Audio DK 的贴纸上找到序列号,并更新 JSON 文件中的 nrf5340_audio_dk_snr 条目,如下所示。
{"nrf5340_audio_dk_snr": 1050173897,"nrf5340_audio_dk_dev": "headset","channel": "left"},{"nrf5340_audio_dk_snr": 1050143142,"nrf5340_audio_dk_dev": "gateway","channel": "NA"},{"nrf5340_audio_dk_snr": 1050138112,"nrf5340_audio_dk_dev": "headset","channel": "right"}要为所有三个音频 DK 构建应用程序,请在项目的根目录中执行以下命令。
$ cd /opt/nordic/ncs/v2.1.0/nrf/applications/nrf5340_audio$ python3 tools/buildprog/buildprog.py -c app -b debug -d both音频 DK 根据 JSON 文件中设置的序列号进行编程。在运行以下命令之前,请确保使用 USB 将开发套件连接到您的 PC,并使用 POWER 开关将其打开。
$ python buildprog.py -c both -b debug -d both -pnRF5340 DK应用
nRF5340 DK 使用 ADC 引脚以 12 位分辨率对音频数据(DAC 输出)进行采样。在应用中,CPU频率设置为128MHz,用于实时处理传入的ADC样本。
NRF_CLOCK_S->HFCLKCTRL = (CLOCK_HFCLKCTRL_HCLK_Div1 << CLOCK_HFCLKCTRL_HCLK_Pos);NRF_CLOCK_S->HFCLKCTRL = (CLOCK_HFCLKCTRL_HCLK_Div1 << CLOCK_HFCLKCTRL_HCLK_Pos);使用 ARM CMSIS-DSP 库计算复杂的 FFT,该库为 Cortex-M 处理器内核提供优化的计算内核。快速傅里叶变换 (FFT) 是一种计算序列的离散傅里叶变换 (DFT) 的算法。傅里叶分析将信号从其原始域(通常是时间或空间)转换为频域中的表示。FFT分析仪的频谱测量值使用LVGL(轻量级和多功能图形库)分别显示在每个音频通道的TFT LCD上。完整代码见文末连接。
构建并刷新 nRF5340 DK 应用固件
使用工具链管理器在终端中执行以下命令,如“设置开发环境”部分所述。
$ git clone https://github.com/metanav/nRF5340_Audio_DK_stereo_player_spectrum_analyzer.git$ cd nRF5340_Audio_DK_stereo_player_spectrum_analyzer$ west build -b nrf5340dk_nrf5340_cpuapp --pristine使用 USB 电缆连接 nRF5340 DK 并执行以下命令。
$ west flash成功完成刷写后,应用程序将开始运行。在工作演示中,Audio DK 使用捆绑包随附的 Lipo 电池供电。USB 扬声器和 nRF5340 DK 使用移动电源和 USB 连接器供电。
原文链接:
https://www.hackster.io/naveenbskumar/stereo-system-spectrum-analyzer-using-nordic-audio-dk-9b66c7
版权所属:Naveen
-