2018年12月30日日曜日

MIX0401のジャックをRCAジャックから3.5φミニジャックに変更

MIX0401が不調で、ノイズの原因はこれかもしれません。

入出力にRCAジャックを使っていましたが、ロックタイトを使ってもゆるゆるでプラグの抜き差しが不安です。いきなり音がでなくなることもあります。

RCAは、据え置きオーディオなどずっとつないでいる場合はそれなりに信頼性が高いと思いますが、頻繁に抜き差しする音楽機材としての用途には不向きなのかもしれません。

ギターやキーボードなどでは6.3φのプラグが標準ですが、MIX0401の筐体に収めるには少し大きすぎます。

今やモジュラーシンセの標準と言ってもいい、DoepferのEurorackは基本的に3.5φのミニジャック/プラグを使っています。これを踏襲してMIX0401も3.5φのミニジャックを使うことにしました。

基板を剥がして、既存のジャックを取り外し、ミニジャックを取り付け


配線後、基板を両面テープでPOTの裏に貼り付け


ミニジャックに変更したバックパネル


RCAジャックのゆるみ止めのロックタイト243をつかっていたので、取り外しに苦労しました。一応「中強度」となっていますがそうは簡単にはナットが回りません。

ソケットレンチやらモンキーレンチやらラジオペンチやらいろいろ使って無理やり取り外したので、ケースが傷だらけになってしまいました。



3.5φのケーブルを何本か作らないといけないのですが、年末年始で部品屋さんの通販がお休みなので、本格的なテストは年明け以降になります。

ずっと前に作った「ミニ・ミキサー」にDASS01KIK01をつないでみると、なんと気になるノイズなく動作しました。


プラケースなのに不思議なものです。もしかするとプラの方がケースへの接地がややこしくなくていいのかも?

とりあえず、これでMIDI_CV_CONVの実験をしたいと思います。

非反転増幅回路の増幅率を決めるPOTの配線


回路図

回路図のIC2A周りの非反転増幅回路で、JP2につないだPOT(レオスタット)で増幅率を可変するようにしていますが、このつなぎ方は良くないそうです。


上図の「1) NG」の接続だとR2のワイパーの接触部分に電流が流れるため、経年変化による劣化に弱いようです。←確かにガリが目立つ気もします。

「2) OK」のように接続するとワイパーに電流が流れないため(オペアンプの入力はインピーダンスが高い)、接触抵抗が無視できます。

「2) OK」の場合は、R3のワイパーを左いっぱいに回すと増幅率が無限大になり(Av = R3 / 0)、出力がクリップして出力振幅いっぱいの矩形波になってしまうので、入力抵抗を入れる必要がありますが。

もしMIX0401を参考にされる場合はご注意ください。

上記については「新・低周波/高周波回路設計マニュアル」で取り上げられています。

2018年12月28日金曜日

MIDI-CV Converter MIDI_CV_CONVの構想 その3

下図のように接続してMIDI_CV_CONVをテストしました。


ありあわせのケーブルで途中で変換コネクタを使ったりして接続すると、おそらくグランドループに起因すると思われるノイズが出て途方にくれていましたが、専用にケーブルを作り直したりしているうちにノイズが気にならなくなりました。

やったことは、「ケーブルの途中で変換コネクタを使わなくする」ことと「オーディオ信号が通るケーブルは短くする」ことぐらいです。短くすると言っても2~3メーターのケーブルもあります。

ケーブルのグランド線を切ったりしてグランド線のループを切ると改善することもあるらしいですが、そういうことはやっていません。

このあたりのノイズは、苦手な電磁誘導が原因らしいので、後々経験を積んで理屈と照らし合わせて行きたいと思います。

CV/GATE信号を同期させるラッチ


MIDIチャンネルごとのGATEのずれを、Dフリップフロップで吸収することを考えて実験しました。

接続図


同期の方法として

1) ArduinoからGATE信号を出力してDフリップフロップが4回路入っている74HC175に入力

2) ArduinoからCV値をSPI経由で出力してDACのMCP4922に入力

3) Arduinoからラッチ信号を出力して(接続図のArduinoのD9から出ている青色のケーブル)、74HC175とMCP4922を同期させて出力

という手順を考えたのですが、うまくいきませんでした。

スッキリと説明できないのですが、MIDIの通信速度が遅すぎてチャンネルごとのGATE/CVを同期させようと思うと数ミリ~数10ミリ秒キザミの精度になってしまいます。

メリットがはっきりしないので、Dフリップフロップによる同期は今回は保留します。

CV信号にかけるLPF


接続図のようにMCP4922の出力にパッシブのRLCローパスフィルタ(2次)をかけました。出力をドライブするために単電源OPAMPのNJM3404のボルテージフォロワを後段に入れています。

コンデンサーの容量を大きくすると波形がなめらかになってポルタメントがかかっているようになるのですが、定数を決めるのが難しいのでLPFも保留します。

トランジスタアレイによるLEDのドライブ


GATE信号を使ってLEDを発光させるためにトランジスタアレイのTD62003を使いました。これは入れておいた方が良さそうです。

メモ:


ノイズの改善と今回実験した回路の因果関係がはっきりしないので、もう少しテストする予定です。

2018年12月21日金曜日

MIDI-CV Converter MIDI_CV_CONVの構想 その2

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のファームウェアの改修が必要。

2018年12月18日火曜日

Nucleo DCO 出音のチェック

1kHzサイン波


ADC On

ADC Off

ADC読み取りを抑止した場合(ADC Off)特に低域の歪が改善されます。ADC読み取りを行うとPOTによる分圧の読み取り値がふらつくためだろうと思います。以降ADC Offで測定しました。

ADC読み取りを抑止した場合、可聴帯域ではTHD≒0.04%、THD+N≒0.17%程度です。整数倍以外の細かな歪がいろいろ出ていますが、12bit DACのためでしょうか。

POTで周波数を設定するため、きっちりした周波数は指定できませんが、まずまずきれいな波形が出力されていると思います。

10kHzサイン波


30kHz付近に2つのピークがあります。上の方はナイキスト周波数(62.5kHz / 2 = 31.25kHz)で、下の方は3次高調波歪(10kHz * 3 = 30kHz)でしょうか。

オシロで測定


1kHzサイン波

FFT (~10kHz)

FFT (~1.25MHz)

1.25MHzまで目立ったピークは出ていません。

10kHzサイン波

FFT (~100kHz)

サンプリングレートの62.5kHz付近に歪が残っていますが、-40dB程度です。

<追記:2019.01.20>

よく見るとピークは52kHz付近です。サンプリング周波数が62.5kHzで基本波が10kHzなので、62.5kHz - 10kHz = 52.5kHzの折り返し歪でしょうか。

D/A変換して使える帯域は、サンプリング周波数の1/2(ナイキスト周波数)以下なので、オーディオ的に考えると31.25kHz以下は十分に減衰させる必要がありそうです。

まあ、でも今回は12bit DACなので可聴帯域外の歪は、「味」として深く考えないことにします。

</追記>

FFT (~1.25MHz)

各種波形


100Hzサイン波

100Hz三角波

100Hzノコギリ波(上昇)

100Hzノコギリ波(下降)

100Hz矩形波(デューティ50%)

矩形波のTop / Bottomが斜めになっているのは、Audio I/Fの入力のACカップリングの影響だと思います。

100Hz矩形波(デューティ10%)

100Hz矩形波(デューティ90%)

矩形波のデューティ比を変えると、スペクトルがコム・フィルターをかけたみたいになるんですね~。

ノイズ

そのうちに基本波形以外の波形も増やしてみようと思います。

2018年12月13日木曜日

マイコンの非同期出力をデジタル回路でラッチして同期させるシミュレーション(メモ)

MIDI_CV_CONVの実験でArduinoからCV、GATE信号を出力していますが、チャンネルごとに1ms以上のずれがあります。

MIDIの通信速度は「31.25Kbps (±1%) の非同期方式 https://ja.wikipedia.org/wiki/MIDI」ということなので、1バイト(8bit)送受信するのに最低でも256usかかります。(1 / 31.25Kbps = 32us/bit で 32us/bit * 8bit = 256us)

→なんで「31.25Kbps」という中途半端な通信レートにしたのかも逆数をとると256という切りの良い数値になるのでわかる?

Arduinoなどマイコンで逐次処理すると、MIDIメッセージを解釈してCVやGATEとして出力すると、1処理ごとに、どうしても256us以上のずれが発生することになります。

1MHz駆動のマイコンなら1クロックで1usかかるので、大雑把に考えてMIDI->GATE変換に1ms以上のずれが発生するのはしかたないと思います。

1msというと短い時間のようですが、逆数をとると1kHzでもろに可聴帯域なのでそれほど気軽には考えられません。

実際にやるかどうかはわかりませんが、CV/GATEのチャンネルごとの時間的なずれをデジタル回路で同期させることを考え、LTSpiceでシミュレーションしました。

デジタル回路なら素子の特性によるので、マイクロ秒~ナノ秒(1MHz~1GHz)オーダーに抑えられると思います。

CV信号を発生させるDACのMCP4922は「LDAC」というラッチ端子があるので、GATE信号とまとめて同期できると思います。

シミュレーション回路図




Dフリップフロップを4つ並べて単一のクロック信号(CLK)で同期させる回路です。パラレル入力・パラレル出力のシフトレジスタということでPIPO Shift Registerというそうです。

参考「The Shift Register https://www.electronics-tutorials.ws/sequential/seq_5.html

この回路でマイコンの出力の時間的なズレを吸収し、CV/GATE信号を同期できます。

メモ:


CLK信号(黄色)がL->Hするとき入力(水色)が評価され、出力(緑色)される。

CLKがLの間にCV/GATE信号をマイコンから出力し、CLKをHにすると同期して信号が出力される。

レイテンシー(同期させるまでの待ち時間)が発生するので要注意。

周波数として考えると、CLKは信号本体の周波数の2倍以上は必要。

CLKが遅い場合はまともに出力されない↓



2018年12月8日土曜日

MIDI-CV Converter MIDI_CV_CONVの構想

BSM02でシーケンサー+D/A混在シンセを作りましたが、打ち込んだデーターを外に取り出す仕組みは作っていないので、Nucleo_DCOに音階を与えるために流用するのは少しめんどうです。BSM02のハードウェア/ソフトウェアに手を入れる必要があるので、思いつきで崩してしまうのは抵抗があります。

ひとまずは、パソコン上のDAWを使ってMIDI信号を出力し、CV/GATE信号に変換する、MIDI-CVコンバーターを作ってみることにしました。

作戦


ArduinoとmbedのMIDI Libraryを簡単に試したことがありますが(https://dad8893.blogspot.com/search/label/MIDI%20Library)、サイズの小さいNucleo F303K8を使ってmbedでやってみると、どうもMIDIメッセージを読みこぼすようです。

Nucleo-F303K8は12bit DACが3系統内蔵されていて、性能もCortex-M4でそこそこ高スペックなので使ってみたかったのですが、まずはArduinoでやってみることにしました。

Arduino NANOかArduino Pro Miniを使うつもりです。

想定している使用例

ArduinoにSPI/DACのMCP4922を接続し、アナログ値を出力してCVとします。MCP4922は2ch DACなのでうまく行けば2ch分CVを出力できます。

Nucleo_DCOは3.3V系(5Vトレラント)なのでCVの信号レベルは0V~3.3Vとします。

「DASS01」(「ASS01」という名前にしようと思ってましたが、「DASS01」に変更します)はアナログ系でCV信号にもう少し振幅が欲しいので「DASS01」内の「Amp」で増幅します。増幅率は「Mod Level」POTで可変します。

GATE信号はGPIOから出力します。「Arduino_EG」のプロセッサーは5V駆動のArduino Pro Miniなので入力するGATE信号レベルは5VでOKです。「KIK01」はNucleo-F446RE、「BSM02」はNucleo-F401REでSyncIn(GATEの立ち上がりで評価)は3.3V系ですが5Vトレラントなのでこれも5VでOKです。

開発環境


ArduinoでMIDI Libraryを使うとデフォルトではハードウェアUART(D0, D1)を使うので、デバッグ用にArduinoのSerialクラスが使えません。簡単なメッセージの表示しかできませんが、I2C接続のキャラクタLCD(秋月のAE-AQM1602A)を使うことにしました。

ブレッドボード配線図

※Arduinoで書き込むときは、RXの配線を抜く。


※MCP4922はまだ接続していません。

Arduinoのスケッチ


AE-AQM1602Aのライブラリは「I2CLiquidCrystal-1.5 https://n.mtng.org/ele/arduino/i2c.html」を使いました。

<MIDI_Display_Message_I2C_LCD_Gate.ino>

#include <Wire.h>
#include <I2CLiquidCrystal.h>
#include <MIDI.h>

#define LCD_TRACE   (0)
#define PIN_CHECK   (1)
#define TITLE_STR1  ("MIDI to GATE    ")
#define TITLE_STR2  ("20181204        ")

// Pin assign
const int GateOutPin1 = 2;
const int GateOutPin2 = 3;
const int GateOutPin3 = 4;
const int GateOutPin4 = 5;
const int GateOutPin5 = 6;
const int GateOutPin6 = 7;

const int CheckPin1   = 8;

// MIDI
MIDI_CREATE_DEFAULT_INSTANCE();

// I2C LCD
#if (LCD_TRACE)
I2CLiquidCrystal lcd(32, (bool)true);
#endif

// MIDI -------------------------------------------------------------------------

#if (LCD_TRACE)
void printNoteOnOff(const char* type, byte inChannel, byte inNote, byte inVelocity)
{
  lcd.setCursor(0, 1);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print(type);
  lcd.print(' ');
  lcd.print(inChannel);
  lcd.print(' ');
  lcd.print(inNote);
  lcd.print(' ');
  lcd.print(inVelocity);
}
#endif

void handleNoteOn(byte inChannel, byte inNote, byte inVelocity)
{
  digitalWrite(GateOutPin1, HIGH);
#if (LCD_TRACE)
  printNoteOnOff("On", inChannel, inNote, inVelocity);
#endif
}

void handleNoteOff(byte inChannel, byte inNote, byte inVelocity)
{
  digitalWrite(GateOutPin1, LOW);
#if (LCD_TRACE)
  printNoteOnOff("Off", inChannel, inNote, inVelocity);
#endif
}

// -----------------------------------------------------------------------------

void setup()
{
  pinMode(GateOutPin1, OUTPUT);
  pinMode(GateOutPin2, OUTPUT);
  pinMode(GateOutPin3, OUTPUT);
  pinMode(GateOutPin4, OUTPUT);
  pinMode(GateOutPin5, OUTPUT);
  pinMode(GateOutPin6, OUTPUT);
  pinMode(CheckPin1,   OUTPUT);

  MIDI.setHandleNoteOn(handleNoteOn);
  MIDI.setHandleNoteOff(handleNoteOff);
  MIDI.begin(MIDI_CHANNEL_OMNI);

#if (LCD_TRACE)
  lcd.begin(16, 2);
  lcd.print(TITLE_STR1);
  lcd.setCursor(0, 1);
  lcd.print(TITLE_STR2);
  delay(2000);
#endif
}

void loop()
{
#if (PIN_CHECK)
  digitalWrite(CheckPin1, HIGH);
#endif

  if (MIDI.read()) {

    // Display Raw Midi Message

    byte type    = MIDI.getType();
    byte channel = MIDI.getChannel();
    byte data1   = MIDI.getData1();
    byte data2   = MIDI.getData2();

#if (LCD_TRACE)
    lcd.setCursor(0, 0);
    lcd.print("                ");
    lcd.setCursor(0, 0);
    lcd.print(type, HEX);
    lcd.print(' ');
    lcd.print(channel, HEX);
    lcd.print(' ');
    lcd.print(data1, HEX);
    lcd.print(' ');
    lcd.print(data2, HEX);
#endif
  }
#if (PIN_CHECK)
  digitalWrite(CheckPin1, LOW);
#endif
}

メモ:


LCD_TRACEを有効化(1)するとMIDIメッセージを読みこぼす。

中華製のArduino NANOはプロセッサでATMega328P(Old bootloder)を指定する必要がある場合がある。

メインループの処理時間は92kHzぐらいで変わらない?

DACからの出力にはLPFを入れる。Nucleo_DCOはADCにCV信号を入力するので注意。

厳密にするならDACやGPIOからの信号はデジタル回路でラッチをかけて同期させたいけど、そこまでは必要ないか・・・

2018年12月7日金曜日

STM32CubeMX + Atollic TRUEStudioでLチカ

STM32のネイティブ環境でLチカを動作させられたので、メモです。いろいろ試行錯誤しているのでこの手順通りで動作できるかどうかはわかりません。

STM32の統合開発環境には、

  • IAR Embedded Workbench(有償)
  • ARM MDK-ARM(有償)
  • AC6 SW4STM32(無償)
  • Atollic TRUEStudio(無償)

などがありますが、今回はAtollic TRUEStudioを使いました。パソコンはWindows10で、ターゲットボードはNucleo-F446REです。

参考にした記事
「楽しくやろう。」さんの「TrueSTUDIO fo STM32を動かしてみた https://blog.boochow.com/article/456508260.html
「HappyTech Blog」さんの「STM32CubeMXの使い方 http://happytech.jp/wordpress/2017/06/05/how-to-use-stm32cubemx/

TrueSTUDIOのインストール


https://atollic.com/truestudio/よりAtollic_TrueSTUDIO_for_STM32_windows_x86_v9.0.1_20180420-1214.exeを入手してインストール。

Quickstart guideを一読


EclipseベースのIDEを使うのは10年ぶり?ぐらいです。[ヘルプ] - [Information Center]より「Quickstart Guide」を一読してなんとなく操作法を確認しました。パースペクティブの切り替えなど少しクセがあります。

新規プロジェクトの作成


[新規] - [C++ Project] で現れる[C++ Project]ダイアログでプロジェクト名を指定。

[Project type:]を[Embedded C++ Project]を指定。

[ターゲット]で[Boards]-[NUCLEO_F446RE]を指定。

[デバッグプローブ]で[ST-LINK]を指定。

以上でカウンターをインクリメントするプロジェクトが作成され、コンパイル&デバッグできますが、これだけでは周辺機能のドライバが何もありません。

STM32CubeMX & STM32Cubeのインストール


STM32CubeはSTM32の開発を行うためのHALその他もろもろのソフトウェアを集めたもので、F3とかF4などのSTM32のシリーズごとに別れています。STM32CubeMXはSTM32Cubeを使ったプログラムに必要な初期化コードを生成するグラフィカルなツールです。

まずは、STM32CubeMXをインストールします。途中で「Java Runtime Enviroment」のインストールが促され、インストールしました。

STMicroの日本語の記事
https://www.stmcu.jp/design/sw_dev/pc_soft/52798/?gclid=EAIaIQobChMI-P6p9qfD3QIVQamWCh3FhQNcEAAYASAAEgIFxvD_BwE

インストールファイルはSTMicroの本家サイトhttps://www.st.com/ja/development-tools/stm32cubemx.html)から入手しました。

STM32CubeMXのスタンドアロン版の[Help]で「UM1718 User manual」が参照でき、これに従って以降の設定を行いました。

4.3  Installing STM32CubeMX plug-in version

プラグインバージョンのインストールです。TRUEStudio上でCubeMXを利用できるようになります。

4.5.2  Installing STM32 MCU packages

STM32Cubeのインストールです。NucleoF446REを使うので、「STM32F4 1.21.0」をインストールしました。

動作テスト


STM32F4Discovery & Keilの記事ですが、
「@gkmaro634」さんの「STM32CubeMXでSTM32F4Discoveryを動かす1~Lチカ編~ (https://qiita.com/gkmaro634/items/7b2ce4f72615c96f41d3)」を参考にしてLチカさせました。

CubeMXでBoardを指定してデフォルトの設定のまま初期化コードをを生成するものです。とりあえず動かしてみるにはちょうどいいと思います。

CubeMXの[New Project] - [Board Selector]で[Nucleo-F446RE]を選択、デフォルト・モードで初期化。

[Project] - [Settings...]で[Project Name]、[Project Location]を設定。

[Toolchain / IDE]で[TrueSTUDIO]を選択。

[Project] - [Generate Code]でコードを生成。

以上でTRUEStudio用の雛形プロジェクトが生成されます。コード生成後あらわれるダイアログで、「Open Project」を選択するとエラーメッセージが表示されましたが、TrueSTUDIOで生成されたプロジェクトを開けば大丈夫でした。

プロジェクト内のmain.cppのmain()関数内のwhile()ループ内にLチカさせるコードを追加します。


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
   HAL_Delay(500);
   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
   HAL_Delay(500);
   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

[実行] - [デバッグ]で、PCに接続したNucleoにプログラムが書き込まれ、LEDがチカチカします。

HAL_GPIO_WritePin()、HAL_Delay()などはSTM32CubeのAPIで、ドキュメントを参照しながら習得する必要があります。

参考になりそうなドキュメント:
UM1725 Description of STM32F4 HAL and LL drivers
UM1730 Getting started with STM32CuberF4 MCU Package for STM32F4 Series
STM32Cube ファームウエア テクニカル・プレゼンテーション STM32Cube_training_JPN_rev1.pdf
STM32F4 シリーズ テクニカルトレーニング STM32F40x_training_JPN_rev1.pdf
Best-practices / FAQ: TrueSTUDIO + STM32CubeMx http://blog.atollic.com/best-practices-faq-truestudio-stm32cubemx

STM32CubeF4のExample:
<ドキュメントフォルダ>\STM32Cube\Repository\STM32Cube_FW_F4_V1.21.0\Projects\

2018年12月1日土曜日

ASS01 仮組み

TLF01 + Antilog-MM + Dual_OTA_VCA を組み合わせてASS01(アナログ・シンセ・システムの略)と名付けて、仮組みしました。

ASSはあんまりいい意味の言葉ではないですが、気にしません。

<追記: 2018.12.07>

デジタル系システムからの入力もあるので、思い直して、「Digital-Analog Synth System」という意味で「DASS01」とします。

</追記>


電源もいずれ作るつもりですが、とりあえず単3×6の9V電池ボックスを2つ使って±9V電源としました。



WaveInはNucleo_DCOから、EnvelopeはArduino_EGから入力しています。

左上のブレッドボードはArduino_EGに入力するGate信号を発生させるものです。Arduino NANOでとりあえず組んでいます。MIDI-CVコンバーターを作って置き換えるつもりです。

MoogerFoogerをリスペクトして個別筐体でいろいろ作ってきましたが、機材の置き場所に苦慮しています。そろそろEurorackみたいにラック・マウントすることも考えるべきか・・・

2018年11月27日火曜日

Nucleo DCO 一旦できたことにする。

筐体を作りました。

今回は枠組みに奮発してヒノキを使いました。スギでもいいんですが、ホムセンで売ってるスギだと板厚が12mmが最薄で、ヒノキは9mmからあったのでヒノキにしました。


910x9x90mmで400円でした。組み上げは木工用ボンドだけにしました。

天板も奮発してアルミ板にしました。200mmx300mmx1mmで513円でした。アルミ板の切断はこの動画を参考にしました。


上下に当てる板はホムセンの端材(大きくても100円もしない)を買ってきて、実際やってみるとペコリときれいに切断できました。カッターもこの際奮発してでかいサイズのH型を購入して使いました。



丸穴の穿孔はドリルで一発ですが、OLEDの表示窓の角穴はまたもや妥協しました(^q^;



量産することがあればその時は、専門の業者さんに頼もうと思います。


パーツをあてがって木工用ボンドで張り合わせて、パンツのゴムで圧をかけたのですが、アルミ板の寸法が少し大きかったようで背面のハリのパーツが接着できませんでした。


裏側のハリのパーツだけクランプで圧をかけて再度接着。板材を傷めないためにはクランプの間に当て板を入れたほうがいいと思いますが、クランプの広げる幅が限界だったので養生テープのみの保護となりました。

基板の配置(底板

操作パネル(天板)

操作パネル(天板裏側

正直空中配線は地獄です。老眼で対象物にピントが合わないので(老眼鏡やルーペを駆使してますが)ほぼほぼ勘にたよってはんだ付けするしかありません。




配線

ケーブルの長さはマチマチですが、なんとか結合できました。


メモ:


入出力端子をつける裏板を製作。←プラだとベコベコするので薄いベニア板?

ヒノキの木枠を塗装する。

メンテしやすい範囲で配線材の長さを揃える。

天板につけてる木ネジは皿ネジはおさまりが悪いので、普通の丸頭のタイプがあるかな?

天板のアルミが傷だらけ。研磨する?