カテゴリー
oscilloscope

波形測定器6

 測定器を製作する過程で発振器が必要になりNE555で周波数可変発振器を作りました。せっかく発振器を作ったのだからカウンタも整備しました。LEDを16個並べ74LS193を4個使った16ビットバイナリカウンタです。

16ビットバイナリカウンタ
16ビットバイナリカウンタ
発振器とカウント部
発振器とカウント部
カウント表示部
カウント表示部

 テスターで周波数を見ながらカウントの様子を観察すると高い周波数になるに従い右側の明滅が目視でき、低い周波数になるに従い左側の明滅が目視できるようになります。数十Hzを超えるとLEDの明滅は目視できなくなります。横に並べたLEDの左から右に一つ進む度に周期が1/2になるので16ビットもあると数百kHzであっても目視できるようになります。

 カウンタは周波数を測定する目的ではないので余談でしたが原始的な16ビットディスプレができました。構造が単純なのでそこかしこで活躍してくれるでしょう。

カテゴリー
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でほぼ入力と出力のレベルが同じになりました。

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

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

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

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