シンセリコーダーを作りたい 1

現在平行して作成中のものがいくつかあります。
シンセリコーダーもそのひとつ。
最終的にはウィンドシンセ (Wind Synthesizer) のように、PC に MIDI IN としてつなげるリコーダーをイメージしています。
おうちでリコーダーを吹こうと思っても、都内の住宅事情では騒音になるためなかなか難しいですね。
シンセリコーダーさえあれば、時間を選ばずリコーダーが吹けるわけです。深夜にリコーダーを吹く是非は置いておきましょう。
残念ながら?「電子リコーダー」は製品として存在していたようですが、自作電子楽器の題材としてはおもしろいかな、と思います。

しばらく試行錯誤していたのですが、ある程度演奏できるプロトタイプ1号機ができてきました。
見た目のリコーダー度はまだまだ 20% くらいです。


上半分が USB 基板、下半分がリコーダー基板。
このプロトタイプで確認したかったことはウィンドシンセの心臓部であるブレスセンサと通信線の電源重畳の動作です。
スイッチ(リコーダーでいう穴)はディテクタスイッチを使っていますが、いずれタッチセンサに置き換え予定です。リコーダーの場合、半開判定が必要な穴が3つもあるので、静電式タッチセンサの採用は難しいです。必然的に接触式になるのですが、これはこれで調整が面倒なことはわかっているのであとまわし。


マウスピース?部分は 3D プリンタで作っています。
リコーダー基板には音程確認用の圧電ブザーを載せています。
ここにヘッドホンをつければスタンドアローンで動くので、某笛マンガに出てくる珍笛のようなものができあがります。
なおコントローラは ATmega8 です。


ブレスセンサはふつうの気圧センサを試してみましたが、応答性は問題なさそうです。
耐湿性が一番の問題ではありそうですが、実際の製品ではどうしているのでしょうか。

USB 基板(右側)と LED 基板(左側)。LED 基板はスイッチ状態とブレス値などを表示します。
USB コントローラには PIC18F14K50 を使用しています。
最近良く使うので汎用の PIC18F14K50 ユニバーサル基板を起こしてしまいました。
茶色の配線はリコーダー基板への配線で、+7V 電源供給と半二重通信を 2 本の線で行っています。

ある程度予想はしていましたがやはりディテクタスイッチでは演奏しづらいので、プロトタイプ2号機ではタッチセンサを試す予定です。
もうひとつ、私のリコーダー演奏が下手なことが最大の問題です。

AVR HVS (High Voltage Serial) ライタの作成

最近になって AVR HVS ライタを製作したので、ここで紹介します。

完成写真

いきさつ

最近 ATtiny11 という古めのチップを(大量に)入手したのですが、
この書き込みは ISP 非対応ということに、入手後になって気づきました。

2018 年現在、AVR マイコンのプログラミングインタフェースをリストにすると、おおむね以下の通りです。

以前からの品種でサポート
SPI ISP: ほとんどの品種でサポート
HVS (High Voltage Serial): 8ピン tiny13A 等, 12V 必須
HVP (High Voltage Parallel): 16ピン以上, 12V 必須

新しい品種でサポート
TPI (Tiny Programming Interface): tiny10 等
PDI (Program and Debug Interface): XMEGA系

AT90S / tiny / mega を中心に使用する限り、AVRISP のような SPI ISP 書き込みに対応した
ライタさえ持っていれば、「少数の例外を除いては」ほとんどの品種に対応できます。

ところが tiny11 は「少数の例外」にあたり、プログラミングインタフェースは HVS のみに対応しています。
HVS 対応のライタは持っていなかったので新しく作る必要に迫られました。

設計

製作にあたって下記の条件を定めました。
(1) USB で動作すること (IF, 電源共)
(2) MCU は ATmega8 を使用すること (手持ちの関係)
(3) 既存のソフトウェアを使用できること
(4) 安価であること

(1)(2) を満たすライタがネット上に公開されていればそのまま使いたかったのですが
条件に合うものが見つからなかったので、回路と FW は新たに作ることにしました。

ホスト側ソフトウェアは私が作ると中途半端な実装になりそうなので、
既存の HVS 用ソフトウェアに対応することが望ましいです。
ちょうど、neko JAVA さんが USB 対応のパラレルライタを公開されていたので、
ホスト側ソフトウェアはこれをそのまま使用できるようにします。
FW の実装は v-usb ベースですが、HVS / HVP 実装部分でソースコードを参考にさせてもらいました。

回路図:

FW ソースコード: 180219_YLE_HVS_Writer_Source
ホスト側ソフトウェア: 本文参照

動作

HVS + tiny11 で FLASH 書き込み、読み込みできることを確認済み。
HID なのでドライバは不要です。
HVP (High Voltage Parallel; 高電圧パラレル) も一応実装していますが、動作は未確認です。

動作速度は正直言って遅い(tiny11 Program + Verify で 1 分以上)です。
FW は v-usb ベースにしており USB1.1 LS なので、interrupt 通信の
ポーリング間隔の制約からオリジナルの 10 倍程度遅いと思います。
tiny11 のようなページを持たないマイコンの FLASH を書く場合、
このライタのプログラムが 1バイトあたり 3-4 個の interrupt 通信するので
ほとんどの時間を通信待ちに費やすことになります。
このへんはプログラムの変更で 3 倍ほど改善可能ですが、
「(2) 既存のソフトウェアを使用できること」なのでそのままにしています。

PIC18F2450 など USB2.0 FS 対応マイコンに移植すればもっと高速になるでしょう…。

SOP の AVR の書き込みは、写真のようなアダプタ (aliexpress で ¥600) により行っています。

MPLAB X IDE のメモリ使用量を削減する

PIC の開発では MPLAB X IDE を使用していますが、MPLAB は起動するだけで大量のメモリを消費することが難点です。


たとえば私の環境では 32bit PC で起動時 430MB、スクリーンショットがありませんが 64bit PC で 800M-1GB、これでは他のソフトを立ち上げているとすぐにメモリ使用量がいっぱいになってしまいます。

これは起動時に JRE がヒープ領域を確保するためであり、MPLAB の読み込む設定ファイル mplab_ide.conf を書き換えるとヒープサイズを調整できます。

ファイルのコメントによると「-J-mx」以下でヒープサイズの上限を指定するようです。
デフォルト値はインストール時の環境に依存し、32bit OS だと 「-J-Xms256m -J-Xmx512m」
サイズを小さくしすぎると動作が極端に遅くなります。
PIC18F を使用するだけなら 「-J-Xms96m -J-Xmx128m」で十分動きます。

ファイル書き換え後再起動すると、起動時のメモリ使用量は 210MB と半分近くになりました。

3Dプリンタで半固定抵抗のつまみを作る

試作品の動作中に半固定抵抗を調整するとき、毎回ドライバを差し込んで・・・というのはいかにも操作性が悪く、ダイヤル式のつまみがほしい。
もちろんつまみ付きの基板取り付け型 VR は存在しますが、入手しづらかったりサイズが大きかったり、何かと使いづらいのです。

そんなわけで、下図のような半固定抵抗用つまみのモデルを 3DCAD で作り、先日買った 3D プリンタで印刷します。
うちに大量ストックしている NOBLE の VM6CK という VR がおあつらえ向けの形状(摺動子と連動する円形カバー、太く深いドライバ溝)だったので、それにマッチするようモデリングしています。

プリントするとこんな感じ。

便利に使えています。

3Dプリンタを購入した

去年の話になりますが、3D プリンタを購入しました。
3D プリンタはこれが1台目です。

入手容易な 3D プリンタには大きく分けて XYZ 3軸型のものと Z 軸のみのデルタ型の2 種類があるようで、
デルタ型のほうがかっこいいのでこちらを選びました。
amazon にあるものから、Anycubic というメーカの Kossel Plus リニアガイドタイプを買いました。
aliexpress などにもありますが、送料を考えると amazon 購入の方が安い気がします。


こんな感じの結構大きい箱で届きます。
組み立てキットなのでマニュアルどおり組み立てます。
どうでもいい話ですが、これと本 1 冊を同じ日に注文したら、
なぜか amazon 側でまとめられて超巨大な段ボール+大量の緩衝紙で届きました。
別配送にした方が効率よい気がするのですが。

付属のフィラメント色はランダムと説明文にありましたが、黒色のものがついていました。
変な色でなくてよかった。

組み立てていくうちに問題発生。


写真のように、ヒートヘッドの軸が折れていることに気づきました。
途中まで組んでから気づいたので、最初から折れているのか私の不注意で折ってしまったのか判断がつきません。
最初に全ての部品をチェックするべきでした。
まあ、この程度なら、瞬間接着剤でうまくつければ使えそうなので、補修してこのまま組み立て続行です。

で、ブログを編集していて気づくのですが

最初の写真を拡大すると、折れてるのがしっかり写っていますね!
輸送中に折れたものと思いますが、この箱
デリケートなヒートヘッドの梱包としては、ちょっと不十分な気がします。


組み上げると、カラーボックスの上に置けるくらいのサイズになります。
この部屋にはここしか平地がないので。

マニュアルは決して不親切ではないけど、下手な人が組み立てるとちゃんと動かないような気がします。

簡単なキャリブレーション後、Thingiverse の 3DBenchy をプリント (積層厚 0.2mm)すると、こんな感じになりました。
 

電子工作するうえで 3D プリンタの使い道はけっこうあって、
簡単に mm 単位の精度が出せるので、
たとえば基板固定用の支持具などを作れば、プラ板加工に比べてはるかに楽できます。

(以前作ったユニバーサル基板用の固定具)

モジュール式ユニバーサル基板を作った

TTL IC をたくさん組み合わせて回路を作ろうとしたとき、既存のユニバーサル基板はどれもあまり使い勝手が良くありません。
最近は安くプリント基板が作れるようになっているので、オリジナルのユニバーサル基板を作ってしまいました。

なぜモジュール式か?

設計した基板はモジュール式、つまり複数の基板を組み合わせて使うことを前提としています。
モジュール式とした理由は以下のとおり

  • 回路規模に合わせて基板面積を調整可能
  • モジュール間に空隙を設けることで基板面積の効率利用
  • 量産効果により面積比コストダウン
  • 基板裏面からIC実装状態を確認可能

基板外観

表面

裏面

これが1つのモジュールで、複数のモジュールを組み合わせて大規模回路を作っていく形になります。
2.54mm 間隔で 4×42 のスルーホール穴が開いており、表面にはピンの間に V+/GND のパッドが交互に配置されています。
V+/GND は両端の 1×4 部分と接続されています。
モジュールを5.08mm 間隔で配置して、モジュールの間にDIP14,16,20 の IC を実装することを想定して設計しています。
DIP16 ならちょうど 5 個、DIP20 ならちょうど 4 個の IC を実装できます。

特徴

通常のユニバーサル基板と異なり、1列目-2列目、3列目-4列目に配線がされています。
これにより、40 ピンのラッピングポストと組み合わせて裏面ラッピング配線ができます。
ラッピングポストは高いので、安い 2×40 のピンヘッダで代用しています。
本来はラッピング用 IC ソケットが使いたいのですが、高価なので・・・。

電源の配線ははんだブリッジでできるので簡単です。
秋月で売っているパワーグリッド基板と同じ仕組みですが、こちらは DIP IC 用に最適化されています。
1005 あるいは 1608 のチップ抵抗を使えばプルアップも実装できます。

実装途中を裏面から見るとこのようになります。トータルで見ると楽なのでラッピング配線をしています。
デカップリングコンデンサはピン間に直接取り付ける形になります。ここだけはモジュール式にしたデメリットです。アキシャルリードのセラミックコンデンサがあるとすっきりします。
裏面から見たとき実装されている IC が見えるのがポイントです。これにより裏面配線をしたときの配線ミスが大幅に減少します。
さらに、隙間があるということはその分コストダウンされているということを意味します。まさに一石二鳥。

使用例

モジュールを並べて回路を作るとこのようになります。右側に繋がっているのは一緒に作った接続ボードで、MIL 規格コネクタと LED、電源コネクタ等が実装できます。裏面配線なので表面は非常にすっきりします。
IC 実装レーンが 10 列あり、DIP 16 なら 10×5 = 50 個の IC を高密度実装できます。2つ並べたら 100 個です。左側に見えるグレーの板はタミヤのユニバーサルプレートを切ったものです。

接続ボード

基板の製造

KiCAD で設計して pcbcart に発注しています。
勢い 400 枚作りましたが、2-3 年で使い切りたいです。

PLL クロック逓倍回路

ディジタル回路のクロックは重要ですが、ちょうどいい水晶発振子がなかったりするときなど、クロック N 逓倍器があると便利な場合があります。
最近は 21.48MHz (3.58MHz x6) の水晶がなく、某所で中国製の水晶発振子を購入したらぜんぜん違う周波数で(基本波から違う)困ったことがあります。
PLL を組めば N 逓倍できますが、いまさら VCO + MC4044 という組み合わせの回路は設計が面倒です。

CY2308


最近 Cypress の CY2308 (+IDT23S08) という石をたくさん手に入れました。
これはもともとクロック分配の用途に作られた IC ですが、PLL を内蔵しており、フィードバック端子が外部に出ているので、ディバイダを外付けすれば手軽なクロック逓倍回路に使えそうです。
ただし出力周波数は10-133MHz と規定がありますが、入力周波数の規定がありません。
私が使用する周波数帯はだいたい 1-30MHz なので、この用途で使えるかどうかは基準周波数と発振周波数の下限(PLL 特性で決まる)にかかってきます。

テスト回路

 
というわけでテスト回路を組んでみました。
使用したのは CY2308SC-2 なので CLK と CLK/2 が出力されます。
CY2308 の CLK/2 または CLK 出力を 74ALS161 の 1/N 分周器で分周して FBK 端子に戻しています。
FBK のデューティは 50% でなくてもいいようです。

基準周波数は TC40H000 で発振させた 3.58MHz で、その 1/2 と 1/4 も選択できるようにしています。
したがって、出力周波数は fout = (3.58 / M) x N (x 2) MHz となります。
この回路の最大周波数は分周器に依存しますが、CO – /LD 間に使った TC40H000 の伝達遅れが大きく、これをたとえば 74AS04 などにすれば CLKOUT = 80MHz 以上出せるはずです。

波形

fREF = 3.58 MHz、N=3 の CLK 出力は上図で、CH1 が CLKOUT 信号の波形を示しています(以下同じ)。この程度の REF 入力なら問題ないようです。

fREF = 1.79 MHz, N=6 の CLK 出力が上図で、fREF = 1.79 MHz はまだ大丈夫そうです。
fREF = 0.9MHz にすると CLK 出力が不安定になりました。(画像保存失敗)
よく使う 4MHz とか 6MHz のクロックなら、REF 入力にしても問題なさそうに見えます。

fREF = 1.79 MHz でどこまで出力周波数を下げられるかやってみます。

N=3 つまり fout = 5.37MHz はまだ安定しています。

N=2 つまり fout=3.58MHz では出力周波数が不安定になりました。
5.37 MHz で OK とはいえ、温度変化を考えるとやはり出力周波数はできるだけ 10MHz 以上に設定するべきでしょう。

 

とりあえず最初にほしかった 21.48MHz が簡単に作れるようになったので満足です。

DSP-444 の I2C テスト その2

ある程度実用的になったので DSP-444 ラジオの I2C テストの回路図とソースコードを公開します。

I2C で操作しているのは
・受信周波数の取得
・FM/AM/SW、受信バンドの選択
・音声出力の位相(デフォルトがLR反転なので、イヤホンで聞くためには設定が必要)
の3点です。

現時点でI2C での選局の方法はわかりません(対応するレジスタを設定しても変化なし)ので、ダイヤルによる設定としています。
適合するバリコンつまみを持っていないので、可変抵抗で選局するよう改造しています。
ここまで改造するならもう別のモジュールを使った方がいいような気もします。

表示器には hp の HPDL-1414 を使っています。この表示器はアルファベットも表示できるので、放送局のコールサインでも表示できるようにしようと思っています。
写真のように FM 補完放送も受信できます。


回路図

ソースコード (gcc)

 

DSP-444 のテスト

何年か前の福箱に入っていた、aitendo で売っている DSP ラジオモジュール DSP-444 のテストをしています。

モジュールを解析した結果 I2C レジスタの仕様がある程度わかったので、とりあえず受信周波数の表示ができるようになりました。

写真は TBS ラジオ 954kHz を受信しているのですが、このモジュールは AM のチャンネルスペースが 5kHz の米国仕様なので 955kHz の受信になってしまいます。AM の音質が悪いのもこのせいだと思います。どこかの設定でチャンネルスペース 9kHz にできるといいのですが。

ロジック IC の出力特性を実測する その2

今回は偽ブランド品 (counterfeit) ロジック IC を中心に…

74HC04D(HYC)

これは NXP 社のロゴがありますが偽ブランド品だと思われます。
・同社 DIP の型番は 74HC04N であり、74HC04D ならば本来 SOP
・パッケージ形状が NXP のものと異なる

偽造 IC にはロット番号に本来の製造社名を入れている場合があり、この IC の場合 HYC というのが本来の社名だと思います。

特性を見ると、H 出力のドライブ能力が L 出力に比べて低くなっていますが、JEDEC 規格は満たしています。ファンクションも確認した限り正常です。

SN74HC164N (15FVNS)

・ロット番号の桁数が異なる
・ピンの太さが本物と比べて太い
ことから、偽ブランド品と判断しています。

ドライブ能力を見ると、L 出力がぎりぎりですが、一応規格は満たしているようです。

SN74HC164N(65CXD2K)

この IC はマーキングがきわめて薄く、パッケージ形状も TI のものと異なるので、人目で正規品でないとわかります。ドライブ能力は正規品と遜色ありません。

SN74HC595N(93DN8WY)

シフトレジスタの 74HC595 は需要が多い汎用 IC のため、偽造ブランド IC が多く見られます。実感として aliexpress では 90%、国内通販で 20% 程の確率でこうした IC を手にすることができます。

この IC のドライブ能力は本物より強いです。

SN74HC595N(11HMK7J)

この IC は機能が微妙に 74HC595 と異なっており、本来なら RCLK  ピンの rising エッジで出力データをロードすべきところ、トランスペアレントラッチ動作となっていました。たまにこういうことがあります。

74HC595N(YRD0914)

偽ブランド IC の世界でも、YRD はよく見かけるブランドです。ディジタルのみならずリニア IC も手がけているようです。

74HC595N(1108LHW)

SN74HC595N(13CNONK)

このロット No の IC もポピュラだと思います。出力特性はオリジナルよりむしろ良くなっています。他の IC も似たような特性なので、ダイスとパッケージングで水平分業になっているのではないかと思います。

ここまでの偽ブランド IC と比較して、正規品の特性を以下に示します。

M74HC595B1(正規品)

ちょうど TI の 74HC595 がなかったので、STMicro のものを示しています。

ここに示していないものも含めて多数のサンプルで測定をした結果、 74HC シリーズでは、正規品に比べて偽ブランド品の方がドライブ特性が強い傾向にあるように感じます。ただし、サンプル 11HMK7J のように、機能が微妙に異なる IC も混ざっているので注意が必要です