2025年8月1日金曜日

ESP32 - AD9833信号発生器によるADC・DAC テスト

 ESP-32開発ボード制御AD9833信号発生器によるサイン波1KHz→ADC入力→内蔵DAC出力波形の確認しました。   
※AD9833信号発生器のスケッチは下記サイトを使用しました。  
・ESP32のADC(A-Dコンバータ)分解能は最大12ビット0~4095
・ESP32の内蔵DAC(D-Aコンバータ)は8ビット 0~255
GPIO25(チャネル 1) ・GPIO26(チャネル 2) 



ブロック図









参考サイト
●ESP32 で波形信号発生モジュール AD9833 を制御して サイン波 を発生させてみる

回路図















 






ESP32                        AD9833               
IO14 HSPI_SCK     ー   SCLK
IO13 HSPI_MOSI   ー   SDATA
IO12         ー   FSYNC                          
 

Esp32-devkitc-32e 開発ボード
●Esp32-devkitc-32e 開発ボード
※アマゾンの写真には技適マークがありますが、送られた製品は技適マーク無し(証明書無)





AD9833 DDS信号発生器
●AD9833 波形発生器 DDS信号発生器モジュール 0〜12.5MHz DIY 波/三角波/方形波信号生成

https://www.amazon.co.jp/dp/B07KYYR1ML?ref_=ppx_hzsearch_conn_dt_b_fed_asin_title_1














ボードマネージャ変更














【esp 32】
【バージョン3.2.0】インストール



ADC入力波形・DAC出力波形
CH1 -  ADC入力波形   CH2 - DAC出力波形













シリアルプロッタ
    adc = (adc / 2047.5) - 1.0;
    ADC信号を-1~1に変換する。(信号処理(AM・SSBなど)を行う ー 今回処理無し)
adc 信号













    audio = ((adc + 1.0) * 127.5);
 モード処理した信号を0~255範囲に変換する。
audio 信号














シリアルプロッタ使用後はスケッチをコメントアウトする。

PWM出力波形・DAC出力波形
CH1 -  PWM出力波形    CH2 - DAC出力波形
























プログラム Arduino IDE【ボード:ESP32 Dev Module
const int ADC_Pin = 32;
const int DAC_Pin = 25;
const int PWM_Pin = 26;

//AD9833信号発生器
//https://www.mgo-tec.com/blog-entry-esp32-ad9833-wave-generator-sign.html
#include <SPI.h>
const uint8_t SCLK_OLED =  14; //SCLK
const uint8_t MOSI_OLED =  13; //MOSI (Master Output Slave Input)
const uint8_t Fsync_PIN = 12; //CS (Chip Select)
const int SINE = 0b0010000000000000; //0x2000
const int TRIANGLE = 0b0010000000000010; //0x2002
const int SQUARE = 0b0010000000100000; //0x2020
const int SQUARE_half = 0b0010000000101000;
const float refFreq = 25000000.0;
SPIClass spi(HSPI);
void AD9833_SetFrequency(uint32_t frequency, int Waveform) {
  uint32_t FreqWord = (frequency * pow(2, 28)) / refFreq;
  uint16_t MSB = (uint16_t)((FreqWord & 0xFFFC000) >> 14);
  uint16_t LSB = (uint16_t)(FreqWord & 0x3FFF);
  LSB |= 0b0100000000000000; //=0x4000
  MSB |= 0b0100000000000000; //=0x4000
  Control_Resister_Write(0b0010000000000000); //制御ワード書き込み
  Control_Resister_Write(LSB);
  Control_Resister_Write(MSB);
  Control_Resister_Write(0b1100000000000000); //位相シフトはゼロ
  Control_Resister_Write(Waveform);
  }
void Control_Resister_Write(uint16_t b){
  digitalWrite(Fsync_PIN, LOW);
  spi.transfer16(b);
  digitalWrite(Fsync_PIN, HIGH);
}

 
void setup() {
  Serial.begin(115200);
  pinMode(32, INPUT);
  //ledcAttach(PWM_Pin,10000,8);
  //AD9833信号発生器
  spi.begin(SCLK_OLED, 12, MOSI_OLED, Fsync_PIN);
  spi.setFrequency(40000000);
  spi.setDataMode(SPI_MODE2);
  pinMode(Fsync_PIN, OUTPUT);
  digitalWrite(Fsync_PIN, HIGH);
  Control_Resister_Write(0b0000000100000000); //Reset
  delay(50);
  AD9833_SetFrequency(1000, SINE);  //sin波1000Hz
  //AD9833_SetFrequency(1000, TRIANGLE);    
  //AD9833_SetFrequency(1000, SQUARE);
}
 
void loop() {
  float adc = analogRead(ADC_Pin);
  adc = (adc / 2047.5) - 1.0;      //adc信号変換 -1~1
  //Serial.println(adc);        //シリアルプロッタ
  uint8_t audio = (uint8_t)((adc + 1.0) * 127.5); //audio信号変換 0~256
  //Serial.println(audio);
  //ledcWrite(PWM_Pin,audio); //pwm Audio 出力
  dacWrite(DAC_Pin,audio); //dac Audio 出力
}
 

0 件のコメント:

コメントを投稿

ESP32 SDR - DAC出力 7MHz 受信テスト

ESP32開発ボードによる、Si5351A 7MHz VFO→直交ミキサ→ADC入力→プログラム検波→内蔵DAC出力→スピーカー    SSB検波【demod = adc_I - adc_Q】による内臓DAC出力受信テストを行いました(デジタルフィルタ未使用)    ●同ブログ ...