ホーム

電子工作

腕ロボット

二足歩行ロボット

無線コントローラ

工作機械

電子工作動画

自作ソフト(C言語)

Webページ作成

Javascriptゲーム

FLASHとは!

自学自習のテキスト

その他

ハンドヘルドオシロスコープを買う(2016年7月)

ハンドヘルドオシロスコープを購入しました。

今までポータブルオシロは2010年に購入して使っていたのですが、卓上に置けるもっと小さいものがあれば、 と思っていました。

 ここのところ(2016年前半)SDカードを制御するためにクロック同期式通信を研究する必要が あって「実際にクロックパルスが出ているかを知りたい」と思いました。

 卓上にオシロスコープ、PC、マイコンと並べてPCを起動しながらマイコンとオシロをつなげてマイコンから の波形を観察したい。

 以前購入したものは横長だったので、3つ並べて置けませんでした。そこで左のような縦長のハンドヘルド オシロスコープを選びました。

 ハンテック DSO-1102B で、性能は 
2チャンネル 
Bandwidth:100MHz 
Real-time Sample Rate:1GSa/s  です。

 Amazonで買ったのですが、価格は税込みで71,980円。ほかに送料が500円かかりました。
ハンドヘルドオシロスコープにしては、若干大きめで画面はVGA(640×480)。
しかしもう少し小さいものは画面が320×240です。僕の目(老眼)からすると大きい方が・・・・、 と思ってこれを選びました。

送られてきたときに、箱の表面に「バッテリー無し」とあったので、Amazonに文句言ったら、 ラプロス(この製品はHANTEKという中国メーカ製ですがここが日本の販売元)からメールが送られてきて 「送るときに担当が間違ったらしい」ということでした。

Amazonのサイトの説明ではバッテリーで6時間動作する、とのことですが「この半分ぐらい」です。
マニュアルは英文で日本語マニュアルはありません。しかし、わかりやすい英文で十分理解できました。

オシロはUSB経由でPCに表示できるらしいので、付属のUSBケーブルをつないだら、 「オシロスコープが接続されていません」というメッセージが・・・・・。

Amazonに文句を言ったら、またラプロスからメールが来て、僕のPCのOSを聞いて、 windows8.1 64ビット版では64ビット版のドライバーが必要だとのこと。

しかし、Amazon経由ではドライバーが送れないということで、直接僕の方に電話をしてくれて 直接僕の方にメールでドライバーを送ってもらいました。

ラプロスの方の説明とは若干異なりましたが何とかドライバーを認識させられてPCと無事接続できました。
PWM(パルス幅変調)のための波形について調べる
(2010年3月)
オシロスコープを買う
 プログラムで生成したPWM波形がきちんと作られているかを知るためにオシロスコープを購入しました。
いろいろ調べた結果OWN社製のPDS7102にしました。帯域幅が100Mあり20年前は1M1万円というう時代だったので すごくいいものです。
 外形寸法350mm×157mm× 103mm、重量 1.75kgです。
バッテリーをつけてもらったので1万円高、計89800円で買いました。
 最初携帯型のものを考えたのですが、携帯型でないほうが同じ価格で機能が高いものが手に入りますので、 ポータブル型のこれにしました。
 実際に買って使うまでは「果たして使えるだろうか?OWN社は韓国メーカーなので日本語マニュアルがあるのだろうか?」 と非常に不安で、購入する前にオシロスコープの書物を買って読みました。
 しかし実際に手に入れて見ると、日本語マニュアルと英文マニュアルの両方がついていましたが、日本語マニュアルは貧弱で 英文マニュアルのほうが詳しくわかりやすいでした。
 「案ずるより産むがやすし」で、マニュアルを読みながら実際に使ってみると「試行錯誤しましたが何とか使うことが できました。」
 購入前に「オシロスコープの書物を読む必要がありません」でした。  今は満足しています。

もっとも簡単な波形を調べる
 オシロスコープを買ったので、興味半分で、最も簡単な構成で波形を調べました。
P1のBit0に1を与え(5Vを与える)て、これにLEDをつけて点灯させます。この1を与え続けたときの波形を 見ました。
 横軸の目盛は10ms間隔、縦軸の目盛は2V間隔です。
 ポートに1を与えれば電気的にはそのポートから5Vが出力されるはずですが約4Vが出力されました。
 これはCPUの電源として9Vの乾電池を使っているのですが、この電池の出力が乏しかったためと推測されます。

パルス波形を作る
 同じポートに10msの間1を与え、そのあと20msの間0を与えます。
 理論的には10msの間5V、20msの間基準電位0となるようなパルス波形が得られるはずです。
 5Vが4Vの電位になった以外は、思惑どおりのパルス波形が得られています。  若干ノイズが出ているのが気になります。
1ms幅、周期20msのパルス波形を作る
 パルス幅1msで周期20msのパルス波形を作りました。
 5Vが4Vの電位になった以外は、思惑どおりのパルス波形が得られています。
 wait0()の関数を1回通ると0.00992msの時間が経過するように設定しています。理論的にはこの関数を2000回通ると 約20ms経過することになります。ところが2000回通るように設定すると(periodLengthの値を設定する、第 24行)25msほどの時間経過になりました。24行目にあるように1500回通るようにすると約20msになり ました。
 また1msのパルス幅にしても、ポートに1を与えて(第30行)から0を与える(第33行)までの時間を 1msにすればいいのですが、そのための時間待ちのwait0()を通る回数を80にしてちょうど1msでした。
 理論的には101回の時間待ちなのですが・・・。
 これは第33・34・35行目の判断・処理のための時間がかかっているのだろう、と思います。
 この辺のところはオシロスコープで波形を調べてみないとわからない世界ですね。
 やはり若干ノイズが出ているのが気になります。


可変抵抗と組み合わせてPWM波形を作る
 サーボモータの制御に利用できるPWMは、パルス幅が1ms(左回り一杯)から2ms(右回り一杯)までのものです。
 実際に可変抵抗をつないで可変抵抗のつまみを0からいっぱいに回した時に1msから2msまでのパルス波形を生成 できているかどうかを検証してみました。
 C言語プログラムは先のものの26行目をコメントしていたのを外して活かし、27行目を削除しました。
 この変更により、可変抵抗の変化による電圧変化がAD変換機能により26行目のdata1の変数に数値として取り込まれます。  その電圧変化による数値変化が28行目のdata1になって、その結果パルス幅が変化します。
 可変抵抗を0からつまみいっぱいにまわしたとき、パルス幅が1msから2msに変化するようにしなければなりません。
 ところが可変抵抗をつまみいっぱいに回した時の波形は上の波形です。
 青い正方形の横幅は1目盛り5msと設定しています。よく見るとパルス幅は4msほどになっています。
   AD変換の精度を8ビットにしていますのでAD変換による最大電圧に対応した数値は255です。
 この255という数値をそのまま28行目の右辺に加えています。そこでこの最大数値を小さくすればいいと思い、data1の値を 割って小さくしました。試行錯誤の結果、3.2で割るとちょうど可変抵抗のつまみをいっぱい回した時のパルス幅が 2msとなることがわかりました。  この波形がそれです。
 255を3.2で割ると79.6875。約80です。
 先の実験によって1msのパルス幅を作るには待ち時間を 80単位時間にすればいいことが分かっています(28行目)。さらに1ms加えて2msのパルスを生成するには 理論的にはさらに80単位時間を加えればいいはずですが、ちょうどその通りの結果が得られています。
 この左の波形は横の目盛間隔を1msにしたものです。
 ちょうど正方形2つ分の横幅がパルス幅になっているのでパルス幅が2msになっていることがよくわかります。

 この下のプログラムが以上のものを修正したものです。26、27行目を修正しています。
 27行目の右辺の最初に(double)をつけています。これは「キャスト演算子」と言って、これに続く変数data1を一時的に 小数を取り扱えるように(浮動小数点型)変更するものです。
 これがなければ右辺の分母は小数ですが整数で計算されて正確な計算値が出て来ません。