シンセ開発①:Raspberry Pi Picoで音を鳴らす
本記事は、私が開発しているデジタルシンセサイザに関する内容の一部です。
自作デジタルシンセのまとめ記事はこちら。
Raspberry Pi Picoでシンセを作る
まとめ記事の開発のきっかけから、Raspberry Pi Picoで音を出してみることにました。
まずは、開発環境を用意します。
環境構築
Visual Studio Codeと拡張機能のPlatformIO IDEを導入します。
1. VSCodeのインストール
2. PlatformIO IDEのインストール
拡張機能からPlatformIO
で検索し、PlatformIO IDEをインストールします。
インストール完了後、必要であればVSCodeを再起動してください。
拡張機能からインストールするだけ
3. 新規プロジェクトの作成
アクティビティーバーのPlatformIOを選択し、PIO Home
->Open
でPIO Homeを表示します。
Projects
タブでプロジェクトの作成・管理ができます。
Projects
を選択し、+ Create New Project
をクリックします。
Name
にプロジェクト名、Board
はRaspberry Pi Pico、Framework
にはArduinoを選択します。
4. Arduino-Pico導入前の設定
Windowsユーザーの場合、Important steps for Windows users, before installingに記載されている通り、GitとWindowsで長いパスを有効化します。
5. platformio.iniの書き換え
Arduino-Picoを利用するために、platformio.ini
を以下のように書き換えます。
ビルド時にライブラリがインストールされます。
[env:pico]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = pico
framework = arduino
board_build.core = earlephilhower
6. Debug Probeを使う場合
Raspberry Pi Debug Probeは、UARTシリアルポートとCMSIS-DAPデバッグポートを備えたRaspberry Pi公式のデバッグプローブです。このデバッグプローブもRP2040が使われています。
このプローブを使えば、プログラムの書き込みとデバッグが簡単に行えます。
引用: https://www.raspberrypi.com/documentation/microcontrollers/debug-probe.html
Debug Probeを使う場合は以下のように2行追加します。
[env:pico]
platform = https://github.com/maxgerhardt/platform-raspberrypi.git
board = pico
framework = arduino
board_build.core = earlephilhower
+ upload_protocol = cmsis-dap
+ debug_tool = cmsis-dap
システムを考える
Raspberry Pi Pico単体でシンセを作るか、他のマイコンを組み合わせるかを考えます。
RP2040のスペック
- プロセッサ: Coretex-M0+
Arm系プロセッサを2つ搭載したデュアルコア、FPU非搭載のため浮動小数点の計算は遅い。 - クロック数: 133MHz(オーバークロック可能)
- RAM: 264kB
- IO: UART、SPI、I2C、PWM、ADCをサポート
PIOでI2S通信に対応。
GPIOピンが26本と多く、様々な通信プロトコルに対応しています。
デュアルコアなのでコア別に処理を書いたり並列処理したりできそうです。
波形生成でRAMを多く消費することを考慮し、機能別にPicoを用意します。
比較的安価なので制御用にPicoを1つ、波形生成用にPicoを2つ使います。
マスタースレーブ方式を採用
制御用のPicoから、I2C通信で波形を生成するPicoに命令を与える仕組みにします。
画像ではSPI通信をしていますが、I2Cの方が扱いやすかったので変更しています。
SPI通信の実験、データを受信するとLEDが光る
Pico Audio Packを使ってI2Sを理解する
ヘッドホン出力とライン出力があります。
接続部分がピンソケットなので、ピンヘッダを付けてブレッドボードに差し込みました。
電源はPicoのVSYSピンと接続している
プログラムを書く
以下の記事を参考に、I2Sで音声出力をするプログラムを書きました。
プログラムを実行する
Debug Probeを使う場合、ステータスバーにある矢印マークから書き込みができます。
チェックマークはビルドのみ、プラグマークはシリアルモニタを起動する。
使わない場合はまず、チェックマークをクリックしてビルドを実行します。
PicoをBOOTCELボタンを押したままPCに接続し、.pio/build/pico
にあるfirmware.uf2
を
ストレージデバイスとして認識されたPicoにドラッグ&ドロップします。
プログラムを実行すると、Audio Packから音声が出力されました。
PCM5102Aで音声出力をする
PCM5102AはTexas Instruments社が提供するステレオDACです。
- 解像度: 最大32bit
- サンプリング周波数: 最大384kHz
- PLL内蔵(外部クロック回路が不必要)
- 電源は3.3V、Picoの3V3ピンから電源供給が可能。
DAC用の回路を組む
以下のサイトを参考に、PCM5102Aを動作させるために必要な回路を組みました。
電源周りが面倒なため、オペアンプは実装しません。
音声の増幅は、プリアンプなど別の機器を使用します。
最終的に、このような回路になりました。
ここまでくるとThe 電子工作という感じがする
音を出力してみる
2機のDACから音を出力することができました。
次の記事
Discussion