2026年7月2日木曜日

NuVCO開発スタート ― STM32でデジタルVCOを作る

はじめに

しばらくごぶさたしておりました。

Arduinoを使った ArLFO を製作して以来、しばらくシンセDIYから離れていましたが、久しぶりに新しいモジュールを作り始めることにしました。

今回のテーマは STM32を使ったデジタルVCO です。


NuVCOとは?

NuVCOは、STM32 Nucleoボードを使ったデジタルVCOです。

名前の NuNucleo の頭文字から取りました。また、"New" の意味も少し込めています。

これまでにもNucleoボードを使っていくつか音源を試作してきましたが、今回は本格的なEurorack向けVCOとして開発を進めます。

なぜデジタルVCOなのか

これまでにディスクリートVCOや3340を使ったアナログVCOをいくつか製作してきました。

アナログVCOには独特の揺らぎがあり、複数のVCOを重ねるだけでも温かく太い音になります。これはアナログならではの魅力です。

一方で、生成できる波形は比較的シンプルです。

もし、

  • SuperSawのような厚いDetune

  • デジタルシンセならではの複雑な波形

  • リアルタイムで変化するWave Morphing

こんな音をモジュラーシンセに持ち込めたら面白いのではないか。

そんな思いから、このプロジェクトを始めました。

もちろん、市販のデジタルVCOを買った方が安くて高性能でしょう。

それでも、自分で作る楽しさには抗えません。

開発目標

今回の目標はシンプルです。

  • STM32G431 + PCM5102AによるデジタルVCO

  • 16bit / 48kHzオーディオ

  • 1V/Oct入力対応

  • サイン波・三角波・ノコギリ波・矩形波

  • 将来的にはDetuneやWave Morphingも実装

デジタルならではの自由度を活かしながら、Eurorackの世界で気軽に使えるVCOを目指します。

ハードウェア

コアとなるマイコンは STM32G431 を搭載した Nucleo-32

オーディオDACには PCM5102A を使用しています。

どちらも比較的入手しやすく、性能も十分です。



基板を作る前は、ブレッドボード上でひたすら実験を繰り返していました。




現在ここまで動いています

現時点では次の機能が動作しています。

  • 正弦波

  • 三角波

  • ノコギリ波

  • 矩形波

  • Waveノブによる波形切り替え

  • Tuneノブによる周波数変更

  • 2 Voice Detune

ノコギリ波はこんな感じです。




PCM5102Aには内部デジタルフィルタが入っているため、急峻な波形では少しリンギングが見られます。

今回はあえてDACの生の出力を観察しています。このクセをどう扱うかも今後の楽しみの一つです。

2 Voice Detuneも動き始めました。

まだ完成ではありませんが、「おっ、シンセらしい音になってきた」と感じられるところまで来ています。




ソフトウェア

ソフトウェアはSTM32CubeMXとCubeIDEを使っています。

音声出力はI2S + DMA。

波形生成はDDS(位相アキュムレータ方式)で実装しました。

STM32G431にはFPUが搭載されているため、現在はWavetableを使わず浮動小数点演算でリアルタイム生成しています。

今後は処理速度や音質とのバランスを見ながら、アルゴリズムを改良していく予定です。

今後の予定

まだまだやりたいことはたくさんあります。

  • Wave Morphing

  • PolyBLEPによるアンチエイリアス

  • 1V/Octキャリブレーション

  • Voice数の切り替え

  • Proto-B基板での評価

デジタルVCOならではの自由度を活かして、少しずつ育てていこうと思っています。

おわりに

ようやく「音が出る」段階までたどり着きました。

ここからは音質や演奏性を磨きながら、本格的なEurorackモジュールへ仕上げていきます。

今後はDDSの実装やPolyBLEP、Detuneアルゴリズム、1V/Octの調整など、開発の過程も順番に紹介していく予定です。

お楽しみに。


USER SWで1 Voice、2 Voice Detune、3 Voice Detuneを切り替えた様子を動画にしました。Detune POTを回したときの音の変化も確認できます。


2025年2月26日水曜日

ArLFO Ver.1.2 BOOTHに出品しました。

 ArduinoとSPI DACを使ったArLFOの基板をBOOTHに出品しています。

こんなんなんぼあってもいいですからね。ぜひご検討ください。

https://pnpn-mfg.booth.pm/items/6591825




2025年2月12日水曜日

ArLFO Ver.1.2 Arduino(ATMega328P)とSPI DAC(MCP4921)を使ったLFOの製作

以前、テストしたArLFOのEurorackモジュールを製作しました。

はんだ付けしている様子をYoutubeにアップしてますので参考にしてください。

Arduinoのスケッチを書き込んだATMega328PとSPI DACのMCP4921を使ったLFOです。12bit DACでサンプリング周波数25kHzで動作させています。

オーディオ用DACに比べて低ビット、低レートですが、CV(モジュレーション信号)なので実用上問題ありません。MIDIが8bitデータ、分解能が1ms程度であることを考えるとむしろハイスペックと言えるかも知れません。また、出力段に4次多重帰還ローバス・フィルタを設けて量子化歪(信号波形のガタガタ)を低減しています。

ファームウェアはArduinoのスケッチなのでAVRライターなどは不要で、Arduino IDEからUSB-Serial変換モジュールを使ってプログラミング出来ます。デフォルトのファームウェアは性能を上げるために直接レジスタを操作しているので、書き換える際はAVRの知識が多少あった方がいいかもしれません。

ファームウェアはGithubで公開しています。

実装済基板

パネルに取付

出力波形


出力は以下6種類をプッシュスイッチで切り替えます。

  • サイン波
  • 三角波
  • 矩形波(パルス幅可変)
  • ノコギリ波(上昇)
  • ノコギリ波(下降)
  • サンプル&ホールド

サイン波

三角波

矩形波(パルス幅可変)

ノコギリ波(上昇)

ノコギリ波(下降)

サンプル&ホールド

Dual波形とSingle波形


ArLFOには2系統の出力があります。Singleは0V~+5V、Dualは-5V~+5Vです。受け側の入力電圧範囲に合わせて利用できます。


CH1:Dual CH2:Single

ローパス・フィルタ


DACの出力に4次多重帰還LPFを入れて量子化歪を除去しています。またLPFを掛けないDACの信号も出力できます。


CH1:LPF通過後 CH2:LPF通過前

LPFはカットオフ周波数6.25kHz、ベッセル特性で設計しています。LTSpiceでのシミュレーションは以下の通りです。

シミュレーション回路図

AC解析

過渡解析

1kHz/2Vp-p矩形波

ベッセル特性はフィルターの切れはいまいちですが、過渡特性が良く信号波形のリプルが少なく素直な特性になります。

出力周波数


出力周波数はLとHをトグルスイッチで切り替えます。

  • L:  0Hz~5Hz
  • H:  0Hz~50Hz

Hにすると可聴帯域の信号も出力できるので実際に耳で聞くこともできます。振幅が大きいので注意してください。最大周波数はスケッチ内の定数で変更できます。

回路について


回路図

回路図(アクティブフィルタ)

MCP4921の出力を直接アクティブフィルタに入力すると十分にドライブ出来ず、波形の一部がクリップしてしまいました。長年MCP492Xを使っているのですが、いつも何の気なしに出力にボルテージフォロワを入れていたので気づきませんでした。


MCP4921の出力を直接アクティブフィルタに入力すると波形がクリップする

このため、実際の回路ではDACの後段にボルテージフォロワによるバッファ(U3B)を入れています。前出のオシロの波形がクリップしていないのをご確認ください。

Q1の2SC1815はBLランクにします。YランクやGRランクだと増幅率が小さくインジケータLEDの明るさが暗く点滅するようになると思います。正規品の2SC1815は入手困難なのでUNISONIC製などセカンドソース品で十分です。

抵抗は、手持ちの関係で一部金属皮膜を使っていますが、今回の製作はすべてカーボンで十分です。また、フィルムコンデンサもマイラで大丈夫だと思います。

ファームウェアの書き込み


あらかじめATMega328PにArduinoのBootloaderを書き込んでおきます。


ファームウェアはGithubで公開しています。

ファームウェアに書き込むにはUSB-Serial変換モジュールをArLFOのJ7(ARDUINO_ISP)と接続します。

配線表

QIコネクタを使ってハーネスを作っておくと良いでしょう。


※光の加減でコネクタが白く映っていますが、黒いQIコネクタのハウジングです。

USB-Serial変換モジュールは、私はAliExpressのノンブランド品を使用しています。DTR、TXD、RXD、GNDの端子が出ていて、5V動作するものであれば大丈夫だと思います。FT232RLとCH340使用のもので動作確認しています。

ファームウェア書き込み手順

  1. USB-Serial変換モジュールをArLFOに接続
  2. USB-Serial変換モジュールをPCにUSBで接続
  3. ArLFOの電源投入
  4. Arduino IDEを起動
  5. Tools - Board - Arduino Uno
  6. Tools - Port - <USB-Serial変換モジュールのポート>

あとは普通のArudinoと同じようにスケッチをUploadします。