外観

動画も添付します
外部仕様
- 機能 オシロスコープ、FFT、1/3オクターブアナライザ
- サンプリングレート 10Msps(max)
- 分解能 12ビット
- サンプリングバッファ 1024ワード
- CPU PIC32MZ1024EFH100
- アナログ周波数帯域 DC~200kHz
- 垂直感度 10V/Div~20mV/Div
- タイムベース 1sec/Div~5μsec/Div
- 入力インピーダンス 1MΩ
- 最大入力電圧 ±50Vpp(1:10プローブ使用時)
- ディスプレイ 7インチ STN カラーLCD
- チャンネル数 1
- 外部インターフェース USB typeB
- ストレージ SDカード
- 電源電圧 100V
- 外形寸法 300mm(W)*150mm(H)*80mm(D)
- 重量 約 kg
Wave Analizer 機能
- オシロスコープ
- FFT(周波数分析)
- 1/3オクターブ周波数分析
- フィルタ(ローパス、ハイパス、バンドパスフィルタ)
- 自己相関
- スペクトログラム
- 振幅分布
ブロック図

PIC32MZ1024EFH100の紹介
- 32ビットCPU
- Flash 1024kB
- SRAM 512kB
- 動作周波数 200MHz
- パッケージ 100pin QFP
コントローラ

回路図
PIC32MZ_EF_LCD回路図内のDC-DCコンバータU2からのスイッチングノイズがアナログの回路に入ってしまうため使用を中止しました。

DC-DCコンバータで+5Vから±5Vを作り アナログ回路で使用しましたがスイッチングノイズが大きく、使用をあきらめ、下記のアナログ入力部の基板を作成しました。
アナログ入力部

キー入力/エンコーダー入力部

フロントパーツ配置

電源部

リアの部品配置

ブロック図

AD変換

ADC構成

ADCタイミング(10Msps)

10MspsのAD変換を実現するために、ADC0~ADC3の4個ADCモジュールを使います
ADC0からADC3は、2.5Mspsで動作します
ADC3のトリガーは、TIMER3によってトリガーされ AD変換が行われます
ADC2のトリガーは、TIMER3をベースクロックとするOC5によってトリガーされAD変換が行われます
ADC1のトリガーは、TIMER3をベースクロックとするOC3によってトリガーされADC変換が行われます
ADC0のトリガーは、TIMER3をベースクロックとするOC1によってトリガーされADC変換が行われます
AD変換が行われると、変換順番にFIFOにデータが格納されます
FIFOのデータが格納されると、DMA4が動作し、そのデータをSRAMへ転送します
Tadとトリガーとの関係
サンプリングレートが16Tadかかることから、Tadとトリガー周期Ttriggerとの関係は、おおよそTtrigger=20*Tadとなる
FFTクロック

周波数カウンタ

ロータリーエンコーダー


ファンクションキー

1/3オクターブ分析

コマンド
<status_function>
0:マニュアル
1:オシロスコープ
2:FFT(1decade)
3:1/3オクターブ(1decade)
4:SDカード
<status_decade>
0:1decade
1:2decade
2:3decade
3:4decade
<status_function_key>
0:マニュアル
1:オシロスコープ
2:FFT(1decade)
3:1/3オクターブ(1decade)
4:ストレージ
5:トリガー
6:MEASURE
<SD_R_W_flag>
0:ノーマル
1:SDカードR/W中
<status_measure_flag>
0:計測停止(アイドル:STOPキー押下) データ表示済
1:RUN(STARTキー押下)
2:データー入力完了
<status_mode>
0:auto
1:single
<status_average_number>
1:min
2:
<status_time>
| <status_time> | 単位 | サンプリング | 機能 |
| 0 | 20mSec/div | 2.5kHz/div | オシロスコープ |
| 1 | 10mSec/div | 5kHz/div | オシロスコープ |
| 2 | 5mSec/div | 10kHz/div | オシロスコープ |
| 3 | 2mSec/div | 25kHz/div | オシロスコープ |
| 4 | 1mSec/div | 50kHz/div | オシロスコープ |
| 5 | 500μSec/div | 100kHz/div | オシロスコープ |
| 6 | 200μSec/div | 250kHz/div | オシロスコープ |
| 7 | 100μSec/div | 500kHz/div | オシロスコープ |
| 8 | 50μSec/div | 1MHz/div | オシロスコープ |
| 9 | 20μSec/div | 2.5MHz/div | オシロスコープ |
| 10 | 10μSec/div | 5MHz/div | オシロスコープ |
| 11 | 5μSec/div | 10MHz/div | オシロスコープ |
| 12 | 10Hz~100Hz | 100Hz×2.56=256Hz | FFT(1decade) |
| 13 | 100Hz~1kHz | 1kHz×2.56=2.56kHz | FFT(1decade) |
| 14 | 1kHz~10kHz | 10kHz×2.56=25.6kHz | FFT(1decade) |
| 15 | 10kHz~100kHz | 100kHz×2.56=256kHz | FFT(1decade) |
| 16 | 10Hz~1kHz | 256Hz,2.56kHz | FFT(2decade) |
| 17 | 100Hz~10kHz | 2.56kHz,25.6kHz | FFT(2decade) |
| 18 | 1kHz~100kHz | 25.6kHz,256kHz | FFT(2decade) |
| 19 | 10Hz~10kHz | 256Hz,2.56kHz,25.6kHz | FFT(3decade) |
| 20 | 100Hz~100kHz | 2.56kHz,25.6kHz,256kHz | FFT(3decade) |
| 21 | 10Hz~100kHz | 256Hz,2.56kHz,25.6kHz,256kHz | FFT(4decade) |
| 22 | 10Hz~100Hz | 100Hz×2.56=256Hz | 1/3オクターブ(1decade) |
| 23 | 100Hz~1kHz | 1kHz×2.56=2.56kHz | 1/3オクターブ(1decade) |
| 24 | 1kHz~10kHz | 10kHz×2.56=25.6kHz | 1/3オクターブ(1decade) |
| 25 | 10kHz~100kHz | 100kHz×2.56=256kHz | 1/3オクターブ(1decade) |
| 26 | 10Hz~1kHz | 256Hz,2.56kHz | 1/3オクターブ(2decade) |
| 27 | 100Hz~10kHz | 2.56kHz,25.6kHz | 1/3オクターブ(2decade) |
| 28 | 1kHz~100kHz | 25.6kHz,256kHz | 1/3オクターブ(2decade) |
| 29 | 10Hz-10kHz | 256Hz,2.56kHz,25.6kHz | 1/3オクターブ(3decade) |
| 30 | 100Hz~100kHz | 2.56kHz,25.6kHz,256kHz | 1/3オクターブ(3decade) |
| 31 | 10Hz~100kHz | 256Hz,2.56kHz,25.6kHz,256kHz | 1/3オクターブ(4decade) |
<status_gain>
| <status_gain> | 単位 | ゲイン |
| 0 | 10V/div | 0.33 |
| 1 | 5V/div | 0.66 |
| 2 | 2.5V/div | 1.33 |
| 3 | 2V/div | 1.65 |
| 4 | 1V/div | 3.3 |
| 5 | 500mV/div | 6.6 |
| 6 | 250mV/div | 13.3 |
| 7 | 200mV/div | 16.5 |
| 8 | 100mV/div | 33 |
| 9 | 50mV/div | 66 |
| 10 | 25mV/div | 133 |
| 11 | 20mV/div | 165 |
| 12 | 20dBV/Div(10V/div) | 0.33 |
| 13 | 14dBV/Div(5V/div) | 0.66 |
| 14 | 8dBV/Div(2.5V/Div) | 1.33 |
| 15 | 6dbV/Div(2V/div) | 1.66 |
| 16 | 0dBV/Div(1V/div) | 3.3 |
| 17 | -6dBV/Div(0.5V/div) | 6.6 |
| 18 | -12dBV/Div(0.25V/div) | 13.3 |
| 19 | -14dB/Div(0.2V/Div) | 16.6 |
| 20 | -20dBV/Div(0.1V/div) | 33 |
| 21 | -26dBV/Div(50mV/div) | 66 |
| 22 | -32dB/Div(25mV/Div) | 133 |
| 23 | -34dB/Div(20mV/Div) | 166 |
| 24 | 20dBV/Div(10V/div) | 0.33 |
| 25 | 14dBV/Div(5V/div) | 0.66 |
| 26 | 8dBV/Div(2.5V/Div) | 1.33 |
| 27 | 6dbV/Div(2V/div) | 1.66 |
| 28 | 0dBV/Div(1V/div) | 3.3 |
| 29 | -6dBV/Div(0.5V/div) | 6.6 |
| 30 | -12dBV/Div(0.25V/div) | 13.3 |
| 31 | -14dB/Div(0.2V/Div) | 16.6 |
| 32 | -20dBV/Div(0.1V/div) | 33 |
| 33 | -26dBV/Div(50mV/div) | 66 |
| 34 | -32dB/Div(25mV/Div) | 133 |
| 35 | -34dB/Div(20mV/Div) | 166 |
| <status_vertical_unit> | |
| 0 | volt(rms) |
| 1 | dBV |
| 2 | dB(正規化) |
| 3 | pahse |
| <status_trigger_position> | |
| 0 | フロント |
| 1 | センター |
| 2 | リア |
<status_trigger_level> | |
| -200<v<200 |
<status_input) | |
| 0 | GND |
| 1 | AC |
| 2 | DC |
| <status_window> | |
| 0 | レックタングル |
| 1 | ハニング |
| 2 | ハミング |
| 3 | ブラックマン |
| 4 | ナットオール |
| 5 | フラットトップ |
| <status_signal_level> |
| 入力信号のレベルを表す |
| 1:過大入力、 |
| 0:適正、 |
| -1:過少入力 |
| <status_frequency> |
| 入力信号の周波数を表す |
| 単位 mHz |
| unsigned long |
| Max 4294967.295mHz |
ソフトウエア
- main.c 初期設定と全体制御
- adc_function.c 信号を取り込みadc_buff[]に格納する
- measure_function.c adc_buff[]のデータを演算(FFTなど)する
- display_function.c 演算したデータをlcd_buff[][]に格納する
- lcd_function.c lcd_buff[][]データをLCDに描画する
- key_function.c タクトスイッチまたはロータリーエンコーダ入力の処理を行う
- other_function.c その他関数
- strage_function.c SDカード関連ソフトウエア
mainルーチン

measure_action

measure_action_oscilloscope

Measure_action_fft1

key_action

key_action_RUN_STOP

データ取り込みフロー

key_action_RUN_STOP

key_action_oscilloscope

key_action_RUN_STOP

割り込み一覧

窓関数


FFT


サンプリング時間

デシベル

振幅測定
