2017年12月28日木曜日

KIK01 LED基板でけた

回路図

R5の抵抗値を変更。

ここはNucleoのデジタル入力(DigitalIn)でPullUpして使うので、本来はR5は必要ない。ただ、ファームウェアのバグや誤配線とうでNucleoの出力につないでしまった場合、出力ピンがGNDに短絡するのを避けるために入れている。

羹に懲りて膾を吹くかもしれませんが(^q^;

出力電流は絶対定格で25mAなので3.3V / 25mA = 132Ωで、少し大きめに設定した。あんまり大きくしすぎるとR5の電圧降下が大きくなってロジックレベルが問題となる。

基板図

部品面

ハンダ面

KIK01に接続

2017年12月25日月曜日

KIK01 LED基板の設計

Power LED(緑): 通常時:常時点灯 電圧低下:ゆっくり点滅 過電圧:速く点滅
Beat LED(赤): ビートに合わせて点滅
SyncIn LED(黄): SyncIn信号に合わせて点滅
SyncOut LED(青): SyncOut信号に合わせて点滅(トグルスイッチで点滅をON/OFF)

AutoRun SW: 有効化するとSyncIn信号がなくても設定したテンポで再生

mbed repository:
https://os.mbed.com/users/ryood/code/KIK01_Proto08/ Revision:37

LEDの点滅にはmbedのTimeOutクラス(ワンショットタイマー)を利用した。


テスト用ブレッドボード配線図

回路図

基板図

部品並べ

2017年12月23日土曜日

KIK01 処理タイミングの計測

mbed Repository:
https://os.mbed.com/users/ryood/code/KIK01_Proto08/ Revision:36

波形更新


ch1:D14(波形更新の間隔) ch2:D15(DCOへのSPI出力)

UART_TRACE、POTx8 PizzaBoxとPOTx16 LunchBoxからのパラメータ読み込みは抑止している。

ch1のD14はファームウェアでDout1と定義している。

void update()
{
#if (PIN_CHECK)
    Dout1 = 1;
#endif

    // Output Sync Signal per steps
    if (ticks % stepLength == 0) {
        SyncOut = 1;
#if (LED_SYNCOUT_BLINK)
        LedSyncOut = 1;
        timeoutLedSyncOut.attach(&ledSyncOutAtTimeout, LED_SYNCOUT_BLINK_CYCLE);        
#endif
    }

    // set envelope parameters
    envelopeAmplitude.setParam(amplitudeParam);
    envelopeFrequency.setParam(frequencyParam);
    envelopeNoiseAmplitude.setParam(noiseAmplitudeParam);

    frequency = envelopeFrequency.getAmplitude(ticks);
    amplitude = envelopeAmplitude.getAmplitude(ticks);
    noiseAmplitude = envelopeNoiseAmplitude.getAmplitude(ticks); 
    
    DcoSetFrequency(frequency);
    DcaSetAmplitude(1, amplitude);  // DCO
    DcaSetAmplitude(2, noiseAmplitude);  // NOS01

    ticks++;
    if (ticks >= envelopeLength) {
        ticks = 0;
        LedBeat = 1;
        timeoutLedBeat.attach(&ledBeatAtTimeout, LED_BEAT_BLINK_CYCLE);
    }

    // Output SyncSignal
    SyncOut = 0;

#if (PIN_CHECK)
    Dout1 = 0;
#endif
}

32kHzで割り込みを発生させてupdate()を呼び出しているので、ch1の矩形波の周波数は32kHzになるが一部処理が引き伸ばされている。この割り込みタイミングの揺れは波形の周波数には関係なく(波形本体はAD8402 WeinBridge DCOとNOS01でアナログ回路で発生させている)、DCOとVCAに送っているエンベロープのサンプリング・ポイントの揺れになるので、実用上はあまり気にしなくていい。

ただ、ちょっと気持ち悪いので原因が何か?できる範囲で調べてみるつもり。

ch2のD15はファームウェアでDout2と定義している。


void AD8402Write(uint8_t address, uint8_t value)
{
#if (PIN_CHECK)
    Dout2 = 1;
#endif    

    AD8402Cs = 0;
    SpiMAD8402.write(address);
    SpiMAD8402.write(value);
    AD8402Cs = 1;
    wait_us(1);

#if (PIN_CHECK)
    Dout2 = 0;
#endif
}

こちらはさらにタイミングが揺れているが、同じくDCOの周波数変調のエンベロープのサンプリング・ポイントの揺れになる。

WeinBridge回路の2個のRを同時に設定しているので2回H/Lされている。

波形更新(拡大)

ch1:D14(波形更新の間隔) ch2:D15(DCOへのSPI出力)

割り込みの周波数は32kHzなので、周期は31.25us。

オシロの波形から大体の処理時間を表にすると

通常時

割り込みが引き伸ばされた場合

前処理は予め読み取っていたパラメータをEnvelopeARクラスのオブジェクトへの代入、エンベロープ波形の生成を行っている。後処理ではエンベロープ波形を内蔵DACから出力している。

以前も「KIK01 SPI制御VCAと演算による振幅変調の比較」でSPI通信の処理時間を測ってみたが、このときはSPI DACのMCP4922へのSPI送信で、今回はAD8402へのSPI送信なので条件が異なる。

POTx8 LunchBoxとPOTx16 PizzaBoxからのパラメータの読み取り


今度は波形更新処理を抑止して、パラメータ読み取りの処理時間を計測した。


ch1:D14(波形更新の間隔) ch2:D2(パラメータの読み取り)

パラメータの読み取りはmain()関数のメインループ内で1msのThread::wait()をかけて呼び出しているので周波数は1kHzになる。

パラメータ読み取りの処理時間は468us。

波形更新処理を有効化すると


ch1:D14(波形更新の間隔) ch2:D2(パラメータの読み取り)

Thread::wait()なので、タイマー割り込み処理によってかなり引き伸ばされて1/166.4Hz≒6msごとの処理になっている。ch2がLの期間がThread::wait()で待ちの状態で1msより少し少ない。

メモ:


純粋にプログラミングだけ考えるとまだまだ追い込めそうですが、一旦保留。

2017年12月20日水曜日

KIK01 Nucreo F446REの信号波形


KIK01 Proto08をNucleo F446REに書き込んで信号波形を測定した。ファームウェアのUART_TRACE、PIN_CHECKは共に有効化。

デバイスはPOTx8 LunchBoxPOTx16 PizzaBoxのみ接続。

mbed Repository:
https://os.mbed.com/users/ryood/code/KIK01_Proto08/ Revision:34

SPI2: AD8402 WeinBridge DCO


MOSI

ch1:PB_13(SCK) ch2:PB_15(MOSI)

SCK: 5.6267MHz

CS

ch1:PB_13(SCK) ch2:PC_4(CS)

SPI3: POTx8 LunchBox & POTx16 PizzaBox


MOSI

ch1:PB_5(MOSI) ch2:PB_3(SCK)

SPI3はのクロックは

#define MCP3008_SPI_SPEED       (1312500)

と1.3125MHzをしているが、半分程度になっている。MCP3008の最大クロックは1.35MHz@2.7Vとなっているのでもう少し上げてみて動作確認。

MISO

ch1:PB_4(MISO) ch2:PB_3(SCK)

MISOの波形が汚い。PullDownはしていない。(参考:「POTx8 Launch Box 筐体作成」)

CS1 (POTx16 #1)

ch1:PB_10(CS1) ch2:PB_3(SCK)

CS2 (POTx16 #2)

ch1:PA_8(CS2) ch2:PB_3(SCK)

CS3 (POTx8)

ch1:PA_9(CS3) ch2:PB_3(SCK)

DAC: Dual OTA VCAのEnvelope



ch1:A2(DAC1, Kick Envelope) ch2:D13(DAC2, Noise Envelope)

D13の出力はノイズがのっている。

拡大

ch1:A2(DAC1, Kick Envelope) ch2:D13(DAC2, Noise Envelope)

ノイズの周波数は5MHzぐらいか。ということはSPI3のクロックが重畳しているのかなあ。

設定パラメータ (UART出力)
240.0   8000    | 1079  6826    0.58    0.72    0.07    0.86    0.17    | 531   4927    1403.71 165.00  32.84   0.12    0.46    | 719   2275    1.00    0.58    0.00    0.16    0.18    VoltageMonitor: 0.824V   -1

2017年12月19日火曜日

ライブ配信告知 12月30日午後~

今年も年末ライブ配信やってみたいと思います。

ニコ生は金かかるし、fc2はややこしいそうだし、Ustreamは誰も来ないし(もはやない)、Youtubeかふわっちかな

<追記:2018.01.09>

KIK01とリズムマシンとベースマシンをMIXできた時のライブ配信のようすです。



</追記>

2017年12月18日月曜日

Nucleo F446REとNucleo F303K8の一部ピンは5Vトレラントではない模様

Nucleoで使われているSTM32は3.3V駆動で、基本的には5VトレラントだがF446、F303では一部ピンは5Vトレラントになっていないようだ。

F446RE


STM32F446xC/EのDATASHEET(en.DM00141306.pdf)を見てみると、一部ピンは絶対定格で最大4.0Vとなっている。


VinのFTとFTfピンは最大値が「VDD+4.0|V」となっているが、TTaピンやその他のピンは「4.0|V」となっている。

ピンの仕様の略称は、


となっていて、FT/FTfは「5V tolerant I/O」、TTaは「3.3V tolerant I/O directly connected to ADC」となっている。

F446の場合、電源系とBOOT0以外は基本的にFT/FTfだが、


PA4、PA5は「TC」となっている。「TC」の説明はざっと見た感じでは見当たらないが、FT/FTfピン以外は5Vトレラントではない

F303K8


STM32F303x6/x8のDATASHEET(en.DM00092070.pdf)より。

絶対定格

こちらもTTaやその他のピンは最大「4.0|V」となっている。

ピンの略称

こちらはTCの説明があり、「Standard 3.3V I/O」となっている。

各ピンの仕様はTable14にあり、5VトレラントのFT/FTfとなっているピンは多くはない。Nucleo F303K8は基本的に5Vトレラントではないと思って取り扱ったほうが良さそうだ。

5V系からのレベルシフトが必要になった時に、FT/FTfピンを(よく考えて)使うのが良さそう。

出力ピンの短絡


出力ピンをGNDに短絡した場合の保護については、DATASHEETの分量が多いので読み切れない。

少なくとも出力系(特にアナログ出力)に設定したピンは短絡についても注意が必要だと思う。

KIK01 F446REの温度測定 (ついでに壊れたF446REも)


KIK01のF446RE


KIK01で使っているNucleo F446REのMPUの表面温度を自作の温度計で測定してみた。


900秒経過で、18.5℃から27.15℃に上昇。

壊れたF446RE


実験しているうちに壊してしまったNucloe F446REのMPUの表面温度も測定してみた。

参考:「こんどはNucleo F446REのDACを破壊してしまった(TqT;

最初は、A2(PA_4)ピンが不良になっただけだったが、その後MPUが発熱して書き込みができなくなってしまった。(USB接続して現れるストレージにFAIL.TXTが出現)


35秒経過で20.2℃から51.8℃に上昇。サーミスタを固定しているカプトンテープがはがれたので測定中止。

お陀仏のようだ。

なかなか壊れないArduino Unoと比較すると、Nucleoは取扱いに注意が必要そうだ。多品種あるMPUを同じ基板で対応させているのでしかたないでしょう。

2017年12月16日土曜日

POTx16 PizzaBox 天板にパイロット・ランプをつける&プラスチック研磨

POTx16 PizzaBoxは中の基板にパイロット・ランプ(LED)を付けていたが、確認しにくいので天板に取り付けた。


LEDの色は、なんとなくクラシカルな感じにしたかったので赤色にしてみた。

内部

基板上のLEDをピンヘッダに付けかえて、天板のLEDに配線した。

プラスチック研磨


天板のプラスチックが加工時や使っているうちにキズや汚れがついてしまっていたので、研磨してみた。

おそうじ前

天板を取り外したところ

タック・シールはダイソーのシール剥がし剤ではがした。

研磨には、「SK11 液体研磨剤 コンパウンド プラスチック用 SEK-5」と「SK11 ポリマール プラスチックみがき クロス FKY-6」を使ってみた。


液体研磨剤の方は細かいキズ消し、みがきクロスの方はつや出しという感じで、液体研磨剤で磨いたあとみがきクロスで仕上げてみた。


どちらも粒子が細かいので深めのキズは取れないし、完全に鏡面仕上げレベルにまで持っていくのはムリっぽいが、「きれいになったな~」ぐらいまではピカピカになる。

「SOFT99 ( ソフト99 ) 99工房 コンパウンドトライアルセット」も、別にお試しで使ってみたが、「3 極細」でも上記液体研磨剤に比べると粒子が荒く、黒いプラスチックだと逆にキズが目立ってしまう。


本格的にやるなら2000番~4000番程度の研磨フィルム→コンパウンドをかけて深めのキズを消してから液体研磨剤を使ったほうがいいかもしれない。

元が100均のクリップボードなので、あんまり研磨にお金や手間ひまをかけるのも馬鹿馬鹿しい感じもしますが(^q^;


2017年12月14日木曜日

KIK01 作戦検討その6

KIK01は、ベースマシンと比べるとハードウェアで作った回路は増えたが、ファームウェアはあまり複雑なことはやっていない。

漠然と妄想していることはありますが、アナログ回路でもっと試してみたいことがあるのでまずは収束させる方向で考えます。


マシン・マシン・インターフェイス


リズムマシンや、ベースマシンと同期をとるためにSyncIn、SyncOutを設ける。

それぞれ単体ではテスト中ですが、まずはリズムマシンの子としてキック・パートを担当できるように、リズムマシンとSyncInで結合してみたいと思います。

マン・マシン・インターフェース


パラメータ設定はPOTx8 Lunch BoxPOTx16 Pizza Boxで24個のアナログ値(10bit精度)の設定デバイスを作ったので、まずまず自由度はありそう。

システム側からのアラートは、UART経由だとパソコンと接続する必要がある上に、CPU時間をかなり消費するのでLEDで表示することにした。

UARTのCPU時間はSPIの比ではなく、ちゃんと調べてはいないが、SPIがマイクロ秒オーダーだとすると、UARTはミリ秒オーダーで1000倍ぐらい違う感じだ。

構想中のMonitor LEDs


Power LED: 正常時:常時点灯 / 電圧低下:ゆっくり点滅 / 過電圧:速く点滅
Beat LED: 出力のBeatに合わせて点滅
SyncIn LED: SyncInのタイミングで点滅
SyncOut LED: SyncOutのタイミングで点滅

同時に点滅するとよくわからない状態になるのでどうしたものか。

メモ:


SyncOutは現状のファームウェアでは1/4Beatで出力している。

mbed Repogitory:
https://os.mbed.com/users/ryood/code/KIK01_Proto08/ revision:34

KIK01 筐体の製作 天板とバックパネル

天板


ホムセンで売っていた三菱レイヨンのアクリ・ライトを使った。(アクリル・サンデー取扱)

硬質塩ビに比べると透明度が高く、硬い。

穴あけで失敗


捨て板(ダイソーの板材)を下に敷いて、ミシン・オイルを差しながら穴あけをしたが、油断して一度だけ捨て板から浮かせてドリルで穿孔したら、見事にひび割れてしまった。


ドリルで穿孔するときは1.5mmか2mmで下穴を開けてから目的のサイズの穴を開けるようにているが、2回目の穿孔の時に「まあ大丈夫だろう」と浮かせたのが原因だ。しっかり捨て板に押し当てるようにしないとだめっぽい。

他の部分でも色々と失敗しているので、妥協してこのまま使うことにした。(わたし、失敗しますので(^q^;

バックパネル


バックパネルは、底板と同様にダイソーのクリップボードを切り出して使った。底の方は少し隙間を開けてPOTx8 Lunch Boxに接続するフラット・ケーブルを通せるようにしている。

まだ内部をいじる予定なので、電源用のDCジャックとトグルスイッチ以外のコネクタにはまだ配線していない。

蝶番のサイズ


蝶番は和気産業のBH-510というタイプを使ったが、画像の「ここ」の長さが短いので、蝶番の逆側をアクリル板の表側に回せなかった。

もう少し長いタイプなら、アクリル板の表側に回してきれいに固定できそうな気がする。

アクリル板は買ったものをちょうど半分に切って使っているので、気が向いたら作り直すかも。

MDFで作っているフレームは、見栄えのために黒色で塗装しようと思っています。←結局塗装が一番お金がかかりそう(^q^;

筐体に使った材料


アクリライト(透明) 300✕450✕2mm 648円(ホムセン)
蝶番 BH-510 120円(ホムセン)
MDF 200✕400✕6mm 100円(ダイソー)
補強用角材 100円(ダイソー)
A4クリップボード(黒) 100円✕2個(ダイソー)
木ネジ(2.1mm✕10mm)、手持ち
皿ネジ・ナット(M2✕10mm) 手持ち

2017年12月11日月曜日

こんどはNucleo F446REのDACを破壊してしまった(TqT;


KIK01のエンベロープ波形出力に使っている内蔵DACの出力端子のPA_4(Arduino HeaderのA2)を破壊してしまったようだ。

AnalogOutテスト
https://os.mbed.com/users/ryood/code/Nucleo_sinewave_output/ Revision:2

PA_4のみ出力されず

DigitalOutテスト
https://os.mbed.com/users/ryood/code/Nucleo_blink_led/ Revision:1

PA_4のみ出力されず

AnalogInテスト
https://os.mbed.com/users/ryood/code/Nucleo_ADC/ Revision:0

A2の読み取り値のみ0~800程度。
3V3を印加するとUART出力が停止。抜くとRESETがかかる。

電源を入れずにPA_4、ArduinoHeaderのA2とGNDの抵抗値を測ると1Ω程度になっていた。他のA0~A5はHiZ。

原因は不明。DAC出力を短絡したとかだと保護機能が働くと思いますが、どうなんでしょう。

PA_4、A2を使用しなければ他は使えそうですが、最近事故が多いのでもう少し慎重にやることにします。

2017年12月8日金曜日

KIK01 筐体の製作

MDFでフレームを作った。基本的にはベースマシンやPOTボックスと同じだが、台として使うので傾斜は付けていない。


中のLEDの状態を見たいので、透明なアクリル板で天板を作る予定。また、基板へのアクセスをかんたんにするためにベースマシンと同じように蝶番を使ってパコパコできるようにする。

外部からのSync信号を受ける実験もしているが、可聴帯域のSync信号を入れるとなかなか面白い音がする。


とにかく作業スペースが欲しいので筐体を完成させます。

メモ:


プラスチックの板にはダイソーのクリップボードを切り出して利用しているが、以前はPカッターで溝を掘ってパキッときれいに折れたのに、今売っているのはなかなかきれいに折れず切断面がボロボロになってしまう。表面の光沢も違う。

以前はABSだったと思うが、今のはポリスチレンと書いてある。コスト削減なのでしょうか。

2017年12月3日日曜日

POTx8 Lunch Box サイドパネルをニス塗装してみた。


ダイソーで売っている反りまくりの板材をニス塗装して、POTx8 Lunch Boxのサイド・パネルとして取り付けてみました。デザインはMoogerFoogerをリスペクトしています(^q^;


反った板は湾曲している内側の面を水で湿らせれば直るそうなのでやってみました。


生成りのときは1~2日矯正すればまっすぐになりましたが、とのこやニスを塗ったら元通り反ってしまいました。

ニス塗装は、ベースマシンのときはつや消しクリアだけで塗装しましたが、今回はつやありクリアで何度か塗った後に最後につや消しクリアで仕上げました。

今回の塗装の問題点としては、塗り作業中にゴム手袋をして保持していた部分が汚くなってしまったこと。一旦汚くなってしまうと、ペーパーがけできれいになるまで塗膜を削ってやる必要がありそうです。何かうまい保持方法があればいいんですが。

板の反りに関しては、中のMDFのフレームに3箇所ボルト・ナットで押し付けるようにして、目立たなくはなりました。


サンディング・ブロック


MDFの端材を、サンディング・ブロックとして使いました(いつもはかまぼこ板を利用)。平面をペーパーがけする場合ガラス板を使うと楽と聞きましたが、手頃なガラス板が見つからなかったので塩ビ板を両面テープで貼り付けて使ってみました。木工の塗装レベルだと効果の程は不明です(^q^;

メモ:


最初から反ってる板は修正が難しいので、多少高くてもちゃんとした板のほうが良さそう。

最後の仕上げに使うつや消しクリアのニスはもしかするとスプレー缶の方がいいかも。

次は着色に挑戦?!