はじめに
オペアンプなどを使って工作しようと思うと、やはりファンクションジェネレータが
欲しくなる。しかし本物を買おうとすると30万とか個人じゃあなかなか難しい。
そこで自作してみようと思い立った。
けっこうファンクションジェネレータを自作した先人たちがいるので、
参考にしながら第一号機を作成してみた。
今回作ったものはBNCコネクタを装備せず出力端子は皮膜線となっており
少し不格好なので、ゆくゆくは第二号機を作成するつもり。
信号発生にはDDSモジュールを使用した。Arduinoから簡単に制御できるので
今回のような場面ではもってこい。Arduinoからの移植が容易なのでマイコンはAtmega328pを使用。
使ったもの
・arduino uno
・atmega328p
・AD9833 DDSモジュール
・オシロスコープ(IWATSU ss-7802 20MHz)
・16 MHz 水晶振動子
・ユニバーサル基板
・可変抵抗
・トグルスイッチ
AD9833 DDSモジュール使い方
まずは信号発生器AD9833 DDSモジュールの使い方について。
配線は以下のような対応になっている。このモジュールは類似品が複数あるようで、
若干表記や端子の数が異なるようなので、注意してほしい。
DDS | Arduino pin |
---|---|
SDATA | MOSI(11) |
SCLK | SCK(13) |
FSYNC | 10(任意) |
配線したらこんな感じ
コードは以下のサイトより
プログラマブル波形発生器「AD9833」による三角波/サイン波の発生 | TomoSoft
以下のコードでサイン波の出力が可能
#include <SPI.h> const int SINE = 0x2000; const int SQUARE = 0x2028; const int TRAIANGLE = 0x2002; const float refFreq = 25000000.0; const int FSYNC = 10; int waveType = TRAIANGLE; unsigned long freq = 10000.0; void setup() { Serial.begin(9600); Serial.println("AD9833 Test"); SPI.begin(); delay(50); AD9833reset(); delay(50); AD9833setFrequency(freq, SINE); } void loop() { } void AD9833reset() { WriteRegister(0x100); delay(10); } void AD9833setFrequency(long frequency, int Waveform) { long FreqWord = (frequency * pow(2, 28)) / refFreq; int MSB = (int)((FreqWord & 0xFFFC000) >> 14); int LSB = (int)(FreqWord & 0x3FFF); LSB |= 0x4000; MSB |= 0x4000; WriteRegister(0x2100); WriteRegister(LSB); WriteRegister(MSB); WriteRegister(0xC000); WriteRegister(Waveform); } void WriteRegister(int dat) { SPI.setDataMode(SPI_MODE2); digitalWrite(FSYNC, LOW); delayMicroseconds(10); SPI.transfer(highByte(dat)); SPI.transfer(lowByte(dat)); digitalWrite(FSYNC, HIGH); }
確かにサイン波がしっかり出力している。
自作ファンクションジェネレータの設計
だいたいのDDSモジュールの使い方は分かったので設計に入っていこう。
基本的な要求は
1 サイン波と三角波が出力できること
2 周波数の変更が出来ること
3 9V角電池で動作
4 電源のON OFFが判別つくようにLEDを使用
5 プラスチックケースに納めカッコよくする
という要求を満たす回路を書いてみた。 三角波とサイン波の切り替えはトグルスイッチで、周波数の制御は可変抵抗を利用する。
回路が決まったのでコードを書いていく。
さっそく書き込み。Atmega328pにArduino IDEから書き込む装置は
以前自作したので、そちらを使って書き込んでいく。自作した治具を用いて
ものを作っていくのは積み上がっていく感じで楽しい。
www.shangtian.tokyo
半田する前にブレッドボードで試作する。ジャングル配線だね
うまく動作している!! youtu.be
ブレッドボードで組んだ回路がうまく動作したので ユニバーサル基板へ配線していく。
半田してケースに収納
簡単な回路で半田する量はそこまで多くないけれど、
やはりユニバーサル基板へ配線するのは骨がおれる。
いつかはプリント基板に移行していきたいところ。
ケースの加工途中の写真を全く撮ってなかった。
加工はハンドドリルで行った。プラスチックなのでそこまで大変では
ないのだが、ボール盤が欲しい。
完成がこちら。
参考文献
AD9833やAD9851など使えるDDS7選と使い方 | 電子工作