Waveform Generator
Lab 1: Waveform Generator
Part 3 - Oscilloscope & Signal Processing
1. โครงสร้างภาพรวมของ Lab
Why? - ทำไมต้องเรียนรู้เรื่องนี้
Signal Fundamentals: สัญญาณพื้นฐาน (Sine, Square, Triangle, Sawtooth) เป็นรากฐานของวิศวกรรมไฟฟ้าทุกสาขา ไม่ว่าจะเป็น Power Systems, Communications หรือ Control Systems
DSP Foundation: การสร้างและแสดงผล Waveform เป็นก้าวแรกสู่ Digital Signal Processing ที่ใช้ในงานวิเคราะห์ Power Quality, Audio Processing และ Vibration Analysis
Testing & Calibration: Function Generator เป็นเครื่องมือพื้นฐานในห้อง Lab สำหรับทดสอบวงจร การสร้างได้ด้วยซอฟต์แวร์ช่วยลดต้นทุนและเพิ่มความยืดหยุ่น
EE Application: ใน Power Systems ใช้สร้างสัญญาณจำลอง 50 Hz AC, ใน Communications ใช้สร้าง Carrier Wave, ใน Control ใช้สร้าง Test Signal
What? - จะได้เรียนรู้อะไร
Waveform Mathematics: สูตรคณิตศาสตร์ของ Square, Sine, Triangle, Sawtooth
Chart as Oscilloscope: ใช้
lv_chartแสดง waveform 200+ จุด แบบ real-timeUser Controls: Dropdown เลือกชนิด waveform, Slider ปรับ frequency และ amplitude
Buffer Management: จัดการ sample buffer สำหรับ waveform generation
Mapping Technique: แปลงค่าจาก signal domain (-1000..+1000) เป็น display domain (0..100)
How? - จะทำอย่างไร
สร้าง Chart แสดง waveform ด้วย
lv_chart_create()กำหนด 200 จุดเขียนฟังก์ชัน generate สำหรับ waveform แต่ละชนิด
เพิ่ม Dropdown เลือกประเภท wave
เพิ่ม Slider สำหรับ frequency (10-1000 Hz) และ amplitude (100-1000)
เชื่อม callbacks เพื่ออัพเดท waveform ตามการเปลี่ยนแปลง

2. ฟังก์ชันสำคัญ
2.1 Waveform Generation Functions
generate_sine()
สร้างคลื่นไซน์
y = A * sin(2PIf*n/Fs)
generate_square()
สร้างคลื่นสี่เหลี่ยม
y = A * sign(sin(2PIf*n/Fs))
generate_triangle()
สร้างคลื่นสามเหลี่ยม
y = A * (4*
generate_sawtooth()
สร้างคลื่นฟันเลื่อย
y = A * (2*phase - 1)
2.2 LVGL Chart API
lv_chart_create(parent)
สร้าง chart widget
lv_chart_set_type(chart, LV_CHART_TYPE_LINE)
กำหนดเป็น line chart
lv_chart_set_point_count(chart, 200)
จำนวนจุดที่แสดง
lv_chart_set_range(chart, axis, min, max)
กำหนดช่วงแกน Y
lv_chart_add_series(chart, color, axis)
เพิ่ม data series
lv_chart_set_value_by_id(chart, ser, id, val)
กำหนดค่าจุด
lv_chart_refresh(chart)
อัพเดทการแสดงผล
lv_chart_set_div_line_count(chart, h, v)
เส้น grid
2.3 Waveform Type Enum
3. Code เต็ม
3.1 Constants and Global Variables
3.2 Waveform Generation Functions
3.3 Waveform Update and Chart Display
3.4 Event Callbacks
3.5 Main Function
4. องค์ความรู้และเทคนิค
4.1 Nyquist Theorem - ทฤษฎีไนควิสต์
4.2 Cycles per Display
4.3 Amplitude Mapping
4.4 Chart Performance Tips
5. แบบฝึกหัด
Exercise 1: Noise Injection (เพิ่ม Noise ให้สัญญาณ)
โจทย์: เพิ่ม Slider สำหรับ Noise Level (0-500) ที่จะบวก random noise เข้าไปในสัญญาณ
เพิ่ม slider ปรับระดับ noise (0 = clean, 500 = maximum noise)
ใช้
rand()สร้าง random values แล้วบวกเข้าไปหลัง generateแสดงค่า SNR (Signal-to-Noise Ratio) โดยประมาณ
คำใบ้:
Exercise 2: Dual-Channel Display (แสดง 2 ช่องสัญญาณ)
โจทย์: สร้างการแสดงผล 2 ช่องสัญญาณบน chart เดียวกัน (เหมือน oscilloscope 2 channels)
Channel 1 (สีเขียว): waveform ที่เลือกจาก dropdown
Channel 2 (สีเหลือง): sine wave ที่ความถี่ 2 เท่าของ Channel 1
ใช้
lv_chart_add_series()เพิ่ม series ที่สองเพิ่มปุ่ม toggle เปิด/ปิด Channel 2
คำใบ้:
6. References
Last updated