วันศุกร์ที่ 15 สิงหาคม พ.ศ. 2557

การทกลองที่ 1.3 การตรวจวัดสัญญาณดิจิทัล-เอาต์พุตจากบอร์ด Arduino


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


  1. ผึกการใช้ ออสซิลโลสโคป
  2. ฝึกทักษะการใช้บอร์ด Arduino
  3. ทำความเข้าใจเกี่ยวกับโค้ด และ สังเกตุความแตกต่างของ output ในแต่ละโค้ด


วัสดุอุปกรณ์ที่ใช้

  1. บอร์ด Arduino                          1 อัน

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

  4. เครื่องกำเนิดสัญญาณ                     1 เครื่อง

ขั้นตอนการทดลอง
  (การทดลองโดยใช้บอร์ Arduino เป็นตัวกำเนิดสัญญาณเอาต์พุต)
  1. คอมไพล์โค้ดตัวอย่างที่ 1.3.1 แล้วอัพโหลดไปยังบอร์ด Arduino  จากนั้นใช้ออสซิลโลสโคปวัดสัญญาณเอาต์พุตที่ได้ (รูปคลื่นแบบสี่เหลี่ยม) แล้วบันทึกภาพ (ให้ระบุ ความถี่ และ Duty Cycle ของสัญญาณที่วัดได้จริง)
  2. ทำขั้นตอนที่ 1 ซ้ำ สัหรับโค้ตตัวอย่างที่ 1.3.2-1.3.4 ตามลำดับ
  3. ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM (รูปคลื่นแบบ Pulse) ที่มีความถี่ 50Hz มีค่า Duty Cycle 7.5% และมีระดับแรงดันต่ำและสูงในช่วง 0V และ 5V และให้ใช้ออสซิลโลสโคปตรวจดูรูปคลื่นสัญญาณที่ได้และบันทึกภาพที่ปรากฏ (เปรียบเทียบผลกับการสร้างสัญญาณเอาต์พุตด้วยบอร์ด Arduino)
    *
    Duty Cycle (%)=100% x(ความกว้างของคลื่นในช่วงที่เป็นHigh/คาบสัญญาณ)*
ผลการทดลอง

  • โค้ดที่ 1.3.1:โค้ด Arduino เพื่อสร้างสัญญาณเอาต์พุตที่ขา D5 (แบบที่ 1)
          const byte LED_PIN = 5; // ใช้ขาหมายเลข D5 เพื่อสร้างสัญญาณดิจิทัล 
          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%


  (การทดลองโดยใช้เครื่องกำเนิดสัญญาณเอาต์พุต)
  1. ใช้เครื่องกำเนิดสัญญาณ สร้างคลื่นแบบ PWM(Pulse) ที่มีความถี่ 50 Hz มีค่า
        Duty Cycle 7.5% และมีแรงดันอยู่ในช่วง 0V และ 5V 

   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





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

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