2021年10月19日火曜日

ESS ES9038Q2M ボード購入

前々から気になっていたのと、オーディオをハイレゾ化して
CDデッキを処分しようと思いES9038Q2Mボードを買った。

一番安いのを買ったが、入力切替とボリュームはスイッチで
なくジャンパー切り替えの方が良かった。買ったのでこれを
使うが・・・。

前に作ったアンプの空き箱と、手持ちの部品で組み立てた。
気に入れば箱を買って3.3Vと5Vは別電源にしよう。

ES9038Q2M基板はコンデンサの高さを下げる為に容量が
減るがOSコンの100uFにした。オペアンプは前に買った
ジャンクのディスクリートオペアンプを修理した品物
あったので付けてみた。

カップリングコンデンサはCDデッキから外した高そうな
コンデンサがあったので使ってみた。別基板なので抵抗が
必要だったので手持ちの使っていないRMG抵抗を使った。
ここにだけ入れても音は良くなるとは思えないが、今後
使う事も無さそうな抵抗なのでまあ良いだろう。

手持ちのamaneroのピンは下側に付いていたので基板は
裏向きになった。

ノイトリックのパネル用USBコネクタが高かったが、箱に
ノイトリック用の穴が開いていたので仕方がない。

音は鳴るが良いかどうか良く判らなかった。スピーカーを
キッチリ合わせないとダメだな。

とりあえずCDデッキはヤフオク行き。

2021年9月17日金曜日

没作品 PIC32MX AD1860N DAC

SANYO LC7881 DACを作っている時にPIC32MXのサンプル
プログラムを変更せずに動作するDACが作れないかと考えて
作ってみた品物。うまく動けば雑誌に投稿しようと思ってた。

雑誌投稿を考えてDIPで作成した。

マイクロチップ社の元々ののPIC32 USB DIGITAL AUDIO
ACCESSORY BOARDはDACチップとしてAK4645Aが載って
おり、PIC32MXとI2Cで接続されてMCKの分周もAK4645A
の担当だ。これらを何とかする回路が必要だ。

I2C機器が接続されていると見せかける回路と外部分周回路を
作った。これでI2S 32bit信号になるのでAD1860N用に右詰め
16bitに変換すればAD1860Nが鳴る。

まあここまで作って音が鳴る様になったのは良いが、どうも
AK4645Aの録音側のI2S入力に関係するノイズが出る様だ。
SANYO LC7881 DAC その16に書いた割り込みかもしれない。

と言う事で没作品になった。I2C機器が接続されていると見せ
かける回路が参考になるかもしれないので紹介だけした。

2021年9月16日木曜日

SANYO LC7881 DAC その19

トロイダルトランスが届いたので電源系統を組み立ててみた。

+5V、+6Vはちゃんと出るのに-6Vが出なかった。調べると
Aliexpressで買ったLM337が偽物だった。LM317も一緒に
買ったのでこっちも偽物でAMS1117の様な品物かもしれない。

仕方がないからLM337をDigikeyで買おうと思ったら最近の
半導体不足の為か品切れだった。半導体不足なので、たぶん
Aliexpressで買っても偽物が届きそうなのでどうするか悩んで
いた。メイン基板やり直し、TO-220用電源小基板作成など。
とりあえず79L05で-5Vを作ってLM337が入手するまで使う
事にした。

基板はこんな感じになった。

後はソフトウェアの調整だけでブログに書く程の重大な修正は
無いだろう。

2021年8月27日金曜日

SANYO LC7881 DAC その18(Visual C++編)

PIC32MXを複合デバイスにしたので、それと通信するソフトを
作成した。

元々HIDとの通信は過去にやった事があるので、そのファイルを
探してきた。Visual Studioで作っていたが、作ったのは5年前
だった。Visual Studioを使ったのはこのプログラムだったので、
長いことWindowsプログラムはしていなかった様だ。

以前は使用するパソコンとの関係で、Windows XPでも動作する
様にコンパイルしていたが、もうWindows 10より古いOSは使わ
ないだろうから試しにVisual Studio Community 2022 Preview
を入れてみた。

5年前のプログラムなのですっかり忘れていたがC++言語部分は
同じなので、とりあえず動くものが出来た。HIDのコントロール
方法はうっすら覚えている部分もあるが、プログラムの通信部分
の内容は全然判らなかった。

PIC32MXとHID通信し、各種情報やバッファのサイズ等を取得し、
ログをファイルに保存する様にした。

PIC32MXと通信するのでVisual StudioとMPLABを同時に起動して
プログラムを調整するのはなかなか面倒だ。

HIDが追加された為に処理時間が増えたのか、バッファの数値に
バラツキが増えた様だ。

2021年8月25日水曜日

SANYO LC7881 DAC その17(PIC32MX編)

PIC32MXのUSB Audio部分は概ね問題無いと思うが、
長期試験するにあたりPIC32MXの状態をRS-232Cで
通信するのはケーブルが2本になる上に変換基板まで
ついて面倒だと考えた。

以前書いたUSB複合デバイスにする手は無いかと再度
調べたところ、古いMicrochip Application Librariesに
サンプルがある事が判った。サンプルを調べたところ、
異なる種類の複合デバイスではUSB Framework内で
パケットを振り分けてくれるみたいなのでプログラムは
追加するデバイスの分を書き足せば良いだけで、思った
よりは簡単だった。

初めてだったので手順が判らなかった。複合デバイスを
作る為にこのブログを見つけた人の為にお勧めの手順を
書いておく。

①主となるデバイス(私の場合はUSB Audio Class)を
動作する状態にする。

②①で作ったプログラムのusb_descriptors.cを編集し、
主となるデバイスの部分をコメントにして、副となる
デバイス(CDCやHID)のdescriptorを書く。この状態で
①で作った状態のプログラムに副となるデバイスの
プログラムを追加し、主となるデバイスのプログラムが
ある状態で単独で副となるデバイスのみで動作させる。
(CDCやHIDの単独デバイスで完全動作を確認する。)

③descriptorの内容を主にすれば主のみが動作し、副に
すれば副のみが動く様になる。この状態が完成したら
descriptorを複合デバイスに変更する。

注意点はusb_config.h内に書くインターフェースIDと
エンドポイントがそれぞれデバイスで異なる様にする
事だ。

複合デバイスにを考える時にCDC(仮想COMポート等)に
するかHIDにするかを考える必要がある。CDCの場合は
ドライバが必要になる。仮想COMポートにする場合、
Microchip Application Librariesにドライバがあるが、
このPID/VIDは当然AudioのIDと異なる。PID/VIDを
CDCと同じにすれば動くかもしれない。ドライバ内に
書いてあるPID/VIDを変更すれば良さそうに見えるが、
変更すれば署名が要求される可能性がある。一方HIDの
場合はRS-232Cの様にターミナルソフトで接続できない
のでWindowsのプログラムを書く必要がある。考えた
結果、過去にPIC16F1454でHIDを作った経験がある
のでHIDにする事にした。

ここまで作ってから書くのも何だが、複合デバイスに
したのにサンプルプログラムのPID/VIDをそのまま使う
のも何だと思う。仕方が無いからマイクロチップ社の
ページでPID/VIDのサブライセンスを申請した。

2021年8月22日日曜日

USB DAC自作考察

PIC32MXプログラムの改良を検討したが、Windows
Audio Classの場合はどうやってもパソコンからの
データー垂れ流しになる。ふとパソコン側のソフトも
自作になるがHIDクラスで作れば良いのでは?と思い
考えた。

HIDクラスでPIC32MX側からバッファの容量に応じて
データを送ってもらい、リングバッファに入れて現在の
I2Sで再生させるだけだ。パソコン側はプログラムが
面倒なのでwav専用となるだろう。

この状態でハイレゾになるとどうなるか考えた。USB
Audio Class 1.1では192kHz 16bitが限度と書いていた
のを思い出したから検索してみたらUSB Audio Class
の限度でなく転送モード(Full-speed)の限度だった。
どうもUSB2.0対応マイコン+High-speedでもっと
上のハイレゾが使える様だ。こうなってくると、
USB Audio Classの1.1と2.0の違いが良く判らないが
それは置いておいてUSB2.0 High-speed対応マイコン
が必要なので調べた。

今使っているPIC32MXはFull-speedだった。PIC32MZ
ならHigh-speedみたいだ。しかし秋月で1100円もする。
もっと安いのは無いか調べたらATSAM3U1Cが安そうだ。
しかし、こいつは・・・。

まあ簡単に書くと、amanero combo 384の互換品でも
買って自作ファームを書き込めば良いと言う事だ。その
方がハードを自作するより安そうだ。特殊なDACチップ
の場合は付属の水晶モジュールを交換すればOKだし、
変換回路もCPLDに書けて非常に都合が良い。まあ
プログラムしたいならの話だが。

結論はPIC32MXでは現状か192kHz 16bit迄の拡張とし、
それ以上は素直にamanero combo 384を買って使う
のが良いだろう。

訂正:386→384

2021年8月16日月曜日

SANYO LC7881 DAC その16(PIC32MX編)

土日でプログラムリストやマイクロチップのPDFを見て、
うまく動作していない部分の検討をして本日テストした。

結果としては、色々試したけど駄目だった。問題点はこの
CPUの仕様として理解して回避する事にした。

・起こっていると考えられる問題点
DMA割り込み処理中に何か条件(たぶんUSB割り込み)が
発生すると「DMA割り込み処理を中止」し、その後で再度
「DMA割り込み処理を最初から実行」する。「実行」後は
先に「中止」した処理はたぶん実行しない。

・回避法
DMA割り込み処理中は同じプログラムを2回実行しても
トラブルが発生しない様に割り込み中に変数は変更せず
実行済フラグを立て、割り込み処理後にメインループで
フラグを確認して変数計算を行う。

割り込み関係なのでプログラム上で何らかの回避方法が
ありそうだが、テストした範囲と資料の範囲では解らない
ので仕方がない。

この感じだと、元々のサンプルプログラムも同じ症状だと
推測されるので、サンプルプログラムを改造する人は注意
して頂きたい。

2021年8月13日金曜日

SANYO LC7881 DAC その15(PIC32MX編)

ハードが一段落してPIC32MXのプログラムを改良中。
以前からやっている内容を含めて記載する。

オリジナルのプログラムはUSB受信バッファが2組あり、
それをPINGPONGバッファと呼ぶバッファに交互に保存
する。実際のところ、このPUNGPONGバッファは解読
しようとしたが、いまひとつ良く理解できなかった。
オリジナルプログラムの問題点はUSB受信バッファと
PINGPONGバッファが2重になっており、転送に時間が
かかる可能性があるところだ。

まず2組あるUSBバッファを1つに減らし、PINGPONG
バッファをリングバッファにした。リングバッファに
すると、DMA転送データ数を受信数と分離できる利点が
ある。うまく設定するとUSB受信バッファからmemcpyで
データを転送する事も可能だ。

次に考えたのがUSB受信バッファを複数配列で用意し、
その配列バッファをリング状にしてUSB受信のバッファと
データー転送用バッファを一体化してデータ転送回数を
減らした。この場合はUSB受信時のバイト数も配列で記録
する必要がある。

ここまでやったが、パソコンとPICMX32のクロック差で
データの余りや不足を修正するタイミングを調整する部分
がどうも旨く動かないのでどうしようか悩んでいた。

ここまでが以前に作った部分。

今回はリングバッファにUSB受信データを直接保存する
様にしてみた。以前書いたがUSB受信データのバイト数は
次回受信時の直前にならないと判らないので、この辺りの
処理を考えるのが難しい。とりあえず動く様になったが、
どうもデータの余りや不足を修正するタイミングを調整する
部分にまだ問題がある様だ。

実際のバッファ残量をRS-232Cで転送させてみたところ、
はっきりとは判らないがDMA転送の割り込みが2回掛かり
データが余計に減っている感じがする。割り込み周辺を
調べているが、実際に2回実行しているか確認できなくて
悩んでいるところだ。

2021年8月5日木曜日

SANYO LC7881 DAC その14

検討した結果LC7881 DACは専用構成になるので、小さ目の箱に
入れる為の基板を作ってみた。

PIC32MXは今回の基板化に合わせて入出力端子を一部変更した。
12MHzのクロックは交換可能にした。

基板は箱に合わせたらスペースが厳しかった。外部分周ロジックは
別基板で、基板無しで短絡すればPCM5102も使用可能にした。

電源はスペース不足と、不要になったら外して使える様にモジュール
にした。左上の基板が欠けている部分はコンセントが付く。

箱に入れたらこんな感じになる。電源モジュールは3個入れる。

とりあえず外部電源で動作確認して音が出る事は確認した。
そろそろトランスを購入しよう。

PIC32MXのプログラムをどうするかだな。

2021年7月10日土曜日

またまたLM380/384 その後

先日書いたLM380/340の回路を組んでみた。

結論から言うと鳴ります。但し、よく考えたら作る前に判って
いたのだが、比較するLM380系のアンプが無いので音質は判り
ません。まあ理論通り動いたのでとりあえず満足だ。

 

回路は動作させながら修正した。


入力の逆側はGNDに接続しなくても動作するが、発熱している
気がするので念の為接続する事にした。1段目はスピーカが無い
のでzobelフィルタを省略していたが、発熱の原因になっては
困るので追加接続した。

前段のLM384の入力間にコンデンサを入れた方が良いのかもしれ
ない。

連続で試験していないので発振してて発熱が大きいかもしれない。
普段から別のアンプを使っているし、理論通りに音が出ただけで
満足しているのでこれ以上は試験しません。

ここからは考察事項

 

前に書いたが、BYPASSは内部の基準電圧になっていると思う。
基準電圧と言う事は片CHに複数のLM380/384を使用する場合、
これらのBYPASSを接続すると特性が良くなる気がする。

特にBTLの場合、BYPASSが逆方向に電圧が変化するから接続
すると相殺されてBYPASSが安定する気がする(赤線)。

そして2段にしたLM380/384は前後段共に同一動作になるはず
なので、こちらも接続したら特性が良くなる気がする(青線)。

左右のCHはBYPASSを接続しない方が良いだろう。

※注意:シミュレーションしていません。

別件だが青線は接続しないなら、前後段のLM380/384を別電源
にする手もあると思う。

今回はこれで終わりだが、名前が必要かもしれないので命名して
おく。「2段式LM384非革命非革命BTLアンプ」としよう。

要らないのでオークションで処分するでしょう。

2021年7月8日木曜日

鉄道模型用 ICコントローラーの検討 その9

前回の基板はアンプICの千鳥が逆で失敗だったので今回作り直した。

ICはTDA2030だったが、ついでにLM1875を購入してみた。

今回は千鳥も正しく、ちゃんと基板に挿入できた。

動作確認する為にオーディアアンプの回路にして、スピーカーが
鳴る事は確認した。

DACが終わったら続きをやろうと思う。


2021年6月16日水曜日

またまたLM380/384

基板の追加作成や作り直しでパターンを作成しているが、
基板に余りがあるので何か作れないか部品を眺めていた。

前に実験したLM384が沢山あるので使えないか考えて
いたら、ふと閃いた。

LM380/384が2段になるのでスルーレートが倍になるが
1段目で電圧シフトして2段目の出力と同じ電圧に上げて、
それを2つ用意して初段を逆接続で反転してBTLをすれば
コンデンサレスで非革命非革命BTLアンプを作れそうだ。

初段はスピーカが付いていないので非革命にしなくても
歪まないだろう。

片CHにLM380/384が4個必要なのが難点だな。

部品も余っているし、作ってみるかな?

2021年6月10日木曜日

SANYO LC7881 DAC その13(PIC32MX編)

基板を作る前にPIC32MXのI2S回路で使うピン番号を
基板に合わせて変更と、PIC32MXのソフト改良の為に
プログラム動作チェック用のUART回路追加とソフト
修正をした。

現在取り付けてあるDACのクロックは高精度温度補償型
TCXO水晶発振器FOX924Bで、パソコンのクロックより
性能が良い品物である。PIC32MXのソフトでは動作中に
PLLの数値を変更してパソコンの周波数に近くなる様に
なっている。しかし、完全に一致する訳ではないので、
脈動するだろう。

そもそもUSBのDACはパソコンからデータを垂れ流しで
あり、DACのクロックが良くてもデータの不足や余りを
発生させる。AmaneroやXMOSでTCXOを付けていても
同じなので、何らかの対策が必要になりその対策をして
いるだろう。

この対策をする為のソフト改良が必要なのだが、実際の
ところどれくらいの頻度でデータ不足や余りが発生する
のか判らないし、改良したプログラムの動作確認が必要
なのでUARTでパソコンにデータを送る事にした。送信
だけできればOKなので、送信しか実装しなかった。

本気でプログラムするなら、USB複合デバイスにすれば
UARTは不要なのだが、そこまでは出来ないと思った。

難しくは無いが作ると面倒なので、UARTプログラムの
抜粋を書いておく。

//初期化 9600bps 8N1
PPSOutput(1,RPA0,U1TX);
U1BRG=259;U1STA=0x0400;U1MODE=0x8000;

//送信 '@'を送る
if(U1STAbits.UTXBF==0)U1TXREG='@';

実際に現在付いているTCXOで調べたところ、1秒間に
2回程度のデータ不足が発生していた。47998/48000
としてパソコンより0.00416%早いと言う結果だった。
5分で600回0.0125秒となりバッファを2400byte用意
して、無音時にバッファを調整すれば5分の曲なら対応
可能だろう。

訂正:遅い→早い

2021年5月13日木曜日

SANYO LC7881 DAC その12 (PIC32MX編)

PIC32MXのプログラムがXC32でコンパイルできないか
調べた。色々調べた結果XC32 v2.50でコンパイルに成功
した。情報が書いてあるサイトもあるが、簡単な話だった
ので一応書いておく。

①xc32-v2.50-full-install-windows-installerをインストール
②PIC32 Legacy Peripheral Libraries.exeをXC32 v2.50の
 フォルダにインストール

結果XC32 v2.50でコンパイルでき、O2の最適化が可能に
なる。最適化でサイズが減り、早くなるかもしれない。

この条件で自分で改良したプログラムのバッファを少し減ら
してコンパイルしたところ、PIC32MX210F016Bで使える
事がわかった。

なおXC32 v3.0も試したが、エラーが出るのでオプションを
指定する必要があるのかもしれない。

2021年5月11日火曜日

SANYO LC7881 DAC その11(ロジック編・試運転)

ブレッドボードに回路を組んでロジックアナライザで動作
確認した。想定に近い動作をしたが、フリップフロップが
1段足りなかった。ロジックアナライザはなかなか良い
仕事をした。

回路修正とPICのプログラム修正をし、ロジックアナライザ
で動作確認してLC7881接続しても問題無さそうなので接続
してみた。

ロジックICがたった3個なのに配線が多すぎなので、とても
じゃないがMCKの周波数に耐えれないと思ったが意外と問題
無く動作した。

PICのプログラム修正不足でノイズが混じった音が出たが、
それも修正してノイズの無い音が鳴った。

今回の回路はこの様な感じだ。クロックのタイミングを調整し、
少ないICで鳴る様にしてみた。74HC00・74・161の3個で
動作する。LC7881の回路はデーターシート通り。

但し動作はしているが最後のDFFが非同期で動作しているので、
DFFからJKFFに交換する必要がある(手持ち部品が無かった)。
ICが数個だからCPLDを使う程でも無いと思ったが、不足部品を
通販で買う事を考えたらCPLDでやれば良かった気もする。

動作原理を簡単に書くと、PICプログラムは元々のAK4645Aの
クロックを外部から入力するモードと同じにして、クロックを
一部カットしている。

PICから見れば外部入力のBCK・LRCKはMCKと非同期で動作して
いるので、LC7881側が欲しいタイミングでクロックを入れれば
良いだけの話だ。

PICプログラムの修正点はMCKを48fsにし、DATAフォーマットを
右詰めか左詰めにすれば良い(元々のプログラムはI2S)。

間違って無いとは思うが、間違っていたらPICプログラム修正で
対応できるとは思う(LRの上下が逆とか)。

JKFFを注文して、動作確認が問題無ければ基板を焼けばハードは
終わりだ。PICのプログラムで修正したい部分があるにはあるが、
実際にやるかは決めてない。

2021年5月6日木曜日

ロジックアナライザとブレッドボード買ってみた

ロジック回路を考え作ると、動作しても正しいタイミング
になっているかどうしても気になる。

昔、会社勤めの時も正しく動作しているか確認したかった
ので、当時はカメレオンUSBを購入して動作確認した。
カメレオンUSBは100MHzまで測定できるが100MHzの
タイミングで測定すると言う意味なのでパルス信号なら
50MHzになってしまい、当時100MHzくらいで動いている
品物の動作確認だったので帯域がもう2倍必要だったので
失敗した。まあ、実際には測定データからなんとか正常
動作したのを確認したのでなんとかはなったが・・・。

今回は格安ロジックアナライザを買ってみた。24MHz対応
らしいのでクロックなら12MHzくらいだろう。44.1KHzの
256fsだと12.288MHzなので、この辺りは厳しいかもしれ
ない。

ついでにブレッドボードも買ってみた。まあ食わず嫌いなの
だが、どうも周波数が高い時・配線長・接触不良等でうまく
動作しない気がするので今まで使わなかった。

現在作っているSANYO LC7881 DACと別件の回路の検討を
するのにCNC切削も面倒だし試しに買ってみる事にした。
まあ、うまく動作しなかってもクロックを下げたら回路が
想定通りになっているくらいいは判るだろう。

いつもならAliexpressで買うのだが、今回はすぐに欲しかった
のでAmazonで買ってしまった。

ロジックアナライザはUSBで認識したので、とりあえず中身
確認をした。

サーチエンジンで画像検索してみたが、同じ基板は無かった。
ICはCypressのCY7C68013Aで他の品物と同じだが、ピン数が
多い品物の様だ。おそらくピン数の多い品物が余って安かった
のだろう。

裏面は部品が無く、左下に3.3Vのレギュレータらしき物もあり、
この品物は3.3V入力専用だろう。本当は5V入力が欲しい所だが、
まあDACを作る分には問題無いだろう。

2021年4月29日木曜日

SANYO LC7881 DAC その10 (PIC32MX編)

その9の続き。

データを一時保管するバッファの構造を変えたりしたが、
44.1kHz再生でノイズが消えずに1週間経ってしまった。

最終的にはUSBHandleGetLengthの使い方が間違って
いた様だ。正しい手順を書いておく。

初期化部分USBCBInitEPで、まずUSBHandleBusyで受信
できるか確認する。受信可能になればUSBRxOnePacketの
受信サイズを考えられる最大サイズを指定して呼び出す。
つまり48kHzで49サンプル分x4byte=196を指定。

メインのループUSBAudioTasks内にて、USBHandleBusyで
できるか確認する。受信可能になればUSBHandleGetLength
を呼び出し、前回受信したサイズを取得する。その後で
USBRxOnePacketの受信サイズを考えられる最大サイズを
指定して呼び出す。以降繰り返し。

つまり受信サイズは次回USBHandleBusyで受信可能になる
まで取得できないと考えられるので注意が必要だ。メーカー
サンプルを修正するなら一部48のところを49に修正するのを
忘れない様に。

その7のusb_descriptors.cについて修正した方が良さそうな
部分があったので、その7に追記しておいた。

2021年4月23日金曜日

SANYO LC7881 DAC その9 (PIC32MX編)

SANYO LC7881への変換を検討せずに、数日かけてPIC32MXで
44.1kHzを出そうとするとノイズが入る原因について調べていた。
Micorochip社のサンプルプログラムは48kHzと32kHzしか対応
してなく44.1kHzが出せない。他にも挑戦した人が居る様だが、
うまく動作しなかった様だ。

Micorochip USB Digital Audio Accessory Board(DM320014)の
回路とサンプルプログラムを使ってみようと思う人の為に私の実験
結果を書いておく。

USBからのデータ読み込みは”USBRxOnePacket”で行っているが、
サンプルプログラムでは周波数による固定値になっている。これを
”USBRxOnePacket”の前に”USBHandleGetLength”で読む込むべき
サイズを取得すれば理論上44.1KHzでも全データを読み込む事が
できる。

しかし、実際にプログラムを修正した結果”USBRxOnePacket”を
修正すると処理時間が増えてしまい、パケットを処理中に割り込み
入った様な場合などに次のパケットを受信してしまうと考えられる
状態になった。つまり、処理が間に合っていない。

私もプログラムの大部分を調べてプログラムのスリム化や高速化を
行ってかなり良くはなったが、現状でノイズが入ったり止まったり
するのでもう少し改良が必要な状態だ。

結論はサンプルプログラムそのままでは、無料のC32コンパイラは
スピード不足で動作しない可能性が高い。現行のXC32でコンパイル
できる様に変更し有料オプションを使って高速化するか、CPUの
クロックを現在の40MHzから50MHzに設定変更するか、パケット
処理プログラムを高速化させる等の対策が必要と考えられる。

あと参考に書くと、Micorochip USB Digital Audio Accessory
Board(DM320014)で使用してるPICはPIC32MX250F128Bだが、
録音部分を削除してheapの量を減らすとPIC32MX220F032Bでも
使用可能だった。

2021年4月19日月曜日

SANYO LC7881 DAC その8 (PIC32MX編)

その5で書いたボリュームとミュートが使えない件だが、
usb_descriptors.cを修正してみた。

修正したところ、DACの回路側でボリュームとミュートを
使用せずにコントロールができる様になった。

私の場合はプログラムは公開しない方だが、この部分は
参考になるかもしれないから書いておく。

//----------------------------------------------------------------
// usb_descriptors.c configDescriptor1
//----------------------------------------------------------------
ROM BYTE configDescriptor1[] ={
    0x09,0x02,0x67,0x00,0x02,0x01,0x00,_DEFAULT | _SELF,0xFA,
        0x09,0x04,0x00,0x00,0x00,0x01,0x01,0x00,0x00,
            0x09,0x24,0x01,0x00,0x01,0x1c,0x00,0x01,0x01,
            0x0C,0x24,0x02,0x01,0x01,0x01,0x00,0x02,0x03,0x00,0x00,0x00,
            0x09,0x24,0x03,0x02,0x01,0x03,0x00,0x01,0x00,
    0x09,0x04,0x01,0x00,0x00,0x01,0x02,0x00,0x00,
    0x09,0x04,0x01,0x01,0x01,0x01,0x02,0x00,0x00,
        0x07,0x24,0x01,0x01,0x01,0x01,0x00,
        0x0E,0x24,0x02,0x01,0x02,0x02,0x10,0x02,0x80,0xBB,0x00,0x00,0x7D,0x00,
        0x09,0x05,0x01,0x09,AUDIO_MAX_SAMPLES * sizeof (AUDIO_PLAY_SAMPLE ),0x00,0x01,0x00,0x00,
            0x07,0x25,0x01,0x01,0x00,0x00,0x00,
};
//----------------------------------------------------------------

2021/04/29追記
上記赤の0x01,0x03部分は0x02,0x06の方が良いかもしれない。

2021年4月16日金曜日

SANYO LC7881 DAC その7 (CPLD編)

信号のタイミングとかをチェックして回路を修正した。

出力側が48fs 右詰めなので、74165がもう1つ必要だった。
LRCKをずらす74164は7474にすると反転Qが使えるので
7486の段数が1つ減る。74165のビットシフトのクロックは
半クロック遅れるので信号を反転させる必要がありそうだ。

ここまで考えてから書くのもなんだが、この回路を作っても
汎用のUSB I2S変換で384fsを出せる品物が無いだろうから
PIC32MX専用回路になる。そもそも無いからPIC32MXを使う
事にしたのだし。(SPDIFから変換する方法はあるかもしれ
ないが・・・。)

PIC32MX専用なら、ここまでしなくてもPIC32MX側の設定を
変更すればもっと簡単な回路で済むだろう。

と言う事で、この回路は没にして別の方法を検討する事にする。

2021年4月15日木曜日

SANYO LC7881 DAC その6 (CPLD編)

VHDLを書く前に、どんな回路なら動きそうか考えた。

その2で作った図は64fs 16bit右詰めからの変換だったが、
今回は64fs 32bit I2Sを48fs 16bit 右詰めに変換になる。

とりあえず上図の様に考えた。当然、動作検証はしていない。

LRCKの変化をチェックする為の74164は実際には7474で
作れるが、まあ実際に作らないと思うのとICの数が減る訳
でも無いので上の回路のコピペで書いた。NOTの為に7404
を追加するのも勿体ないので7486でNOTを作った。

このままVHDLにするとxc2c64aに入らない気がする。
一番上のビットシフトの段数を減らす必要があるだろう。

ここまで書いて思ったのだが、I2Sからの変換よりも右詰め
からの変換の方が一番上のビットシフトの段数が減りそうだ。
(PIC32MXは右詰め出力も可能)

あと、FIFOメモリがあればもっと簡単になりそうな気がする。

※訂正、図に7447と書いてあるが、7474です。

2021年4月14日水曜日

SANYO LC7881 DAC その5 (PIC32MX編)

前回のPIC32MX基板にマイクロチップ社のデモプログラムを
入れて試した。基板にPICKITを刺そうと思ったら、ICとUSB
コネクタに干渉した。仕方がないのでコネクタを斜めに曲げた。

マイクロチップ社のデモプログラムはデモボード用なので、
PIC32MX+AK4645Aの組み合わせで動く様になってある。
AK4645AとはI2Cで接続され、AK4645AがBCKとLRCKを
発生させる仕様である。AK4645A無しでI2S信号出す様に
プログラムを修正する必要がある。

プログラム修正する場合、修正しすぎると元のプログラム
からかけ離れて問題が発生した時に戻れなくなる事だ。
だから、最初は最小限の修正でI2Sを出せる様にする事だ。
実際にプログラムを修正し始めて3日で鳴る所まで来た。
追加修正行が数行程度と、行を無効するコメントくらいで
済んだ。

ちゃんとWindows 10で認識した。

I2SのPCM5102Aと、メインシステムのI2S→PCM変換
回路でPCM1704が鳴ったのでちゃんと32bit I2Sで出力
されているだろう。

動作するにはしたのだが、何点か問題がある事も判った。

I2Sは出る様になったのだが、Windows 10で操作すると
ミュートとボリュームが使えない。ミュートしても音が
出るし、メインボリュームで音が小さくならない。この
処理はAK4645Aで行っていたのかもしれない。Windows
側でボリュームが下がればWAV信号を小さくすると思って
いたが、場合によってはPIC32MX内部でデータ計算をする
必要があるかもしれない。

次にLC7881を使う予定であるが、96fsか192fsができれば
良かったのだが、MCKからBCKを作る時に内部で分周する
場合は2の倍数しか使えないことが判った。つまり6分周に
なり384fsになるので、48kHz以上の再生は厳しい。

鳴らすだけなら問題ないとも考えられるので、とりあえず
次に進む予定だ。

プログラム修正は面倒だが、ここまでは動作して当たり前
の話だ。ここからが難関のCPLDを使ってビットシフトを
VHDLで書く事だ。

とりあえずCPLDでVHDLを書き込んで動作確認できる様に
LC7881基板とLPF基板を作った。

2021年4月5日月曜日

プリアンプ実験 その3

前々から作っていた実験用のプリアンプを改良した。
その1
その2

結局のところ、電源基板は2回オペアンプ基板は3回作り直した。
(失敗も含めて)

メインシステムのDAC内蔵電圧+電流アンプの結果より、オペ
アンプのバッファをLME49600からBUF604Aに変更した上で、
バッファの電源をオペアンプの電源から分離した。

オペアンプはLM317/337で約±12Vだが、バッファは前段の
コンデンサから直接で±17Vくらいだ。

バッファの出力をダイレクトにヘッドフォンに、R+Cの後ろを
プリアンプ用の出力にした。

この実験用アンプはディスクリートオペアンプの試験もできる様に
ICソケット間が離してある。画像はK田風オペアンプだ。

作ったけど使わない気もするが、たまにヘッドフォンで使かおう
かな?

2021年3月23日火曜日

SANYO LC7881 DAC その4 (PIC32MX編)

作った基板に部品を載せながら足りない部品を注文していた。

とりあえずDAC用PIC32MX基板は完成した。

amaneroピン互換で作ってみた。

回路はMicrochip社のUSB Digital Audio Accessory Boardから
I2Sを動かすのに必要な部分だけにした。

USB Digital Audio Accessory Boardについてソースを見たり
サーチエンジンで検索したところ、Micorochip社のサンプル
プログラムは48kHzと32kHzしか対応してなく44.1kHzが出せ
ない様だ。実際にPIC32MXで44.1kHzの追加を行った人の
プログラムもあるみたいなのだが・・・。

そもそもなのだが、USB Digital Audio Accessory Boardの
プログラム自体が古いコンパイラ用で現行のコンパイラと違う。
また、Micorochip社はPIC32MXにHarmonyと言うフレーム
ワークを作っているみたいなのだが、どうもそれよりも古い
みたいなのでHarmonyでは無いかもしれない。

つまりUSB~I2S変換を作る場合、オリジナルのサンプルソフトを
改造するか、Harmonyで作るかを選ぶ必要がある様だ。もっとも
Harmony自体も最終更新が2015年みたいなのだが・・・。

2021年3月13日土曜日

基板パターン修正しきれてなかった><

切削の時に間違っていたTDA2030の千鳥が、今回焼いた
基板でもまた同じ失敗をしてしまった。

切削とエッチングが別フットプリントであるのも失敗の
原因だが、基本的にもっとチェックしないとダメだな。

実験用に千鳥逆にして作るか・・・

2021年3月12日金曜日

2021冬基板作成

冬の間に作ったデータで基板を作った。

今回は7種類で67ドルくらい。

鉄道模型用 ICコントローラー、SANYO LC7881 DAC、
電圧+電流アンプ 補完再生システムNJ2113アンプ改良、
DAC+アンプの改良、プリアンプ改良など。

最近、歳のせいか頭が回らないので先に持っている部品を
取り付けて無い部品を発注予定。

とりあえず余って不要になりそうな基板をヤフオクへ!。

2021年3月3日水曜日

鉄道模型用 ICコントローラーの検討 その8

実験中に気が付いたのだが、NJM2113内部の抵抗位置が
間違っていた。過去の回路図全てだが、影響無い部分だし
UPし直すのが面倒なのでそのままにしておこう。

切削した基板でコンローラーの前段部分を作ってみた。

回路は一部省略してこんな感じにした。

今回の失敗など

1.NJM2113の後ろのスイッチを逆にしても反転しない。
  よく見るとNJM2113の1段目が反転アンプなら2段目
  も反転してBTLになるのだが、1段目が非反転なら
  2段目も非反転になってしまう。

2.予想はしていたが、NJM2113の内部で中間電位に落とす
  125kΩが小さいので蛇行運転の調整に影響する可能性が
  高い。

3.加速ボリューム接続を簡単にしようと思い回路を簡単に
  したが、中間電位と分圧にしないと上手く動きそうにない。

4.減速側のダイオードは無くても大丈夫かと思ったが、実験
  結果は今一つぽかった。

5.実際の実験は9VのACアダプタで行ったが、電位差が小さい
  ので調整に影響が出そうな感じであった。

6.実際に車両が動き出す電圧は0Vでなく高い電圧なので、少し
  バイアス電圧をかけるのが良いかもしれない。但し、バイアス
  電圧分だけコンデンサーのチャージ電位差が減るので調整に
  影響がありそうな気がする。

7.NJM2113の代わりに8002aを使っていたが、電圧が耐圧を
  超えていた。慌ててNJM2113に交換した。

前述を考慮して回路を書き直してみた。

TL072でなくNJM072にしたのは、9VのACアダプタで実験する
可能性があるので8Vで動くNJM072を選んだ。

回路図の※印部分を高くするとモーターが動かないだけの電圧を
かけると言う事になる。但し、これってアンプの直流漏れだな。

その8までやっておいて書くのもなんだが、何か最終的に没に
なりそうな気がしてきた。

2021年2月16日火曜日

鉄道模型用 ICコントローラーの検討 その7

確定申告が終わったので、続きが進むと良いのだが・・・。

前段のコントロール回路のデータを作って切削した。

テストなので回路は少し簡単にした。

今回は0.8mmのみで、パターンと穴あけをした。

操作を誤って右下の外周に凹みができた。

穴を開け始めたら、どうも穴数が少ないので2つ目の穴で停止
させたのだが、どうも設定がずれていたのか右下のICソケットの
下のパターンと、その2つ下に穴が開いてしまった。

CNCの修理をしたので、ズレはマシにはなった。しかし、よく
見ると画像の「/」と「\」の太さが「/」の方が太いので、
やっぱりどこかに遊びがある様だ。

部品を載せるのは明日以降だが、明日・明後日は寒いので金曜日
くらいか?

2021年2月5日金曜日

SANYO LC7881 DAC その3(検討編)

LC7881を使う場合384fsが必要なのだが、パソコンで使う場合
USB→SPDIF変換→PD0052→CPLD→LC7881となり、余計な
回路と言うか変換が入っている気がして仕方がない。

USBからI2Sに変換する時に384fsが出る品物があればと思い
調べてみたら、PIC32シリーズで変換すれば出せそうな事が
わかった。

PIC32 USB Digital Audio Accessory Boardのプログラムを
修正すれば良さそうな気がする。PIC32 USB Digital Audio
Accessory BoardはPIC32MX250F128Bの様なので、秋月で
買っても350円で高くはない。

AN1422と言う資料によると192fsも出せそうだ。理屈の上では
16bit 176.4KHz迄ハイレゾ再生できる事になる。PD0052の
場合は44.1KHzまでだから、こっちで検討しようと思う。

2021年2月4日木曜日

CNC3018 修理

先日の鉄道模型用ICコントローラーで切削した基板を見て、
どうも本体の左右方向にズレが大きいので左右方向の遊びが
大きいか調べていたらZ軸ユニットが割れていた。

画像の右側は真っ二つに割れていいるが、左側も左下に端から
端までヒビが入っていた。

過去の切削結果から考えると、結構早い段階で割れた可能性が
高そうだ。

CNC3018の場合、これらの部品が3Dプリンタで作られた品物と
私の購入した品物の様に射出成型した品物がある。3Dプリンタ
の場合、積層面でヒビが入るとか書かれたページがあったので
射出成型品を買ったが、割れた品物を調べると成形品が歪んで
いて、その歪が原因で割れた気配がある。

成型した時に冷える前に型から取り外して放熱し、その段階で
歪んだ後で金属を挿入した感じだ。

成型直後の熱い状態で挿入するか、購入後に熱を加えて歪んだ
部品を金属部品に合わせて変形させないと割れると推測した。

つまり、この部品を再購入するとZ軸一体で4000円くらいする
のだが、買いなおしてもまた割れる可能性がある。

買いなおしても割れるならと思い、試しに修理してみた。

完全に分離した方は針金を通しやすいが、ヒビ側は通しづらい。
部品が歪んでいるので思いっ切り締めると別の部分が割れそうな
気がするので少し弱めにした。

再組み立てをしたが、外す時に左右方向の部品を取り外したので、
再調整しなければならないだろう。

2021年2月2日火曜日

鉄道模型用 ICコントローラーの検討 その6

CNC3018で切削した基板を組み立てて動作確認した。

想定通り動作した。

あまり良く考えずにTDA2030を同じヒートシンクに取り付け
たけど、場合によっては動かなくなるので以降注意しよう。

買ってしまっていたのでTDA2030で作ったが、秋月電子の
新商品に70円でLM1875が発売されていた。10円高いけど
4Aまで使えるので、こっちの方が良いだろう。LM1875は
ダイオード不要だが、線路状態の接触が不安定で通電・非
通電があった場合に逆起電力がスピーカーより大きくなりそう
なのでダイオードは付けた方が良いかもしれない。

動作はしたので、コントロール回路を試作してみるかな?

2021年1月29日金曜日

SANYO LC7881 DAC その2(検討編)

作れるかどうか検討する為にVHDLを書いてみて、エラーが
出ないか試しながら検討した。

基本方針としてLRCKを加工するとジッタが発生して音が
悪くなりそうな気がするので、できればLRCKはそのまま
使うと事にする。

入力バッファを出力バッファにコピーしてシフトして出力を
考えたが、バッファの入力が2つになるのでVHDLを良く
検討する必要があり別の方法が無いか考えた。

①バッファを48ビット用意し、PD0052から信号の出ている
 赤の期間だけデータを16bitシフトしながら読み込む。

②データを読み込んだら、データ読み書きを行わない緑の
 期間に384fsで素早く48bitを16bitシフトする。

③データ出力は信号を出力する青の期間だけ16bitシフト
 しながら出力する。

これでバッファ内は全て隣からのシフトになり、タイミングも
干渉しないはずだが、この内容をうまくVHDLに出来るかが
問題だ。

2021年1月27日水曜日

鉄道模型用 ICコントローラーの検討 その5

気を取り直してKiCADでデータを作り直した。

ついでに穴がずれる事を考慮してパッドを大きくした。

FlatCAMで変換してCNC3018で切削。

速度を落としたのでパターン1時間、穴あけ1時間も掛かった。

0.5mmのエンドミルをパターンで1本、穴あけで1本折って
しまった。0.5mmのエンドミルを使う事自体が問題なのかも
しれない。穴あけの途中で0.5mmのエンドミルで開けた穴が
昨日と同様に小さいので途中から0.6mmに交換した。それでも
CADで指定したサイズより小さい。

ドリルかテーブルか判らないけど遊びがあって、それが原因で
パターンの削る幅やドリル穴径が狂う様だ。例えば穴の場合は
CADかFlatCAMで0.2mmくらい大きくなる様にすると良いかも
しれない。

そもそもの話だが、パターンと穴あけを同じエンドミルですると
交換せずに全部できると思っていたのに、途中で折れたら何を
しているのか判らない。それなら、最初からパターンは尖刀を
使っても良いのかもしれない。同じエンドミルでするなら、もう
少し太いエンドミルを使わないと駄目だろう。そうなると配線
パターンが厳くなるので、ICとか使わない基板だけになって
しまうが・・・。

とりあえず切削が終わったので、穴が小さくて部品が入らない
場所だけピンバイスで穴を広げて使う事にしよう。

2021年1月26日火曜日

鉄道模型用 ICコントローラーの検討 その4

久しぶりにCNCを出してきて切削してみた。

刃は0.5mmで、パターンと穴を同じ刃で行った。

途中で刃が折れた。交換時に原点に戻すのに失敗して0.3mm
程度ずれた。画面では上下方向。穴開け中にも1本折れた。
左上のヒートシンク用穴。

切削後、穴が小さいと思い部品を入れようとしたら入らない。
切削速度が速すぎてドリルが斜めになってしまっている様だ。

結局のところ刃が折れると言う事は切削速度が速すぎるの
だろうが、この状態でも1時間くらいかかっているので
時間かけて切削するなら基板は海外発注した方が良いと思う。

仕方が無いので穴を広げて使おうと思ったらTDA2030Lの
足パターンの千鳥が逆だった。パターン作成から全部やり
直しだ。

2021年1月25日月曜日

SANYO LC7881 DAC その1(検討編)

その昔、CH5000Rと言う5連装のCDプレイヤーがあった。
この機種は魅力的な音が鳴るとの評判だったので。当時、
私と友達と1台ずつ買った。友達のが壊れて私のと交換
したが、使用頻度が少なかったので数年後帰ってきた。

友達のはダメっぽかったので分解してLC7881だけ残した。
私のはベルトが伸びているだけっぽかったのでヤフオクで
修理できる人に売った。今考えたら、友達のもベルトが
問題だっただけかもしれないが、もうLC7881だけしか
残っていないので仕方がない。

このLC7881でDACが作れないか考えてみた。googleで
検索もしてみたが、どうもはっきりしない。

データシートで調べるとこのチップはデジタルフィルタ無し
16bitなのは問題無いんだが、内部でPWMを使う都合上で
入力信号のBCLKが48fsである必要がある様だ。

簡単に書くと、LRCKの1/48がBCLKと言う事だ。一方、
PD0052やI2SはLRCKの1/64がBCLKだ。

通常のチップはPWMとか無いので48fsでも64fsでも動くの
だが、この制限のせいで製作情報が無いのだろう。

どうにかできないかと考えたところ、PD0052は384fsが
出ている。この384fsを1/8にすれば48fsになる。つまり、
CPLDを使ってPD0052の64fsデータを48fsデータに変換
出来ない事は無いと言う事だ。

XC2C64Aに入れば良いのだが・・・

USBから使おうと思ったらSPDIFにしてPD0052通す必要
あるし・・・

気が向いたら続きます。

2021年1月1日金曜日

Pioneer MOSFET PAL007Aアンプ

以前、破棄のカーステに使われていたPioneer PAL007Aが
MOSFETの文字が気になったので取り外して残してあった。

調べるとTDA7388の基板が使えそうなので注文した。
中身はTDA7560の様な事を書いているページもある。

12VのACアダプタで動かすので、電解コンデンサは16Vにした。
他の部品はほとんど手持ち在庫。

基板を組み立て、適当に余った電線でコネクタを取り付けた。

ヒートシンクはとりあえずビニタイで止めた。

ジャンパーピンの設定が判らなかったが、両方短絡でOKの様だ。

まあ、普通に鳴りました。

箱に入れて使うか、そのままヤフオクへ出すか考え中。