- หน้าแรก
- คลังความรู้
- แล็บ FG + สโคป
- สร้างเครื่องเอง
// บทที่ 12.8 · แล็บ FG + สโคป · Build Your Own
สร้างเครื่องกำเนิดสัญญาณเอง: 555 ออสซิลเลเตอร์ Wien และ DDS AD9833
เข้าใจเครื่องมือดีที่สุดคือสร้างมันเอง หน้านี้ไล่จากวงจรที่ใช้ชิ้นส่วนไม่กี่ตัว ไปจนถึงเครื่องกำเนิดสัญญาณแบบดิจิทัลที่หลักการเหมือนเครื่องในห้องแล็บ พร้อมโค้ด Arduino และ ESP32 และปิดท้ายด้วยวงจรขาเข้าของสโคปทำเอง ทุกวงจรใช้ความรู้จากหน้าก่อน ๆ: RC τ, ออปแอมป์ ชมิตต์ทริกเกอร์ และ DDS สูตรใช้รหัส K
- สี่เหลี่ยมง่ายสุด: 555 หรือออปแอมป์ผ่อนคลาย ()
- ไซน์แอนะล็อก: Wien bridge เกนต้องเท่ากับ 3 พอดีและต้องมีวงจรคุมแอมพลิจูด
- ดิจิทัล: ตารางค่าไซน์ + DAC หรือ DDS: · AD9833:
- ภาคขาออก: ออปแอมป์ที่สลูว์เรตพอ + 50 Ω อนุกรม เหมือนเครื่องจริง
เลือกแบบไหนดี พื้นฐาน
| แบบ | รูปคลื่น | ช่วงความถี่โดยประมาณ | ความยาก | เหมาะกับ |
|---|---|---|---|---|
| ออปแอมป์ผ่อนคลาย | สี่เหลี่ยม (+ เอกซ์โพเนนเชียลบน C) | Hz – หลายสิบ kHz | ง่าย | เรียนป้อนกลับบวก ชมิตต์ RC |
| ชมิตต์ + อินทิเกรเตอร์ | สี่เหลี่ยม + สามเหลี่ยม | Hz – หลายสิบ kHz | ง่าย–กลาง | “ฟังก์ชันเจเนอเรเตอร์” แบบแอนะล็อกแท้ |
| ไอซี 555 | สี่เหลี่ยม | < 1 Hz – ราว 100 kHz | ง่ายมาก | ไฟกะพริบ เสียง สัญญาณนาฬิกา |
| Wien bridge | ไซน์เพี้ยนต่ำ | 10 Hz – 100 kHz | กลาง | ไซน์เสียงคุณภาพดี เรียน Barkhausen |
| XR2206 | ไซน์ สามเหลี่ยม สี่เหลี่ยม | Hz – ราว 1 MHz | ง่าย (มีชุดคิท) | เครื่องตั้งโต๊ะราคาประหยัด |
| MCU + DAC/R-2R | อะไรก็ได้ (ตาราง) | ถึงราว 10–50 kHz | กลาง | รูปคลื่นพิเศษ เรียนการสุ่มและ DAC |
| DDS AD9833 | ไซน์ สามเหลี่ยม สี่เหลี่ยม | 0.1 Hz – ราว 10 MHz | กลาง | เครื่องกำเนิดสัญญาณใช้งานจริง ตั้งค่าแม่น |
ออสซิลเลเตอร์ผ่อนคลายด้วยออปแอมป์ พื้นฐาน กลาง
วงจรนี้คือ ชมิตต์ทริกเกอร์ ที่เอาขาออกของตัวเองมาชาร์จตัวเก็บประจุผ่าน R เมื่อแรงดันบน C ขึ้นถึง ขาออกพลิกเป็นลบ C เริ่มคายลงจนถึง แล้วพลิกกลับ วนไปเรื่อย ๆ เป็นการประยุกต์ ผลตอบสนองอันดับหนึ่ง R2 โดยตรง
K1 Feedback fraction อัตราส่วนป้อนกลับบวก
K2 Relaxation-oscillator period คาบของออสซิลเลเตอร์ผ่อนคลาย
มาจากเวลาที่ C ชาร์จจาก เข้าหา จนถึง ใช้ R3
เครื่องกำเนิดสี่เหลี่ยม-สามเหลี่ยม: ชมิตต์ + อินทิเกรเตอร์ กลาง
แทน RC ด้วย อินทิเกรเตอร์ ประจุจะเพิ่มด้วยกระแสคงที่ แรงดันจึงเป็นเส้นตรง ได้สามเหลี่ยมแท้ ต่อขาออกอินทิเกรเตอร์เข้า ชมิตต์แบบไม่กลับเฟส และขาออกชมิตต์ (สี่เหลี่ยม) เข้าอินทิเกรเตอร์ วนเป็นวง นี่คือแกนของเครื่องกำเนิดสัญญาณแอนะล็อกรุ่นเก่าและไอซีอย่าง XR2206 ถ้าต้องการไซน์ ให้ป้อนสามเหลี่ยมเข้าวงจรปั้นรูป (diode shaper) ที่ตัดยอดให้โค้ง
K3 Square–triangle generator เครื่องกำเนิดสี่เหลี่ยม-สามเหลี่ยม
ขาเข้าชมิตต์ ป้อนกลับชมิตต์ · R, C ของอินทิเกรเตอร์ · ปรับความถี่ด้วย R โดยแอมพลิจูดสามเหลี่ยมไม่เปลี่ยน
= 10 kΩ, = 20 kΩ, R = 10 kΩ, C = 10 nF ไฟ ±15 V ( ≈ 13.5 V) หาความถี่และแอมพลิจูดสามเหลี่ยม
ความถี่ K3
แอมพลิจูด
สามเหลี่ยม 13.5 Vpp ที่ 5 kHz และสี่เหลี่ยม ±13.5 V ต้องตรวจสลูว์เรตด้วย ขอบสี่เหลี่ยม 27 V ด้วย LM741 ใช้เวลาราว 54 µs เทียบกับคาบ 200 µs ขอบจะเอียงชัดเจน ใช้ TL081 หรือคอมพาเรเตอร์ LM393 แทน
ไอซี 555 แบบ astable พื้นฐาน
555 มีคอมพาเรเตอร์สองตัวเทียบแรงดันบน C กับ ⅓ และ ⅔ ของไฟเลี้ยง ฟลิปฟล็อปภายในสั่งทรานซิสเตอร์ขา 7 ให้คายประจุ C ชาร์จผ่าน และคายผ่าน จึงได้สี่เหลี่ยมที่ช่วงสูงยาวกว่าช่วงต่ำเสมอ ใช้ไฟ 4.5–15 V (NE555) หรือ 2–15 V (รุ่น CMOS เช่น 7555 กินกระแสน้อยกว่าและขอบสะอาดกว่า)
K4 555 high and low times เวลาสูงและต่ำของ 555
มาจากการชาร์จจาก ⅓ ถึง ⅔ ซึ่งคือครึ่งหนึ่งของระยะที่เหลือถึง
K5 555 frequency and duty cycle ความถี่และดิวตี้ของ 555
เสมอ ถ้าต้องการต่ำกว่า 50 % ต่อไดโอดขนาน ให้กระแสชาร์จข้าม แล้ว
ไซน์แอนะล็อก: Wien bridge และ RC phase-shift กลาง ขั้นสูง
ออสซิลเลเตอร์ไซน์คือวงจรขยายที่ป้อนกลับตัวเองผ่านตัวกรองที่ให้เฟสพอดีเพียงความถี่เดียว เครือข่าย Wien (RC อนุกรมต่อกับ RC ขนาน) ให้เฟส 0° และอัตราส่วน 1/3 ที่ เครื่องขยายไม่กลับเฟสเกน 3 จึงทำให้เกนวงรอบเท่ากับ 1 พอดี ตามเงื่อนไขของ Barkhausen นี่คือวงจรที่ Hewlett-Packard ใช้ในเครื่องกำเนิดสัญญาณเครื่องแรก (HP200A ปี 1939) ซึ่งใช้หลอดไฟเป็นตัวคุมแอมพลิจูด
K6 Wien-bridge frequency ความถี่ของ Wien bridge
กรณี R และ C สองชุดไม่เท่ากัน:
K7 Required gain เกนที่ต้องการ
เริ่มต้นตั้งเกนสูงกว่า 3 เล็กน้อยให้แกว่งได้เอง แล้วให้ไดโอด หลอดไฟ หรือ JFET ลดเกนลงเมื่อแอมพลิจูดโต
K8 Barkhausen criterion เงื่อนไขการแกว่งของ Barkhausen
เป็นเงื่อนไขจำเป็นสำหรับการแกว่งต่อเนื่อง ขนาดเกนวงรอบ = 1 และเฟสรอบวง = 0° (หรือ 360°)
K9 RC phase-shift oscillator ออสซิลเลเตอร์เลื่อนเฟส RC
RC สูงผ่านสามภาคเลื่อนเฟสรวม 180° ต่อกับวงจรขยายกลับเฟส (อีก 180°) ที่เกนอย่างน้อย 29
(ก) Wien bridge R = 10 kΩ, C = 16 nF (ข) phase-shift R = 10 kΩ, C = 10 nF ได้ความถี่เท่าไร
Wien ได้ราว 1 kHz และปรับความถี่ง่ายด้วยโพเทนชิออมิเตอร์คู่ (สเตอริโอ) แทน R ทั้งสองตัว ส่วน phase-shift ต้องปรับ R สามตัวพร้อมกัน จึงนิยมใช้แบบความถี่คงที่ ตรวจความเพี้ยนของไซน์ด้วย FFT บนสโคป X10
ไอซีฟังก์ชันเจเนอเรเตอร์ XR2206 พื้นฐาน
XR2206 รวมออสซิลเลเตอร์ควบคุมด้วยแรงดัน วงจรปั้นไซน์ และภาคขาออกไว้ในชิปเดียว ชุดคิทราคาประหยัดให้ไซน์ สามเหลี่ยม และสี่เหลี่ยม ตั้งย่านความถี่ด้วยสวิตช์เลือกตัวเก็บประจุและปรับละเอียดด้วยโพเทนชิออมิเตอร์ เป็นเครื่องแรกที่ดีสำหรับโต๊ะทำงานที่บ้าน แต่ความถี่ลอยตามอุณหภูมิและไซน์เพี้ยนราว 0.5–2 % มากกว่า DDS
K10 XR2206 frequency ความถี่ของ XR2206
R คือตัวต้านทานตั้งเวลา (เอกสารข้อมูลแนะนำราว 4 kΩ–200 kΩ เพื่อความเสถียร) C คือตัวเก็บประจุตั้งเวลา เช่น R = 10 kΩ, C = 100 nF ได้ 1 kHz
ไมโครคอนโทรลเลอร์ + DAC: ตารางค่าไซน์ กลาง
เก็บค่าไซน์หนึ่งคาบไว้ในตาราง (look-up table) แล้วส่งออก DAC ทีละค่าด้วยอัตราคงที่ ความถี่ขาออกเท่ากับอัตราส่งหารด้วยจำนวนจุดในตาราง DAC ที่ทำเองง่ายที่สุดคือบันไดตัวต้านทาน R-2R ต่อกับขาดิจิทัลหลายขา ใช้ตัวต้านทานแค่สองค่า
K11 DAC output and LUT frequency แรงดัน DAC และความถี่จากตาราง
8 บิต 5 V: ขั้นละ 19.5 mV · ตาราง 64 จุดที่ 100 kSa/s ได้ 1.56 kHz · ต้องมีตัวกรองต่ำผ่านลบขั้นบันได (ภาพสะท้อนที่ )
โค้ด Arduino Uno: R-2R 8 บิตบนพอร์ต D (D0–D7) ส่งไซน์ 64 จุดต่อคาบ ค่า 0–255 ได้แรงดัน 0–5 V
// Arduino Uno: 8-bit R-2R DAC on PORTD (D0–D7), 64-point sine table // Disconnect D0/D1 (USB serial) from the ladder while uploading. const uint8_t N = 64; uint8_t lut[N]; void setup() { DDRD = 0xFF; // D0–D7 as outputs for (uint8_t i = 0; i < N; i++) lut[i] = 128 + 127 * sin(2 * PI * i / N); // 1 … 255 } void loop() { for (uint8_t i = 0; i < N; i++) { PORTD = lut[i]; // write all 8 bits at once delayMicroseconds(10); // ≈ 11 µs per point → ≈ 1.4 kHz } }
ความถี่จริงขึ้นกับเวลาของลูป ให้วัดด้วยสโคป ถ้าต้องการความถี่แม่นให้ใช้ timer interrupt ส่งค่าทุก ๆ ช่วงเวลาคงที่
ESP32 รุ่นดั้งเดิม (ESP32-WROOM/WROVER) มี DAC 8 บิตในตัวสองช่องที่ GPIO25 และ GPIO26 ไม่ต้องต่อ R-2R ส่วน ESP32-S2 มี DAC ที่ GPIO17/18 แต่ ESP32-S3 และ ESP32-C3 ไม่มี DAC ต้องใช้ PWM + ตัวกรอง (ดู PWM กับแรงดันเฉลี่ย) หรือ DAC ภายนอก
// ESP32 (classic): built-in 8-bit DAC on GPIO25, 64-point sine const int N = 64; uint8_t lut[N]; void setup() { for (int i = 0; i < N; i++) lut[i] = 128 + 127 * sin(2 * PI * i / N); } void loop() { for (int i = 0; i < N; i++) { dacWrite(25, lut[i]); // 0 … 255 → about 0 … 3.3 V delayMicroseconds(20); } }
DDS ด้วย AD9833: เครื่องกำเนิดสัญญาณที่ใช้งานได้จริง กลาง ขั้นสูง
DDS คือการทำตารางค่าไซน์ให้ความถี่ละเอียดมาก แทนที่จะเดินทีละจุดในตาราง ตัวสะสมเฟส บิตจะบวกเลข ทุกสัญญาณนาฬิกา แล้วใช้บิตบน ๆ ของเฟสเปิดตาราง ความถี่ขาออกจึงปรับได้ทีละ หลักการอยู่ที่ หน้าเครื่องกำเนิดสัญญาณ (V15–V18) ลองเล่นตัวสะสมเฟสด้านล่าง: เพิ่ม M แล้ววงล้อหมุนเร็วขึ้น จุดต่อคาบน้อยลง ขั้นบันไดหยาบขึ้น และเมื่อ M เกินครึ่งวง ความถี่ที่เห็นจะกลับลดลง (อเลียส)
AD9833 เป็น DDS ขนาดเล็กราคาประหยัด ตัวสะสมเฟส 28 บิต DAC 10 บิต โมดูลทั่วไปมีคริสตัล 25 MHz ให้ไซน์และสามเหลี่ยมราว 0.6 Vpp (มีระดับ DC ราว 0.3 V) และสี่เหลี่ยมระดับลอจิก ความละเอียดความถี่ Hz คุมด้วย SPI สามสาย
K12 AD9833 frequency register ค่าที่เขียนลงรีจิสเตอร์ AD9833
ลำดับ: 0x2100 (B28 = 1, RESET) → LSB → MSB → 0xC000 (PHASE0 = 0) → 0x2000 ไซน์ / 0x2002 สามเหลี่ยม / 0x2028 สี่เหลี่ยม
นาฬิกา 25 MHz หาเลข M คำที่ต้องเขียนลง FREQ0 และความถี่ที่ได้จริง
เขียน 0x2100, 0x45D0, 0x4008, 0xC000, 0x2000 ได้ 12,345.61 Hz คลาดเคลื่อน 0.01 Hz ความแม่นยำจริงขึ้นกับคริสตัล (ราว ±50 ppm หรือ ±0.6 Hz ที่ความถี่นี้)
// AD9833 DDS with Arduino Uno (SCLK D13, SDATA D11, FSYNC D10) or ESP32 (18, 23, 5) #include <SPI.h> const int FSYNC = 10; // ESP32: 5 const float MCLK = 25e6; // crystal on the module void ad9833Write(uint16_t w) { SPI.beginTransaction(SPISettings(2000000, MSBFIRST, SPI_MODE2)); digitalWrite(FSYNC, LOW); SPI.transfer16(w); digitalWrite(FSYNC, HIGH); SPI.endTransaction(); } // mode: 0x2000 sine, 0x2002 triangle, 0x2028 square void ad9833Set(float f, uint16_t mode) { uint32_t M = (uint32_t)(f * 268435456.0 / MCLK + 0.5); // K12 ad9833Write(0x2100); // B28 = 1, reset ad9833Write(0x4000 | (M & 0x3FFF)); // FREQ0 LSB ad9833Write(0x4000 | ((M >> 14) & 0x3FFF)); // FREQ0 MSB ad9833Write(0xC000); // PHASE0 = 0 ad9833Write(mode); // leave reset, choose waveform } void setup() { pinMode(FSYNC, OUTPUT); digitalWrite(FSYNC, HIGH); SPI.begin(); ad9833Set(1000.0, 0x2000); // 1 kHz sine } void loop() {}
ขยายต่อ: อ่านเอนโค้ดเดอร์แบบหมุนเพื่อปรับความถี่ แสดงผลบนจอ OLED หรือรับคำสั่งความถี่ทาง Serial ก็ได้ สำหรับการกวาดความถี่ ให้เรียก ad9833Set() ในลูปด้วยความถี่ที่เพิ่มทีละขั้น (เขียนเฉพาะ LSB/MSB ก็พอ ไม่ต้องรีเซ็ตทุกครั้งเพื่อให้เฟสต่อเนื่อง)
ภาคขาออก: แอมพลิจูด ออฟเซต และ 50 Ω กลาง
ขาออก DDS เล็กและมี DC ปนอยู่ ต้องตัด DC ด้วยตัวเก็บประจุ ปรับขนาดด้วยโพเทนชิออมิเตอร์ แล้วใช้ วงจรรวมสัญญาณ บวกออฟเซต DC ที่ปรับได้ ก่อนออกขั้วผ่านตัวต้านทาน 50 Ω เหมือนเครื่องจริง V1 ข้อที่มักลืมคือสลูว์เรตของออปแอมป์ภาคนี้ต้องพอสำหรับความถี่และแอมพลิจูดสูงสุดที่ต้องการ
K13 Output stage ภาคขาออก
จากโพเทนชิออมิเตอร์และเกนออปแอมป์ · จากโพเทนชิออมิเตอร์ต่อ ±V ผ่านวงจรรวม · ตรวจขีดจำกัด
ต้องการ 10 Vpp (High-Z) ถึง 1 MHz ออปแอมป์ต้องมีสลูว์เรตเท่าไร TL081 ใช้ได้ไหม
TL081 ไม่พอ ต้องใช้ออปแอมป์ความเร็วสูงที่มี SR หลักร้อย V/µs และ GBW หลายสิบ MHz ขึ้นไป เช่น LM7171 หรือออปแอมป์แบบป้อนกลับกระแส (current-feedback) และต้องวางลายวงจรสั้น มีกราวด์เพลน ถ้าใช้แค่ย่านเสียง (≤ 20 kHz) TL072 เหลือเฟือ
ออสซิลโลสโคปทำเอง: ขาเข้า การสุ่ม และขีดจำกัด กลาง
หลักการสโคปดิจิทัลคือ ภาคขาเข้า (ลดทอน ยกระดับ ป้องกัน) → ADC → หน่วยความจำ → ทริกเกอร์ → วาดจอ ทำเองด้วยไมโครคอนโทรลเลอร์ได้ แต่ต้องเข้าใจขีดจำกัดของ ADC และต้องแปลงสัญญาณ ±V ให้อยู่ในช่วงที่ ADC รับได้ (0–3.3 V หรือ 0–5 V) ก่อนเสมอ ไม่เช่นนั้นขา ADC เสีย
K14 ADC front-end (divider + bias) วงจรแบ่งแรงดันและยกระดับ
ออกแบบ: เลือก และให้ เมื่อ
K15 ADC sample rate อัตราสุ่มของ ADC
Arduino Uno: kHz → 9.6 kSa/s · การ์ดเสียง 48–192 kSa/s แต่คัปปลิง AC ที่ขาเข้า · ESP32 เร็วกว่าแต่ ADC ไม่เป็นเชิงเส้นช่วงปลาย ต้องสอบเทียบ
ใช้ = 100 kΩ ออกแบบ , ให้ ±10 V เป็น 0–3.3 V
อัตราส่วนที่ต้องการ K14
V
แก้สองสมการ
ใช้ค่ามาตรฐาน = 47 kΩ, = 33 kΩ ตรวจ
±10 V กลายเป็น 0.00–3.25 V อยู่ในช่วง ADC ในโปรแกรมแปลงกลับด้วย แล้วสอบเทียบกับแหล่งจ่าย DC ที่รู้ค่าอีกครั้ง
// Arduino Uno: minimal "scope" — 400 samples as fast as analogRead allows, then send to Serial Plotter const int NS = 400; int buf[NS]; void setup() { Serial.begin(115200); } void loop() { unsigned long t0 = micros(); for (int i = 0; i < NS; i++) buf[i] = analogRead(A0); // ≈ 104 µs each float dt = (micros() - t0) / (float)NS; // µs per sample for (int i = 0; i < NS; i++) { float vadc = buf[i] * 5.0 / 1023.0; Serial.println(vadc); // convert with K14 for a divider } delay(200); }
เพิ่มทริกเกอร์ได้โดยวนอ่านจนค่าข้ามระดับที่กำหนดขาขึ้นก่อนเริ่มเก็บ 400 จุด เป็นหลักการเดียวกับทริกเกอร์ของสโคปจริง ทริกเกอร์
เช็กลิสต์ก่อนเปิดไฟและวิธีทดสอบเครื่องที่สร้างเอง พื้นฐาน
ตรวจขั้วไฟเลี้ยงและกราวด์ร่วมของทุกบอร์ดก่อนเสียบ ใส่ 100 nF คร่อมไฟเลี้ยงทุกไอซี
เปิดไฟผ่านแหล่งจ่ายที่จำกัดกระแส (เริ่ม 50–100 mA) ดูว่ากินกระแสผิดปกติหรือไม่
วัดความถี่ด้วยสโคปจริงหรือฟังก์ชัน counter เทียบกับสูตร ความต่างเกิน 10 % ให้ตรวจค่าชิ้นส่วน
ดูรูปคลื่นที่ขาออกเมื่อเปิดวงจร (High-Z) และเมื่อต่อโหลด 50 Ω ควรลดลงครึ่งหนึ่งพอดี V3
ดู FFT ของไซน์: ฮาร์มอนิกที่สองและสามควรต่ำกว่าพื้นฐานอย่างน้อย 40 dB สำหรับงานเสียง X10
กวาดความถี่ทั้งย่าน ตรวจว่าแอมพลิจูดไม่ตก (สลูว์เรต แบนด์วิดท์) และไม่มีการแกว่งแปลกปลอม
ถ้ายังไม่มีชิ้นส่วน ลองทุกการวัดบน แล็บจำลอง ก่อน แล้วไปดู งานประยุกต์ ที่ใช้เครื่องเหล่านี้
คำถามที่พบบ่อย
สร้างเครื่องกำเนิดสัญญาณเองแบบไหนง่ายและคุ้มที่สุด?
ถ้าต้องการแค่คลื่นสี่เหลี่ยม ใช้ไอซี 555 หรือขา PWM ของไมโครคอนโทรลเลอร์ ถ้าต้องการไซน์ สามเหลี่ยม และสี่เหลี่ยมที่ตั้งความถี่ได้แม่นจาก 0.1 Hz ถึงหลาย MHz ใช้โมดูล DDS AD9833 คุมด้วย Arduino หรือ ESP32 ผ่าน SPI สามสาย แล้วเพิ่มภาคขยายด้วยออปแอมป์สำหรับปรับแอมพลิจูดและออฟเซต
AD9833 ตั้งค่าความถี่อย่างไร?
คำนวณเลข 28 บิต M = round(f_out × 2²⁸ / f_MCLK) เช่น 1 kHz กับนาฬิกา 25 MHz ได้ M = 10737 แล้วเขียนเป็นสองคำ 14 บิตลงรีจิสเตอร์ FREQ0 โดยตั้งบิตบนเป็น 01 (0x4000 | ค่า) ลำดับคือ 0x2100 (รีเซ็ต) คำล่าง คำบน 0xC000 (เฟส) แล้ว 0x2000 สำหรับไซน์ 0x2002 สามเหลี่ยม หรือ 0x2028 สี่เหลี่ยม
Arduino ใช้เป็นออสซิลโลสโคปได้ไหม?
ได้สำหรับสัญญาณช้า Arduino Uno อ่าน ADC ได้ราว 9.6 kSa/s ด้วย analogRead จึงดูได้แค่ไม่กี่ร้อย Hz ถึงราว 1 kHz และรับได้เฉพาะ 0–5 V ต้องมีวงจรแบ่งแรงดันและยกระดับก่อนวัดสัญญาณที่มีค่าลบ ESP32 และการ์ดเสียงคอมพิวเตอร์เร็วกว่า แต่ยังห่างจากสโคปจริงมาก เหมาะกับการเรียนรู้หลักการสุ่มสัญญาณ
ทำไมออสซิลเลเตอร์ Wien bridge ต้องมีวงจรคุมแอมพลิจูด?
เงื่อนไข Barkhausen ต้องการเกนวงรอบเท่ากับ 1 พอดี ถ้าเกนน้อยกว่า 3 นิดเดียวการแกว่งจะหยุด ถ้ามากกว่านิดเดียวแอมพลิจูดจะโตจนออปแอมป์อิ่มตัวและไซน์ถูกตัดยอด จึงต้องมีชิ้นส่วนที่ลดเกนเมื่อแอมพลิจูดสูง เช่น ไดโอดคู่ขนานกับตัวต้านทานป้อนกลับบางส่วน หลอดไฟ หรือ JFET