วันเสาร์ที่ 23 สิงหาคม พ.ศ. 2557

การทดลองที่ 1.3

การตรวจวัดสัญญาณดิจิทัล - เอาต์พุตจากบอร์ด Ardunio

วัตถุประสงค์ในการทดลอง

1. ฝึกการใช้ออสซิโลสโคปเพื่อตรวจดูคลื่นสัญญาณ และนำไปวิเคราะห์การทำงานของ Ardunio
2. เข้าใจและมีทักษะในการเขียนโค้ด Ardunio และสามารถเขียนโค้ดตามคำสั่งได้
3. เข้าใจการต่ออุปกรณ์อิเล็กทรอนิกส์ต่างๆ บนเบรดบอร์ด


อุปกรณ์ที่ใช้ในการทดลอง

1. บอร์ด Ardunio  1 อัน
2. สายไฟสำหรับต่อวงจร  1 ชุด
3. ออสซิโลสโคปแบบดิจิทัล  1 เครื่อง
4. เครื่องกำเนิดสัญญาณ 1 เครื่อง



ขั้นตอนและผลการทดลอง

1. คอมไพล์โค้ดตัวอย่างที่ 1.3.1 แล้วอัพโหลดไปยังบอร์ด Ardunio


โค้ดที่ 1.3.1 : โค้ด Ardunio เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)

2. .ใช้ออสซิโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ พร้อมทั้งบันทึกความถี่ และค่า Duty Cycle ของสัญญาณตามที่วัดได้จริง

ภาพจากออสซิโลสโคปที่ได้จากโค้ดที่ 1.3.1

การคำนวณค่า Duty Cycle(%) = 100% x (ความกว้างของคลื่นในช่วงที่เป็น High / คาบของสัญญาณ)
จากภาพสัญญาณนี้จะได้ว่า Duty Cycle = 100% x (2x5ms. / (4 x 5ms.))  =  50%

ภาพตัวอย่างการต่อวงจร


3. ทำขั้นตอนที่ 1-2 ซ้ำ สำหรับโค้ดตัวอย่างที่ 1.3.2 - 1.3.4 ตาลำดับดังนี้

3.1 คอมไพล์โค้ดตัวอย่างที่ 1.3.2 แล้วอัพโหลดไปยังบอร์ด Ardunio

โค้ดที่ 1.3.2 : โค้ด Ardunio เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 2)

3.1.1 ใช้ออสซิโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ พร้อมทั้งบันทึกความถี่ และค่า Duty Cycle ของสัญญาณตามที่วัดได้จริง

ภาพจากออสซิโลสโคปที่ได้จากโค้ดที่ 1.3.2

การคำนวณค่า Duty Cycle(%) = 100% x (ความกว้างของคลื่นในช่วงที่เป็น High / คาบของสัญญาณ)
จากภาพสัญญาณนี้จะได้ว่า Duty Cycle = 100% x (1x5us. / (2 x 5us.))  =  50%

ภาพตัวอย่างการต่อวงจร

3.2 คอมไพล์โค้ดตัวอย่างที่ 1.3.3 แล้วอัพโหลดไปยังบอร์ด Ardunio

โค้ดที่ 1.3.3 : โค้ด Ardunio เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 3)
สามารถศึกษาคำสั่ง analogWrite () ได้จาก : http://arduino.cc/en/Reference/AnalogReference

3.2.1 ใช้ออสซิโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ พร้อมทั้งบันทึกความถี่ และค่า Duty Cycle ของสัญญาณตามที่วัดได้จริง

ภาพจากออสซิโลสโคปที่ได้จากโค้ดที่ 1.3.3

การคำนวณค่า Duty Cycle(%) = 100% x (ความกว้างของคลื่นในช่วงที่เป็น High / คาบของสัญญาณ)
จากภาพสัญญาณนี้จะได้ว่า Duty Cycle = 100% x (1.5 x 500us. / (2 x 500us.))  =  75%

3.3 คอมไพล์โค้ดตัวอย่างที่ 1.3.4 แล้วอัพโหลดไปยังบอร์ด Ardunio

โค้ดที่ 1.3.4 : โค้ด Ardunio เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 4)
สามารถศึกษาคำสั่ง Servo Libray ได้จาก : http://arduino.cc/en/Reference/servo

3.3.1 ใช้ออสซิโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ พร้อมทั้งบันทึกความถี่ และค่า Duty Cycle ของสัญญาณตามที่วัดได้จริง

ภาพจากออสซิโลสโคปที่ได้จากโค้ดที่ 1.3.4

การคำนวณค่า Duty Cycle(%) = 100% x (ความกว้างของคลื่นในช่วงที่เป็น High / คาบของสัญญาณ)
จากภาพสัญญาณนี้จะได้ว่า Duty Cycle = 100% x (0.3 x 5ms. / (4 x 5ms.))  =  7.5%

4. .ใช้เครื่องกำเนิดสัญญาณสร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz. มีค่า Duty Cycle = 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0v และ 5v และให้ใช้ิิสซิโลสโคปตรวจดูรูปคลื่นสัญญาณที่ได้ และบันทึกภาพที่ปารกฏ (เปรียบเทียบผลสัญญาณเอาต์พุตด้วยบอร์ด Ardunio)

ภาพที่ปรากฎเมื่อต่อออสซิโลสโคปกับเครื่องกำเนิดสัญญาณ


ภาพสัญญาณเอาต์พุตจากบอร์ด Ardunio


คำถามท้ายการทดลอง

1. จงอธิบายความแตกจ่างของสัญญาณเอาต์พุต (ขา D5) ของบอร์ด Ardunio ที่ได้จากโค้ดตัวอย่างในแต่ละกรณี (ให้เปรียบเทียบค่า Duty Cycle และความถี่ของสัญญาณเอาต์พุตที่ได้ในแต่ละกรณี)
ตอบ  จากกราฟของโค้ดที่
           1.3.1 มีความถี่ เท่ากับ 50 Hz. และ Duty Cycle = 50%
           1.3.2 มีความถี่ เท่ากับ 100 KHz.และ Duty Cycle = 50%
           1.3.3 มีความถี่ เท่ากับ 1 kHz. และ Duty Cycle = 75%
           1.3.4 มีความถี่ เท่ากับ 50 Hz. และ Duty Cycle = 7.5%

2. มีขาใดบ้างของบอร์ด Ardunio ในการทดลอง นอกจากขา D5 ที่สามารถสร้างสัญญาณ PWM ด้วยคำสั่ง analogWeite ()
ตอบ  

             จากรูปภาพบอร์ด Ardunio UNO R3 จะเห็นได้ว่า มีขา D3, D5, D6, D9, D10, D11 และขาฝั่งอนาล็อก

3. ถ้าต้องการจะสร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และ D10 ตามลำดับ โดยใช้คำสั่ง analongWrite () จะต้องเขียนโค้ด Ardunio อย่างไร (เขียนโค้ดสำหรับ Ardunio Sketch) ให้ครบถ้วน สาธิตและตรวจสอบความถูกต้องโดยใช้ออสซิโลสโคป หรือเครื่องวิเคราะห์สัญญาณดิจิทัล)
ตอบ  เราสามารถเขียนโค้ด Ardunio ออกมาได้ดังนี้

const byte LED_PIN1 = 5;
const byte LED_PIN2 = 10;
void setup() {
  pinMode (LED_PIN1, OUTPUT);
  pinMode (LED_PIN2, OUTPUT);
  analogWrite (LED_PIN1, 51);
  analogWrite (LED_PIN2, 204);
}
void loop() {
}

การตรวจสอบความถูกต้องโดยใช้ออสซิโลสโคป

รูปคลื่นสัญญาณ ที่ขา 5 และมี Duty Cycle = 20%

รูปคลื่นสัญญาณ ที่ขา 10 และมี Duty Cycle = 80%

4. สัญญาณเอาต์พุตที่ได้จากการใช้คำสั่งของ Servo Library มีความถี่เท่าไหร่
ตอบ  50 Hz.


ไม่มีความคิดเห็น:

แสดงความคิดเห็น