2026年5月1日金曜日

ESP32S3 - PCM5102 サイン・ノコギリ波 DAC出力

下記サイトを参考にしてESP32-S3開発ボードI2SによるPCM5102からサイン波・ノコギリ波を出力しました。(PCM1808モジュールは未使用)   










サイン・ノコギリ波
CH1 - R  CH2 - L



















参考サイト



回路図



























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







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












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








ボードマネージャ














追加ボードマネージャー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
#include <driver/i2s.h>

#define SAMPLING_RATE 16000
#define BUFFER_SIZE 512
uint8_t sound_buffer[BUFFER_SIZE];

  // I2S 構成パラメータ指定
  i2s_port_t i2s_port = I2S_NUM_0;
  i2s_config_t i2s_config = {
    .mode =  (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX  | I2S_MODE_RX), //I2S作業モード
    .sample_rate = SAMPLING_RATE, //I2Sサンプルレート
    .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT, //サンプルあたりのI2Sビット
    .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, //I2Sチャネルフォーマット
    .communication_format = I2S_COMM_FORMAT_I2S_MSB, //I2S通信フォーマット
    .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, //割り込みを割り当てるために使用されるフラグ
    .dma_buf_count =6, //I2S DMAバッファ数
    .dma_buf_len = BUFFER_SIZE, //I2S DMAバッファ長
    .use_apll = false, //2SはAPLLをメインI2Sクロックとして使用し、正確なクロックを取得
    .tx_desc_auto_clear   = true,
    .fixed_mclk           = 0,
   
  };
  // 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                                                  
    };

void setup() {  
  Serial.begin(115200);
  i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL); //I2S 構成パラメータ指定
  i2s_set_pin(I2S_NUM_0, &pin_config);                 //I2S ピン番号指定  
  i2s_zero_dma_buffer(I2S_NUM_0);
 
  //sin波・ノコギリ波 → sound_buffer[i]
  int step = 0; //step 0~255
  for (int i = 0; i < BUFFER_SIZE; i += 8) {    
    sound_buffer[i + 3] = 127 * sin(2 * PI / 63 * step); //sin波    
    sound_buffer[i + 7] = step; //ノコギリ波
    //Serial.println(sound_buffer[i + 3]); //シリアルプロッタ
    //Serial.println(sound_buffer[i + 7]);
    step += 1;
    if (256 <= step) {
      step = 0;
    }
  }  
}  

void loop(){
 size_t transBytes;
 
 i2s_write(I2S_NUM_0,(char*)sound_buffer, BUFFER_SIZE, &transBytes, portMAX_DELAY);    
}

0 件のコメント:

コメントを投稿

ESP32S3 - PCM1808 > PCM5102 AF信号処理

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