概要
低予算オシロ、ロジアナで紹介した機種を実際に購入してみてのレビューです。今回はHantek 60022BLになります。
商品
今回はAliExpressのHantek Official Storeから購入してみました(¥ 7,340)。8月2日に購入して一週間以内で到着しました。中国からなのに早い!
最初に結論をいっておくと、ロジアナは使い物にならないので買うんなら安い6022BEで十分です。差額でEZ-USBを購入したほうがいいでしょう、、、

こんな感じの荷姿で佐川から届きます。ちなみに追跡はできません!
AliExpressでまったく追跡できません。佐川グローバルからは追跡できましたので、Japan Direct Lineってのがこれなのかもしれません。

中身はこんな感じです。

こんな感じでいろいろはいっています。

二本目のプローブは箱の下にはいっているので注意しましょう!

本体は金属製で結構しっかりしています。

オシロスコープの2Chとロジックアナライザーの16Chの端子、GNDとプローブの補正用端子があります。

USB端子と、謎のボタン、USBXI端子があります。謎のボタンは押し込んだ状態(H)で使うとHantekのデバイスとして認識されます。でっぱっている状態(P)だと別のUSB VID / PIDで認識されます。Pの状態で認識させて、Zadigを使ってWinUSBのドライバーをセットアップすることでsigrok(PulseView)で8チャンネルのロジックアナライザーとして利用が可能になります。
USBXI端子はよくわかりません。。。通常は使うことはないと思います。
資料
上記のダウンロードのタブからソフトウエア、ドライバ、マニュアル、SDKがダウンロードすることができます。
セットアップ
マニュアルによると、接続する前にソフトウエアをインストールしろとああります。ただ、これは罠です!
ソフトウエアに入っているドライバはWindows7用で、Windows10だと動きません(涙) まちがって入れるとかなり面倒になります。
間違っていれた場合のリカバリ方法

ドライバの署名がないと言われる場合にはWindows7用のドライバが入っています。イベントを開いて、oem??.infの文字を探します。ここの番号は環境によって異なります。Hantekのマニュアルだと違う番号になっているので注意してください、、、
C:\Windows\INFから該当ファイルを削除します。あとでWindows10用のドライバを入れると復活するのでバックアップなどは必要ありません。一応中身を確認してHantekの文字が書いてあれば正しいファイルです。
次にC:\Windows\System32\drivers配下にあるHantek6022がついているファイルをすべて消します。
この状態でUSBにHantek6022を接続することで不明なデバイスが追加されれば成功です。ちなみにUSBハブ経由で接続したら電源が足りないのかOSごと落ちました(涙)
本体直結のUSBに接続してあげましょう。できれば電源用の赤いコネクタも接続したほうが安心だと思います。
ドライバのセットアップ
Hantek6022をUSBで接続すると、不明なデバイスが増えます。この状態でダウンロードしたドライバのWindows10フォルダを指定してセットアップをします。
ソフトウエアのセットアップ
ソフトウエアをセットアップします。ここは標準設定で問題ないはずです。
アプリの起動

こんな感じの画面がでてきて、左がオシロスコープで、右がロジックアナライザーになります。
ロジックアナライザーアプリ

えーっと、ちょっと触ってみたのですが使い物になりません。そもそもトリガーがないので、キャプチャボタンを押した瞬間からの信号を取り込んでくれる機能しかありません。
プロトコルの解析などもできないので、このアプリを使う必要はありませんね。他のアプリを使うのであれば単体のEZ-USBを購入したほうが使いやすいと思います。。。
なのでロジックアナライザーの機能は検証しません。EZ-USB単体での検証で実施したいと思います。
オシロスコープアプリ

起動直後はこんな画面になります。まずはプローブの補正をする必要があります。プローブを接続してグリップのところにx1とx10というスイッチがあるのでx10を選択します。そして画面上もx10に設定します。そして本体の補正用の端子に接続すると矩形波が表示されますので、付属のマイナスドライバーできれいな波形になるように調整します。

最初はこんな風に変な波形になっていると思いますので、上にあるAUTOボタンを押して、自動設定を利用してください。画像はプローブの設定がx1のままです。。。

こんな感じになれば補正完了です。

このままだと使いにくいので、Viewにあるものを全部開いてみます。左側に追加されたので波形の情報を選択すると、下に出力されます。Maxが2Vちょっとですね。縦1マス1Vで2マス分なので確かに2Vぐらいです。横が時間で、ピリオドが1000uSですね。横1マスが500uSなので1周期分の時間が表示されます。周波数は1KHzですね。DutyサイクルはPWM的なやつで50%なのでHIGHとLOWが同じ割合になっています。パルス幅が500uSとなっています。

カーソルという機能もあって、エリアを指定すると差分を表示してくれる機能もあります。微妙な電圧とかを確認するときにはカーソルで確認したほうが楽だと思います。
試験用信号発生

こんな感じでM5StickCを利用して、PWM信号を発生させてオシロスコープで観察してみました。信号は1KHzから徐々に上げていき、どのような結果になるのかを確かめました。
ちなみにこんなにびろーんと配線すると、普通は怒られますのでご注意を!(笑)
//#include "M5StackAuto.h" #include "M5StickC.h" const int ddsPin = 26; const int ddsChannel = 1; int frequencyMode = 0; int frequencyList[] = { 1000, // 1K 5000, // 5K 10000, // 10K 50000, // 50K 100000, // 100K 500000, // 500K 1000000, // 1M 2000000, // 2M 3000000, // 3M 4000000, // 4M 5000000, // 5M 6000000, // 6M 7000000, // 7M 8000000, // 8M 9000000, // 9M 10000000, // 10M 11000000, // 11M 12000000, // 12M 13000000, // 13M 14000000, // 14M 15000000, // 15M 16000000, // 16M 17000000, // 17M 18000000, // 18M 19000000, // 19M 20000000, // 20M 30000000, // 30M 40000000, // 40M }; int frequencyCount; void setup() { M5.begin(); frequencyCount = (sizeof(frequencyList) / sizeof(int)); ledcSetup(ddsChannel, frequencyList[frequencyMode], 1); ledcAttachPin(ddsPin, ddsChannel); ledcWrite(ddsChannel, 1); } void loop() { M5.update(); if (M5.BtnA.wasPressed()) { frequencyMode++; frequencyMode = frequencyMode % frequencyCount; ledcSetup(ddsChannel, frequencyList[frequencyMode], 1); ledcWrite(ddsChannel, 1); } if (M5.BtnB.wasPressed()) { frequencyMode--; frequencyMode = (frequencyMode + frequencyCount) % frequencyCount; ledcSetup(ddsChannel, frequencyList[frequencyMode], 1); ledcWrite(ddsChannel, 1); } M5.Lcd.setCursor(0, 0, 1); M5.Lcd.printf("M5StickC DDS\n"); M5.Lcd.printf("frequency\n"); M5.Lcd.printf(" %9d\n", frequencyList[frequencyMode]); M5.Lcd.println(); M5.Lcd.printf("BtnA : UP\n"); M5.Lcd.printf("BtnB : DOWN\n"); delay(100); }
上記のようなコードになります。PWMを1ビットで呼び出していますので指定した周波数の矩形波が出力されるスケッチになります。
GNDの接続について

GNDなしで、信号だけ接続することで測定が可能です。これは同じパソコンにM5StickCとオシロスコープを接続しているので、GNDはすでに共通になっているからです。

GNDを接続しました。すると信号のエッジがきれいになりました。やっぱりGNDが遠いと信号にノイズが乗ってしまうのですね。オシロスコープのGNDは変なところにショートさせると危険なので気をつけて接続させる必要があります。今回は接続した状態で測定をしてみたいと思います。
測定実験
1kHz

さすがに1KHzはきれいに測定できます。左右の不要な表示を消してみました。アウトプットはVp-pで信号の最大と最小の差、トップはHIGHのときの最頻値の電圧、ピリオドが周期の間隔、周波数を表示させています。
5KHz

まだまだきれいです。
10KHz

信号のエッジが少し丸くなった?
50KHz

若干トリガーのかかりが甘いですが、きれいにとれています。
100KHz

あまり変わらず。
500KHz

すこしがびがびしてきましたが、波形自体はきれいです。
1MHz

若干悪化ですがそれほど変わらず。
2MHz

ちょっとモードを変えてみました。補間モードでSinX/xになっていたのをStepにしました。線を補間なしにしました。エッジがすこし丸まっていますがまだ大丈夫ですね。一般的に測定対象の10倍以上あるオシロスコープで測定するのが推奨されています。20MHzのオシロスコープなので、このグラフまでがきれいな波形だと思います。
3MHz

ちょっと波形が崩れてきました。
4MHz

丸まってきていますが、まだ大丈夫かな?
この波形が対象の5倍になります。これぐらいまでにしなさいと言われています。
5MHz

この辺になってくると周波数が安定しません。5MHzだったり4.8MHzだったりぶれます。
6MHz

これは完全に波形がおかしいですね。
7MHz

どんどん正弦波っぽくなってきます。
8MHz

9MHz

まだLOWとHIGHはわかりますが、限界が近いです。
10MHz

帯域の半分です。これぐらいが一般的に限界です。

2Chで取得してみました。サンプリングの数は同じでした。1chのペン型が96MS/sというスペックなので、これも48MS/sが2つではなく、96MS/sが搭載されていると予想します。

信号を補間するとこんな感じで、どんどん正弦波になっていきます。
11MHz

基本は11MHzと認識されますが、たまに9.6MHz扱いになります。
12MHz

かなりぶれてきました。
13MHz

Vp-pの電圧も減ってきました。サンプリングの関係からここが限界だと思います。
信号と帯域の関係
Hantek 6022は20MHz帯域の48MS/sというスペックになります。これは20Mhzはオシロスコープの帯域を表すのですが、サンプリングレートもかなり重要です。1周期の波形を測定するのには正弦波に限定しても最低2サンプリングは必要です。一般的には4サンプリング程度は必要になります。
48MS/sということは12MHzの矩形波はなんとなく表示できる限界になります。帯域とサンプリングレートの両方が影響して、どんな信号まで測定できるかが決まります。ちなみに他社の20MHzオシロスコープだと100MS/sぐらいが標準的なサンプリングレートなので、Hantekはちょっと波形が汚いですね。
一般的には帯域の10分の1までの対象は測定できて、5分の1か4分の1ぐらいまではなんとか測定できると言われています。オシロスコープが20MHzなので対象は2MHzまではきれいで、4MHzから5MHzまでが限界となります。
このへんの情報はオシロスコープ会社のページにあるのですが、60MHzのオシロスコープだと測定できませんねみたいな全然共感できない内容になっています。。。
- オシロスコープの選び方(アールエスコンポーネンツ株式会社)
とはいえ、よくできていますのでおすすめです。このへんは実際に触ってみたいと理解しにくいところがあると思います。
ちなみに帯域が足りない場合には、どんどん測定する電圧が下がってきています。
まとめ
購入する前からわかってはいましたが、ロジックアナライザーはダメですね。。。
オシロスコープは値段なりに利用できるとは思います。次回は同じ信号をもう少しスペックの高いオシロスコープで測定して、どのような結果になるのかを比較してみたいと思います。
なぜならESP32の出力するPWM信号自体がなまっている可能性があるからです!
とはいえ、つよつよのオシロスコープは持っていないのでOWONの25MHzペン型オシロスコープで検証します。ちょっとみたところそれほど信号は崩れていないので、このままESP32のPWMで検証を続けたいと思います。
Si5351という、160MHzまでのクロックジェネレーターをもっていますが、ESP32の方が再現しやすいですもんね?
コメント