概要
信号発生器の回路製作とソフト実装を行った。
背景と目的
前回、設計を行った。それに基づき、回路とソフトの製作を行っていく。
詳細
1. 回路
1.1 メイン基板
ESP-WROOM-32は、手持ちのDevKit-Cが余っていたので、使ってしまうことにした。
基板左端に載る小さな基板は、以下で製作した簡易レベルシフト回路
である。右上のピンフレームは、信号発生器ICAD9833モジュールが挿さる。その他は、すべて基板外に実装するため、それらとの接続コネクタ。
1.2 操作ボタン類
操作ボタン、ロータリーエンコーダ、液晶画面。それぞれ、基板との接続線を半田付け。
2. ソフト
ソースコードは以下。
2.1 インクルード
#include "LiquidCrystal_I2C.h" #include "AD9833.h" #include "RotaryEncoder.h"
LiquidCrystal_I2C.hは、
で使ったもの。AD9833.hとRotaryEncoder.hは、それぞれこの信号発生器を成り立たせるために最低限必要なものだけを実装した自作ライブラリ。
2.2 setup
ピンの入出力と、AD9833、液晶モジュール類を初期化。AD9833は、使用するピンがESP32のHSPIモードとしての標準的なものではなく、SDATAにIO12を使っているが、もちろん指定すればちゃんと動く。 また、液晶モジュールのI2Cも、ESP32標準のIO21、IO22ではなく、SDAにIO5を使っている。こちらも指定すれば問題なく動く。
2.3 loop
ロータリーエンコーダ、操作スイッチをそれぞれ順番にチェックし、必要に応じてパラメータを変更するためにAD9833と液晶モジュールに信号を送信する。割り込みを使ってもいいが、使わなくても十分成り立ったのでポーリング方式となった。
2.4 動作仕様
2.4.1 ロータリーエンコーダ
右に回すと周波数上昇、左に回すと周波数降下、ステップは現在の値のスケールに応じて変化する。例えば1-10kHzのときは100Hzごと。ロータリーエンコーダには、スイッチが付いていて、スイッチを押下すると、COARSE/FINEのモード切り替えができる。FINEでは、通常の1/10で調整できる。例えば1-10kHzのときは10Hzごと。
3. 動作確認
作製した基板とソフトを使って仮組みして動作を確認したところ、すべての機能が正しく動作することが確認できた。
まとめと今後の課題
基板、ソフトを作製し、動作確認が完了した。次回は、筐体を製作し、完成させる。