- ผึกการใช้ ออสซิลโลสโคป
- ฝึกทักษะการใช้บอร์ด Arduino
- ทำความเข้าใจเกี่ยวกับโค้ด และ สังเกตุความแตกต่างของ output ในแต่ละโค้ด
วัสดุอุปกรณ์ที่ใช้
- บอร์ด Arduino 1 อัน
- สายไฟสำหรับต่อวงจร 1 ชุด
- ออสซิลโลสโคปแบบดิจิทัล 1 เครื่อง
- เครื่องกำเนิดสัญญาณ 1 เครื่อง
(การทดลองโดยใช้บอร์ Arduino เป็นตัวกำเนิดสัญญาณเอาต์พุต)
- คอมไพล์โค้ดตัวอย่างที่ 1.3.1 แล้วอัพโหลดไปยังบอร์ด Arduino จากนั้นใช้ออสซิลโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ (ให้ระบุ ความถี่ และ Duty Cycle ของสัญญาณที่วัดได้จริง)
- ทำขั้นตอนที่ 1 ซ้ำ สัหรับโค้ตตัวอย่างที่ 1.3.2-1.3.4 ตามลำดับ
- ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz มีค่า Duty Cycle 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0V และ 5V และให้ใช้ออสซิลโลสโคปตรวจดูรูปคลื่นสัญญาณที่ได้และบันทึกภาพที่ปรากฏ (เปรียบเทียบผลกับการสร้างสัญญาณเอาต์พุตด้วยบอร์ด Arduino)
*Duty Cycle (%)=100% x(ความกว้างของคลื่นในช่วงที่เป็นHigh/คาบสัญญาณ)*
- โค้ดที่ 1.3.1:โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)
void setup() {
pinMode( LED_PIN, OUTPUT ); // ใช้ขา D5 เป็นเอาต์พุต
}
void loop() {
digitalWrite( LED_PIN, HIGH ); // ให ้เอาต์พุตที่ขา D5 เป็น High
delay( 10 ); // รอเวลาประมาณ 10 มิลลิวินาที
digitalWrite( LED_PIN, LOW ); // ให้เอาต์พุตที่ขา D5 เป็น Low
delay( 10 ); // รอเวลาประมาณ 10 มิลลิวินาที
}
ผลที่ได้จากออสซิลโลสโคปของโค้ดที่1.3.1(ได้รูปคลื่นสี่เหลี่ยม)
คาบ(T) = 2ช่อง x 10 ms=20 ms
ความถี่(F) =1/20 ms= 50 Hz
Duty Cycle =100% x[(1ช่องx10 ms)/20 ms]= 50%
- โค้ดที่ 1.3.2:โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 2)
const byte LED_PIN = 5;
void setup() {
pinMode( LED_PIN, OUTPUT );
}
void loop() {
digitalWrite( LED_PIN, HIGH );
digitalWrite( LED_PIN, LOW );
}
ผลที่ได้จากออสซิลโลสโคปของโค้ดโค้ดที่1.3.2(ได้รูปคลื่นสี่เหลี่ยม)
คาบ(T) = 5ช่อง x 2 µs=10 µs
ความถี่(F) =1/10 µs= 100 kHz
Duty Cycle =100% x[(2.4ช่องx2 µs)/10 µs]= 48%
- โค้ดที่ 1.3.3:โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 3)
const byte LED_PIN = 5; // Digital Pin 5 ( D 5 )
void setup() {
pinMode( LED_PIN, OUTPUT ); // ให้ขาดิจิทัล D5 เป็นเอาต์พุต
analogWrite( LED_PIN, 191 ); // สร้างสัญญาณ PWM ที่ขา D5
}
void loop() {
// empty ( ไม่มีคำสั่งใดๆในฟังก์ชัน loop)
}
ผลที่ได้จากออสซิลโลสโคปของโค้ดที่1.3.3(ได้รูปคลื่นสี่เหลี่ยม)
คาบ(T) = 2.1ช่อง x 500 µs=1 ms
ความถี่(F) =1/1 ms= 1 kHz
Duty Cycle =100% x[(1.6ช่องx500 µs)/1 ms]= 80%
- โค้ดที่ 1.3.4:โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 4)
#include <Servo.h>
Servo servo;
int minPulse = 600; // minimum servo position, in us
int maxPulse = 2400; // maximum servo position, in us
void setup() {
servo.attach( 5, minPulse, maxPulse ); //use D5 for PWM output(servo)
servo.write( 90 ); // set rotation angle (value between 0 to 180 degree)
}
void loop() {
// empty
}
ผลที่ได้จากออสซิลโลสโคปของโค้ดที่1.3.4(ได้รูปคลื่นสี่เหลี่ยม)
คาบ(T) = 4ช่อง x5 ms=20 ms
ความถี่(F) =1/20 ms= 50 kHz
Duty Cycle =100% x[(0.4ช่องx5ms)/20ms]= 10%
(การทดลองโดยใช้เครื่องกำเนิดสัญญาณเอาต์พุต)
- ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM(Pulse) ที่มีความถี่ 50 Hz มีค่า
2. ใช้ออสซิลโลสโคปตรวจดูรูปคลื่นสัญญาณ
คาบ(T) = 4ช่อง x5 ms=20 ms
ความถี่(F) =1/20 ms= 50 kHz
Duty Cycle =100% x[(0.3ช่องx5ms)/20ms]= 7.5%
จากรูป จะเห็นว่าการสร้างสัญญาณเอาต์พุตด้วย เครื่องกำเนิดสัญญาณ และ บอร์ด Arduino
(ใช้โค้ดในตัวอย่างที่ 1.3.4) ให้ผลเหมือนกัน
-------------------------------------------------------------------------------------------
คำถามท้ายการทดลอง
1. จงอธิบายความแตกต่างของสัญญาณเอาต์พุต (ขา D5) ของบอร์ด Arduino ที่ได้จากโค้ดตัวอย่างในแต่ละกรณี (ให้เปรียบเทียบค่า Duty Cycle และความถี่ของสัญญาณเอาต์พุตที่ได้ในแต่ละกรณี)
ตอบ โค้ดที่ 1.3.1 Duty Cycle = 50% ความถี่(F) = 50 Hz
โค้ดที่ 1.3.2 Duty Cycle = 48% ความถี่(F) = 100 kHz
โค้ดที่ 1.3.3 Duty Cycle = 80% ความถี่(F) = 1 kHz
โค้ดที่ 1.3.4 Duty Cycle = 10% ความถี่(F) = 50 Hz
2. มีขาใดบ้างของบอร์ด Arduino ในการทดลอง นอกจากขา D5 ที่สามารถใช้สร้างสัญญาณ PWM ด้วยคำสั่ง analogWrite()
ตอบ ขา D3, D6, D9, D10, D11 และขาฝั่งแอนะล็อก
3. ถ้าต้องการจะสร้างสัญญาณแบบ PWM ที่มีค่า Duty Cycle 20% และ 80% ที่ขา D5 และ D10 ตามลำดับ โดยใช้คำสั่ง analogWrite() จะต้องเขียนโค้ด Arduino อย่างไร (เขียนโค้ดสำหรับ Arduino Sketch ให้ครบถ้วน สาธิตและตรวจสอบความถูกต้องโดยใช้ออสซิลโลสโคปหรือเครื่องวิเคราะห์สัญญาณดิจิทัล)
ตอบ Arduino Sketch :
const byte LED_PIN = 5;
const byte LED_PIN_1 = 10;
void setup(){
pinMode(LED_PIN,OUT_PUT);
analogWrite(LED_PIN,51);
pinMode(LED_PIN_1,OUT_PUT);
analogWrite(LED_PIN_1,204);
}
void loop(){
//empty
}
จากรูป
CH1(สีเหลือง) คือ ขาD10 ที่มีค่า Duty Cycle 79.9%
CH1(สีเหลือง) คือ ขาD5 ที่มีค่า Duty Cycle 19.6%
4.สัญญาณเอาต์พุตที่ได้จากการใช้คำสั่งของ Servo Library มีความถี่เท่าไหร่
ตอบ 49.75 Hz
ไม่มีความคิดเห็น:
แสดงความคิดเห็น