別記事の「周波数カウンタを作る」企画の14回目で、おじさん工房さんが設計された高性能な周波数カウンタ RFC-5 の表示装置を、入手性の良い「ST7032」を使った I2C の LCD に変更する際には、ロジック・アナライザで I2C の初期化信号などを解析する必要がありました。(やどさんが解析されました。)
私の能力では I2C 信号解析は、まだ敷居が高い感じですが、今回は、デジタル回路の解析に持っていると便利な、ロジック・アナライザをプリント基板をオーダーして製作します。

今回の記事は、プリント基板製造の PCBgogo さんに提供を頂いています。
よろしければ、以下のリンクのクリックにご協力ください。
ロジック・アナライザとは
ロジック・アナライザとは、多数のチャンネル(通常は8チャンネル以上)のデジタル信号を、分かりやすく画面に表示する装置です。
昔のロジック・アナライザは、大きな本体に広い画面が付いていて、デジタル信号をグラフ化するだけの器材の印象でした。

デジタル信号は2進数の「High」と「Low」で色々な信号をやり取りしますが、この信号を見て人間が理解するのは無理でしょう。(昔のウルトラ物の隊員は、コンピュータが出力するパンチテープを読んでいましたが・・・)
また、マイコンなどの多数の信号線の流れは、一覧にしないと理解は難しいでしょう。
現在のロジック・アナライザでは、これらの信号解析機能が高度化しています。
この機能を使えば、マイコンでプログラムを作成中に I2C の部品が正常に機能しない場合に、MCU が送信している信号を16進数や英数字に変換して解析することで、信号の初期化やアドレスなどが正常なのかを判断できます。
他の器材との違い
ロジック・アナライザに似た器材に、オシロスコープとスペクトラム・アナライザがあります。
オシロスコープは、2~4チャンネルのアナログ信号の解析に使われます。
スペクトラム・アナライザは、周波数成分を横軸に表示する装置です。
1973年、それまではアナログ回路とロジック回路の解析はどちらもオシロスコープで行っていましたが、チャンネル数の増加と信号の高速化のために、オシロスコープでは解析が困難になってきたためロジック・アナライザが作られました。
2012年には、ロジック・アナライザの機能を備えたオシロスコープ、ミックスド・シグナル・オシロスコープ (MSO)が開発されました。
信号数の多いシステムを解析する場合には、ロジック・アナライザを使用します。
アナログ波形の品質を観察するには、オシロスコープを使用します。
周波数成分の分析には、スペクトラム・アナライザを使用します。
ロジック・アナライザの性能
ロジック・アナライザを選ぶ際に重要となる性能は、以下の物でしょうか。
・最大サンプリング速度
サンプリング速度が速ければ、観測しているデジタル信号を詳細に見ることが出来ます。
分析するシステムのクロック速度の10倍程度が目安です。
・最大メモリ
搭載しているメモリが多ければ、より長時間の信号をとらえて分析が出来ます。
・トリガ設定
色々な信号に合わせたトリガの設定が出来ないと、分析する信号を表示することが出来ません。
・プロトコル解析機能
I2C や SPI などの信号を解析して画面に表示する機能です。
プローブの種類
ロジック・アナライザに取り付けるプローブの種類は3種類に分けられますが、プローブだけを見たら下の2つは同じように見えます。
・フライング・プローブ
安価なロジアナで良く使われている、チャンネルごとに接続するプローブです。
・コネクタ・プローブ
基板上に専用のコネクタを取り付けておき、ロジアナをそこに接続します。
・コネクタレス・プローブ
名前のとおり、基板上にはパターンのみ作っておきコネクタは取り付けません。
プローブの固定には専用のプローブ固定具が付きます。
以前製作したロジアナ
すごく前になりますが、トランジスタ技術誌 2000年4月号の「簡易パルス・ジェネレータ & ロジック・アナライザの製作」という記事を参考に、簡易型のロジアナを作りました。
機能的には、昔の電子工作では良く使っていたパソコンのプリンタ・ポート(パラレル・ポート)に接続するタイプの器材で、8チャンネルの TTL レベルの信号をパソコンの画面に表示するものでした。
(作っただけで満足して、ほとんど使った記憶がありません。)

市販品の確認
上の写真のロジアナは20世紀の技術で作られていますが、今は21世紀なので安価で手に入るロジック・アナライザが色々と販売されていて、その性能も格段の進歩を遂げています。
そこで、どんなものが入手できるのかを調べてみます。
ちなみに、調べた全てがパソコンにつないで使用するタイプです。
USB ロジックアナライザ
Amazon などで販売しているロジック・アナライザです。
正式な型番などは分かりません。
価格は1500円程度で、「24MHz 8チャンネル」と書いてあります。

中身は Infineon Technologies 社の CY7C68013A という MCU(又は互換品?)が入っているそうです。
基板のサイズは違いますが、下の写真のボードと、ほぼ同じ構成ですね。
こちらは CY7C68013A MINI BOARD という MCU の評価ボードです。
このボードを使っても「USB ロジックアナライザ」と同様のロジアナが作れるようです。
(これの互換品なら千円以下で手に入ります。)

このロジアナのソフトは後ほど簡単に解説しますが、オープンソースの Sigrok の Pulseview という高機能なロジアナソフトを使います。
LHT00SU1
LHT00SU1 という型番のロジック・アナライザです。
Amazon では5000円程で販売しています。

このロジアナは、デジタル8チャンネルだけではなく、アナログ1チャンネルも対応しています。(本体にはアナログ2チャンネルと表示されています。)
デジタル部の性能は、上のロジアナと同様ですが、アナログは公称 3 MHz(実際は 1 MHz 以下)程度のようです。
ソフトは、上と同じ Sigrok の Pulseview が使えるようです。
その他のロジック・アナライザ
他にもパソコンに接続するタイプのロジック・アナライザは色々とあります。
とりあえず、どんなものかを見比べてみます。
・DSlogic U2Basic は、16 チャンネル 400 M サンプリングですが、Amazon で2~3万円位です。

・LA5016 Kingst USB ロジック アナライザは、(公称)16 チャンネル・500 M サンプリング、Amazon で4.6万円位です。

・Saleae 社の Logic 8 は、8 チャンネルのデジタル(25 MHz)・アナログ(1 MHz)秋月電子で8万円位です。

これらのモデルはデザインもカッコいいですが、お値段もそれなりの高価な物になっています。
う~ん、サンプリング速度を除けば、最初に紹介した2千円以下の「USB ロジックアナライザ」と性能的に大きな差が無いように感じました。
私が想定している使い方は、MCU の低速な I2C や SPI の信号を見るぐらいなので、高価な物はいらないかな?
ロジック・アナライザの自作
「それじゃぁ、「USB ロジックアナライザ」を購入してみよう!」と思ったときに、RFC-5 周波数カウンタでお世話になっている、おじさん工房さんの掲示板で「やどさん」から、高性能なロジック・アナライザが自作できるという思っても見なかった、うれしい情報を教えて頂きました。
「gusmanb/logicanalyzer」と「sigrok-pico」です。
どちらも GitHub にデータが公開されていますが、Raspberry Pi Pico を、ほぼそのままロジック・アナライザとして使っているようです。
この2種類のうち、「sigrok-pico」の方は、しばらく更新がされていないようです。
「gusmanb/logicanalyzer」は Ver.5 まで開発が進んでいます。(この記事を書き終わって見てみたら、Ver.6 が出ていました。)
また、Raspberry Pi Pico は入力端子に 3.3 V までの電圧しか掛けられないので、5 V 系の回路に直結できませんが、こちら(gusmanb)のロジック・アナライザは、レベルシフタ回路が付いています。
「gusmanb/logicanalyzer」の性能は、レベルシフタを付けた状態でも 24チャンネル・100 MHz という高性能です。(さらに、増設して24チャンネル単位でチャンネル数を追加できます。)
これは、作ってみなくては!
KiCad で基板データを作製
「gusmanb/logicanalyzer」の組み立てに必要なデータは、全て GitHub に公開されています。
詳細については、以下のリンク先からダウンロードして見てみてください。
ダウンロードしたファイルを解凍すると、「Electronics」の「LogicAnalyzer」の中に
・LogicAnalyzer(ロジック・アナライザ本体)
・LevelShifter(レベルシフタ)
・LogicAnalyzer_JasonYANG170(今回は使いません)
というフォルダがあります。
中身が KiCad V8 のファイルなら、現在使っている KiCad V8 でそのまま読み込めるのですが、V7 のファイルなので(色々やってみましたが)読み込めません。(旧版のファイルはインポート出来ないのかな?)
一番簡単な方法で試してみます。
KiCad V7 をインストールしてプログラムを立ち上げ、必要な部分をコピーして V8 にペーストしました。
出来上がりが、こちらです。
上左がロジック・アナライザ基板、上右がレベルシフタ基板、下は周波数カウンタ RFC-5 基板の新型です。

プリント基板をオーダー
今回も出来上がったプリント基板は、PCBgogo さんにオーダーしました。

頼んだ時は送料無料キャンペーン中だったので、非常に安価($11)で20枚のプリント基板がオーダー出来ました。
初回は $1 で基板が作れますし、年間で数回は送料無料キャンペーンをやっています。
ユニバーサル基板を購入するのと同じぐらいの価格で気楽に基板をプロにオーダー出来るので、プリント基板の自作に興味がある方は、ぜひご利用ください。
いつものように KiCad で作ったデータを圧縮して PCBgogo さんに送ると、担当者から日本語で連絡が来ます。
問題なければ製造許可を出すと、1日程度でプリント基板の製造が終わり、翌日には発送、次の日には日本に着いています。(製造と税関通過に2日間)
しかし、毎回思いますが国内に着いてから自宅に到着までの日数が長いです。
日本国内では税関で数日、国内輸送準備などで数日かかり、国内移動にさらに3日で合計1週間弱かかりました。(北海道だから?外国扱い?)
到着時の様子
今回、PCBgogo さんのパッケージが前回とは変更になっていました。
箱のデザインは同じ感じですが、サイズが1回りぐらいは大きくなっています。

以前は梱包された 10 cm X 10 cm の基板10枚を2つ入れると折り重なってパンパンに入ってきましたが、今回の箱なら余裕でした。

前回の箱の様子(基板は1セットです。)

パッケージの状態です。
しっかりとプチプチで圧着されています。

出来上がった基板
到着したプリント基板は、いつもどおりに良い出来です。
電子拡大鏡で確認しましたが、細かなパターンも印刷された文字も問題ありませんでした。

この後、つながった基板を切り離します。
今回は、切り取り穴の隙間を小さく設定したので、丸のこを使わなくてもニッパで簡単に分解できました。(手でも折れます。)
バリをヤスリで削れば、きれいなプリント基板の出来上がりです。

必要な部品
このロジック・アナライザは、ほとんどの機能を MCU(Pi Pico)内のファームウエアが担当しているので、使用部品はほんの少しです。
Raspberry Pi Pico
メイン部品の Raspberry Pi Pico は、WiFi 機能付きでも無しでも OK です。
(この基板ではそのままでは使えませんが、MCU に RP2040 を使っている基板なら何でも使えます。)
ただし、V.5 では高速版の Pi Pico 2 は使えません。(Pi Pico 2 は、内部処理に元々の問題があるとか・・・)

TXU0104PWR
5 V のロジック信号を高速に、Pi Pico の入力上限電圧である 3.3 V に変換するために使用します。
最大の24チャンネル使うためにはレベルシフタ基板の両面で6個を使いますが、私は機能試験をしたかったので、裏側に3個実装して12チャンネルにしてみました。(必要なら後で部品を追加します。)
コンデンサなど
ロジックアナライザ基板用
・20ピンヘッダ 2個(Pi Pico 用、無くても OK)
・100 kΩ、0603 1個
・SMD ダイオード:1N4148 1個
・15ピン2列 L型ピンソケット 1個
・3ピン L型ピンソケット、ピンヘッダ 各1個(外部同期、増設用)
レベルシフタ用
・0.1 uF 0603 12個
・15ピン2列 L型ピンソケット、ピンヘッダ 各1個
・2ピン1列ピンヘッダ 1個
プローブ部
今回は I2C や SPI など良く使う回路分のプローブは自作します。
・プローブの先 5個
・圧着用ピンヘッダ 5個
・適当な配線 5本分
沢山作るのは面倒だったので、20チャンネル分(10 X 2)は完成品を AliExpress で購入しました。

プローブ部の製作
オーダーしたプリント基板の到着まで時間があったので、先にプローブ部を作りました。
まず、色付きの並行コードを準備します。

圧着端子を準備します。

圧着端子は専用工具で圧着します。

5本分の圧着が終了です。
本当は、グランド線を分かりやすくするために黒色の線が欲しかったのですが、無かったので紫色をグランドにします。

今回。プローブを作るのに使用したのは、このような入手性の良い端子ではなくて、

先端が2つに開くタイプを初めて使いました。

先端の拡大写真です。
この小さな金具で、しっかりと IC の足などにプローブを固定します。

プローブの半田付けには、プローブのプラスチック部分に熱が伝わらないように。また、端子が固定出来るように半田付けの「ヘルプ工具」(Folding Third Hand / Helping Hand)を使いました。
Thingiverse からデータを落として来て、3D プリンタで作りました。
この「ヘルプ工具」は市販の物と違って、使わないときにはペッタンコに折り畳めるので収納に便利です。
そして、この「ロボット感」が良い感じです。
このヘルプ工具で、半田付けで熱が伝わると変形しそうなプラ製の先端部分に近い部分をつかみます。
そして、忘れずに後ろのプラ部品を線に通しておきます。(良く忘れてしまい、付け直します。)

配線の色と同じ色のプローブ部を5個取り付けて完成です。

ロジック・アナライザ基板の組み立て
ロジック・アナライザ基板の組み立ては簡単です。
基本的には Raspberry Pi Pico と15ピン2列 L型ピンソケットを半田付けするだけです。
基板のパターンは、 Pi Pico にピンヘッダを付けても付けなくても大丈夫なように作られています。
私は最初にピンヘッダ付きの Pi Pico を使ったのですが、ケースに入れる際に基板が出っ張ったので、後からピンを取り除きました。
基板下のダイオードと抵抗は、外部トリガを使用する際に使います。単体で使うなら無くても動作します。
本体中央には、オリジナルそのままのコピーライトが入っています。

レベルシフタ基板の組み立て
レベルシフタ基板の組み立てです。
今回は動作確認が目標なので、表側の13~24チャンネル用の部品は取り付けませんでした。
取り付けたのは、
・入力用の、15ピン2列 L型ピンソケット
・出力用の、15ピン2列 L型ピンヘッダ
・基準電圧用の2ピン1列ピンヘッダ
です。
この2ピンのジャンパを外すと、外部電源(1.6 V ~ 5 V)を基準電圧として動作します。

裏側です。
3個の TXU0104PWR と6個のコンデンサを取り付けます。
裏側が1~12チャンネルをレベルシフトします。

ケースの製作
このままでは、机の上の金属と接触すると短絡して壊れてしまうので、ケースに入れます。
ケースはいつもの Fusion で設計しようと思ったら、Thingiverse にありました。
「Dr Gusman Pico based Logic Analyser stackable case」です。
積み重ねスタックして使える設計のケースですが、1個分だけ 3D プリンタで出力しました。

このケースに連結したロジック・アナライザ基板とレベルシフタ基板を入れます。
この状態でフタしたらピッタリと作られているために、Pi Pico にピンヘッダを付けていると厚さがありすぎてフタが閉まりません。
面倒ですが、半田吸引機でピンヘッダを取り除いて、再度半田付けしました。
また、特殊な15ピン2列 L型の端子は、この時点では入手できなかったので、20ピン2列の端子を切断して作ったためにケースの加工が必要でした。

ファームウエアの書き込み
簡単な作業だったために、 Pi Pico にロジック・アナライザのファームウエアを書き込む手順を忘れていました。
「Release 5.1」のページに行きます。
その中で利用したい Pi Pico のファームウエアを選びます。
私は WiFi 無しモデルを使ったので、「Firmware-LogicAnalyzer-5.1.0.0-PICO.uf2」をダウンロードしました。
このファイルを Pi Pico に書き込みますが、手順は超簡単です。
Pi Pico 表面のリセットスイッチを押しながら、Pi Pico をパソコンにつなぎます。

「RPi-RP2」と言う名前の USB 外部記憶装置として Pi Pico が認識されるので、Windows エクスプローラでファームウエアを張り付けるだけです。
無事ファームウエアが書き込まれたら、勝手に Pi Pico はリセットがかかり、ロジック・アナライザとして機能します。

動作確認
完成したロジック・アナライザを Windows パソコンにつなぎます。
パソコン側のソフトは、上記と同じ「Release 5.1」のページ「LogicAnalyzer-5.1.0.0-win-x64.zip」を落として適当な場所へ解凍しておきます。
起動時に(著作権的に)気になるキャラクタが出ますが、ロジアナはこんな画面が表示されます。
黒い画面でオシャレな印象です。

左の「Refresh」の横の下矢印を押すと、ロジック・アナライザが認識できていれば、その接続先が選べます。
そして、「Current device」を押すとロジック・アナライザが接続されます。
プローブをつないで適当なデジタル信号を入れてみます。
今回は、おじさん工房さん製作の RFC-5 周波数カウンタ基板の I2C 端子につないでみました。
しかし、色々やっても何も波形が出ません。

ロジック・アナライザ基板とレベルシフタ基板の半田付けやプローブの導通を調べましたが異常は見つかりません。
しかし、KiCad のデータを確認したところ、不具合個所を見つけました!
オリジナルの KiCad V.7 のデータを V.8 に貼り付ける時に、3.3 V のラインが消えていました。

この画像は裏面の青色の配線を消して表面の赤色だけにしているので分かりやすいですが、同じ位置に裏の配線があったので、線が消えたのを見逃していました。(言い訳ですね。)
普通は、基板のオーダーに出す前に、再度、異常がないか配線の試験を行うのですが、オリジナルのパターンをそのまま張り付けたのでその手順が抜けていました。
基板パターンの修正
パターンの修正と言っても、Pi Pico の 3.3 V の端子と 3.3 V の入力端子を接続するだけです。
すぐに修正は終了しました。

動作の再確認
動作確認中に、ケースにテプラで簡易的なラベルを作りました。
これで、チャンネル番号とグランドの位置が一発で分かります。

同じようにロジック・アナライザを接続します。
やった~!今度は、すぐに波形が出ました。
先ほどと同じように、自作周波数カウンタの I2C 端子を見てみます。
ちゃんと、アドレスが読み取れました。
ロジアナ・ソフトの交換
オリジナルの「gusmanb/logicanalyzer」は、そのファームウエアを動作させるためには、準備されている専用の Windows ソフトを使います。
このソフトでのロジック・アナライザの簡単な動作確認は出来ました。
しかし、同じサイトに Linux と Mac 用のソフトウエアが置いてありますが、自宅の作業部屋の ubuntu では動かすことが出来ませんでした。
もちろん「chmod」で実行権限は与えてあります。
また、オリジナルのロジアナソフトは、少しクセがあって初心者の私には、ちょっと使いづらい感じがします。(作者の方、すみません。個人の感想です。)
そこで、オープンソースで開発されていて、ネット上でも色々と情報が公開されている「Sigrok」の「Pulseview」を使ってみます。
GitHub に公開されている「uLA(Micro Logic Analyzer)」のファームウエアを使います。
このソフトは、Raspberry Pi Pico などの MCU に RP2040 を使ったボードで簡単にロジック・アナライザを実現します。
この「uLA」のファームウエアを Pi Pico に書き込むと、パソコン側のソフトは「Sigrok」の「Pulseview」が使えるようになります。
ただし、回路が一部異なるので制限が発生します。
「gusmanb/logicanalyzer」はそのメインボードの回路において、高速な信号を安定して表示させるために「GPIO0」と「GPIO1」を短絡しています。
「uLA」など Pi Pico を「Sigrok」の「Pulseview」で使う場合、チャンネル1とチャンネル2が使えません。
「gusmanb/logicanalyzer」は24チャンネルですが、「uLA」ファームを使うと最大が22チャンネルとなります。
uLA ファームの書き込み
前回と同様に、Pi Pico のリセットスイッチを押しながら USB ケーブルでパソコンにつなぎます。
「RPi-RP2」が表示されたら、「uLA」ファームを書き込みます。
ファームウエアが公開されている Releases page は、下のリンクからどうぞ。
(「ula_0.0.5.uf2」をダウンロードします。)
Pulseview の導入
「Sigrok」の「Pulseview」は、以下のリンクから入手してください。
通常なら、Windows 版の最新のものを使います。

ファームウエアが「uLA」に書き換え済みなら、Pulseview が動作します。
接続先の設定は、「Protocol selection」で「Openbench Logic Sniffer & SUMP compatible」を選びます。

そして「Connect window」で以下の設定にします。
注意事項としては、
・Serial Port で「ula」が付いているデバイスを選ぶ。
・baud 欄は空欄にする。(速度設定は選ばない。)
設定が終わったら、青い「Step 3」部分を押す。

これで使用例の多い Pulseview が使えるようになります。
先ほどと同じ、自作周波数カウンタの I2C 信号を見てみます。
こんな感じで信号を見ることが出来ました。

次回の予定
簡単な回路で、100MHz 24チャンネルと言う市販品並みのロジック・アナライザを自作することが出来ました。
そして、オープンソースで現在も精力的な開発が進んでいる「Sigrok」の「Pulseview」を使う事も出来ました。
次回は、「Pulseview」の色々な使い方を勉強します。
コメント