カテゴリー
oscilloscope

波形測定器5

 555で発振がうまくできたので今後も考えて固定周波数から可変周波数にしました。発振器も大事な測定器の一つです。100kΩの三端子可変抵抗とコンデンサを複数適当に並べて2Hzから30kHzまで発振できるように改造しました。コンデンサを選びレンジを切り替える、可変抵抗を回しレンジ内で周波数を合わせる操作方法です。

555発振器2Hz付近
555発振器2Hz付近

 周波数が低いとこんな感じの表示になりました。

555発振器1kHz付近
555発振器1kHz付近

 1kHz付近では綺麗な矩形波になりました。

555発振器10kHz付近
555発振器10kHz付近

 10kHz位になると高調波を取りきれなくなり段々と正弦波に近づいているようです。

555発振器20kHz付近
555発振器20kHz付近

 20kHzになるとほぼ高調波が取れないようで見るからに正弦波のようです。これがパソコンのマイク入力の限界なのでしょう。

カテゴリー
oscilloscope

波形測定器4

ダイオードを入れて波形を観測
ダイオードを入れて波形を観測

 パソコンから正弦波を出力し波形を加工した様子を見てみます。ダイオードを入れて半波整流すると、

 波形の上下が半分になり順方向電圧分下がっているのがわかります。ただGNDが勝手に調整されているのは使い勝手が悪いので何とかしたいのですが、どこで調整されているのかわからないので今後の課題とします。

555で発振し波形を観測
555で発振し波形を観測

次に555で発振した波形を見てみます。

 中々良い感じに表示されています。555を数十年ぶりに手に入れて発振させました。ここまでは意図通りに出来上がりました。トランジスタでもICでも発振すると何故か楽しいです。

カテゴリー
oscilloscope

波形測定器3

 Audacityで波形を表示できるようになったのですが電圧をどう読み取ったら良いかが解りませんでした。オシロスコープの代わりにしようとしているので波形と電圧について調べました。

 初めにテスターで測りやすいように正弦波を出力するプログラムを作成しました。

#include <iostream>
#include <windows.h>
#include <math.h>
#include <MMSystem.h>

#pragma comment (lib, "winmm.lib")

constexpr auto SAMPLING = 192000;
constexpr auto CHANNEL = 2;
constexpr auto BITSPERSAMPLE = 16;
constexpr auto MAXAMP = 32767;

int main() {

    LPWORD lpWave;
    WAVEHDR whdr;
    WAVEFORMATEX wfe;
    HWAVEOUT hWaveOut;

    wfe.wFormatTag = WAVE_FORMAT_PCM;
    wfe.nChannels = CHANNEL;
    wfe.wBitsPerSample = BITSPERSAMPLE;
    wfe.nBlockAlign = CHANNEL * BITSPERSAMPLE / 8;
    wfe.nSamplesPerSec = SAMPLING;
    wfe.nAvgBytesPerSec = wfe.nSamplesPerSec * wfe.nBlockAlign;

    size_t frequency;
    DWORD dataLength;
    DWORD wavelength;
    DWORD i;
    std::string str;

    std::cout << "周波数を入力しEnterで開始します。" << std::endl;
    std::cin >> str;
    frequency = std::atoi(str.c_str());

    wavelength = (DWORD)SAMPLING / (DWORD)frequency;
    dataLength = (DWORD)((size_t)CHANNEL * (BITSPERSAMPLE / 8) * wavelength);
    lpWave = (LPWORD)calloc(sizeof(WORD), dataLength);

    for (i = 0; i < wavelength; i++) {
        lpWave[i * 2] = (WORD)(MAXAMP * sin((i * 6.28318530718) / wavelength));
        lpWave[i * 2 + 1] = (WORD)(MAXAMP * sin((i * 6.28318530718) / wavelength));
    }

    whdr.dwBufferLength = dataLength;
    whdr.lpData = (LPSTR)lpWave;
    whdr.dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
    whdr.dwLoops = UINT32_MAX;

    waveOutOpen(&hWaveOut, 0, &wfe, 0, 0, CALLBACK_NULL);
    waveOutPrepareHeader(hWaveOut, &whdr, sizeof(WAVEHDR));
    waveOutWrite(hWaveOut, &whdr, sizeof(WAVEHDR));

    std::cout << "何か入力しEnterで終了します。" << std::endl;
    std::cin >> str;

    waveOutReset(hWaveOut);
    waveOutClose(hWaveOut);

    free(lpWave);
}

 このプログラムは入力した周波数の正弦波を左右最大の値で音声出力します。

ステレオ差動増幅器出力電圧
ステレオ差動増幅器出力電圧

 音量0から10刻みで100まで増やした時の交流電圧です。ピークの算出は√2×1.1をテスターで測った交流電圧値にかけています。使ったテスターの値は多分平均値出力と思いましたので。

 音声出力レベル70でピークが±1Vになるようです。

ステレオ差動増幅器電圧調整
ステレオ差動増幅器電圧調整

 出力側それぞれに4.7KΩの抵抗を並列にして約2.3KΩにしたものを入れて出力値を調整します。

ステレオ差動増幅器出力波形マイクレベル18
ステレオ差動増幅器出力波形マイクレベル18

 マイクレベル18でピーク±1Vの正弦波をAudacityで表示しました。右側の目盛0.1で1V表示になります。

ステレオ差動増幅器出力波形マイクレベル38
ステレオ差動増幅器出力波形マイクレベル38

 マイクレベル38でピーク±1Vの正弦波をAudacityで表示しました。右側の目盛0.2で1V表示になります。

可聴範囲に限定ですがデジタルストレージオシロスコープが出来ました。

カテゴリー
oscilloscope

波形測定器2

 オペアンプで作った差動増幅器をステレオにし入出力の電圧差が少なくなるように調整しました。

ステレオ差動増幅器入力電圧
ステレオ差動増幅器入力電圧

 乾電池2本分を入力電圧とします。

ステレオ差動増幅器出力電圧右
ステレオ差動増幅器出力電圧右

 手持ちの抵抗を色々取り替えて入出力電圧が同じになるように調整しました。

ステレオ差動増幅器出力電圧左
ステレオ差動増幅器出力電圧左

 もう一つのチャンネルも抵抗を取り替えて入出力電圧が同じになるように調整しました。普通のカーボン抵抗でも誤差同士のバランスが合えばそこそこの精度が得られます。安定性には疑問がありますがデジタル信号であればまあいけると思います。

ステレオ差動増幅器信号入出力
ステレオ差動増幅器信号入出力

 では実際に信号を入れて結果をAudacityで観察します。右が入力信号、左が出力信号です。出力レベル80、入力レベル67でほぼ入力と出力のレベルが同じになりました。

ステレオ差動増幅器信号入力
ステレオ差動増幅器信号入力

 入力信号を拡大した様子です。

ステレオ差動増幅器信号出力
ステレオ差動増幅器信号出力

 出力信号を拡大した様子です。入力の極を入れ替えて反転を無くしほぼ入出力同じにできました。オシロスコープを買わなくても波形が確認できそうです。測定器を買うのではなく用途に合わせて簡易でも作ることができれば勉強にもなり経済的かつ達成感を味わえます。更に問題が起きても解決の糸口を見つけやすくなります。

カテゴリー
oscilloscope

波形測定器1

 Audacityで波形を表示して自作回路の動作を確認していたのですが、パソコンの音声入力を被計測回路に接続すると動作が変わってしまうので間に挟む装置を作ります。

 今まで自作回路の測定点に音声入力端子を直か逆流防止のダイオードを挟んで使用していました。可聴範囲の単純な回路が多かったためそれでも十分でしたが、ROMライターの製作過程でGNDのレベルが異なるようになってから波形とその電圧レベルが知りたくなりました。

 オシロスコープを使えばなんのこともないのですが、持っていないので自作することにしました。これも勉強のためです。

 表示はパソコンのAudacityでできるので被測定側に影響が出ないように音声入力できれば良いので単純な装置でできると思います。

測定器用差動増幅回路設計
測定器用差動増幅回路設計

 抵抗値高めの差動増幅器です。被測定回路に影響をなるべく与えないように全て1MΩにしました。使用するオペアンプはuPC741Cです。

電池ボックス単3×10と差動増幅器
電池ボックス単3×10と差動増幅器

 1.3Vの単3電池が直列に10本入る電池ボックスを使い真ん中をGNDにします。被測定回路とは別の電源を使った方がより干渉し合わないと思います。

差動増幅器と電池ボックスを接続
差動増幅器と電池ボックスを接続
差動増幅器マイナス側電圧
差動増幅器マイナス側電圧

 期待通り5本分のマイナス電圧が出ています。

差動増幅器プラス側電圧
差動増幅器プラス側電圧

 プラス側も5本分の電圧が出ています。

無入力時の出力電圧
無入力時の出力電圧

 入力に電圧がかかっていない場合は出力も出ていないことが確認できます。

単3電池一個の電圧
単3電池一個の電圧

 試しに入力側に電池を一つ繋いでみました。

差動増幅器の出力電圧
差動増幅器の出力電圧

 出力側は反転していますが概ね同じような電圧が出ています。若干の誤差は後で調整します。

入力端子の抵抗値
入力端子の抵抗値

 入力端子の抵抗値を測ります。2MΩもありますので大丈夫そうです。本当はインピーダンスを計りたいのですが器材が無いのでこれでよしとします。

差動増幅器の入力と出力
差動増幅器の入力と出力

 Audacityで入力と出力を表示してみました。左が入力で右が出力です。少し増幅されています。

差動増幅器への入力
差動増幅器への入力

 よく使う信号を入力し拡大した絵です。

差動増幅器から出力
差動増幅器から出力

 出力側は波形が反転していますが十分に使えそうな結果になりました。