MIDIのノートナンバーからCV(電圧)への変換
アナログシンセのCVはMoog以来、「Volts per octave」が標準だそうです。(参考:https://en.wikipedia.org/wiki/CV/gate)CVの電圧が1V上がると1オクターブ周波数が上がるものです。
Nucleo_DCOのMaster Frequencyは、POTで分圧した電圧をADCで読み取り、単純に周波数に変換しています。kを変換係数とすると
frequency = k * voltageで、上記Wikiの記事よるとYamaha、Korg形式の「Hz per Volt」にあたると思います。
この方式だと周波数が高くなるほど1オクターブあたりの電位差が必要になり、基本的に3.3V系や5V系で動作させている自作の音源には厳しいものになります。
「Volts per octerve」のほうが使う電位差の節約ができるし、指数カーブをもった音階に沿った電圧値になります。
CVを5V系にするか3.3V系にするか
MIDI_TO_CVをArduino+MCP4922で実装するとすれば、5V系でも3.3V系でも出力できますが、受け側のNucleo_DCOが3.3V系です。一応5VトレラントなのでCVが5V系でも壊れはしませんが3.3V以上の値がADCで読み取れません。抵抗による分圧などで5V系→3.3V系にシフトする必要があります。
CVを3.3V系にすると3.3オクターブで、5V系にすると5オクターブとれて有利ですが、多少作らなければならないものが増えるので、まずは3.3V系で作ってみようと思います。
MIDIのノートナンバーをCVに変換するロジック
「Volts per octave」方式だと、これは簡単で
CV = ( NoteNumber - BaseNoteNumber ) / 12です。BaseNoteNumberはCV=0Vとするノートナンバーです。
実際にスケッチを書いてテストすると、多少の誤差はありますがノートナンバーに対応する電圧が出力されました。
配線図
Arduinoのテストスケッチ
https://github.com/ryood/MIDI_CV_CONV/tree/master/Arduino/MIDI_CV_CONV_Test05
仕様案
「MIDI IN」はフォトカプラでMIDI信号を受け、「MIDI-THRU」にスルーします。
「Programing SW」は、「UART:RX」にMIDI信号(PullUpされている)を流したままだとArduinoに書き込めないので、それを切り替えるものです。
「DFF Latch」については「マイコンの非同期出力をデジタル回路でラッチして同期させるシミュレーション(メモ)」にあります。
GATE信号はArduinoのGPIOでドライブできると思いますが、同じ信号線でLEDをドライブするためにトランジスタ・アレイを使おうと思います。GATEのON/OFFでLEDがチカチカしたら目で見てわかるし楽しいと思いますし。
CVのLPFは、127段階しかないMIDIの値をなめらかにしたほうがいいかなという意味です。音階は離散していてもいいんですが、時定数の大きいLPFをかければポルタメント的につかえないかな~という妄想です。
メモ:
CVは0V以上の単電源波形。アクティブ・フィルタを単電源OPAMPで構成して動作するのか?パッシブフィルタ+出力バッファ?はてさて?
MIDIの音階はあまりにもトビトビなのでピッチベンドを拾って加算する?
Nucleo_DCOのファームウェアの改修が必要。
0 件のコメント:
コメントを投稿