2026年5月1日金曜日

ESP32S3 - PCM1808 > PCM5102 AF信号処理

Tj Lab「ESP32-S3 AF信号処理ボード」 I2Sによる、信号発生ソフトWaveGene→PCM1808モジュール(ADC入力)→PCM5102モジュール(DAC出力)→オシロスコープでL・R波形が再現しました 。








WaveGene信号発生ソフト


















Wave1【サイン波】【1000Hz】【-10㏈】【L】
Wave2【三角波】【1000Hz】【-10㏈】【R】




WaveGenePCM1808入力 PCM5102出力→オシロスコープ
















CH1【L】  サイン波
CH2【R】  三角波


参考サイト


回路図



























ESP32-S3 開発ボード
アマゾン購入
5Vピン → 5V出ない(入力ピン)?
(赤い線材)三端子レギュレータから直接5Vを取出しPCM1808のアナログ電圧(5V)に供給。(自己責任で)







PCM5102A - 32ビットDAC
アマゾン購入
【SCK】ブリッジ(内部クロック)












【H1L】(FLT)      L側 ブリッジ
【H2L】(DEMP) L側 ブリッジ
【H3L】(XSMT) H側 ブリッジ
【H4L】(FMT)    L側 ブリッジ








PCM1808 - 24ビットADC
アマゾン購入
回路不明
IC周辺にコンデンサー・抵抗がついているので外付け必要ない?
SCK ー MCLK(マスタークロック)プログラムで変更可能






●I2S・24ビット
 FMT - GND

●スレーブ・モード
 MD1 - GND
 MD0 - GND












MCLK波形

















ボードマネージャ














追加ボードマネージャーURLを変更
【https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json】
【esp 32】
【バージョン3.2.0】インストール


ライブラリマネージャー








●ESP32-audioI2S-master 
 所定のlibrariesに貼付

【i2s】
【バージョン3.2.1】インストール


プログラム Arduino IDE【ボード:ESP32S3 Dev Module

//https://tj-lab.org/2022/10/05/esp32-s3-af%e4%bf%a1%e5%8f%b7%e5%87%a6%e7%90%86%e3%83%9c%e3%83%bc%e3%83%89/

#include <driver/i2s.h>
#define fsample 48000
#define BLOCK_SAMPLES 64

//buffers
int rxbuf[BLOCK_SAMPLES*2], txbuf[BLOCK_SAMPLES*2];
float Lch_in[BLOCK_SAMPLES], Rch_in[BLOCK_SAMPLES];
float Lch_out[BLOCK_SAMPLES], Rch_out[BLOCK_SAMPLES];

#define MUTE 40 // MUTE control (LOW: Mute)

/*-----------------------------------------------------------------------------------------------
  Setup
-------------------------------------------------------------------------------------------------*/
void setup(void) {

  Serial.begin(115200);
  delay(50);

  pinMode(MUTE, OUTPUT);
  digitalWrite(MUTE, HIGH); // unmute

  // I2S setup ------------------------------------------------------------
  i2s_config_t i2s_config = {
    .mode =  (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX  | I2S_MODE_RX), //I2S作業モード
    .sample_rate = fsample, //I2Sサンプルレート
    .bits_per_sample = (i2s_bits_per_sample_t)32, //サンプルあたりのI2Sビット
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, //I2Sチャネルフォーマット
    .communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_STAND_I2S), //I2S通信フォーマット
    .intr_alloc_flags = 0, //割り込みを割り当てるために使用されるフラグ
    .dma_buf_count = 6, //I2S DMAバッファ数
    .dma_buf_len = BLOCK_SAMPLES*4, //I2S DMAバッファ長
    .use_apll = false, //2SはAPLLをメインI2Sクロックとして使用し、正確なクロックを取得
    .tx_desc_auto_clear = true, //データが利用できない場合にノイズを回避
    .fixed_mclk = 0, //固定MCLK出力を使用するI2S
  };
  i2s_driver_install( I2S_NUM_0, &i2s_config, 0, NULL); //I2S ドライバーをインストールして起動

  i2s_pin_config_t pin_config = {
        .bck_io_num = 42,  //BCK
        .ws_io_num = 2,    //LRC,LCK
        .data_out_num = 41, //DIN
        .data_in_num = 1    //OUT                                                  
    };
  i2s_set_pin( I2S_NUM_0, &pin_config);

}


/*-----------------------------------------------------------------------------------------------
  Signal Process Loop
-------------------------------------------------------------------------------------------------*/
void loop(void) {
  size_t readsize = 0;  
  //Input
  esp_err_t res = i2s_read(I2S_NUM_0, &rxbuf[0], BLOCK_SAMPLES*2*4, &readsize, portMAX_DELAY);
  if (res == ESP_OK && readsize==BLOCK_SAMPLES*2*4) {
    int j=0;
    for (int i=0; i<BLOCK_SAMPLES; i++) {
      Lch_in[i] = (float) rxbuf[j];
      Rch_in[i] = (float) rxbuf[j+1];
      j+=2;
    }  
   
    //-------Signal process -------------------------------
    for (int i=0; i<BLOCK_SAMPLES; i++) {  
      Lch_out[i] = Lch_in[i];
      Rch_out[i] = Rch_in[i];          
    }

    //------------------------------------------------------

    //Output
    j=0;
    for (int i=0; i<BLOCK_SAMPLES; i++) {
      txbuf[j]   = (int) Lch_out[i];
      txbuf[j+1] = (int) Rch_out[i];
      j+=2;
    }
    i2s_write( I2S_NUM_0, &txbuf[0], BLOCK_SAMPLES*2*4, &readsize, portMAX_DELAY);

  }

}

0 件のコメント:

コメントを投稿

ESP32S3 - PCM1808 > PCM5102 AF信号処理

Tj Lab「ESP32-S3 AF信号処理ボード」 I2Sによる、信号発生ソフトWaveGene→PCM1808モジュール(ADC入力)→PCM5102モジュール(DAC出力)→オシロスコープでL・R波形が再現しました 。 WaveGene信号発生ソフト 同ブログ【 WaveG...