2015年12月4日金曜日

矩形波だけのファンクションジェネレーターを改良した。


  • AVRのPWMで出力した矩形波を可変抵抗でレベル調節する。
  • GNDレベルをGNDとVCC/2の仮想グランドに切り替えられるようにする。

という方針で、出力部を作り直した。

プロジェクトはGithubで公開しています。
https://github.com/ryood/SQR_FG

回路図
基板図

VCC/2の生成にはTLE2426を使っているのでかなりシンプルだ。

元の出力部(バッファリング+MOS-FETによるGNDレベル切り替え)との比較

すっかり小さくなった(^q^;

ケース内配線図


ケースに組み込み

外観

ファームウェアの改修


ついでにファームウェアも変更した。

PWMのプリスケーラを変更して4MHzから0.15625Hz(6.4秒周期)まで出力できるようにした。

元のソースがいきあたりばったりでかなり汚かったので、機能を関数に分離して多少わかりやすいようにした。

<出力周波数表>


Pre-scaler cycle 出力周波数(Hz)
1 2 4000000
5 1600000
10 800000
20 400000
50 160000
100 80000
200 40000
500 16000
1000 8000
2000 4000
5000 1600
10000 800
20000 400
50000 160
8 2 500000
5 200000
10 100000
20 50000
50 20000
100 10000
200 5000
500 2000
1000 1000
2000 500
5000 200
10000 100
20000 50
50000 20
64 2 62500
5 25000
10 12500
20 6250
50 2500
100 1250
200 625
500 250
1000 125
2000 62.5
5000 25
10000 12.5
20000 6.25
50000 2.5
256 2 15625
5 6250
10 3125
20 1562.5
50 625
100 312.5
200 156.25
500 62.5
1000 31.25
2000 15.625
5000 6.25
10000 3.125
20000 1.5625
50000 0.625
1024 2 3906.25
5 1562.5
10 781.25
20 390.625
50 156.25
100 78.125
200 39.0625
500 15.625
1000 7.8125
2000 3.90625
5000 1.5625
10000 0.78125
20000 0.390625
50000 0.15625

プログラムの動作

状態遷移

周波数設定・デューティー設定モードのLCD表示


プリスケーラ設定モードのLCD表示

出力波形

周波数:1kHz 振幅:5V GNDレベル:GND

周波数:1kHz 振幅:5V GNDレベル:VCC/2

周波数:1kHz 振幅:1V GNDレベル:GND

周波数:1kHz 振幅:1V GNDレベル:VCC/2

周波数:4MHz 振幅:5V GNDレベル:GND

周波数:4MHz 振幅:5V GNDレベル:VCC/2

立ち上がり

周波数:1kHz 振幅:5V GNDレベル:GND

OverShoot: 48.1%
PreShoot: 1.9%
Rise Time: 6.000ns

周波数:1kHz 振幅:1.5V GNDレベル:GND

OverShoot: 2.7%
PreShoot: 1.4%
Rise Time: 123.000ns

立ち下がり

周波数:1kHz 振幅:5V GNDレベル:GND

OverShoot: 2.7%
PreShoot: 1.4%
Fall Time: 123.000ns -> Slew Rate: 12.2V/us

周波数:1kHz 振幅:1.5V GNDレベル:GND

OverShoot: 0.0%
PreShoot: 1.3%
Fall Time: 136.000ns -> Slew Rate: 11.0V/us

メモ:

出力レベルを下げるために10kΩのPOTで分圧すると、波形がなまる。どこかの容量成分が影響していると思うけど理由はわからない。

同時にクロックノイズのレベルも下がるようだ。←LPF的な現象。