使用 FireBeetle ESP32 测试NS4168

2024-05-214648
AI 快速预览详细 收起
本文介绍了使用FireBeetle ESP32测试NS4168单声道音频功放的过程。NS4168通过I2S接口接收音频信号并放大输出到喇叭。文章详细说明了硬件连接方式,包括GND、CTRL、LRCLK、BCLK、SDAT和VCC等引脚的连接方法。特别强调了CTRL管脚的重要性,确保其正确接入3.3V以选择正确的声道。此外,还提供了Arduino-audio-tools 0.8.7版本的代码示例,通过I2S输出正弦波进行测试。
NS4168 是一颗I2S 输入,2.5W 单声道音频功放,就是能将I2S的声音放大提供给喇叭使用。这次测试的是DFRobot FireBeetle 配合NS4168 工作。
NS4168 电路图如下:

使用 FireBeetle ESP32 测试NS4168图1

PCB 设计如下:
使用 FireBeetle ESP32 测试NS4168图2

左侧J1是留出的接口,右侧SPK1SPK2是用于连接喇叭的接口,这里可以选择接入2.0间距或者2.54间距接口的喇叭:


  
NS4168
  
FireBeetle
功能
GND
CTRL
接入 3.3V
根据  DataSheet 这个是用于选择输出  I2S 信号中哪一个声道的。这里直接接入3.3V。CTRL 管脚电压为 0.9V~1.15V 时,选择左声道; CTRL 管脚电压为 1.5 V~VDD 时,选择右声道。小于0.4V 时关闭 NS4168。
  
特别注意:这里如果接地或者悬空会导致喇叭没有声音。
LRCLK
IO15(WS)
I2S 左右声道帧时钟。用于切换左右声道的数据。LRCLK 为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据,LRCLK 的频率等于采样频率。
BCLK
IO14(BCK)
串行时钟 BCLK 也叫位时钟, 是 主机送出来的I2S时钟信号
SDAT
IO22(DATA  OUT)
用二进制补码表示的音频数据
VCC
3.3V
供电

测试使用CArduino-audio-tools0.8.7版本,具体的引脚定义可以在 \libraries\arduino-audio-tools-0.8.7\src\AudioConfig.h 看到:

  1. #define PWM_FREQENCY 30000
  2. #define PIN_PWM_START 12
  3. #define PIN_I2S_BCK 14
  4. #define PIN_I2S_WS 15
  5. #define PIN_I2S_DATA_IN 4
  6. #define PIN_I2S_DATA_OUT 22
  7. #define I2S_USE_APLL false
复制代码
代码位于\libraries\arduino-audio-tools-0.8.7\examples\examples-stream\streams-generator-i2s中,是通过I2S输出一个正弦波:

  1. /**
  2. * @file streams-generator-i2s.ino
  3. * @author Phil Schatzmann
  4. * @brief see https://github.com/pschatzmann/arduino-audio-tools/blob/main/examples/examples-stream/streams-generator-i2s/README.md
  5. * @copyright GPLv3
  6. */
  7. #include "AudioTools.h"
  8. uint16_t sample_rate=44100;
  9. uint8_t channels = 2;                                      // The stream will have 2 channels
  10. SineWaveGenerator<int16_t> sineWave(32000);                // subclass of SoundGenerator with max amplitude of 32000
  11. GeneratedSoundStream<int16_t> sound(sineWave);             // Stream generated from sine wave
  12. I2SStream out;
  13. StreamCopy copier(out, sound);                             // copies sound into i2s
  14. // Arduino Setup
  15. void setup(void) {  
  16.   // Open Serial
  17.   Serial.begin(115200);
  18.   while(!Serial);
  19.   AudioLogger::instance().begin(Serial, AudioLogger::Info);
  20.   // start I2S
  21.   Serial.println("starting I2S...");
  22.   auto config = out.defaultConfig(TX_MODE);
  23.   config.sample_rate = sample_rate;
  24.   config.channels = channels;
  25.   config.bits_per_sample = 16;
  26.   out.begin(config);
  27.   // Setup sine wave
  28.   sineWave.begin(channels, sample_rate, N_B4);
  29.   Serial.println("started...");
  30. }
  31. // Arduino loop - copy sound to out
  32. void loop() {
  33.   copier.copy();
  34. }  
复制代码

测试的工作视频在下面可以看到



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -