NucleoボードをNTS-1のカスタムコントロールパネルにする実験


今回の話はまだ中途なのですが、手こずりそうなので中間まとめとして書いておきます。

以前もちょっと触れましたが、NTS-1は音源エンジンとコントロールパネル(音源エンジンを制御するボード)の2つのCPUボードから構成されており、コントロールパネルを自作するためのライブラリと、リファレンス基板の設計資料が公開されています。ライブラリはArduino用で、リファレンス基板はArduinoボードの一種として使えるようになっています。

https://korginc.github.io/nts-1-customizations/ja/

コントロールパネルのプログラミングを試しにやってみたいと思ったのですが、自分で試すには、まずはリファレンス基板が必要になります。しかしこのボードは販売されていないので、データをパーツショップや基板屋さんに送って取り寄せ/製造してもらい、パーツを実装する必要があります。

実際に試している方もいらっしゃいます。

こちらの方のはオリジナルのボードみたいです。

リファレンス基板は、表面実装とはいえ、パーツ点数も少ないですしサイズも0603(インチなので1.6mm×0.8mm)のようなので手ハンダでもいけそうですが、ちょっと手間ではあります。また、実験用としてはこのリファレンス基板のLEDやスイッチなどの入出力部分も無いほうがいいのになあと思ったりもします。

また、価格面でも試しにBOMファイルをMouserにアップロードしてみたところ、一式で5000円を超えました。もっとも、そのうち3000円以上が、2列38ピンのピンヘッダ(NucleoボードのMorphoヘッダと同じもの)×2の費用でしたが・・・。

そこで、もうちょっと簡単に実験する方法として、このリファレンス基板の代わりに、同じMCUを使っているNucleoボードを使えないかと考えました。リファレンス基板のMCUはSTM32F030R8T6(Clock: 48MHz, Flash: 64kB, SRAM: 8kB)です。これを使っているNucleoボードはNucleo-F030R8です。秋月電子とかには無いみたいですが、RSオンライン、digi-key、Mouserなどの通販のほか、スイッチサイエンスでも扱いがあります。

ST Nucleo Board STM32F030R8
Cortex-M0コアのSTMicroelectronics STM32F030R8T6搭載のマイコン開発ボードです。mbed開発環境に対応しています。

通信プロトコルはSPIなので、このMCU以外では駄目ということはないと思いますが、SDKのソースコードを見るとSPIの制御レジスタを直に叩いている部分もあり、互換性問題でひっかからないためには最初は同じMCUにするほうが無難だろうと考えました。また、SDKではSPI2を使用していますが、Nucleo64の一部のボードではLD2(=Arudino D13)がSPI2CLKと同一の線(PB13)に接続されている場合があります。(この場合はソルダーブリッジ21をオフにする必要があります。現時点これをやる必要があるボードはF302R8とF410RBのようです。)

なおこのNucleoボードのピン配列と、NTS-1リファレンスボードのLEDやスイッチ等の接続をマップすると下図のようになりました。LEDやスイッチの配置がボードのピン配列と符合するので、開発にはNucleoボードが使われていたのかもしれませんね。

NTS-1本体とNucleoボードの接続ですが、まずユニバーサル基板を使って、NTS-1本体の上に被さってベースとなるボードを作ってみました。ユニバーサル基板は手元にあった秋月電子のこれです。

本体側との接続は本体側がピンソケット、コントロールパネル側がピンヘッダです。このピンヘッダは7ピンで、純正やリファレンスのコントロールパネルでは、ベースのプラスチック部分が一般的なピンヘッダよりも低い(1mm)タイプのものが使用されています。(一般的なピンヘッダだと蓋が閉められなくなるようです)

今回は、ベースボードは本体と接続するだけでなくNucleoボードが接続できるようにもしておく必要がありますので、足の長いピンソケットを使うことにしました。ただ、7ピンのものは手元になかったのでArduinoの基板を作るときに使う8ピンの足の長いピンソケットを、足を一本切って使いました。

本体と接続すると(本体は見えませんが)こんな感じです。ケースに会うネジ穴を開けようとすると微妙に基板の2.54mmピッチの穴と合わないのがちょっと残念です。

このベースボード上に、リファレンス基板にあってNucleoに無いパーツも載せていきます。具体的にはSPIやRESET、BOOT0等のプルアップ抵抗などです。なくても動くかもと思って試してみましたが、ちょっと安定しませんでした。

リファレンス基板の回路図からの抜粋です。

Nucleo側にも若干既存の回路はありますが、見たところ競合することはなさそうだったので、上図のリファレンス基板の回路相当をベースボードにそのまま載せました。

完成したベースボードは以下のようなものです。

Nucleoボードに接続するためのピンソケットは1×4ピンと1×3ピンを用意し、それと右側の1×7ピンのソケットとの間にプルアップ抵抗などを入れています。1×3ピンの信号は1×7ピンの信号の5~7番にから来ています。1×4ピンのほうは、一番上のソケットには左側の1×7ピンソケットに来ているPANEL_ACK信号を持ってきています。残りは右側の1×7ピンソケットの2~4番からの信号です。

また、ロジックアナライザで信号を観測できるように、1×7ピンの右側にL字コネクタを取り付けました。

このベースボードに、純正のコントロールパネルを接続することも可能です。

次にNucleoボードですが、今回は電源をNTS-1側から供給するため、ST-Link部分を切り離しました。マニュアルによると、切り離さない場合はソルダーブリッジ2および12を切断すればいいようです。

私の場合は切り離してしまいましたが、ソルダーブリッジを切断するほうがプログラミング時にST-Linkを結線しなくて済むので楽かもしれません。

また、ST-Linkを切り離した場合、ST-Link経由でのUSART通信もできなくなります。このUSART通信はPA2とPA3に信号が出ているのですが、この信号をArduinoソケット/Morphoヘッダへ引き出すには、ソルダーブリッジの接続が必要です。

デバッグにはシリアル通信ができたほうがいいので、抵抗のリード線を使ってブリッジを接続しました。

切断したST-Link部分とNucleoボードは下図のように結線します。これはArduinoスケッチを書き込むために必要です。

ベースボードとNucleoの結線ですが、周辺回路も含めて(汚いですが)描くと以下のようになります。なお、スケッチをボードに書き込む時には、リセット(図では黄色の線)を外す必要があります。NTS1はコントロールパネルが1秒間反応しないとリセットをかけてくるからです。

これで、リファレンスボード相当のものができた・・・はずなのですが、ソフトウェアを書き込むとどうもうまく動作してくれません。回路に問題があるのか結線ミスか、はたまた他の理由か分かりませんが、現在調査中です。

どうも、SPIの信号は8bitなのに、クロックがうまく同期していないのかノイズがどこかから載っているのか、Nucleo側のクロックカウントが実際の信号と合っていないようです。Nucleo側を9bitの設定にすると同期できてきますが、当然ながらこれでは正しくデータがやり取りできません。

というわけで後編へ続きます。

コメント